← Back

Module lib

<p>Joule Standard Library - Quantum Computing</p> <p>Post-quantum simulation on heterogeneous compute (CPU/GPU/NPU/TPU)</p> <p>This module provides quantum computing primitives including:</p> <ul> <li>Statevector simulation with GPU acceleration</li> <li>Quantum gates (Pauli, Hadamard, CNOT, Toffoli, etc.)</li> <li>Quantum circuit builder with fluent API</li> <li>Quantum algorithms (Grover, Shor, VQE, QAOA)</li> </ul> <h1>Energy Considerations</h1> <p>Quantum simulation is computationally intensive with O(2^n) memory and time. Operations are annotated with energy costs for optimization.</p> <h1>Example</h1> <pre><code class="language-joule">use quantum::{QuantumCircuit, Simulator, SimulatorBackend}; // Create a Bell state let circuit = QuantumCircuit::new(2, 2) .h(0) // Hadamard on qubit 0 .cx(0, 1) // CNOT: control=0, target=1 .measure_all(); // Run simulation with 1000 shots let result = Simulator::new(SimulatorBackend::GpuStatevector) .run(circuit, 1000); // Check measurement outcomes println("Counts: {}", result.counts); // Output: {"00": ~500, "11": ~500} </code></pre>

struct Complex

Complex number for quantum amplitudes.

Source: lib.joule:41

fn new(re: f64, im: f64) -> Self

Source: lib.joule:47

fn zero() -> Self

Source: lib.joule:51

fn one() -> Self

Source: lib.joule:55

fn i() -> Self

Source: lib.joule:59

fn norm_sqr(&self) -> f64

Source: lib.joule:63

fn norm(&self) -> f64

Source: lib.joule:67

fn conj(&self) -> Complex

Source: lib.joule:71

struct Statevector

Quantum statevector representation. For n qubits, contains 2^n complex amplitudes.

Source: lib.joule:83

fn new(num_qubits: usize) -> Self

Source: lib.joule:91

fn probability(&self, index: usize) -> f64

Get probability of measuring a basis state.

Source: lib.joule:102

fn probabilities(&self) -> Vec<f64>

Get all probabilities.

Source: lib.joule:107

fn is_normalized(&self, tolerance: f64) -> bool

Check if normalized.

Source: lib.joule:112

trait QuantumGate

Trait for quantum gates.

Source: lib.joule:123

fn num_qubits(&self) -> usize;

Source: lib.joule:124

fn name(&self) -> String;

Source: lib.joule:125

struct PauliX;

Source: lib.joule:129

struct PauliY;

Source: lib.joule:130

struct PauliZ;

Source: lib.joule:131

struct Hadamard;

Source: lib.joule:132

struct SGate;

Source: lib.joule:133

struct TGate;

Source: lib.joule:134

struct RX

Source: lib.joule:135

struct RY

Source: lib.joule:136

struct RZ

Source: lib.joule:137

struct U3

Source: lib.joule:138

struct CNOT;

Source: lib.joule:141

struct CZ;

Source: lib.joule:142

struct SWAP;

Source: lib.joule:143

struct CPhase

Source: lib.joule:144

struct Toffoli;

Source: lib.joule:147

struct Fredkin;

Source: lib.joule:148

fn x() -> PauliX

Source: lib.joule:151

fn y() -> PauliY

Source: lib.joule:152

fn z() -> PauliZ

Source: lib.joule:153

fn h() -> Hadamard

Source: lib.joule:154

fn s() -> SGate

Source: lib.joule:155

fn t() -> TGate

Source: lib.joule:156

fn rx(theta: f64) -> RX

Source: lib.joule:157

fn ry(theta: f64) -> RY

Source: lib.joule:158

fn rz(theta: f64) -> RZ

Source: lib.joule:159

fn u3(theta: f64, phi: f64, lambda: f64) -> U3

Source: lib.joule:160

fn cx() -> CNOT

Source: lib.joule:161

fn cz() -> CZ

Source: lib.joule:162

fn swap() -> SWAP

Source: lib.joule:163

fn cp(theta: f64) -> CPhase

Source: lib.joule:164

fn ccx() -> Toffoli

Source: lib.joule:165

fn cswap() -> Fredkin

Source: lib.joule:166

enum Operation

