@@ -67,6 +67,7 @@ def __init__(
6767 self .calibrations = []
6868 self .calibration_invokes = []
6969 self .measz_invokes = []
70+ self ._event_seq = 0
7071
7172 self .inputs = inputs
7273 self .mps_inputs = mps_inputs
@@ -136,18 +137,24 @@ def add_calibration(
136137 self .calibration_invokes .append ({
137138 "name" : builder .name ,
138139 "parameters" : parameters ,
139- "pos" : len (self ._qir )
140+ "pos" : len (self ._qir ),
141+ "seq" : self ._record_event ()
140142 })
141143
142144 def measz (self , * index : int ) -> None :
143145 self .disable_openqasm ()
144146 self .measz_invokes .append ({
145147 "name" : "measz" ,
146148 "index" : index ,
147- "pos" : len (self ._qir )
149+ "pos" : len (self ._qir ),
150+ "seq" : self ._record_event ()
148151 })
149152 return
150153
154+ def _record_event (self ):
155+ seq = self ._event_seq
156+ self ._event_seq += 1
157+ return seq
151158
152159 def to_tqasm (self , pragma : Optional [str ]= None ) -> str :
153160 qasm_lines = []
@@ -186,17 +193,27 @@ def to_tqasm(self, pragma: Optional[str]= None) -> str:
186193 pos = m .get ("pos" , len (self ._qir ))
187194 measz_by_pos [pos ].append (m )
188195
189- # 交错输出:在第 i 个门之前输出所有 pos == i 的校准
190- for i , gate in enumerate (self ._qir ):
191- for m in measz_by_pos .get (i , []):
192- targets = ", " .join (f"q[{ idx } ]" for idx in m ["index" ])
193- qasm_lines .append (f"MEASZ { targets } ;" )
196+ events_by_pos = defaultdict (list )
194197
195- for cal in cals_by_pos .get (i , []):
196- # print(cal)
197- pname = ", " .join (f"q[{ x } ]" for x in cal .get ("parameters" , []))
198- qasm_lines .append (f"{ cal ['name' ]} { pname } ;" )
198+ for pos , items in cals_by_pos .items ():
199+ for cal in items :
200+ events_by_pos [pos ].append (("cal" , cal ))
199201
202+ for pos , items in measz_by_pos .items ():
203+ for m in items :
204+ events_by_pos [pos ].append (("measz" , m ))
205+
206+ # 交错输出:在第 i 个门之前输出所有 pos == i 的校准
207+ for i , gate in enumerate (self ._qir ):
208+ events = sorted (events_by_pos .get (i , []), key = lambda item : item [1 ]["seq" ])
209+ for event_type , event in events :
210+ if event_type == "measz" :
211+ targets = ", " .join (f"q[{ idx } ]" for idx in event ["index" ])
212+ qasm_lines .append (f"MEASZ { targets } ;" )
213+ elif event_type == "cal" :
214+ pname = ", " .join (f"q[{ x } ]" for x in event .get ("parameters" , []))
215+ qasm_lines .append (f"{ event ['name' ]} { pname } ;" )
216+
200217 # print(gate)
201218 gname = gate ["name" ]
202219 gname = gname .upper ()
0 commit comments