Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions qiskit/circuit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@
from .controlledgate import ControlledGate
from .instruction import Instruction
from .instructionset import InstructionSet
from .circuit_element import CircuitElement
from .barrier import Barrier
from .delay import Delay
from .measure import Measure
Expand Down
3 changes: 2 additions & 1 deletion qiskit/circuit/instructionset.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from qiskit.circuit.exceptions import CircuitError
from .instruction import Instruction
from .classicalregister import Clbit
from .circuit_element import CircuitElement


class InstructionSet:
Expand Down Expand Up @@ -46,7 +47,7 @@ def __getitem__(self, i):

def add(self, gate, qargs, cargs):
"""Add an instruction and its context (where it is attached)."""
if not isinstance(gate, Instruction):
if not isinstance(gate, CircuitElement):
raise CircuitError("attempt to add non-Instruction" + " to InstructionSet")
self.instructions.append(gate)
self.qargs.append(qargs)
Expand Down
13 changes: 7 additions & 6 deletions qiskit/circuit/quantumcircuit.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
from .delay import Delay
from .measure import Measure
from .reset import Reset
from .circuit_element import CircuitElement

try:
import pygments
Expand Down Expand Up @@ -1124,7 +1125,7 @@ def cbit_argument_conversion(self, clbit_representation: ClbitSpecifier) -> List

def append(
self,
instruction: Instruction,
instruction: CircuitElement,
qargs: Optional[Sequence[QubitSpecifier]] = None,
cargs: Optional[Sequence[ClbitSpecifier]] = None,
) -> InstructionSet:
Expand All @@ -1144,7 +1145,7 @@ def append(
CircuitError: if object passed is neither subclass nor an instance of Instruction
"""
# Convert input to instruction
if not isinstance(instruction, Instruction) and not hasattr(instruction, "to_instruction"):
if not isinstance(instruction, CircuitElement) and not hasattr(instruction, "to_instruction"):
if issubclass(instruction, Instruction):
raise CircuitError(
"Object is a subclass of Instruction, please add () to "
Expand All @@ -1154,7 +1155,7 @@ def append(
raise CircuitError(
"Object to append must be an Instruction or have a to_instruction() method."
)
if not isinstance(instruction, Instruction) and hasattr(instruction, "to_instruction"):
if not isinstance(instruction, CircuitElement) and hasattr(instruction, "to_instruction"):
instruction = instruction.to_instruction()

# Make copy of parameterized gate instances
Expand All @@ -1172,7 +1173,7 @@ def append(
return instructions

def _append(
self, instruction: Instruction, qargs: Sequence[Qubit], cargs: Sequence[Clbit]
self, instruction: CircuitElement, qargs: Sequence[Qubit], cargs: Sequence[Clbit]
) -> Instruction:
"""Append an instruction to the end of the circuit, modifying
the circuit in place.
Expand All @@ -1189,8 +1190,8 @@ def _append(
CircuitError: if the gate is of a different shape than the wires
it is being attached to.
"""
if not isinstance(instruction, Instruction):
raise CircuitError("object is not an Instruction.")
if not isinstance(instruction, CircuitElement):
raise CircuitError("object is not a CircuitElement.")

# do some compatibility checks
self._check_dups(qargs)
Expand Down
22 changes: 20 additions & 2 deletions qiskit/quantum_info/operators/symplectic/clifford.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import numpy as np

from qiskit.exceptions import QiskitError
from qiskit.circuit import QuantumCircuit, Instruction
from qiskit.circuit import QuantumCircuit, Instruction, CircuitElement
from qiskit.circuit.library.standard_gates import IGate, XGate, YGate, ZGate, HGate, SGate
from qiskit.quantum_info.operators.base_operator import BaseOperator
from qiskit.quantum_info.operators.operator import Operator
Expand All @@ -27,7 +27,7 @@
from .clifford_circuits import _append_circuit


class Clifford(BaseOperator, AdjointMixin):
class Clifford(BaseOperator, AdjointMixin, CircuitElement):
"""An N-qubit unitary operator from the Clifford group.

**Representation**
Expand Down Expand Up @@ -525,6 +525,24 @@ def _pad_with_identity(self, clifford, qargs):

return padded

# These implement the required methods of the CircuitElement mixin

@property
def name(self):
return 'clifford'

@property
def num_params(self):
return 1

@property
def num_clbits(self):
return 0

@property
def params(self):
return (self._table,)


# Update docstrings for API docs
generate_apidocs(Clifford)