# N-Toffoli on Cirq

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.

This 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]))

• Thank you. I am wondering though: how can this solution work when you have n-qubits and you cannot hardcode it like the example above? Commented Jun 26, 2019 at 19:04
• Use an unpacking asterisk, e.g. cnX = cirq.X.controlled_by(*qb[:-1]) Commented Jun 27, 2019 at 2:47
• The specific form in this answer is going to stop working in Cirq v0.6.0, due to some tricky issues around 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). Commented 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))