Source code for qiskit.circuit.operation

# This code is part of Qiskit.
# (C) Copyright IBM 2017.
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""Quantum Operation Mixin."""

from abc import ABC, abstractmethod

[docs]class Operation(ABC): """Quantum Operation Interface Class. For objects that can be added to a :class:`~qiskit.circuit.QuantumCircuit`. These objects include :class:`~qiskit.circuit.Gate`, :class:`~qiskit.circuit.Reset`, :class:`~qiskit.circuit.Barrier`, :class:`~qiskit.circuit.Measure`, and operators such as :class:`~qiskit.quantum_info.Clifford`. The main purpose is to add an :class:`~qiskit.circuit.Operation` to a :class:`~qiskit.circuit.QuantumCircuit` without synthesizing it before the transpilation. Example: Add a Clifford and a Toffoli gate to a QuantumCircuit. .. plot:: :include-source: from qiskit import QuantumCircuit from qiskit.quantum_info import Clifford, random_clifford qc = QuantumCircuit(3) cliff = random_clifford(2) qc.append(cliff, [0, 1]) qc.ccx(0, 1, 2) qc.draw('mpl') """ __slots__ = () @property @abstractmethod def name(self): """Unique string identifier for operation type.""" raise NotImplementedError @property @abstractmethod def num_qubits(self): """Number of qubits.""" raise NotImplementedError @property @abstractmethod def num_clbits(self): """Number of classical bits.""" raise NotImplementedError