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, pennylane.QNode, QuantumTape, or Callable) – an operator, quantum node, quantum tape, or function that applies quantum operations
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
, ifreplace=True
the input operators will be replaced by its mapped version. Defaults to False.
- Returns
input with changed wires
- Return type
(Operator, pennylane.QNode, QuantumTape, or Callable)
Note
qml.map_wires
can be used as a decorator with the help of thefunctools
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])]