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
, ifreplace=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 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.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) >>> list(mapped_circuit.tape) [((RX(0.54, wires=[3]) @ X(2)) @ Z(1)) @ RY(1.23, wires=[0]), probs(wires=[3])]