365 Architect

Cirq — Google's Quantum Framework

Definition

Cirq is Google Quantum AI's open-source Python framework for designing, simulating, and running quantum circuits on NISQ (Noisy Intermediate-Scale Quantum) devices. First released in 2018, Cirq gives developers fine-grained control over qubit placement, gate timing, and device calibration — making it the preferred tool for hardware-level quantum research and experiment design.

Usage and Benefits

Usage

Cirq's design philosophy is qubit-first: you explicitly define qubits, their grid topology, and the moments (time slices) in which gates operate.

Basic example — creating a Bell state:

import cirq

q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit([
    cirq.H(q0),
    cirq.CNOT(q0, q1),
    cirq.measure(q0, q1, key='result')
])

sim = cirq.Simulator()
result = sim.run(circuit, repetitions=1000)
print(result.histogram(key='result'))

Benefits

  • Explicit device topology — Qubits are placed on actual hardware grids; gates respect nearest-neighbour connectivity.
  • Pulse-level accesscirq.pulse module lets you design qubit drive pulses for calibration experiments.
  • NISQ-first design — Built-in noise models, device calibrations, and approximate compilation.
  • Google Sycamore access — Run on Google's 53- and 72-qubit Sycamore processors via Quantum Computing Service.
  • Serialisation with ProtoBuf — Circuits can be serialised and shared across teams or stored for reproducibility.
  • Integration with TensorFlow Quantum — Hybrid quantum-classical machine learning workflows.

Comparison to Qiskit

Aspect Qiskit Cirq
Abstraction level Circuit + algorithm Circuit + device
Qubit model Virtual (transpiler maps) Physical (developer places)
Pulse control Qiskit Pulse (separate) Built-in (cirq.pulse)
Simulator Aer (high-performance) Built-in (NumPy-backed)
Education focus Heavy (textbook, courses) Moderate (tutorials)

Use Cases

Domain Application Why Cirq
Research NISQ device characterisation Explicit topology + pulse control
Optimisation QAOA on grid topologies Native grid qubit placement
Machine Learning Hybrid QML with TensorFlow TF Quantum integration
Error correction Surface code simulation Lattice definitions built-in
Hardware calibration Gate fidelity measurement Pulse-level access to Sycamore

How to Use Cirq

Installation

pip install cirq

Noise Simulation

import cirq
from cirq import NoiseModel

class DepolarizingNoise(NoiseModel):
    def noisy_moment(self, moment, system_qubits):
        return [
            moment,
            cirq.depolarize(0.01).on_each(*system_qubits)
        ]

noisy_circuit = cirq.Circuit(NoiseModel().noisy_moment(...))

Running on Google Hardware (via QCS)

import cirq_google

engine = cirq_google.Engine(project_id="my-project")
processor = engine.get_processor("rainbow")
sampler = processor.get_sampler()

results = sampler.run(circuit, repetitions=5000)

Defining Custom Qubit Topologies

import cirq

# 3x3 grid
qubits = cirq.GridQubit.rect(3, 3)
circuit = cirq.Circuit(cirq.CZ(qubits[0], qubits[1]) for q in qubits)

Resources and References

Share on LinkedIn