ControlledGate

class ControlledGate(name, num_qubits, params, label=None, num_ctrl_qubits=1, definition=None, ctrl_state=None)[source]

Controlled unitary gate.

Create a new ControlledGate. In the new gate the first num_ctrl_qubits of the gate are the controls.

Parameters
  • name (str) – The name of the gate.

  • num_qubits (int) – The number of qubits the gate acts on.

  • params (List) – A list of parameters for the gate.

  • label (Optional[str]) – An optional label for the gate.

  • num_ctrl_qubits (Optional[int]) – Number of control qubits.

  • definition (Optional[QuantumCircuit]) – A list of gate rules for implementing this gate. The elements of the list are tuples of (Gate(), [qubit_list], [clbit_list]).

  • ctrl_state (Union[int, str, None]) – The control state in decimal or as a bitstring (e.g. ‘111’). If specified as a bitstring the length must equal num_ctrl_qubits, MSB on left. If None, use 2**num_ctrl_qubits-1.

Raises
  • CircuitError – If num_ctrl_qubits >= num_qubits.

  • CircuitError – ctrl_state < 0 or ctrl_state > 2**num_ctrl_qubits.

Examples:

Create a controlled standard gate and apply it to a circuit.

from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library.standard_gates import HGate

qr = QuantumRegister(3)
qc = QuantumCircuit(qr)
c3h_gate = HGate().control(2)
qc.append(c3h_gate, qr)
qc.draw()
           
q0_0: ──■──
        │  
q0_1: ──■──
      ┌─┴─┐
q0_2: ┤ H ├
      └───┘

Create a controlled custom gate and apply it to a circuit.

from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library.standard_gates import HGate

qc1 = QuantumCircuit(2)
qc1.x(0)
qc1.h(1)
custom = qc1.to_gate().control(2)

qc2 = QuantumCircuit(4)
qc2.append(custom, [0, 3, 1, 2])
qc2.draw()
                   
q_0: ──────■───────
     ┌─────┴──────┐
q_1: ┤0           ├
     │  circuit13 │
q_2: ┤1           ├
     └─────┬──────┘
q_3: ──────■───────
                   

Attributes

ControlledGate.ctrl_state

Return the control state of the gate as a decimal integer.

ControlledGate.decompositions

Get the decompositions of the instruction from the SessionEquivalenceLibrary.

ControlledGate.definition

Return definition in terms of other basic gates.

ControlledGate.label

Return gate label

ControlledGate.num_ctrl_qubits

Get number of control qubits.

ControlledGate.params

return instruction params.

Methods

ControlledGate.add_decomposition(decomposition)

Add a decomposition of the instruction to the SessionEquivalenceLibrary.

ControlledGate.assemble()

Assemble a QasmQobjInstruction

ControlledGate.broadcast_arguments(qargs, cargs)

Validation and handling of the arguments and its relationship.

ControlledGate.c_if(classical, val)

Add classical condition on register classical and value val.

ControlledGate.control([num_ctrl_qubits, …])

Return controlled version of gate.

ControlledGate.copy([name])

Copy of the instruction.

ControlledGate.inverse()

Invert this gate by calling inverse on the base gate.

ControlledGate.is_parameterized()

Return True .IFF.

ControlledGate.mirror()

DEPRECATED: use instruction.reverse_ops().

ControlledGate.power(exponent)

Creates a unitary gate as gate^exponent.

ControlledGate.qasm()

Return a default OpenQASM string for the instruction.

ControlledGate.repeat(n)

Creates an instruction with gate repeated n amount of times.

ControlledGate.reverse_ops()

For a composite instruction, reverse the order of sub-instructions.

ControlledGate.to_matrix()

Return a Numpy.array for the gate unitary matrix.