A pure NumPy quantum circuit simulator — no heavy dependencies
Project description
⚛️ CirQit
A pure NumPy quantum circuit simulator — no Qiskit, no PennyLane, no heavy deps.
pip install cirqit
Features
- ✅ 20+ quantum gates (H, X, Y, Z, CNOT, Toffoli, RX, RY, RZ, SWAP, iSWAP, CZ, CRX, CRY, CRZ, CP, U3, SX, P...)
- ✅ Custom statevector simulator (pure NumPy backend)
- ✅ Noise models: Depolarizing, BitFlip, PhaseFlip, AmplitudeDamping, PhaseDamping, ThermalRelaxation, ReadoutError
- ✅ ASCII + Matplotlib circuit visualization
- ✅ Measurement histogram plots
- ✅ Bloch sphere visualization
- ✅ Built-in algorithms: Bell, GHZ, QFT, Grover, Deutsch-Jozsa, Bernstein-Vazirani, Teleportation, Phase Estimation
- ✅ Circuit composition, inverse, copy
- ✅ Custom unitary gate support
- ✅ Only requires
numpy+matplotlib
Quick Start
from cirqit import QuantumCircuit
# Bell state
qc = QuantumCircuit(2)
qc.h(0)
qc.cnot(0, 1)
qc.measure_all()
result = qc.run(shots=1024)
print(result)
# {'00': 512, '11': 512}
qc.draw() # ASCII circuit
qc.draw('mpl') # Matplotlib circuit
qc.plot_histogram(result)
Gates
qc = QuantumCircuit(3)
# Single-qubit
qc.h(0) # Hadamard
qc.x(1) # Pauli-X
qc.y(2) # Pauli-Y
qc.z(0) # Pauli-Z
qc.s(1) # S gate
qc.t(2) # T gate
qc.sx(0) # √X gate
qc.rx(1.57, 0) # Rotation-X
qc.ry(0.78, 1) # Rotation-Y
qc.rz(3.14, 2) # Rotation-Z
qc.p(1.57, 0) # Phase gate
qc.u(1.57, 0.78, 1.57, 1) # U3 gate
# Two-qubit
qc.cnot(0, 1) # CNOT
qc.cz(0, 1) # Controlled-Z
qc.swap(1, 2) # SWAP
qc.crx(1.57, 0, 1) # Controlled-RX
# Three-qubit
qc.ccx(0, 1, 2) # Toffoli
qc.cswap(0, 1, 2) # Fredkin
Noise Models
from cirqit.noise import NoiseModel, DepolarizingChannel, AmplitudeDampingChannel
nm = NoiseModel()
nm.add_gate_error('h', DepolarizingChannel(0.01))
nm.add_gate_error('x', AmplitudeDampingChannel(0.05))
nm.add_readout_error(p0_given_1=0.02, p1_given_0=0.02)
qc = QuantumCircuit(2)
qc.h(0).cnot(0, 1).measure_all()
qc.set_noise_model(nm)
noisy_result = qc.run(shots=2048)
# Presets
from cirqit.noise import basic_depolarizing, realistic
nm = realistic(p_gate=0.005, p_readout=0.02)
Built-in Algorithms
from cirqit.algorithms import (
bell_state, ghz_state, qft, grover_diffusion,
deutsch_jozsa, bernstein_vazirani, teleportation,
phase_estimation, random_circuit
)
# Bell state
bell = bell_state('00')
bell.measure_all()
print(bell.run(1024))
# QFT on 4 qubits
qft4 = qft(4)
print(qft4)
# Deutsch-Jozsa
dj = deutsch_jozsa('balanced', n=3)
print(dj.run(1))
# Bernstein-Vazirani — find secret string
bv = bernstein_vazirani('1011')
print(bv.run(shots=1))
Statevector & Bloch Sphere
qc = QuantumCircuit(1)
qc.h(0)
sv = qc.statevector()
print(sv)
# StateVector (1 qubits):
# |0⟩: 0.7071+0.0000j (p=0.5000)
# |1⟩: 0.7071+0.0000j (p=0.5000)
qc.plot_bloch(qubit=0)
Circuit Operations
# Inverse
inv = qc.inverse()
# Compose
combined = qc.compose(other_circuit)
# Info
print(qc.depth())
print(qc.count_ops())
print(qc.probabilities())
License
MIT © Muhammad
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cirqit-0.1.1.tar.gz
(19.0 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
cirqit-0.1.1-py3-none-any.whl
(19.3 kB
view details)
File details
Details for the file cirqit-0.1.1.tar.gz.
File metadata
- Download URL: cirqit-0.1.1.tar.gz
- Upload date:
- Size: 19.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f4d508d94621918ccc269973957306662f0a43dcba4fd0954910de3eb62f7b1
|
|
| MD5 |
4b224933ede5be8ad6ee410acaea9aba
|
|
| BLAKE2b-256 |
45d5fcb7a2f4e5351f8291f96cb7ea9db03cd8fc242b95341d21aaddd86a03a0
|
File details
Details for the file cirqit-0.1.1-py3-none-any.whl.
File metadata
- Download URL: cirqit-0.1.1-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a64eebaa3fd8600234e7271fe5960f7dbcc05608d7131371121113c63f0d4029
|
|
| MD5 |
43ef0bc692bfa578a1e9732246369eb1
|
|
| BLAKE2b-256 |
af1246547f7dbf73e977a6c1a0b9c606a5182b2aacde11b35c3c57ae0dc85e4b
|