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.PauliZ(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.PauliX(1) + (qml.PauliZ(2) @ qml.RY(1.23, wires=3))
>>> op
(RX(0.54, wires=[0]) + PauliX(wires=[1])) + (PauliZ(wires=[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]) + PauliX(wires=[2])) + (PauliZ(wires=[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.PauliX(1) @ qml.PauliZ(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)
>>> list(mapped_circuit.tape)
[((RX(0.54, wires=[3]) @ PauliX(wires=[2])) @ PauliZ(wires=[1])) @ RY(1.23, wires=[0]), probs(wires=[3])]

Contents

Using PennyLane

Development

API

Internals