Skip to content
Accueil/SDK/Google Cirq
🔵

Google Cirq

Le framework open source de Google pour les algorithmes NISQ. Comprend de puissants simulateurs locaux, une intégration matérielle étroite et d'excellents outils pour les appareils à court terme.

Open sourceAxé NISQSimulateur localPython

Qu'est-ce que Cirq ?

Cirq est le framework d'informatique quantique de Google conçu pour les appareils NISQ (Noisy Intermediate-Scale Quantum). Il offre un contrôle fin des opérations au niveau des portes, ce qui le rend idéal pour le développement d'algorithmes et les expériences matérielles. Cirq inclut plusieurs simulateurs gratuits et peut s'exécuter sur le matériel quantique de Google via des partenariats.

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

Installation

terminal
pip install cirq           # Core + simulator
pip install cirq-google    # Google hardware access (optional)
pip install cirq-web       # Web visualization (optional)

Circuit et simulation de base

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⟩)

Simulation par vecteur d'état et matrice de densité

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)

Simulateur Clifford (efficace pour les circuits stabilisateurs)

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'))

Algorithmes variationnels avec 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