ApiScope
Phase gating: out-of-scope configurations raise instead of guessing
11/11 passed in 2ms
| Test | What it does | Result |
|---|---|---|
test_budget_gated | A laser, IQ modulator, pilots, ADC or local oscillator on the CV path with no DSP chain is refused, naming qkd.budget.assemble. | ✅ pass |
test_derived_qber | A derived error rate needs Bob's delay interferometer and Alice's laser. | ✅ pass |
test_detector_pairing | Gaussian modulation needs a quadrature receiver and differential phase a click detector; anything else is refused. | ✅ pass |
test_dps_gated | The phase-keyed path refuses the CV DSP chain, an LO behind a threshold detector, and any security analysis past the individual attack. | ✅ pass |
test_dsp_component | The dsp slot takes only a q.DSP, and the pilot chain is heterodyne-only. | ✅ pass |
test_family_pairing | Neither receiver nor security model is cross-applied: basis keying needs a q.BasisAnalyser and the splitting bound, intensity keying a q.PhaseBound. | ✅ pass |
test_ignored_fields | An unconsumed field is refused: detector memory beside a pinned qber, and an interferometer beside a pinned error rate. | ✅ pass |
test_seam_gated | measure() refuses a click family, and claim() refuses a measurement from a changed channel rather than re-run it. | ✅ pass |
test_security_pairing | Gaussian modulation accepts only q.Asymptotic and q.FiniteSize; an individual-attack bound belongs to the DPS path. | ✅ pass |
test_unknown_parts | An unrecognised modulation or channel object is refused, not coerced. | ✅ pass |
test_window_gated | The three closed forms refuse an acceptance window by name, the sampled path refuses one with no jitter to gate, and beside a jitter it reaches window_loss. | ✅ pass |