A framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Cirq 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.
Install with Tessl CLI
npx tessl i tessl/pypi-cirq