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//! - **Parametric Gates**: Support for parametrised gates allowing for dynamic adjustment of gate parameters.
9//! - **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).
10//! - **Circuit Builder**: High-level interface for constructing quantum circuits with a fluent API and the `circuit!` macro with support for subroutines.
11//! - **Measurement**: Collapse wavefunction in the measurement basis with single or repeated measurements in the `Computational`, `X`, `Y`, and custom bases.
12//! - **Pauli String Algebra**:
13//!   - Represent products of Pauli operators with complex coefficients (`PauliString`).
14//!   - Construct sums of Pauli strings (`SumOp`) to define Hamiltonians and other observables.
15//!   - Apply Pauli strings and their sums to quantum states.
16//!   - Calculate expectation values of `SumOp` with respect to a quantum state.
17//!   - Apply exponentials of `PauliString` instances to states.
18//! - **Predefined Quantum Models**:
19//!   - **Heisenberg Model**: Generate Hamiltonians for 1D and 2D anisotropic Heisenberg models using `SumOp`.
20//!   - **Ising Model**: Generate Hamiltonians for 1D and 2D Ising models with configurable site-specific or uniform interactions and fields using `SumOp`.
21//! - **Predefined Quantum Algorithms**:
22//!   - **Quantum Fourier Transform (QFT)**: Efficiently compute the QFT for a given number of qubits.
23//!   - **Inverse Quantum Fourier Transform (IQFT)**: Efficiently compute the inverse QFT for a given number of qubits.
24//! - **OpenQASM 3.0 Support**: Convert circuits to OpenQASM 3.0 for interoperability with other quantum computing platforms.
25//! - **Extensibility**: Easily extensible for custom gates and measurement bases.
26//! - **Error Handling**: Comprehensive error handling for invalid operations and state manipulations.
27//! - **Quality of Life**: Implementation of `std` and arithmetic traits for easy, intuitive usage.
28//! 
29//! ## Important Components
30//! 
31//! - [Circuit](mod@circuit): Provides the `Circuit` and `CircuitBuilder` for constructing quantum circuits.
32//! - [Circuit!](circuit!) - Provides a macro for easily constructing circuits.
33//! - [Components](components): Contains the core components of the library:
34//!   - [Operator]: Contains standard quantum gates and operators like Hadamard
35//!   - [State]: Represents quantum states and provides methods for state manipulation.
36//!   - [PauliString]: Represents products of Pauli operators with complex coefficients.
37//!   - [SumOp]: Represents sums of Pauli strings for defining Hamiltonians and other observables.
38//!   - [MeasurementResult]: Represents the result of a measurement operation, including indices, basis, outcomes, and new state.
39//! - [Subroutine](subroutine): Contains the `Subroutine` for defining reusable quantum subroutines.
40//! - [Models](models): Contains predefined quantum models like the Heisenberg and Ising models.
41//! - [Algorithms](algorithms): Contains predefined quantum algorithms like time evolution.
42//! 
43//! Refer to the examples in the `examples` directory for practical usage of the library.
44//! 
45//! ## Feature Flags
46//! - `gpu`: Enables OpenCL support for hardware acceleration for operations on compatible hardware.
47
48#[macro_use]
49mod macros;
50pub mod circuit;
51pub mod components;
52pub mod errors;
53pub mod subroutine;
54pub mod models;
55pub mod algorithms;
56pub(crate) mod compiler;
57
58// Re-export important types for easier imports
59pub use crate::components::measurement::{MeasurementBasis, MeasurementResult};
60pub use crate::components::operator::{
61    CNOT, Hadamard, Identity, Operator, Pauli, PhaseS, PhaseSdag, PhaseShift, PhaseT, PhaseTdag,
62    RotateX, RotateY, RotateZ, SWAP, Toffoli, Unitary2, Matchgate
63};
64pub use crate::components::state::{ChainableState, State};
65pub use crate::components::pauli_string::{PauliString, SumOp};
66pub use crate::circuit::{Circuit, CircuitBuilder};
67pub use crate::subroutine::Subroutine;
68pub use crate::models::{heisenberg, ising};
69pub use crate::algorithms::time_evolution;
70pub use crate::components::parametric::{parameter, parametric_gate};
71
72#[cfg(test)]
73pub mod tests;