A framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits.
npx @tessl/cli install tessl/pypi-cirq@1.6.0Cirq is a Python framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits. It provides a complete toolkit for quantum circuit design, optimization, simulation, and analysis, with comprehensive support for quantum gates, noise modeling, device characterization, and quantum algorithms.
pip install cirqimport cirq
# Import specific components
from cirq import Circuit, GridQubit, H, CNOT, measure
from cirq import Simulator, DensityMatrixSimulator
from cirq import LineQubit, X, Y, Z, S, T
# Import for parameter sweeps
from cirq import ParamResolver, Linspace
# Import for noise modeling
from cirq import NoiseModel, DepolarizingChannelimport cirq
import numpy as np
# Create qubits
q0, q1 = cirq.LineQubit.range(2)
# Build a quantum circuit
circuit = cirq.Circuit()
circuit.append(cirq.H(q0)) # Hadamard gate on qubit 0
circuit.append(cirq.CNOT(q0, q1)) # CNOT gate
circuit.append(cirq.measure(q0, q1, key='result')) # Measurement
print("Circuit:")
print(circuit)
# Simulate the circuit
simulator = cirq.Simulator()
result = simulator.run(circuit, repetitions=100)
print("Measurement results:")
print(result.histogram(key='result'))
# Get final state vector (without measurement)
circuit_no_measure = circuit[:-1] # Remove measurement
final_state = simulator.simulate(circuit_no_measure)
print("Final state vector:")
print(final_state.final_state_vector)Cirq follows a layered architecture for quantum computing:
Build and manipulate quantum circuits with intuitive Python syntax.
class Circuit:
def __init__(self, *contents: 'cirq.OP_TREE') -> None: ...
def append(self, op_tree: 'cirq.OP_TREE', strategy: InsertStrategy = InsertStrategy.NEW_THEN_INLINE) -> None: ...
def insert(self, index: int, op_tree: 'cirq.OP_TREE', strategy: InsertStrategy = InsertStrategy.NEW_THEN_INLINE) -> None: ...
def moments(self) -> List[Moment]: ...
def all_qubits(self) -> FrozenSet['cirq.Qid']: ...
def num_qubits(self) -> int: ...
class Moment:
def __init__(self, *operations: 'cirq.Operation') -> None: ...
def operates_on(self, qubits: Iterable['cirq.Qid']) -> bool: ...
def operations(self) -> FrozenSet['cirq.Operation']: ...Comprehensive library of quantum gates including Pauli gates, rotation gates, multi-qubit gates, and noise channels.
# Single-qubit gates
X: XPowGate
Y: YPowGate
Z: ZPowGate
H: HPowGate
S: ZPowGate # S gate (phase gate)
T: ZPowGate # T gate
# Rotation gates
def rx(rads: float) -> XPowGate: ...
def ry(rads: float) -> YPowGate: ...
def rz(rads: float) -> ZPowGate: ...
# Multi-qubit gates
CNOT: CNotPowGate
CZ: CZPowGate
SWAP: SwapPowGate
TOFFOLI: CCXPowGateMultiple simulation backends for different use cases and performance requirements.
class Simulator(SimulatorBase):
def run(self, program: 'cirq.CIRCUIT_LIKE', param_resolver: 'cirq.ParamResolverOrSimilarType' = None,
repetitions: int = 1) -> 'cirq.Result': ...
def simulate(self, program: 'cirq.CIRCUIT_LIKE', param_resolver: 'cirq.ParamResolverOrSimilarType' = None,
initial_state: 'cirq.STATE_VECTOR_LIKE' = None) -> SimulationTrialResult: ...
class DensityMatrixSimulator(SimulatorBase):
def simulate(self, program: 'cirq.CIRCUIT_LIKE', param_resolver: 'cirq.ParamResolverOrSimilarType' = None,
initial_state: 'cirq.QUANTUM_STATE_LIKE' = None) -> DensityMatrixTrialResult: ...Model quantum hardware constraints and realistic noise for NISQ applications.
class GridQubit(Qid):
def __init__(self, row: int, col: int) -> None: ...
@property
def row(self) -> int: ...
@property
def col(self) -> int: ...
class NoiseModel:
def noisy_operation(self, operation: 'cirq.Operation') -> 'cirq.OP_TREE': ...
def depolarize(p: float, n_qubits: int = None) -> DepolarizingChannel: ...Run parameterized experiments and parameter sweeps for algorithm optimization.
class ParamResolver:
def __init__(self, param_dict: Dict[Union[str, sympy.Symbol], Any] = None) -> None: ...
def resolve(self, value: Any) -> Any: ...
class Linspace(Sweep):
def __init__(self, key: Union[str, sympy.Symbol], start: float, stop: float, length: int) -> None: ...
def sample_sweep(program: 'cirq.CIRCUIT_LIKE', params: 'cirq.Sweepable',
repetitions: int = 1) -> List['cirq.Result']: ...Utilities for quantum state manipulation, channel representations, and quantum information measures.
def fidelity(state1: 'cirq.QUANTUM_STATE_LIKE', state2: 'cirq.QUANTUM_STATE_LIKE') -> float: ...
def von_neumann_entropy(state: 'cirq.QUANTUM_STATE_LIKE') -> float: ...
def kraus_to_choi(kraus_operators: Sequence[np.ndarray]) -> np.ndarray: ...
def density_matrix_from_state_vector(state_vector: np.ndarray) -> np.ndarray: ...Mathematical functions for quantum computing including matrix decompositions and special operations.
def kak_decomposition(unitary: np.ndarray) -> KakDecomposition: ...
def is_unitary(matrix: np.ndarray) -> bool: ...
def partial_trace(tensor: np.ndarray, keep_indices: List[int], qid_shape: Tuple[int, ...]) -> np.ndarray: ...Transform and optimize quantum circuits for different target hardware and improved performance.
def merge_single_qubit_gates_to_phxz(circuit: Circuit, context: TransformerContext = None) -> Circuit: ...
def optimize_for_target_gateset(circuit: Circuit, gateset: CompilationTargetGateset) -> Circuit: ...
def single_qubit_matrix_to_gates(matrix: np.ndarray, tolerance: float = 1e-10) -> List['cirq.Operation']: ...Extensible protocol system for adding custom behavior to quantum operations.
def unitary(val: Any) -> np.ndarray: ...
def decompose(val: Any, intercepting_decomposer: Callable = None) -> List['cirq.Operation']: ...
def apply_unitary(val: Any, args: ApplyUnitaryArgs) -> Union[np.ndarray, None]: ...Tools for visualizing quantum circuits, states, and measurement results.
def plot_state_histogram(result: 'cirq.Result', ax: matplotlib.axes.Axes = None) -> matplotlib.axes.Axes: ...
def plot_density_matrix(matrix: np.ndarray) -> None: ...
class Heatmap:
def __init__(self, value_map: Mapping[Tuple[int, ...], float]) -> None: ...Built-in experiments for quantum device characterization and benchmarking.
def single_qubit_randomized_benchmarking(sampler: 'cirq.Sampler', qubit: 'cirq.Qid',
use_cliffords: bool = True) -> RandomizedBenchMarkResult: ...
def xeb_fidelity(circuit_results: Dict['cirq.Circuit', List[int]],
simulated_probs: Dict['cirq.Circuit', np.ndarray]) -> float: ...Experiments and Characterization
Utility classes for time, measurement keys, classical data, and other quantum computing values.
class Duration:
def __init__(self, *, picos: int = 0, nanos: int = 0, micros: int = 0, millis: int = 0) -> None: ...
class MeasurementKey:
def __init__(self, name: str, path: Tuple[str, ...] = ()) -> None: ...High-level workflow utilities for quantum computation and measurement collection.
class Sampler:
def run(self, program: 'cirq.CIRCUIT_LIKE', param_resolver: 'cirq.ParamResolverOrSimilarType' = None,
repetitions: int = 1) -> 'cirq.Result': ...
class PauliSumCollector:
def __init__(self, circuit: 'cirq.Circuit', observables: List['cirq.PauliSum'],
sampler: 'cirq.Sampler') -> None: ...Integration with other quantum computing frameworks and tools.
def quirk_json_to_circuit(json_text: str) -> Circuit: ...
def quirk_url_to_circuit(url: str) -> Circuit: ...# Core type aliases
OP_TREE = Union[Operation, Iterable['OP_TREE']]
CIRCUIT_LIKE = Union[Circuit, FrozenCircuit, Iterable[Any]]
QUANTUM_STATE_LIKE = Union[int, np.ndarray, 'cirq.QuantumState']
STATE_VECTOR_LIKE = Union[int, np.ndarray, Sequence[Union[int, float, complex]]]
PAULI_STRING_LIKE = Union[PauliString, str]
PAULI_GATE_LIKE = Union[Pauli, PauliString, str]
DURATION_LIKE = Union[Duration, float, int]
RANDOM_STATE_OR_SEED_LIKE = Union[int, np.random.RandomState, np.random.Generator]
# Parameter types
ParamDictType = Mapping[Union[str, sympy.Symbol], Any]
ParamResolverOrSimilarType = Union[ParamResolver, ParamDictType, Iterable[Any]]
Sweepable = Union[Sweep, ParamResolver, ParamDictType, Iterable[Any]]This comprehensive documentation covers all major capabilities of the cirq quantum computing framework, enabling developers to build, simulate, and analyze quantum circuits without needing to access the source code directly.