qml.estimator.ops.PauliRot¶
- class PauliRot(pauli_string, precision=None, wires=None)[source]
Bases:
ResourceOperator
Resource class for the PauliRot gate.
- Parameters:
pauli_string (str) – a string describing the Pauli operators that define the rotation
precision (float | None) – error threshold for Clifford + T decomposition of this operation
wires (Sequence[int] | None) – the wire the operation acts on
- Resources:
When the
pauli_string
is a single Pauli operator (X, Y, Z, Identity
) the cost is the associated single qubit rotation (RX, RY, RZ, GlobalPhase
).The resources come from Section VIII (Figures 3 & 4) of The Bravyi-Kitaev transformation for quantum computation of electronic structure paper, in combination with the following identities:
\[\begin{split}\begin{align} \hat{X} &= \hat{H} \cdot \hat{Z} \cdot \hat{H}, \\ \hat{Y} &= \hat{S} \cdot \hat{H} \cdot \hat{Z} \cdot \hat{H} \cdot \hat{S}^{\dagger}. \end{align}\end{split}\]Specifically, the resources are given by one
RZ
gate and a cascade of \(2 \times (n - 1)\)CNOT
gates where \(n\) is the number of qubits the gate acts on. Additionally, for eachX
gate in the Pauli word we conjugate by a pair ofHadamard
gates, and for eachY
gate in the Pauli word we conjugate by a pair ofHadamard
and a pair ofS
gates.
See also
The corresponding PennyLane operation
PauliRot
.Example
The resources for this operation are computed using:
>>> import pennylane.estimator as qre >>> pr = qre.PauliRot(pauli_string="XYZ") >>> print(qre.estimate(pr)) --- Resources: --- Total wires: 3 algorithmic wires: 3 allocated wires: 0 zero state: 0 any state: 0 Total gates : 55 'T': 44, 'CNOT': 4, 'Z': 1, 'S': 2, 'Hadamard': 4
Attributes
Returns a dictionary containing the minimal information needed to compute the resources.
- resource_keys = {'pauli_string', 'precision'}¶
- resource_params¶
Returns a dictionary containing the minimal information needed to compute the resources.
- Returns:
- A dictionary containing the resource parameters:
pauli_string (str): a string describing the pauli operators that define the rotation
precision (float): error threshold for Clifford + T decomposition of this operation
- Return type:
dict
Methods
adjoint_resource_decomp
(target_resource_params)Returns a list representing the resources for the adjoint of the operator.
controlled_resource_decomp
(num_ctrl_wires, ...)Returns a list representing the resources for a controlled version of the operator.
pow_resource_decomp
(pow_z, ...)Returns a list representing the resources for an operator raised to a power.
resource_decomp
(pauli_string[, precision])Returns a list of GateCount objects representing the operator's resources.
resource_rep
(pauli_string[, precision])Returns a compressed representation containing only the parameters of the Operator that are needed to compute a resource estimation.
- classmethod adjoint_resource_decomp(target_resource_params)[source]¶
Returns a list representing the resources for the adjoint of the operator.
- Parameters:
target_resource_params (dict) – A dictionary containing the resource parameters of the target operator
- Resources:
The adjoint of this operator just changes the sign of the phase, thus the resources of the adjoint operation results in the original operation.
- Returns:
A list of
GateCount
objects, where each object represents a specific quantum gate and the number of times it appears in the decomposition.- Return type:
list[
GateCount
]
- classmethod controlled_resource_decomp(num_ctrl_wires, num_zero_ctrl, target_resource_params)[source]¶
Returns a list representing the resources for a controlled version of the operator.
- Parameters:
num_ctrl_wires (int) – the number of qubits the operation is controlled on
num_zero_ctrl (int) – the number of control qubits, that are controlled when in the \(|0\rangle\) state
target_resource_params (dict) – A dictionary containing the resource parameters of the target operator
- Resources:
When the
pauli_string
is a single Pauli operator (X, Y, Z, Identity
) the cost is the associated controlled single qubit rotation gate: (CRX
,CRY
,CRZ
, controlled-GlobalPhase
).The resources are derived from the following identity. If an operation \(\hat{A}\) can be expressed as \(\hat{A} \ = \ \hat{U} \cdot \hat{B} \cdot \hat{U}^{\dagger}\) then the controlled operation \(C\hat{A}\) can be expressed as:
\[C\hat{A} \ = \ \hat{U} \cdot C\hat{B} \cdot \hat{U}^{\dagger}\]Specifically, the resources are one multi-controlled RZ-gate and a cascade of \(2 \times (n - 1)\)
CNOT
gates where \(n\) is the number of qubits the gate acts on. Additionally, for eachX
gate in the Pauli word we conjugate by a pair ofHadamard
gates, and for eachY
gate in the Pauli word we conjugate by a pair ofHadamard
and a pair ofS
gates.
- Returns:
A list of
GateCount
objects, where each object represents a specific quantum gate and the number of times it appears in the decomposition.- Return type:
list[
GateCount
]
- classmethod pow_resource_decomp(pow_z, target_resource_params)[source]¶
Returns a list representing the resources for an operator raised to a power.
- Parameters:
pow_z (int) – the power that the operator is being raised to
target_resource_params (dict) – A dictionary containing the resource parameters of the target operator.
- Resources:
Taking arbitrary powers of a general rotation produces a sum of rotations. The resources simplify to just one total pauli rotation.
- Returns:
A list of
GateCount
objects, where each object represents a specific quantum gate and the number of times it appears in the decomposition.- Return type:
list[
GateCount
]
- classmethod resource_decomp(pauli_string, precision=None)[source]¶
Returns a list of GateCount objects representing the operator’s resources.
- Parameters:
pauli_string (str) – a string describing the pauli operators that define the rotation
precision (float | None) – error threshold for Clifford + T decomposition of this operation
- Resources:
When the
pauli_string
is a single Pauli operator (X, Y, Z, Identity
) the cost is the associated single qubit rotation (RX, RY, RZ, GlobalPhase
).The resources come from Section VIII (Figures 3 & 4) of The Bravyi-Kitaev transformation for quantum computation of electronic structure paper, in combination with the following identity:
\[\begin{split}\begin{align} \hat{X} &= \hat{H} \cdot \hat{Z} \cdot \hat{H}, \\ \hat{Y} &= \hat{S} \cdot \hat{H} \cdot \hat{Z} \cdot \hat{H} \cdot \hat{S}^{\dagger}. \end{align}\end{split}\]Specifically, the resources are given by one
RZ
gate and a cascade of \(2 \times (n - 1)\)CNOT
gates where \(n\) is the number of qubits the gate acts on. Additionally, for eachX
gate in the Pauli word we conjugate by a pair ofHadamard
gates, and for eachY
gate in the Pauli word we conjugate by a pair ofHadamard
and a pair ofS
gates.
- Returns:
A list of
GateCount
objects, where each object represents a specific quantum gate and the number of times it appears in the decomposition.- Return type:
list[
GateCount
]
- classmethod resource_rep(pauli_string, precision=None)[source]¶
Returns a compressed representation containing only the parameters of the Operator that are needed to compute a resource estimation.
- Parameters:
pauli_string (str) – a string describing the pauli operators that define the rotation
precision (float | None) – error threshold for Clifford + T decomposition of this operation
- Returns:
CompressedResourceOp
:: the operator in a compressed representation