qml.map_wires

map_wires(input, wire_map, queue=False, replace=False)[source]

Changes the wires of an operator, tape, qnode or quantum function according to the given wire map.

Parameters:
  • input (Operator or QNode or QuantumTape or Callable) – an operator or a quantum circuit.

  • wire_map (dict) – dictionary containing the old wires as keys and the new wires as values

  • queue (bool) – Whether or not to queue the object when recording. Defaults to False.

  • replace (bool) – When queue=True, if replace=True the input operators will be replaced by its mapped version. Defaults to False.

Returns:

The transformed circuit or operator with updated wires in qml.transform.

Return type:

operator (Operator) or qnode (QNode) or quantum function (Callable) or tuple[List[.QuantumTape], function]

Note

qml.map_wires can be used as a decorator with the help of the functools module:

>>> dev = qml.device("default.qubit", wires=1)
>>> wire_map = {0: 10}
>>>
>>> @functools.partial(qml.map_wires, wire_map=wire_map)
... @qml.qnode(dev)
... def func(x):
...     qml.RX(x, wires=0)
...     return qml.expval(qml.Z(0))
...
>>> print(qml.draw(func)(0.1))
10: ──RX(0.10)─┤  <Z>

Example

Given an operator, qml.map_wires returns a copy of the operator with its wires changed:

>>> op = qml.RX(0.54, wires=0) + qml.X(1) + (qml.Z(2) @ qml.RY(1.23, wires=3))
>>> op
(RX(0.54, wires=[0]) + X(1)) + (Z(2) @ RY(1.23, wires=[3]))
>>> wire_map = {0: 3, 1: 2, 2: 1, 3: 0}
>>> qml.map_wires(op, wire_map)
(RX(0.54, wires=[3]) + X(2)) + (Z(1) @ RY(1.23, wires=[0]))

Moreover, qml.map_wires can be used to change the wires of QNodes or quantum functions:

>>> dev = qml.device("default.qubit", wires=4)
>>> @qml.qnode(dev)
... def circuit():
...    qml.RX(0.54, wires=0) @ qml.X(1) @ qml.Z(2) @ qml.RY(1.23, wires=3)
...    return qml.probs(wires=0)
...
>>> mapped_circuit = qml.map_wires(circuit, wire_map)
>>> mapped_circuit()
tensor([0.92885434, 0.07114566], requires_grad=True)
>>> tape = qml.workflow.construct_tape(mapped_circuit)()
>>> list(tape)
[((RX(0.54, wires=[3]) @ X(2)) @ Z(1)) @ RY(1.23, wires=[0]), probs(wires=[3])]

Contents

Using PennyLane

Release news

Development

API

Internals