cirq.SingleQubitCliffordGate

Any single qubit Clifford rotation.

Inherits From: CliffordGate, Gate

clifford_tableau

Methods

commutes_with_pauli

View source

commutes_with_single_qubit_gate

View source

Tests if the two circuits would be equivalent up to global phase: --self--gate-- and --gate--self--

controlled

View source

Returns a controlled version of this gate. If no arguments are specified, defaults to a single qubit control.

Args
num_controls Total number of control qubits.
control_values Which control computational basis state to apply the sub gate. A sequence of length num_controls where each entry is an integer (or set of integers) corresponding to the computational basis state (or set of possible values) where that control is enabled. When all controls are enabled, the sub gate is applied. If unspecified, control values default to 1.
control_qid_shape The qid shape of the controls. A tuple of the expected dimension of each control qid. Defaults to (2,) * num_controls. Specify this argument when using qudits.

Returns
A cirq.Gate representing self controlled by the given control values and qubits. This is a cirq.ControlledGate in the base implementation, but subclasses may return a different gate type.

decompose_gate

View source

Decomposes this clifford into a series of H and pauli rotation gates.

Returns
A sequence of H and pauli rotation gates which are equivalent to this clifford gate if applied in order. This decomposition agrees with cirq.unitary(self), including global phase.

decompose_rotation

View source

Decomposes this clifford into a series of pauli rotations.

Each rotation is given as a tuple of (axis, quarter_turns), where axis is a Pauli giving the axis to rotate about. The result will be a sequence of zero, one, or two rotations.

Note that the combined unitary effect of these rotations may differ from cirq.unitary(self) by a global phase.

dense_pauli_string

View source

equivalent_gate_before

View source

Returns a SingleQubitCliffordGate such that the circuits --output--self-- and --self--gate-- are equivalent up to global phase.

from_clifford_tableau

View source

from_double_map

View source

Returns a SingleQubitCliffordGate for the specified transform with a 90 or 180 degree rotation.

Either pauli_map_to or two of (x_to, y_to, z_to) may be specified.

Args
pauli_map_to A dictionary with two key value pairs describing two transforms.
x_to The transform from cirq.X
y_to The transform from cirq.Y
z_to The transform from cirq.Z

from_op_list

View source

Construct a new Clifford gates from several known operations.

Args
operations A list of cirq operations to construct the Clifford gate. The combination order is the first element in the list applies the transformation on the stabilizer state first.
qubit_order Determines how qubits are ordered when decomposite the operations.

Returns
A CliffordGate instance, which has the transformation on the stabilizer state equivalent to the composition of operations.

Raises
ValueError When one or more operations do not have stabilizer effect.

from_pauli

View source

from_quarter_turns

View source

from_single_map

View source

Returns a SingleQubitCliffordGate for the specified transform with a 90 or 180 degree rotation.

The arguments are exclusive, only one may be specified.

Args
pauli_map_to A dictionary with a single key value pair describing the transform.
x_to The transform from cirq.X
y_to The transform from cirq.Y
z_to The transform from cirq.Z

from_unitary

View source

Creates Clifford gate with given unitary (up to global phase).

Args
u 2x2 unitary matrix of a Clifford gate.

Returns
SingleQubitCliffordGate, whose matrix is equal to given matrix (up to global phase), or None if u is not a matrix of a single-qubit Clifford gate.

from_unitary_with_global_phase

View source

Creates Clifford gate with given unitary, including global phase.

Args
u 2x2 unitary matrix of a Clifford gate.

Returns
A tuple of a SingleQubitCliffordGate and a global phase, such that the gate unitary (as given by cirq.unitary) times the global phase is identical to the given unitary u; or None if u is not the matrix of a single-qubit Clifford gate.

from_xz_map

View source

Returns a SingleQubitCliffordGate for the specified transforms. The Y transform is derived from the X and Z.

Args
x_to Which Pauli to transform X to and if it should negate.
z_to Which Pauli to transform Z to and if it should negate.

merged_with

View source

Returns a SingleQubitCliffordGate such that the circuits --output-- and --self--second-- are equivalent up to global phase.

num_qubits

View source

The number of qubits this gate acts on.

on

View source

Returns an application of this gate to the given qubits.

Args
*qubits The collection of qubits to potentially apply the gate to.

Returns: a cirq.Operation which is this gate applied to the given qubits.

on_each

View source

Returns a list of operations applying the gate to all targets.

Args
*targets The qubits to apply this gate to. For single-qubit gates this can be provided as varargs or a combination of nested iterables. For multi-qubit gates this must be provided as an Iterable[Sequence[Qid]], where each sequence has num_qubits qubits.

Returns
Operations applying this gate to the target qubits.

Raises
ValueError If targets are not instances of Qid or Iterable[Qid]. If the gate qubit number is incompatible.
TypeError If a single target is supplied and it is not iterable.

pauli_tuple

View source

Returns a tuple of a Pauli operator and a boolean.

The pauli is the operator of the transform and the boolean determines whether the operator should be flipped. For instance, it is True if the coefficient is -1, and False if the coefficient is 1.

to_phased_xz_gate

View source

Convert this gate to a PhasedXZGate instance.

The rotation can be categorized by {axis} * {degree}:

* Identity: I
* {x, y, z} * {90, 180, 270}  --- {X, Y, Z} + 6 Quarter turn gates
* {+/-xy, +/-yz, +/-zx} * 180  --- 6 Hadamard-like gates
* {middle point of xyz in 4 Quadrant} * {120, 240} --- swapping axis

note 1 + 9 + 6 + 8 = 24 in total.

To associate with Clifford Tableau, it can also be grouped by 4:

* {I,X,Y,Z} is [[1 0], [0, 1]]
* {+/- X_sqrt, 2 Hadamard-like gates acting on the YZ plane} is [[1, 0], [1, 1]]
* {+/- Z_sqrt, 2 Hadamard-like gates acting on the XY plane} is [[1, 1], [0, 1]]
* {+/- Y_sqrt, 2 Hadamard-like gates acting on the XZ plane} is [[0, 1], [1, 0]]
* {middle point of xyz in 4 Quadrant} * 120 is [[0, 1], [1, 1]]
* {middle point of xyz in 4 Quadrant} * 240 is [[1, 1], [1, 0]]

validate_args

View source

Checks if this gate can be applied to the given qubits.

By default checks that:

  • inputs are of type Qid
  • len(qubits) == num_qubits()
  • qubit_i.dimension == qid_shape[i] for all qubits

Child classes can override. The child implementation should call super().validate_args(qubits) then do custom checks.

Args
qubits The sequence of qubits to potentially apply the gate to.

Raises
ValueError The gate can't be applied to the qubits.

with_probability

View source

Creates a probabilistic channel with this gate.

Args
probability floating point value between 0 and 1, giving the probability this gate is applied.

Returns
cirq.RandomGateChannel that applies self with probability probability and the identity with probability 1-p.

wrap_in_linear_combination

View source

Returns a LinearCombinationOfGates with this gate.

Args
coefficient number coefficient to use in the resulting cirq.LinearCombinationOfGates object.

Returns
cirq.LinearCombinationOfGates containing self with a coefficient of coefficient.

__add__

View source

__call__

View source

Call self as a function.

__eq__

View source

__mul__

View source

__ne__

View source

__neg__

View source

__pow__

View source

__rmul__

View source

__sub__

View source

__truediv__

View source