Skip to content

Commit 6aed711

Browse files
committed
use a boolean instead of counting, also have nicer implementation for address analysis handling
1 parent fa61fb4 commit 6aed711

File tree

2 files changed

+15
-19
lines changed

2 files changed

+15
-19
lines changed

src/bloqade/gemini/analysis/measurement_validation/analysis.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class _GeminiTerminalMeasurementValidationAnalysis(Forward[EmptyLattice]):
1515

1616
address_analysis_results: ForwardFrame
1717
measurement_analysis_results: ForwardFrame
18-
num_terminal_measurements: int = 0
18+
terminal_measurement_encountered: bool = False
1919
lattice = EmptyLattice
2020

2121
# boilerplate, not really worried about these right now

src/bloqade/gemini/analysis/measurement_validation/impls.py

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ def terminal_measure(
4646
stmt: gemini.logical.stmts.TerminalLogicalMeasurement,
4747
):
4848

49-
# should only be one MeasureIDTuple
50-
interp.num_terminal_measurements += 1
51-
52-
if interp.num_terminal_measurements > 1:
49+
# should only be one terminal measurement EVER
50+
if not interp.terminal_measurement_encountered:
51+
interp.terminal_measurement_encountered = True
52+
else:
5353
interp.add_validation_error(
5454
stmt,
5555
ir.ValidationError(
@@ -77,21 +77,17 @@ def terminal_measure(
7777
witnessed_qubits = set()
7878
total_qubits_allocated = 0
7979
for address_lattice_elem in address_analysis_results.entries.values():
80-
if isinstance(address_lattice_elem, AddressReg):
81-
for member in address_lattice_elem.data:
82-
if (
83-
isinstance(member, AddressQubit)
84-
and member.data not in witnessed_qubits
85-
):
86-
witnessed_qubits.add(member.data)
87-
total_qubits_allocated += 1
8880

89-
if (
90-
isinstance(address_lattice_elem, AddressQubit)
91-
and address_lattice_elem.data not in witnessed_qubits
92-
):
93-
witnessed_qubits.add(address_lattice_elem.data)
94-
total_qubits_allocated += 1
81+
match address_lattice_elem:
82+
case AddressReg(data=data):
83+
for data_elem in data:
84+
if data_elem not in witnessed_qubits:
85+
witnessed_qubits.add(data_elem)
86+
total_qubits_allocated += 1
87+
case AddressQubit(data=data):
88+
if data not in witnessed_qubits:
89+
witnessed_qubits.add(data)
90+
total_qubits_allocated += 1
9591

9692
# could make these proper exceptions but would be tricky to communicate to user
9793
# without revealing under-the-hood details

0 commit comments

Comments
 (0)