Circuits are the primary unit of a #quantum-program, represented using the Cirquit class. A Cirquit consists of several Moment objects, which itself is a collection of Operation objects. A Moment represents a slice of time, while it’s Operations represent some effect on a specific subset of #qubits.

GateOperation is the most commonly used type of Operation.

Circuit is an iterable of Moment objects.

Insert Strategies

InsertStrategy defines how Moments are automatically constructed when Cirquit.append() is passed multiple Operation objects that touch the same qubit(s). In short, it allows to pass in a series of operations that have a defined order, but can happen simultaneously so long as the operations are operating on different qubits. See InsertStrategies.


An OP_TREE is a contract that states: if the input can be iteratively flattened into a list of operations, then the input is an OP_TREE


Circuits can be optimized for different hardware architectures or to compact single qubit gates to optimize runtime complexity/parallelization within Moment time slices. For more details, see Cirq docs.

Local R Gates

Implemented as special cases of the {X,Y,Z}PowGates, the rx, ry, and rz gates are functions that return instances of their corresponding PowGate, converting the “x-turn” format into radians: $$ x/\pi $$

Where \(x\) is the phi argument to the r{x,y,x} function.


Cirq has some support for JSON serialization. The gates all seem to support the to_json method, but it looks like ParallelGateOperation isn’t supported by the serialization framework.