Skip to content

pecos-neo importance runner silently drops every injected noise gate except X/Y/Z #436

Description

@ciaranra

The importance-sampling runner discards any noise gate a channel injects that is not a single-qubit Pauli.

ImportanceRunner::execute_noise_gate matches only X, Y, and Z, with a bare catch-all that does nothing:

// exp/pecos-neo/src/sampling/importance_runner.rs:592-608
match gate.gate_type {
    GateType::X => { self.simulator.x(&qubits); }
    GateType::Y => { self.simulator.y(&qubits); }
    GateType::Z => { self.simulator.z(&qubits); }
    _ => {}
}

Anything else a noise channel emits -- RZ from coherent idle dephasing, H, S, or any
multi-qubit noise -- is dropped without a warning or error. The simulation runs to completion
and reports results that are quieter than the configured noise model, with nothing indicating
that noise was discarded.

This is unconditional in this runner: it does not depend on how the runner was constructed.

Impact: importance-sampled results are silently wrong for any noise model configured with
mechanisms outside single-qubit Paulis. Because importance sampling is used specifically to
estimate rare logical failures, understated noise is the failure mode that matters most.

Suggested direction: either execute the remaining gate types, or fail loudly when a noise
channel emits a gate this runner cannot represent. Silently continuing is the one option that
should be off the table.

Found while reviewing after-2q idle noise in exp/pecos-neo; not addressed there because it
is independent of that change.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingrustPull requests that update rust codeseverity:criticalSilently wrong results, data loss, or security exposure

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions