#![warn(missing_docs)]
mod bits;
mod circuits;
mod codes;
mod decoders;
pub mod lattice_surgery;
pub use bits::BitTable;
pub use circuits::{Circuit, DemOptions, DetectorErrorModel, DetectorSampler, MeasurementConverter, Pauli, Samples, Target};
pub use codes::{memory_circuit, stream_memory, Automorphism, Basis, BivariateBicycleCode, Gauging, GrossOperator, Noise, StreamResult, SurfaceCode};
pub use decoders::{
BeliefMatching, BpDecoder, BpMethod, BpOptions, BpOsd, BpOsdDecoder, BpOsdOutcome, BpOutcome, Matching, OsdMethod,
Prediction, Window, WindowMatching, WindowMode, WindowOptions,
};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Error {
message: String,
}
impl Error {
pub(crate) fn new(message: impl Into<String>) -> Error {
Error { message: message.into() }
}
pub fn message(&self) -> &str {
&self.message
}
}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(&self.message)
}
}
impl std::error::Error for Error {}
impl From<String> for Error {
fn from(message: String) -> Error {
Error { message }
}
}
pub type Result<T> = std::result::Result<T, Error>;
pub(crate) fn probability(p: f64, name: &str) -> Result<f64> {
if (0.0..=1.0).contains(&p) {
Ok(p)
} else {
Err(Error::new(format!("{name} = {p} is outside [0, 1]")))
}
}