qml.estimator.ops.PauliRot

class PauliRot(pauli_string, precision=None, wires=None)[source]

Bases: ResourceOperator

Resource class for an arbitrary Pauli word rotation operation.

Parameters:
  • pauli_string (str) – a string describing the Pauli operators that define the rotation

  • precision (float | None) – error threshold for the Clifford + T decomposition of the operation

  • wires (WiresLike | None) – the wire the operation acts on

Resources:

The resources are computed based on Section VIII (Figures 3 and 4) of The Bravyi-Kitaev transformation for quantum computation of electronic structure, 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}\]

Note that when the pauli_string is a single Pauli operator (X, Y, Z, Identity), the cost is the associated single-qubit rotation (i.e., RX, RY, RZ, GlobalPhase). If the pauli_string is XX, the resources are one RX gate at the specified precision and two CNOT gates. If the pauli_string is YY, the resources are one RY gate at the specified precision and two CY 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

resource_keys

resource_params

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 the Clifford + T decomposition of this operation

Return type:

dict

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 each X gate in the Pauli word we conjugate by a pair of Hadamard gates, and for each Y gate in the Pauli word we conjugate by a pair of Hadamard and a pair of S 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 the Clifford + T decomposition of this operation

Resources:

The resources are computed based on Section VIII (Figures 3 and 4) of The Bravyi-Kitaev transformation for quantum computation of electronic structure, 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}\]

Note that when the pauli_string is a single Pauli operator (X, Y, Z, Identity), the cost is the associated single-qubit rotation (i.e., RX, RY, RZ, GlobalPhase). If the pauli_string is XX, the resources are one RX gate at the specified precision and two CNOT gates. If the pauli_string is YY, the resources are one RY gate at the specified precision and two CY 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 the Clifford + T decomposition of this operation

Returns:

CompressedResourceOp:: the operator in a compressed representation

Contents

Using PennyLane

Release news

Development

API

Internals