From 7444d8a57bad71da19c3bfaff2fabe19707697cf Mon Sep 17 00:00:00 2001 From: Alvan Caleb Arulandu Date: Wed, 8 Jan 2025 17:14:00 -0800 Subject: [PATCH] classical decl w measurement --- src/pyqasm/visitor.py | 5 +++++ tests/qasm3/test_measurement.py | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/pyqasm/visitor.py b/src/pyqasm/visitor.py index 7267c77..ec02cd8 100644 --- a/src/pyqasm/visitor.py +++ b/src/pyqasm/visitor.py @@ -1139,6 +1139,11 @@ def _visit_classical_declaration( init_value = self._evaluate_array_initialization( statement.init_expression, final_dimensions, base_type ) + elif isinstance(statement.init_expression, qasm3_ast.QuantumMeasurement): + measurement, statement.init_expression = statement.init_expression, None + return self._visit_classical_declaration(statement) + self._visit_measurement( + qasm3_ast.QuantumMeasurementStatement(measurement, statement.identifier) + ) # type: ignore else: init_value, stmts = Qasm3ExprEvaluator.evaluate_expression( statement.init_expression diff --git a/tests/qasm3/test_measurement.py b/tests/qasm3/test_measurement.py index 2872d5a..7209982 100644 --- a/tests/qasm3/test_measurement.py +++ b/tests/qasm3/test_measurement.py @@ -128,6 +128,31 @@ def test_remove_measurement(): check_unrolled_qasm(dumps(module), expected_qasm) +def test_init_measure(): + qasm3_string = """ + OPENQASM 3.0; + qubit a; + qubit[2] b; + bit c = measure a; + bit[2] d = measure b; + """ + + expected_qasm = """ + OPENQASM 3.0; + qubit[1] a; + qubit[2] b; + bit[1] c; + c[0] = measure a[0]; + bit[2] d; + d[0] = measure b[0]; + d[1] = measure b[1]; + """ + + module = loads(qasm3_string) + module.unroll() + check_unrolled_qasm(dumps(module), expected_qasm) + + def test_incorrect_measure(): def run_test(qasm3_code, error_message): with pytest.raises(ValidationError, match=error_message):