Skip to main content

ExplainedError

Struct ExplainedError 

Source
pub struct ExplainedError { /* private fields */ }
Expand description

Describes a single error mechanism from a Stim circuit, pairing the detectors and observables it affects with the location(s) where it occurs in the circuit.

When you call methods like Circuit::shortest_graphlike_error, Stim returns a list of ExplainedError values. Each one represents one fault mechanism that was needed to produce the logical error, containing:

  • dem_error_terms – the detectors and logical observables flipped by this error, each annotated with coordinate data (a list of DemTargetWithCoords).
  • circuit_error_locations – the physical location(s) in the circuit where this error can occur, as CircuitErrorLocation values.

If circuit_error_locations is empty, it means there was a DEM error that was decomposed into parts where one of the parts is impossible to produce from a single circuit error on its own.

If the list contains a single entry, it may be because only a single representative circuit error was requested (as opposed to all possible errors that produce the same syndrome).

§Examples

use stim::{
    CircuitErrorLocation, CircuitErrorLocationStackFrame,
    CircuitTargetsInsideInstruction, DemTargetWithCoords,
    ExplainedError, GateTarget, GateTargetWithCoords,
};

let explained = ExplainedError::new(
    vec![DemTargetWithCoords::new(
        stim::DemTarget::logical_observable_id(0).expect("valid id"),
        vec![],
    )],
    vec![CircuitErrorLocation::new(
        1,
        vec![GateTargetWithCoords::new(
            stim::GateTarget::y(0u32, false).expect("valid target"),
            vec![],
        )],
        None,
        CircuitTargetsInsideInstruction::new(
            "Y_ERROR", "", vec![0.125], 0, 1,
            vec![GateTargetWithCoords::new(GateTarget::from(0u32), vec![])],
        ),
        vec![CircuitErrorLocationStackFrame::new(2, 0, 0)],
        "",
    )],
);

assert_eq!(explained.dem_error_terms().len(), 1);
assert_eq!(explained.circuit_error_locations().len(), 1);

Implementations§

Source§

impl ExplainedError

Source

pub fn new( dem_error_terms: impl IntoIterator<Item = DemTargetWithCoords>, circuit_error_locations: impl IntoIterator<Item = CircuitErrorLocation>, ) -> Self

Creates a new ExplainedError from its constituent parts.

§Arguments
  • dem_error_terms – the detectors and logical observables flipped by this error mechanism, each paired with coordinate data.
  • circuit_error_locations – the physical circuit location(s) where this error can occur. May be empty if the error was decomposed into parts that cannot individually be produced by a single circuit error.
Source

pub fn dem_error_terms(&self) -> &[DemTargetWithCoords]

Returns the detectors and observables flipped by this error mechanism.

Each element is a DemTargetWithCoords pairing a detector (D5) or logical observable (L0) with its coordinate data from DETECTOR or other coordinate-assigning instructions.

Source

pub fn circuit_error_locations(&self) -> &[CircuitErrorLocation]

Returns the locations of circuit errors that produce the symptoms described by dem_error_terms.

Each element is a CircuitErrorLocation that identifies a specific instruction, target range, and nesting position within the circuit.

If this slice is empty, it means the DEM error was decomposed into parts where one part is impossible to produce from a single circuit error on its own. If it contains a single entry, it may be because only a single representative was requested.

Trait Implementations§

Source§

impl Clone for ExplainedError

Source§

fn clone(&self) -> ExplainedError

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ExplainedError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ExplainedError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for ExplainedError

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for ExplainedError

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for ExplainedError

Source§

fn eq(&self, other: &ExplainedError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for ExplainedError

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Eq for ExplainedError

Source§

impl StructuralPartialEq for ExplainedError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.