Skip to content
Acasă/SDK-uri/Google Cirq
🔵

Google Cirq

Framework-ul open source al Google pentru algoritmi NISQ. Include simulatoare locale puternice, integrare strânsă cu hardware-ul și instrumente excelente pentru dispozitivele pe termen scurt.

Open sourceAxat pe NISQSimulator localPython

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.

Cirq is built for NISQ-era devices — compare it with the other SDK-uri before you commit to one.

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}")

Keep exploring

💡

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