A quantum computing simulator in Julia. Implements qubit state vectors, quantum gates, measurement, entanglement, and circuit visualization.
- State Vectors: Represent quantum states as complex amplitude vectors
- Quantum Gates: Pauli (X, Y, Z), Hadamard, Phase (S, T), CNOT, SWAP, and rotations
- Measurement: Born rule probabilities, partial measurement, repeated sampling
- Entanglement: Tensor products, partial trace, concurrence, entropy
- Circuits: Compose gates into circuits, execute on states
- Visualization: ASCII circuit diagrams and state display
using Pkg
Pkg.develop(path="path/to/quantum")using Quantum
# Create a Bell state |Φ+⟩ = (|00⟩ + |11⟩) / √2
c = Circuit(2)
add!(c, H, 1)
add!(c, CNOT, 1, 2)
# View the circuit
show_circuit(c)
# q1: [H]─●─
# q2: ───⊕─
# Execute and show results
state = execute(c)
show_state(state)
# |00⟩: 0.7071
# |11⟩: 0.7071
# Sample measurements
counts = simulate(c, 1000)
# Dict(0 => 512, 3 => 488)# Build a circuit
c = Circuit(3)
add!(c, H, 1) # Hadamard on qubit 1
add!(c, CNOT, 1, 2) # CNOT: control 1, target 2
add!(c, X, 3) # Pauli-X on qubit 3
# Convenience methods
add_h!(c, 1)
add_x!(c, 2)
add_cnot!(c, 1, 3)
# Circuit info
gate_count(c) # Number of operations
depth(c) # Circuit depthI_GATE- IdentityX,Y,Z- Pauli gatesH- HadamardS,T- Phase gatesRx(θ),Ry(θ),Rz(θ)- Rotation gates
CNOT- Controlled-NOTCZ- Controlled-ZSWAP- Swap qubitsiSWAP- iSWAP gate
# Create controlled version of any single-qubit gate
add_controlled!(circuit, X, [1], [2]) # Controlled-X
add_controlled!(circuit, Z, [1, 2], [3]) # Toffoli-likestate = execute(circuit)
# Get probability distribution
probs = probabilities(state)
# Measure all qubits (collapses state)
result, collapsed = measure(state)
# Measure single qubit
bit, collapsed = measure_qubit(state, 1)
# Sample without collapse
counts = sample(state, 1000)
# Expectation value
expectation(state, Z)# Tensor product of states
combined = tensor(state_a, state_b)
# Check if entangled
is_separable(state) # false for entangled states
# Entanglement measure (2 qubits)
concurrence(state) # 0 = separable, 1 = maximally entangled
# Partial trace (reduced density matrix)
rho = partial_trace(state, [1]) # Keep qubit 1
# Von Neumann entropy
von_neumann_entropy(rho)# Circuit diagram
show_circuit(circuit)
# State in ket notation
show_state(state)
# Probability histogram
show_probabilities(state)
# Bloch sphere (single qubit)
show_bloch(state)See examples/ for:
bell_state.jl- Bell state preparation and measurementteleportation.jl- Quantum teleportation protocolgrover.jl- Grover's search algorithmqft.jl- Quantum Fourier Transform
Run an example:
julia --project=. examples/bell_state.jlzero_state(n)- Create |0⟩^⊗none_state(n)- Create |1⟩^⊗nbasis_state(n, i)- Create |i⟩is_normalized(state)- Check normalization
apply(state, gate, target)- Apply gateapply(state, gate, [targets])- Multi-qubit gate
Circuit(n)- Create n-qubit circuitadd!(circuit, gate, targets...)- Add operationexecute(circuit)- Run from |0⟩^nsimulate(circuit, shots)- Sample results
- Maximum ~20 qubits (2^20 amplitudes ≈ 1M complex numbers)
- Ideal gates only (no noise model)
- No circuit optimization passes
julia --project=. test/runtests.jlMIT