Skip to content

Commit

Permalink
Move code for qasm for Instruction to QuantumCircuit
Browse files Browse the repository at this point in the history
  • Loading branch information
jlapeyre committed Jul 6, 2023
1 parent bd77bb8 commit 413d22e
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 29 deletions.
23 changes: 0 additions & 23 deletions qiskit/circuit/instruction.py
Original file line number Diff line number Diff line change
Expand Up @@ -584,26 +584,3 @@ def num_clbits(self):
def num_clbits(self, num_clbits):
"""Set num_clbits."""
self._num_clbits = num_clbits


def _qasm(operation):
"""Return a default OpenQASM string for the instruction.
Derived instructions may override this to print in a
different format (e.g. measure q[0] -> c[0];).
"""
name_param = operation.name
if operation.params:
name_param = "{}({})".format(
name_param,
",".join([pi_check(i, output="qasm", eps=1e-12) for i in operation.params]),
)
if operation.condition is not None:
if not isinstance(operation.condition[0], ClassicalRegister):
raise QasmError(
"OpenQASM 2 can only condition on registers, but got '{operation.condition[0]}'"
)
name_param = (
"if(%s==%d) " % (operation.condition[0].name, operation.condition[1]) + name_param
)
return name_param
3 changes: 1 addition & 2 deletions qiskit/circuit/library/standard_gates/x.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
from qiskit.utils.deprecation import deprecate_func
from qiskit.circuit.controlledgate import ControlledGate
from qiskit.circuit.gate import Gate
import qiskit.circuit.instruction
from qiskit.circuit.quantumregister import QuantumRegister
from qiskit.circuit._utils import _compute_control_matrix, _ctrl_state_to_int
from .h import HGate
Expand Down Expand Up @@ -588,7 +587,7 @@ def qasm(self):
old_name = self.name
self.name = "c3sqrtx"
try:
return qiskit.circuit.instruction._qasm(self)
return qiskit.circuit._instruction_qasm(self)
finally:
self.name = old_name

Expand Down
25 changes: 21 additions & 4 deletions qiskit/circuit/quantumcircuit.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
from .delay import Delay
from .measure import Measure
from .reset import Reset
from .tools import pi_check

try:
import pygments
Expand Down Expand Up @@ -1746,12 +1747,10 @@ def qasm(
operation = _qasm2_define_custom_operation(
operation, existing_gate_names, gates_to_define
)
if not isinstance(operation, Instruction):
raise Exception(f"expecting Instruction got {type(operation)}")
# Insert qasm representation of the original instruction
if operation.name == "c3sx":
operation.name = "c3sqrtx"
name_param = qiskit.circuit.instruction._qasm(operation)
name_param = _instruction_qasm2(operation)
if operation.name == "c3sqrtx":
operation.name = "c3sx"
bits_qasm = ",".join(
Expand Down Expand Up @@ -5096,7 +5095,7 @@ def _qasm2_define_custom_operation(operation, existing_gate_names, gates_to_defi
instruction.operation, existing_gate_names, gates_to_define
)
bits_qasm = ",".join(qubit_labels[q] for q in instruction.qubits)
name_param = qiskit.circuit.instruction._qasm(new_operation)
name_param = _instruction_qasm2(new_operation)
statements.append(f"{name_param} {bits_qasm};")
body_qasm = " ".join(statements)

Expand Down Expand Up @@ -5211,3 +5210,21 @@ def _bit_argument_conversion_scalar(specifier, bit_sequence, bit_set, type_):
else f"Invalid bit index: '{specifier}' of type '{type(specifier)}'"
)
raise CircuitError(message)

def _instruction_qasm2(operation):
"""Return an OpenQASM 2 string for the instruction."""
name_param = operation.name
if operation.params:
name_param = "{}({})".format(
name_param,
",".join([pi_check(i, output="qasm", eps=1e-12) for i in operation.params]),
)
if operation.condition is not None:
if not isinstance(operation.condition[0], ClassicalRegister):
raise QasmError(
"OpenQASM 2 can only condition on registers, but got '{operation.condition[0]}'"
)
name_param = (
"if(%s==%d) " % (operation.condition[0].name, operation.condition[1]) + name_param
)
return name_param

0 comments on commit 413d22e

Please sign in to comment.