Operation in a quantum circuit.

Source: lib.joule:173

struct QuantumCircuit

Quantum circuit with fluent builder API.

Source: lib.joule:181

fn new(num_qubits: usize, num_clbits: usize) -> Self

Create a new quantum circuit.

Source: lib.joule:189

fn h(&mut self, qubit: usize) -> &mut Self

Source: lib.joule:198

fn x(&mut self, qubit: usize) -> &mut Self

Source: lib.joule:203

fn y(&mut self, qubit: usize) -> &mut Self

Source: lib.joule:208

fn z(&mut self, qubit: usize) -> &mut Self

Source: lib.joule:213

fn rx(&mut self, theta: f64, qubit: usize) -> &mut Self

Source: lib.joule:218

fn ry(&mut self, theta: f64, qubit: usize) -> &mut Self

Source: lib.joule:223

fn rz(&mut self, theta: f64, qubit: usize) -> &mut Self

Source: lib.joule:228

fn cx(&mut self, control: usize, target: usize) -> &mut Self

Source: lib.joule:234

fn cz(&mut self, q1: usize, q2: usize) -> &mut Self

Source: lib.joule:239

fn swap(&mut self, q1: usize, q2: usize) -> &mut Self

Source: lib.joule:244

fn ccx(&mut self, c1: usize, c2: usize, target: usize) -> &mut Self

Source: lib.joule:250

fn measure(&mut self, qubit: usize, clbit: usize) -> &mut Self

Source: lib.joule:256

fn measure_all(&mut self) -> &mut Self

Source: lib.joule:261

fn depth(&self) -> usize

Get circuit depth.

Source: lib.joule:269

fn gate_count(&self) -> usize

Count total gates.

Source: lib.joule:275

enum SimulatorBackend

Simulator backend selection.

Source: lib.joule:287

struct SimulationResult

Simulation result.

Source: lib.joule:297

fn probability(&self, bitstring: String) -> f64

Get probability of a measurement outcome.

Source: lib.joule:305

struct Simulator

Quantum circuit simulator.

Source: lib.joule:312

fn new(backend: SimulatorBackend) -> Self

Source: lib.joule:317

fn run(&self, circuit: &QuantumCircuit, shots: usize) -> SimulationResult

Source: lib.joule:323

fn statevector(&self, circuit: &QuantumCircuit) -> Statevector

Source: lib.joule:334

struct Grover

Grover's search algorithm.

Source: lib.joule:344

fn new(num_qubits: usize, marked_items: Vec<usize>) -> Self

Source: lib.joule:350

fn optimal_iterations(&self) -> usize

Optimal number of Grover iterations.

Source: lib.joule:355

fn circuit(&self, iterations: usize) -> QuantumCircuit

Build the Grover circuit.

Source: lib.joule:363

fn run(&self, iterations: Option<usize>, shots: usize) -> SimulationResult

Source: lib.joule:369

struct VQE

Variational Quantum Eigensolver (VQE).

Source: lib.joule:377

fn new(num_qubits: usize, depth: usize) -> Self

Source: lib.joule:384

fn num_parameters(&self) -> usize

Source: lib.joule:393

fn set_parameters(&mut self, params: Vec<f64>)

Source: lib.joule:397

fn ansatz(&self) -> QuantumCircuit

Build the variational ansatz circuit.

Source: lib.joule:402

struct QAOA

Quantum Approximate Optimization Algorithm (QAOA).

Source: lib.joule:408

fn maxcut(num_qubits: usize, edges: Vec<(usize, usize, f64)>, p: usize) -> Self

Create QAOA for MaxCut problem.

Source: lib.joule:416

fn num_parameters(&self) -> usize

Source: lib.joule:420

fn circuit(&self, gamma: &[f64], beta: &[f64]) -> QuantumCircuit

Build the QAOA circuit.

Source: lib.joule:425

fn expected_cut(&self, gamma: &[f64], beta: &[f64], shots: usize) -> f64

Source: lib.joule:431

struct QFT

Quantum Fourier Transform.

Source: lib.joule:437

fn new(num_qubits: usize) -> Self

Source: lib.joule:443

fn inverse(num_qubits: usize) -> Self

Source: lib.joule:447

fn circuit(&self) -> QuantumCircuit

Source: lib.joule:451