Expand description
PRISM-Q, a fast Rust quantum circuit simulator.
OpenQASM 3.0 input, nine CPU backends selected at dispatch, AVX2 SIMD kernels, an optional CUDA path, an optional MPI path, QEC tooling, and Python bindings.
§Quick start
use prism_q::run_qasm;
let qasm = r#"
OPENQASM 3.0;
include "stdgates.inc";
qubit[2] q;
bit[2] c;
h q[0];
cx q[0], q[1];
"#;
let result = run_qasm(qasm, 42).expect("parse/sim failed");
let probs = result.probabilities.expect("no probabilities").to_vec();
// Bell state: ~50% |00>, ~50% |11>
assert!((probs[0] - 0.5).abs() < 1e-10);
assert!((probs[3] - 0.5).abs() < 1e-10);§Input model
The primary entrypoint accepts OpenQASM 3.0 strings (&str). See
circuit::openqasm for the supported subset.
§Backends
StatevectorBackend: full state-vector simulationStabilizerBackend: Clifford-only O(n^2) simulationSparseBackend: sparse state-vector O(k) simulationMpsBackend: Matrix Product State O(n * chi^2) simulationProductStateBackend: per-qubit O(n) simulation for non-entangling circuitsTensorNetworkBackend: deferred contraction for low-treewidth circuitsFactoredBackend: dynamic split-state simulation for sparse-entanglement circuitsFactoredStabilizerBackend: per-group tableaux for large sparse-entanglement Clifford circuitsbackend::density_matrix::DensityMatrixBackend: 4^n density matrix for exact channel semanticsDistributedStatevectorBackend: statevector sharded across ranks (distributedfeature)
§Native QEC
Measurement-record QEC programs use QecProgram or parse_qec_program.
run_qec_program executes supported Clifford QEC programs through packed
compiled sampling with Pauli-noise annotations. run_qec_program_reference
runs small correctness checks through the reference path.
Re-exports§
pub use backend::density_matrix::DensityMatrixBackend;pub use backend::distributed_statevector::DistributedStatevectorBackend;distributedpub use backend::factored::FactoredBackend;pub use backend::factored_stabilizer::FactoredStabilizerBackend;pub use backend::mps::MpsBackend;pub use backend::product::ProductStateBackend;pub use backend::sparse::SparseBackend;pub use backend::stabilizer::StabilizerBackend;pub use backend::statevector::StatevectorBackend;pub use backend::tensornetwork::TensorNetworkBackend;pub use circuit::builder::CircuitBuilder;pub use circuit::Circuit;pub use circuit::ClassicalCondition;pub use circuit::Instruction;pub use circuit::ParamLink;pub use circuit::Parameters;pub use circuit::PreparedCircuit;pub use circuit::SvgOptions;pub use circuit::TextOptions;pub use distributed::DistributedContext;distributedpub use distributed::RankComm;distributedpub use distributed::SerialComm;distributedpub use error::PrismError;pub use error::Result;pub use gates::BatchPhaseData;pub use gates::Gate;pub use gates::GeneratorKind;pub use gates::McuData;pub use gates::Multi2qData;pub use gates::MultiFusedData;pub use qec::DetectorErrorModel;pub use qec::ErrorMechanism;pub use qec::QecBasis;pub use qec::QecCompiledRows;pub use qec::QecMeasurementRow;pub use qec::QecNoise;pub use qec::QecObservableEstimate;pub use qec::QecObservableReroute;pub use qec::QecOp;pub use qec::QecOptions;pub use qec::QecPauli;pub use qec::QecProgram;pub use qec::QecRecordRef;pub use qec::QecSampleResult;pub use qec::QecTStrategy;pub use qec::UnionFindDecoder;pub use qec::compile_qec_program_rows;pub use qec::parse_qec_program;pub use qec::run_qec_program;pub use qec::run_qec_program_reference;pub use qec::run_qec_program_spd_rerouted;pub use qec::run_qec_program_with_strategy;pub use sim::compiled::CompiledDetectorSampler;pub use sim::compiled::CompiledSampler;pub use sim::compiled::CorrelatorAccumulator;pub use sim::compiled::DetectorSampleBatch;pub use sim::compiled::HistogramAccumulator;pub use sim::compiled::MarginalsAccumulator;pub use sim::compiled::NullAccumulator;pub use sim::compiled::PackedShots;pub use sim::compiled::ParityStats;pub use sim::compiled::PauliExpectationAccumulator;pub use sim::compiled::ShotAccumulator;pub use sim::compiled::ShotLayout;pub use sim::compiled::compile_detector_sampler;pub use sim::compiled::compile_forward;pub use sim::compiled::compile_measurements;pub use sim::compiled::run_shots_compiled;pub use sim::gradient::ExpectationGradient;pub use sim::gradient::run_expectation_gradient;pub use sim::gradient::run_expectation_gradient_shift;pub use sim::homological::ErrorChainComplex;pub use sim::homological::HomologicalSampler;pub use sim::homological::noisy_marginals_analytical;pub use sim::homological::run_shots_homological;pub use sim::noise::GateFilter;pub use sim::noise::NoiseBuilder;pub use sim::noise::NoiseChannel;pub use sim::noise::NoiseEvent;pub use sim::noise::NoiseModel;pub use sim::noise::NoisyCompiledSampler;pub use sim::noise::ReadoutError;pub use sim::noise::compile_noisy;pub use sim::noise::density_matrix_expectation_values;pub use sim::noise::run_shots_noisy;pub use sim::stabilizer_rank::StabRankResult;pub use sim::stabilizer_rank::run_stabilizer_rank;pub use sim::stabilizer_rank::run_stabilizer_rank_approx;pub use sim::stabilizer_rank::stabilizer_inner_product;pub use sim::stabilizer_rank::stabilizer_overlap_sq;pub use sim::unified_pauli::PauliAxis;pub use sim::unified_pauli::PauliTerm;pub use sim::unified_pauli::SpdObservableResult;pub use sim::unified_pauli::SpdResult;pub use sim::unified_pauli::SppObservableResult;pub use sim::unified_pauli::SppResult;pub use sim::unified_pauli::inverse_light_cone;pub use sim::unified_pauli::run_spd;pub use sim::unified_pauli::run_spd_observable;pub use sim::unified_pauli::run_spd_observable_budgeted;pub use sim::unified_pauli::run_spd_observable_light_cone;pub use sim::unified_pauli::run_spp;pub use sim::unified_pauli::run_spp_observable;pub use sim::BackendKind;pub use sim::CountsResult;pub use sim::Engine;pub use sim::EntropyResult;pub use sim::Exactness;pub use sim::ExpectationResult;pub use sim::FactoredBlock;pub use sim::MarginalsResult;pub use sim::ObservableExpectation;pub use sim::ObservableVariance;pub use sim::OverlapResult;pub use sim::PauliObservable;pub use sim::Placement;pub use sim::Probabilities;pub use sim::ReducedDensityMatrix;pub use sim::ResolvedBackend;pub use sim::RunMetadata;pub use sim::RunOutcome;pub use sim::Seeded;pub use sim::ShotsResult;pub use sim::Simulate;pub use sim::Unseeded;pub use sim::bitstring;pub use sim::run_expectation_values;pub use sim::run_observable_expectation;pub use sim::run_on;pub use sim::run_on_state;pub use sim::run_qasm;pub use sim::simulate;pub use threading::ThreadPool;parallelpub use sim::compiled::DevicePackedShots;gpupub use sim::compiled::run_shots_compiled_with_gpu;gpu
Modules§
- backend
- Simulation backend trait and implementations.
- circuit
- Circuit intermediate representation.
- circuits
- Reusable benchmark and test circuit builders.
- distributed
distributed - Distributed context, transport, and thresholds.
- error
- Error types for PRISM-Q.
- gates
- Gate definitions and matrix representations.
- gpu
gpu - Shared GPU execution resource.
- qec
- Native measurement-record QEC program IR, parser, and runners.
- sim
- Simulation orchestration.
- threading
parallel - Caller-supplied Rayon pool, for embedding PRISM-Q in an application that owns the process-wide pool.