@@ -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