I am looking for guidance in more generally how to developed n-bit gates in Cirq.
I am working on a QNN paper and I need to develop a n-controlled gate to be able to measure the cost function of the circuit.
Quantum Computing Stack Exchange is a question and answer site for engineers, scientists, programmers, and computing professionals interested in quantum computing. It only takes a minute to sign up.
Sign up to join this communityThis is actually very easy in Cirq. The controlled_by
method can be used to automatically make any given gate controlled by an arbitrary number of control qubits. Here is a simple example for creating an X gate with 5 controls:
import cirq
qb = [cirq.LineQubit(i) for i in range(6)]
cnX = cirq.X.controlled_by(qb[0], qb[1], qb[2], qb[3], qb[4])
circuit = cirq.Circuit()
circuit.append(cnX(qb[5]))
cnX = cirq.X.controlled_by(*qb[:-1])
$\endgroup$
Jun 27, 2019 at 2:47
cnX
knowing some of its qubits but not all. (The meaning of num_qubits
became ambiguous in ways that led to bugs. E.g. is it the total qubit count or the unspecified qubit count?) But the form cirq.X(target).controlled_by(*controls)
will still work, and we added cirq.X.controlled(control_count)
.
$\endgroup$
Oct 26, 2019 at 8:41
For doing CnX (N-CNOT or N-Tofolli) gate,
The following is the correct way to do using cirq
.
from cirq import X, Circuit
NUM_QBITS = 3
qbits = cirq.LineQubit.range(NUM_QBITS)
qa = cirq.NamedQubit("ansilla")
cnX = X.controlled(NUM_QBITS).on(*qbits[:NUM_QBITS], qa)
print(Circuit(cnX))