circuit_knitting.cutting.instructions.Move

class Move(label=None)[source]

Bases: Instruction

A two-qubit instruction representing a reset of the second qubit followed by a swap.

Circuit Symbol:

     ┌───────┐
q_0: ┤0      ├       q_0: ──────X─
     │  Move │   =              │
q_1: ┤1      ├       q_1: ─|0>──X─
     └───────┘

The desired effect of this instruction, typically, is to move the state of the first qubit to the second qubit. For this to work as expected, the second incoming qubit must share no entanglement with the remainder of the system. If this qubit is entangled, then performing the reset operation will in turn implement a quantum channel on the other qubit(s) with which it is entangled, resulting in the partial collapse of those qubits.

The simplest way to ensure that the second (i.e., destination) qubit shares no entanglement with the remainder of the system is to use a fresh qubit which has not been used since initialization.

Another valid way is to use, as a desination qubit, a qubit whose immediate prior use was as the source (i.e., first) qubit of a preceding Move operation.

The following circuit contains two Move operations, corresponding to each of the aforementioned cases:

import numpy as np
from qiskit import QuantumCircuit
from circuit_knitting.cutting.instructions import Move

qc = QuantumCircuit(4)
qc.ryy(np.pi / 4, 0, 1)
qc.rx(np.pi / 4, 3)
qc.append(Move(), [1, 2])
qc.rz(np.pi / 4, 0)
qc.ryy(np.pi / 4, 2, 3)
qc.append(Move(), [2, 1])
qc.ryy(np.pi / 4, 0, 1)
qc.rx(np.pi / 4, 3)
qc.draw("mpl")

(Source code)

../_images/circuit_knitting-cutting-instructions-Move-1.svg

A full demonstration of the Move instruction is available in the introductory tutorial on wire cutting.

Create a Move instruction.

Methods

__init__([label])

Create a Move instruction.

Attributes