Ce este Cirq?
Cirq este framework-ul de calcul cuantic al Google conceput pentru dispozitivele NISQ (Noisy Intermediate-Scale Quantum). Oferă control fin asupra operațiilor la nivel de poartă, fiind ideal pentru dezvoltarea de algoritmi și experimente hardware. Cirq include mai multe simulatoare gratuite și poate rula pe hardware-ul cuantic al Google prin parteneriate.
Instalare
terminal
pip install cirq # Core + simulator pip install cirq-google # Google hardware access (optional) pip install cirq-web # Web visualization (optional)Circuit și simulare de bază
cirq_basic.py
import cirq import numpy as np # Create qubits q0, q1 = cirq.LineQubit.range(2) # Build a Bell state circuit circuit = cirq.Circuit([ cirq.H(q0), cirq.CNOT(q0, q1), cirq.measure(q0, q1, key='result') ]) print(circuit) # 0: ───H───@───M('result')─── # │ │ # 1: ───────X───M───────────── # Simulate with shots (sampling) sim = cirq.Simulator() result = sim.run(circuit, repetitions=1000) print(result.histogram(key='result')) # Counter({0: 504, 3: 496}) (0=|00⟩, 3=|11⟩)Simulare cu vector de stare și matrice de densitate
cirq_statevector.py
import cirq q0, q1 = cirq.LineQubit.range(2) # Build without measurement for statevector circuit = cirq.Circuit([cirq.H(q0), cirq.CNOT(q0, q1)]) # Exact statevector simulation (free, local) sim = cirq.Simulator() result = sim.simulate(circuit) print(result.final_state_vector) # [0.707+0j, 0+0j, 0+0j, 0.707+0j] # Density matrix simulation (for noisy circuits) noise_model = cirq.ConstantQubitNoiseModel( cirq.depolarize(p=0.01) ) noisy_sim = cirq.DensityMatrixSimulator(noise=noise_model) noisy_result = noisy_sim.simulate(circuit) print(noisy_result.final_density_matrix)Simulator Clifford (eficient pentru circuite stabilizatoare)
cirq_clifford.py
import cirq # CliffordSimulator efficiently handles stabilizer circuits # Simulates 1000s of qubits for Clifford gates qubits = cirq.LineQubit.range(50) # 50 qubits! circuit = cirq.Circuit( [cirq.H(q) for q in qubits], [cirq.CNOT(qubits[i], qubits[i+1]) for i in range(49)], cirq.measure(*qubits, key='ghz') ) sim = cirq.CliffordSimulator() result = sim.run(circuit, repetitions=100) print(result.histogram(key='ghz'))Algoritmi variaționali cu Cirq
cirq_vqa.py
import cirq import numpy as np from scipy.optimize import minimize q0, q1 = cirq.LineQubit.range(2) def ansatz(theta: float) -> cirq.Circuit: return cirq.Circuit([ cirq.ry(theta)(q0), cirq.CNOT(q0, q1), cirq.measure(q0, q1, key='m') ]) def cost(params): circuit = ansatz(params[0]) sim = cirq.Simulator() result = sim.run(circuit, repetitions=200) counts = result.histogram(key='m') # Minimize energy (simplified objective) return -counts.get(0, 0) / 200 # maximize |00⟩ prob result = minimize(cost, x0=[0.5], method='COBYLA') print(f"Optimal theta: {result.x[0]:.4f}")💡
Also available via HLQuantum
Want to run the same circuit on multiple backends without rewriting your code? HLQuantum abstracts this SDK (and 5 others) behind a single unified API.
python
import hlquantum as hlq qc = hlq.Circuit(2) qc.h(0).cx(0, 1).measure_all() # One line to switch between any backend result = hlq.run(qc, shots=1024) # auto-detect result = hlq.run(qc, shots=1024, backend="cirq") # explicit