pub struct ErrorChainComplex { /* private fields */ }Expand description
Error chain complex for a Clifford circuit with noise.
Represents the chain complex C₂ →∂₂→ C₁ →∂₁→ C₀ where:
- C₀ = F₂^m (measurement/detector space)
- C₁ = F₂^p (error location space)
- C₂ = F₂^s (stabilizer space)
- ∂₁ = E (the m×p error propagation matrix)
Implementations§
Source§impl ErrorChainComplex
impl ErrorChainComplex
Sourcepub fn build(circuit: &Circuit, noise: &NoiseModel, _seed: u64) -> Result<Self>
pub fn build(circuit: &Circuit, noise: &NoiseModel, _seed: u64) -> Result<Self>
Build the error chain complex from a Clifford circuit and noise model.
Uses backward Pauli propagation (same as the compiled noisy sampler) to determine which measurements are sensitive to each error location.
Sourcepub fn boundary_dim(&self) -> usize
pub fn boundary_dim(&self) -> usize
dim(im(∂₂) ∩ ker(∂₁)): stabilizer generators undetectable by the measurements.
Sourcepub fn homology_dim(&self) -> usize
pub fn homology_dim(&self) -> usize
dim(H₁): independent logical error classes.
Sourcepub fn noisy_marginals(&self, noiseless_marginals: &[f64]) -> Vec<f64>
pub fn noisy_marginals(&self, noiseless_marginals: &[f64]) -> Vec<f64>
Compute exact noisy marginals analytically. No sampling, no rank limit.
For each measurement j, the noisy probability is: p_j^noisy = p_j + (1 - 2·p_j) · (1 - f_j) / 2 where f_j = Π_{e: E(j,e)=1} (1 - 2·p_e) is the flip attenuation factor and p_j is the noiseless marginal (0, 0.5, or 1).
Cost: O(nnz(E)). Works for any qubit count.
Auto Trait Implementations§
impl Freeze for ErrorChainComplex
impl RefUnwindSafe for ErrorChainComplex
impl Send for ErrorChainComplex
impl Sync for ErrorChainComplex
impl Unpin for ErrorChainComplex
impl UnsafeUnpin for ErrorChainComplex
impl UnwindSafe for ErrorChainComplex
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more