qml.estimator.ops.Toffoli

class Toffoli(elbow=None, wires=None)[source]

Bases: ResourceOperator

Resource class for the Toffoli gate.

Parameters:
  • wires (Sequence[int] | None) – the subsystem the gate acts on

  • elbow (str | None) – String identifier to determine if this is a special type of Toffoli gate. Available options are left, right, and None.

Resources:

If elbow is provided, resources are obtained from Figure 4 of Babbush et al. (2018).

If elbow is None, the resources are obtained from Figure 1 of Jones (2012).

The circuit which applies the Toffoli gate on target wire ‘target’ with control wires (‘c1’, ‘c2’) is defined as:

    c1: ─╭●────╭X──T†────────╭X────╭●───────────────╭●─┤
    c2: ─│──╭X─│──╭●───T†─╭●─│──╭X─│────────────────╰Z─┤
  aux1: ─╰X─│──│──╰X───T──╰X─│──│──╰X────────────────║─┤
  aux2: ──H─╰●─╰●──T─────────╰●─╰●──H──S─╭●──H──┤↗├──║─┤
target: ─────────────────────────────────╰X──────║───║─┤
                                                 ╚═══╝

Specifically, the resources are defined as nine CNOT gates, three Hadamard gates, one CZ gate, one S gate, two T gates and two adjoint T gates.

See also

The corresponding PennyLane operation Toffoli.

Example

The resources for this operation are computed using:

>>> qml.estimator.Toffoli.resource_decomp()
[Allocate(2), (9 x CNOT), (3 x Hadamard), (1 x S), (1 x CZ), (2 x T), (2 x Adjoint(T)), Deallocate(2)]

num_wires

resource_keys

resource_params

Returns a dictionary containing the minimal information needed to compute the resources.

num_wires = 3
resource_keys = {'elbow'}
resource_params

Returns a dictionary containing the minimal information needed to compute the resources.

Returns:

  • elbow (str | None): String identifier to determine if this is a special type of Toffoli gate (left or right elbow).

Return type:

A dictionary containing the resource parameters

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.

elbow_decomp([elbow])

pow_resource_decomp(pow_z, ...)

Returns a list representing the resources for an operator raised to a power.

resource_decomp([elbow])

Returns a list representing the resources of the operator.

resource_rep([elbow])

Returns a compressed representation containing only the parameters of the operator that are needed to compute the resources.

textbook_resource_decomp([elbow])

Returns a list representing the resources of the operator.

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:

This operation is self-adjoint, so the resources of the adjoint operation results are same as the originial 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:

The resources are expressed as one general MultiControlledX gate.

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]

static elbow_decomp(elbow='left')[source]

A function that prepares the resource decomposition obtained from Figure 4 of Babbush et al. (2018).

Parameters:

elbow (str | None) – One of “left” or “right”. Defaults to “left”.

Returns:

The resources of decomposing the elbow gates.

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:

This operation is self-inverse, thus when raised to even integer powers acts like the identity operator and raised to odd powers it produces itself.

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(elbow=None)[source]

Returns a list representing the resources of the operator.

Resources:

If elbow is provided, resources are obtained from Figure 4 of arXiv:1805.03662.

If elbow is None, the resources are obtained from Figure 1 of Jones (2012).

The circuit which applies the Toffoli gate on target wire ‘target’ with control wires (‘c1’, ‘c2’) is defined as:

    c1: ─╭●────╭X──T†────────╭X────╭●───────────────╭●─┤
    c2: ─│──╭X─│──╭●───T†─╭●─│──╭X─│────────────────╰Z─┤
  aux1: ─╰X─│──│──╰X───T──╰X─│──│──╰X────────────────║─┤
  aux2: ──H─╰●─╰●──T─────────╰●─╰●──H──S─╭●──H──┤↗├──║─┤
target: ─────────────────────────────────╰X──────║───║─┤
                                                 ╚═══╝

Specifically, the resources are defined as nine CNOT gates, three Hadamard gates, one CZ gate, one S gate, two T gates and two adjoint T 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(elbow=None)[source]

Returns a compressed representation containing only the parameters of the operator that are needed to compute the resources.

Parameters:

elbow (str | None) – String identifier to determine if this is a special type of Toffoli gate (left or right elbow).

Returns:

A compressed representation of the operator.

Return type:

CompressedResourceOp

classmethod textbook_resource_decomp(elbow=None)[source]

Returns a list representing the resources of the operator.

Parameters:

elbow (str | None) – String identifier to determine if this is a special type of Toffoli gate (left or right elbow). Default value is None.

Resources:

If elbow is provided, resources are obtained from Figure 4 of arXiv:1805.03662.

If elbow is None, the resources are taken from Figure 4.9 of Nielsen, M. A., & Chuang, I. L. (2010).

The circuit is defined as:

0: ───────────╭●───────────╭●────╭●──T──╭●─┤
1: ────╭●─────│─────╭●─────│───T─╰X──T†─╰X─┤
2: ──H─╰X──T†─╰X──T─╰X──T†─╰X──T──H────────┤

Specifically, the resources are defined as six CNOT gates, two Hadamard gates, four T gates and three adjoint T 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]

Contents

Using PennyLane

Release news

Development

API

Internals