Skip to content

Commit a3ceafd

Browse files
committed
extend qasm3 dumper with annotations in measurements
1 parent 29d8bb0 commit a3ceafd

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

qiskit/qasm3/ast.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -388,11 +388,17 @@ class QuantumMeasurementAssignment(Statement):
388388
| indexIdentifier EQUALS quantumMeasurement # eg: bits = measure qubits;
389389
"""
390390

391-
__slots__ = ("identifier", "quantumMeasurement")
391+
__slots__ = ("identifier", "quantumMeasurement", "annotations")
392392

393-
def __init__(self, identifier: Identifier, quantumMeasurement: QuantumMeasurement):
393+
def __init__(
394+
self,
395+
identifier: Identifier,
396+
quantumMeasurement: QuantumMeasurement,
397+
annotations: Sequence[Annotation] = (),
398+
):
394399
self.identifier = identifier
395400
self.quantumMeasurement = quantumMeasurement
401+
self.annotations = tuple(annotations)
396402

397403

398404
class Designator(ASTNode):

qiskit/qasm3/exporter.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1003,7 +1003,22 @@ def build_current_scope(self) -> List[ast.Statement]:
10031003
[self._lookup_bit(operand) for operand in instruction.qubits]
10041004
)
10051005
clbit = self._lookup_bit(instruction.clbits[0])
1006-
nodes = [ast.QuantumMeasurementAssignment(clbit, measurement)]
1006+
nodes = [
1007+
ast.QuantumMeasurementAssignment(
1008+
clbit,
1009+
measurement,
1010+
)
1011+
]
1012+
if hasattr(instruction.operation, "annotations"):
1013+
annotations = [
1014+
self.build_annotation(annotation)
1015+
for annotation in instruction.operation.annotations
1016+
]
1017+
else:
1018+
annotations = []
1019+
nodes = [
1020+
ast.QuantumMeasurementAssignment(clbit, measurement, annotations=annotations)
1021+
]
10071022
elif isinstance(instruction.operation, Reset):
10081023
nodes = [
10091024
ast.QuantumReset(self._lookup_bit(operand)) for operand in instruction.qubits

qiskit/qasm3/printer.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,8 @@ def _visit_QuantumMeasurement(self, node: ast.QuantumMeasurement) -> None:
273273
self._visit_sequence(node.identifierList, separator=", ")
274274

275275
def _visit_QuantumMeasurementAssignment(self, node: ast.QuantumMeasurementAssignment) -> None:
276+
for annotation in reversed(node.annotations):
277+
self.visit(annotation)
276278
self._start_line()
277279
self.visit(node.identifier)
278280
self.stream.write(" = ")

0 commit comments

Comments
 (0)