Tableau representation of a stabilizer state
Inherits From: StabilizerState
, QuantumStateRepresentation
cirq.CliffordTableau(
num_qubits,
initial_state: int = 0,
rs: Optional[np.ndarray] = None,
xs: Optional[np.ndarray] = None,
zs: Optional[np.ndarray] = None
)
The tableau stores the stabilizer generators of
the state using three binary arrays: xs, zs, and rs.
Each row of the arrays represents a Pauli string, P, that is
an eigenoperator of the state vector with eigenvalue one: P|psi> = |psi>.
Attributes |
can_represent_mixed_states
|
Subclasses that can represent mixed states should override this.
|
rs
|
|
supports_factor
|
Subclasses that allow factorization should override this.
|
xs
|
|
zs
|
|
Methods
apply_cx
View source
apply_cx(
control_axis: int,
target_axis: int,
exponent: float = 1,
global_shift: float = 0
)
Apply a CX operation to the state.
Args |
control_axis
|
The control axis of the operation.
|
target_axis
|
The axis to which the operation should be applied.
|
exponent
|
The exponent of the CX operation, must be an integer.
|
global_shift
|
The global phase shift of the raw operation, prior to
exponentiation. Typically the value in gate.global_shift .
|
Raises |
ValueError
|
If the exponent is not an integer.
|
apply_cz
View source
apply_cz(
control_axis: int,
target_axis: int,
exponent: float = 1,
global_shift: float = 0
)
Apply a CZ operation to the state.
Args |
control_axis
|
The control axis of the operation.
|
target_axis
|
The axis to which the operation should be applied.
|
exponent
|
The exponent of the CZ operation, must be an integer.
|
global_shift
|
The global phase shift of the raw operation, prior to
exponentiation. Typically the value in gate.global_shift .
|
Raises |
ValueError
|
If the exponent is not an integer.
|
apply_global_phase
View source
apply_global_phase(
coefficient: linear_dict.Scalar
)
Apply a global phase to the state.
Args |
coefficient
|
The global phase to apply.
|
apply_h
View source
apply_h(
axis: int, exponent: float = 1, global_shift: float = 0
)
Apply an H operation to the state.
Args |
axis
|
The axis to which the operation should be applied.
|
exponent
|
The exponent of the H operation, must be an integer.
|
global_shift
|
The global phase shift of the raw operation, prior to
exponentiation. Typically the value in gate.global_shift .
|
Raises |
ValueError
|
If the exponent is not an integer.
|
apply_x
View source
apply_x(
axis: int, exponent: float = 1, global_shift: float = 0
)
Apply an X operation to the state.
Args |
axis
|
The axis to which the operation should be applied.
|
exponent
|
The exponent of the X operation, must be a half-integer.
|
global_shift
|
The global phase shift of the raw operation, prior to
exponentiation. Typically the value in gate.global_shift .
|
Raises |
ValueError
|
If the exponent is not half-integer.
|
apply_y
View source
apply_y(
axis: int, exponent: float = 1, global_shift: float = 0
)
Apply an Y operation to the state.
Args |
axis
|
The axis to which the operation should be applied.
|
exponent
|
The exponent of the Y operation, must be a half-integer.
|
global_shift
|
The global phase shift of the raw operation, prior to
exponentiation. Typically the value in gate.global_shift .
|
Raises |
ValueError
|
If the exponent is not half-integer.
|
apply_z
View source
apply_z(
axis: int, exponent: float = 1, global_shift: float = 0
)
Apply a Z operation to the state.
Args |
axis
|
The axis to which the operation should be applied.
|
exponent
|
The exponent of the Z operation, must be a half-integer.
|
global_shift
|
The global phase shift of the raw operation, prior to
exponentiation. Typically the value in gate.global_shift .
|
Raises |
ValueError
|
If the exponent is not half-integer.
|
copy
View source
copy(
deep_copy_buffers: bool = True
) -> 'CliffordTableau'
Creates a copy of the object.
Args |
deep_copy_buffers
|
If True, buffers will also be deep-copied.
Otherwise the copy will share a reference to the original object's
buffers.
|
Returns |
A copied instance.
|
destabilizers
View source
destabilizers() -> List['cirq.DensePauliString']
Returns the destabilizer generators of the state.
These
are n operators {S_1,S_2,...,S_n} such that along with the stabilizer
generators above generate the full Pauli group on n qubits.
factor
View source
factor(
axes: Sequence[int], *, validate=True, atol=1e-07
) -> Tuple[Self, Self]
Splits two state spaces after a measurement or reset.
inverse
View source
inverse() -> 'CliffordTableau'
Returns the inverse Clifford tableau of this tableau.
kron
View source
kron(
other: Self
) -> Self
Joins two state spaces together.
matrix
View source
matrix() -> np.ndarray
Returns the 2n * 2n matrix representation of the Clifford tableau.
measure
View source
measure(
axes: Sequence[int], seed: 'cirq.RANDOM_STATE_OR_SEED_LIKE' = None
) -> List[int]
Measures the state.
Args |
axes
|
The axes to measure.
|
seed
|
The random number seed to use.
|
Returns |
The measurements in order.
|
reindex
View source
reindex(
axes: Sequence[int]
) -> Self
Physically reindexes the state by the new basis.
Args |
axes
|
The desired axis order.
|
Returns |
The state with qubit order transposed and underlying representation
updated.
|
sample
View source
sample(
axes: Sequence[int],
repetitions: int = 1,
seed: 'cirq.RANDOM_STATE_OR_SEED_LIKE' = None
) -> np.ndarray
Samples the state. Subclasses can override with more performant method.
Args |
axes
|
The axes to sample.
|
repetitions
|
The number of samples to make.
|
seed
|
The random number seed to use.
|
Returns |
The samples in order.
|
stabilizers
View source
stabilizers() -> List['cirq.DensePauliString']
Returns the stabilizer generators of the state.
These
are n operators {S_1,S_2,...,S_n} such that S_i |psi> = |psi>
then
View source
then(
second: 'CliffordTableau'
) -> 'CliffordTableau'
Returns a composed CliffordTableau of this tableau and the second tableau.
Then composed tableau is equal to (up to global phase) the composed
unitary operation of the two tableaux, i.e. equivalent to applying the unitary
operation of this CliffordTableau then applying the second one.
Args |
second
|
The second CliffordTableau to compose with.
|
Returns |
The composed CliffordTableau.
|
Raises |
TypeError
|
If the type of second is not CliffordTableau.
|
ValueError
|
If the number of qubits in the second tableau mismatch with
this tableau.
|
__eq__
View source
__eq__(
other
)
Return self==value.
__matmul__
View source
__matmul__(
second: 'CliffordTableau'
)