Skip to main content

prism_q/
lib.rs

1//! PRISM-Q: Performance Rust Interoperable Simulator for Quantum
2//!
3//! A performance-first quantum circuit simulator with pluggable backends.
4//!
5//! # Quick start
6//!
7//! ```
8//! use prism_q::run_qasm;
9//!
10//! let qasm = r#"
11//!     OPENQASM 3.0;
12//!     include "stdgates.inc";
13//!     qubit[2] q;
14//!     bit[2] c;
15//!     h q[0];
16//!     cx q[0], q[1];
17//! "#;
18//!
19//! let result = run_qasm(qasm, 42).expect("parse/sim failed");
20//! let probs = result.probabilities.expect("no probabilities").to_vec();
21//! // Bell state: ~50% |00>, ~50% |11>
22//! assert!((probs[0] - 0.5).abs() < 1e-10);
23//! assert!((probs[3] - 0.5).abs() < 1e-10);
24//! ```
25//!
26//! # Input model
27//!
28//! The primary entrypoint accepts OpenQASM 3.0 strings (`&str`). See
29//! [`circuit::openqasm`] for the supported subset.
30//!
31//! # Backends
32//!
33//! - [`StatevectorBackend`]: full state-vector simulation (implemented)
34//! - [`StabilizerBackend`]: Clifford-only O(n^2) simulation (implemented)
35//! - [`SparseBackend`]: sparse state-vector O(k) simulation (implemented)
36//! - [`MpsBackend`]: Matrix Product State O(n * chi^2) simulation (implemented)
37//! - [`ProductStateBackend`]: per-qubit O(n) simulation for non-entangling circuits (implemented)
38//! - [`TensorNetworkBackend`]: deferred contraction for low-treewidth circuits (implemented)
39//! - [`FactoredBackend`]: dynamic split-state simulation for sparse-entanglement circuits (implemented)
40//!
41//! # Native QEC
42//!
43//! Measurement-record QEC programs use [`QecProgram`] or [`parse_qec_program`].
44//! [`run_qec_program`] executes supported Clifford QEC programs through packed
45//! compiled sampling with Pauli-noise annotations. [`run_qec_program_reference`]
46//! runs small correctness checks through the reference path.
47
48pub mod backend;
49pub mod circuit;
50pub mod circuits;
51pub mod error;
52pub mod gates;
53#[cfg(feature = "gpu")]
54pub mod gpu;
55pub mod qec;
56pub mod sim;
57
58pub use backend::factored::FactoredBackend;
59pub use backend::factored_stabilizer::FactoredStabilizerBackend;
60pub use backend::mps::MpsBackend;
61pub use backend::product::ProductStateBackend;
62pub use backend::sparse::SparseBackend;
63pub use backend::stabilizer::StabilizerBackend;
64pub use backend::statevector::StatevectorBackend;
65pub use backend::tensornetwork::TensorNetworkBackend;
66pub use circuit::builder::CircuitBuilder;
67pub use circuit::{Circuit, ClassicalCondition, Instruction, SvgOptions, TextOptions};
68pub use error::{PrismError, Result};
69pub use gates::{BatchPhaseData, Gate, McuData, Multi2qData, MultiFusedData};
70#[cfg(feature = "bench-internal")]
71pub use qec::{compile_qec_profiled_sampler, QecProfiledCounts, QecProfiledSampler};
72pub use qec::{
73    compile_qec_program_rows, parse_qec_program, run_qec_program, run_qec_program_reference,
74    QecBasis, QecCompiledRows, QecMeasurementRow, QecNoise, QecOp, QecOptions, QecPauli,
75    QecProgram, QecRecordRef, QecSampleResult,
76};
77pub use sim::compiled::{
78    compile_detector_sampler, compile_forward, compile_measurements, run_shots_compiled,
79    CompiledDetectorSampler, CompiledSampler, CorrelatorAccumulator, DetectorSampleBatch,
80    HistogramAccumulator, MarginalsAccumulator, NullAccumulator, PackedShots, ParityStats,
81    PauliExpectationAccumulator, ShotAccumulator, ShotLayout,
82};
83pub use sim::homological::{
84    noisy_marginals_analytical, run_shots_homological, ErrorChainComplex, HomologicalSampler,
85};
86pub use sim::noise::{
87    compile_noisy, run_shots_noisy, NoiseChannel, NoiseEvent, NoiseModel, NoisyCompiledSampler,
88    ReadoutError,
89};
90pub use sim::stabilizer_rank::{
91    run_stabilizer_rank, run_stabilizer_rank_approx, stabilizer_overlap_sq, StabRankResult,
92};
93pub use sim::unified_pauli::{
94    run_spd, run_spp, spd_to_probabilities, spp_to_probabilities, SpdResult, SppResult,
95};
96pub use sim::{
97    bitstring, run, run_counts, run_marginals, run_on, run_qasm, run_shots, run_shots_with,
98    run_shots_with_noise, run_with, BackendKind, FactoredBlock, Probabilities, ShotsResult,
99    SimulationResult,
100};
101
102#[cfg(feature = "gpu")]
103pub use sim::compiled::{run_shots_compiled_with_gpu, DevicePackedShots};
104#[cfg(feature = "gpu")]
105pub use sim::{run_with_gpu, run_with_stabilizer_gpu};