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=Truethe 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_wirescan be used as a decorator with the help of thefunctoolsmodule:dev = qml.device("default.qubit") wire_map = {0: 10} import functools @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_wiresreturns 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_wirescan 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() array([0.92885434, 0.07114566]) >>> 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])]