PnrDecoy
Detector decoy: PNR statistics from a threshold detector and an attenuator
9/9 passed in 31ms
| Test | What it does | Result |
|---|---|---|
test_decoy_array | A multiplexed array reaches the inversion through the whole receiver's per-gate silent probability and not through one element's. | ✅ pass |
test_decoy_bracket | Proposition 2.1's bounds bracket the true single- and two-photon weights of a thermal state, the vacuum weight read off f(0) exactly. | ✅ pass |
test_decoy_converge | Both brackets close as the probing settings approach the transparent one, the proposition's c1 = delta, c2 = sqrt(delta) limit. | ✅ pass |
test_decoy_counting | A number-resolving detector reaches the inversion through its mean spurious count per gate, as the Poisson chance of at least one, and an equivalent threshold detector gives the same three no-click probabilities. | ✅ pass |
test_decoy_noclick | The forward model is the paper's Eq. (17), the photon-number distribution read against the kernel (1 - c*eta)^n behind a dark-count floor. | ✅ pass |
test_decoy_poisson | For a signal already Poissonian at the receiver, attenuating by t is the same as sending intensity t*mu, so decoy_gain reproduces the attenuator sweep. | ✅ pass |
test_decoy_readout | A finite readout width, a single absorbing outcome and a component carrying neither field are each refused by the forward model and by the inversion. | ✅ pass |
test_decoy_refuses | A detector of less than unit efficiency is refused: no attenuator reaches the c = 0 the vacuum weight is read off. | ✅ pass |
test_decoy_reuse | On that Poissonian signal decoy_bounds runs verbatim on receiver-side intensities, and its single-photon yield stays under decoy_ideal's infinite-decoy ceiling. | ✅ pass |