import math

def demo(ac_rood,dc_rood,ac_ir,dc_ir,beweging=False):
    # Alleen een fictieve ratio-kalibratie; geen echte SpO2 of apparaatkeur.
    xs=(ac_rood,dc_rood,ac_ir,dc_ir)
    if beweging or not all(math.isfinite(x) and x>0 for x in xs):
        return None,"ongeldig signaal"
    # Lescriterium voor deze synthetische signalen, geen klinische perfusiedrempel.
    if min(ac_rood/dc_rood,ac_ir/dc_ir)<.005:
        return None,"te kleine modulatie in deze proef"
    R=(ac_rood/dc_rood)/(ac_ir/dc_ir)
    S=105-15*R # zelfgekozen fictieve kalibratie, geen universele natuurwet
    return (R,S),"geldig volgens beperkte lescriteria"
for naam,args in [
 ("basis",(.020,1.,.036,1.2)),
 ("kleine modulatie",(.001,1.,.0018,1.2)),
 ("niet eindig",(float("nan"),1.,.036,1.2)),
 ("ratioverandering",(.024,1.,.036,1.2))]:
    print(naam,demo(*args))
print("bewegingsvlag",demo(.020,1.,.036,1.2,beweging=True))
assert abs(demo(.02,1,.036,1.2)[0][1]-95)<1e-12
assert demo(.001,1,.0018,1.2)[0] is None
assert demo(float("nan"),1,.036,1.2)[0] is None
