qml.labs.resource_estimation.ResourceToffoli¶
- class ResourceToffoli(elbow=None, wires=None)[source]¶
Bases:
ResourceOperatorResource class for the Toffoli gate.
- Parameters:
wires (Sequence[int], optional) – the subsystem the gate acts on
elbow (Union[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 Babbush 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
ResourceCNOTgates, threeResourceHadamardgates, oneResourceCZgate, oneResourceSgate, twoResourceTgates and two adjointResourceTgates.
See also
Example
The resources for this operation are computed using:
>>> re.ResourceToffoli.resource_decomp() [AllocWires(2), (9 x CNOT), (3 x Hadamard), (1 x S), (1 x CZ), (2 x T), (2 x Adjoint(T)), FreeWires(2)]
Attributes
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 (Union[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
Methods
adjoint_resource_decomp([elbow])Returns a list representing the resources for the adjoint of the operator.
controlled_resource_decomp(...[, elbow])Returns a list representing the resources for a controlled version of the operator.
dequeue(op_to_remove[, context])Remove the given resource operator(s) from the Operator queue.
elbow_decomp([elbow])pow_resource_decomp(pow_z[, elbow])Returns a list representing the resources for an operator raised to a power.
queue([context])Append the operator to the Operator queue.
resource_decomp([elbow])Returns a list of GateCount objects 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.
Returns a compressed representation directly from the operator
textbook_resource_decomp([elbow])Returns a list of GateCount objects representing the resources of the operator.
tracking_name(*args, **kwargs)Returns a name used to track the operator during resource estimation.
Returns the tracking name built with the operator's parameters.
- classmethod adjoint_resource_decomp(elbow=None, **kwargs)[source]¶
Returns a list representing the resources for the adjoint of the operator.
- Resources:
This operation is self-adjoint, so 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(ctrl_num_ctrl_wires, ctrl_num_ctrl_values, elbow=None, **kwargs)[source]¶
Returns a list representing the resources for a controlled version of the operator.
- Parameters:
ctrl_num_ctrl_wires (int) – the number of qubits the operation is controlled on
ctrl_num_ctrl_values (int) – the number of control qubits, that are controlled when in the \(|0\rangle\) state
elbow (Union[str, None]) – String identifier to determine if this is a special type of Toffoli gate (left or right elbow). Default value is None.
- Resources:
The resources are expressed as one general
ResourceMultiControlledXgate.
- 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 dequeue(op_to_remove, context=<class 'pennylane.queuing.QueuingManager'>)¶
Remove the given resource operator(s) from the Operator queue.
- static elbow_decomp(elbow='left')[source]¶
A function that prepares the resource decomposition obtained from Figure 4 of Babbush 2018.
- Parameters:
elbow (str, optional) – 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, elbow=None, **kwargs)[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
- 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]
- queue(context=<class 'pennylane.queuing.QueuingManager'>)¶
Append the operator to the Operator queue.
- classmethod resource_decomp(elbow=None, **kwargs)[source]¶
Returns a list of GateCount objects representing the resources of the operator. Each GateCount object specifies a gate type and its total occurrence count.
- 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
ResourceCNOTgates, threeResourceHadamardgates, oneResourceCZgate, oneResourceSgate, twoResourceTgates and two adjointResourceTgates.
- classmethod resource_rep(elbow=None)[source]¶
Returns a compressed representation containing only the parameters of the Operator that are needed to compute the resources.
- resource_rep_from_op()¶
Returns a compressed representation directly from the operator
- classmethod textbook_resource_decomp(elbow=None, **kwargs)[source]¶
Returns a list of GateCount objects representing the resources of the operator. Each GateCount object specifies a gate type and its total occurrence count.
- 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
ResourceCNOTgates, twoResourceHadamardgates, fourResourceTgates and three adjointResourceTgates.
- classmethod tracking_name(*args, **kwargs)¶
Returns a name used to track the operator during resource estimation.
- tracking_name_from_op()¶
Returns the tracking name built with the operator’s parameters.