File tree Expand file tree Collapse file tree 2 files changed +23
-8
lines changed
src/bloqade/pyqrack/squin Expand file tree Collapse file tree 2 files changed +23
-8
lines changed Original file line number Diff line number Diff line change @@ -71,15 +71,23 @@ def measure_and_reset(
7171 result = []
7272 for qbit in qubits :
7373 if qbit .is_active ():
74- result . append (qbit .sim_reg .m (qbit .addr ))
74+ qbit_result = bool (qbit .sim_reg .m (qbit .addr ))
7575 else :
76- result .append (None )
77- qbit .sim_reg .force_m (qbit .addr , 0 )
76+ qbit_result = None
77+
78+ if qbit_result :
79+ qbit .sim_reg .x (qbit .addr )
80+
81+ result .append (qbit_result )
7882
7983 return (ilist .IList (result ),)
8084
8185 @interp .impl (qubit .Reset )
8286 def reset (self , interp : PyQrackInterpreter , frame : interp .Frame , stmt : qubit .Reset ):
8387 qubits : ilist .IList [PyQrackQubit , Any ] = frame .get (stmt .qubits )
8488 for qbit in qubits :
85- qbit .sim_reg .force_m (qbit .addr , 0 )
89+ if not qbit .is_active ():
90+ continue
91+
92+ if bool (qbit .sim_reg .m (qbit .addr )):
93+ qbit .sim_reg .x (qbit .addr )
Original file line number Diff line number Diff line change @@ -43,7 +43,7 @@ def measure(
4343 ):
4444 w : PyQrackWire = frame .get (stmt .wire )
4545 qbit = w .qubit
46- res : int = qbit .sim_reg .m (qbit .addr )
46+ res : bool = bool ( qbit .sim_reg .m (qbit .addr ) )
4747 return (res ,)
4848
4949 @interp .impl (wire .MeasureAndReset )
@@ -55,15 +55,22 @@ def measure_and_reset(
5555 ):
5656 w : PyQrackWire = frame .get (stmt .wire )
5757 qbit = w .qubit
58- res : int = qbit .sim_reg .m (qbit .addr )
59- qbit .sim_reg .force_m (qbit .addr , False )
58+ res : bool = bool (qbit .sim_reg .m (qbit .addr ))
59+
60+ if res :
61+ qbit .sim_reg .x (qbit .addr )
62+
63+ # TODO: do we need to rewrap this here? The qbit changed in-place
6064 new_w = PyQrackWire (qbit )
6165 return (new_w , res )
6266
6367 @interp .impl (wire .Reset )
6468 def reset (self , interp : PyQrackInterpreter , frame : interp .Frame , stmt : wire .Reset ):
6569 w : PyQrackWire = frame .get (stmt .wire )
6670 qbit = w .qubit
67- qbit .sim_reg .force_m (qbit .addr , False )
71+
72+ if bool (qbit .sim_reg .m (qbit .addr )):
73+ qbit .sim_reg .x (qbit .addr )
74+
6875 new_w = PyQrackWire (qbit )
6976 return (new_w ,)
You can’t perform that action at this time.
0 commit comments