quant_iron/lib.rs
1//! A high-performance, hardware-accelerated modular quantum computing library with a focus on physical applications.
2//!
3//! Quant-Iron provides tools to represent quantum states, apply standard quantum gates, perform measurements, build quantum circuits, and implement quantum algorithms.
4//!
5//! ## Features
6//! - **Quantum State Representation**: Create and manipulate predefined or custom quantum states of arbitrary qubit count.
7//! - **Standard Operations**: Hadamard (H), Pauli (X, Y, Z), CNOT, SWAP, Toffoli, Phase shifts, Rotations, and custom unitary operations.
8//! - **Hardware Acceleration**: Optimised for parallel execution (CPU and GPU) and low memory overhead, with OpenCL-accelerated operations for enhanced performance on compatible hardware. (Requires `gpu` feature flag).
9//! - **Circuit Builder**: High-level interface for constructing quantum circuits with a fluent API and the `circuit!` macro with support for subroutines.
10//! - **Measurement**: Collapse wavefunction in the measurement basis with single or repeated measurements in the `Computational`, `X`, `Y`, and custom bases.
11//! - **Pauli String Algebra**:
12//! - Represent products of Pauli operators with complex coefficients (`PauliString`).
13//! - Construct sums of Pauli strings (`SumOp`) to define Hamiltonians and other observables.
14//! - Apply Pauli strings and their sums to quantum states.
15//! - Calculate expectation values of `SumOp` with respect to a quantum state.
16//! - Apply exponentials of `PauliString` instances to states.
17//! - **Predefined Quantum Models**:
18//! - **Heisenberg Model**: Generate Hamiltonians for 1D and 2D anisotropic Heisenberg models using `SumOp`.
19//! - **Ising Model**: Generate Hamiltonians for 1D and 2D Ising models with configurable site-specific or uniform interactions and fields using `SumOp`.
20//! - **Predefined Quantum Algorithms**:
21//! - **Quantum Fourier Transform (QFT)**: Efficiently compute the QFT for a given number of qubits.
22//! - **Inverse Quantum Fourier Transform (IQFT)**: Efficiently compute the inverse QFT for a given number of qubits.
23//! - **OpenQASM 3.0 Support**: Convert circuits to OpenQASM 3.0 for interoperability with other quantum computing platforms.
24//! - **Extensibility**: Easily extensible for custom gates and measurement bases.
25//! - **Error Handling**: Comprehensive error handling for invalid operations and state manipulations.
26//! - **Quality of Life**: Implementation of `std` and arithmetic traits for easy, intuitive usage.
27//!
28//! ## Important Components
29//!
30//! - [Circuit](mod@circuit): Provides the `Circuit` and `CircuitBuilder` for constructing quantum circuits.
31//! - [Components](components): Contains the core components of the library:
32//! - [Operator]: Contains standard quantum gates and operators like Hadamard
33//! - [State]: Represents quantum states and provides methods for state manipulation.
34//! - [PauliString]: Represents products of Pauli operators with complex coefficients.
35//! - [SumOp]: Represents sums of Pauli strings for defining Hamiltonians and other observables.
36//! - [MeasurementResult]: Represents the result of a measurement operation, including indices, basis, outcomes, and new state.
37//! - [Subroutine](subroutine): Contains the `Subroutine` for defining reusable quantum subroutines.
38//! - [Models](models): Contains predefined quantum models like the Heisenberg and Ising models.
39//! - [Algorithms](algorithms): Contains predefined quantum algorithms like time evolution.
40//!
41//! Refer to the examples in the `examples` directory for practical usage of the library.
42//!
43//! ## Feature Flags
44//! - `gpu`: Enables OpenCL support for hardware acceleration for operations on compatible hardware.
45
46#[macro_use]
47mod macros;
48pub mod circuit;
49pub mod components;
50pub mod errors;
51pub mod subroutine;
52pub mod models;
53pub mod algorithms;
54pub(crate) mod compiler;
55
56// Re-export important types for easier imports
57pub use crate::components::measurement::{MeasurementBasis, MeasurementResult};
58pub use crate::components::operator::{
59 CNOT, Hadamard, Identity, Operator, Pauli, PhaseS, PhaseSdag, PhaseShift, PhaseT, PhaseTdag,
60 RotateX, RotateY, RotateZ, SWAP, Toffoli, Unitary2, Matchgate
61};
62pub use crate::components::state::{ChainableState, State};
63pub use crate::components::pauli_string::{PauliString, SumOp};
64pub use crate::circuit::{Circuit, CircuitBuilder};
65pub use crate::subroutine::Subroutine;
66pub use crate::models::{heisenberg, ising};
67pub use crate::algorithms::time_evolution;
68
69#[cfg(test)]
70pub mod tests;