@@ -86,6 +86,10 @@ def run_gate(
8686 elif "angle" in params and "angles" not in params :
8787 params ["angles" ] = (params ["angle" ],)
8888
89+ # Convert list to tuple if needed (for Rust bindings compatibility)
90+ if isinstance (location , list ):
91+ location = tuple (location )
92+
8993 if symbol in self .bindings :
9094 results = self .bindings [symbol ](self , location , ** params )
9195 else :
@@ -151,19 +155,45 @@ def run_circuit(
151155 "F4" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("F4" , q , params ),
152156 "F4dg" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("F4dg" , q , params ),
153157 "II" : lambda sim , qs , ** params : None ,
154- "CX" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("CX" , qs , params ),
155- "CNOT" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("CX" , qs , params ),
156- "CY" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("CY" , qs , params ),
157- "CZ" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("CZ" , qs , params ),
158- "SXX" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SXX" , qs , params ),
159- "SXXdg" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SXXdg" , qs , params ),
160- "SYY" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SYY" , qs , params ),
161- "SYYdg" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SYYdg" , qs , params ),
162- "SZZ" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SZZ" , qs , params ),
163- "SZZdg" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SZZdg" , qs , params ),
164- "SWAP" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SWAP" , qs , params ),
165- "G" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("G2" , qs , params ),
166- "G2" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("G2" , qs , params ),
158+ "CX" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
159+ "CX" , tuple (qs ) if isinstance (qs , list ) else qs , params
160+ ),
161+ "CNOT" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
162+ "CX" , tuple (qs ) if isinstance (qs , list ) else qs , params
163+ ),
164+ "CY" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
165+ "CY" , tuple (qs ) if isinstance (qs , list ) else qs , params
166+ ),
167+ "CZ" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
168+ "CZ" , tuple (qs ) if isinstance (qs , list ) else qs , params
169+ ),
170+ "SXX" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
171+ "SXX" , tuple (qs ) if isinstance (qs , list ) else qs , params
172+ ),
173+ "SXXdg" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
174+ "SXXdg" , tuple (qs ) if isinstance (qs , list ) else qs , params
175+ ),
176+ "SYY" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
177+ "SYY" , tuple (qs ) if isinstance (qs , list ) else qs , params
178+ ),
179+ "SYYdg" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
180+ "SYYdg" , tuple (qs ) if isinstance (qs , list ) else qs , params
181+ ),
182+ "SZZ" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
183+ "SZZ" , tuple (qs ) if isinstance (qs , list ) else qs , params
184+ ),
185+ "SZZdg" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
186+ "SZZdg" , tuple (qs ) if isinstance (qs , list ) else qs , params
187+ ),
188+ "SWAP" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
189+ "SWAP" , tuple (qs ) if isinstance (qs , list ) else qs , params
190+ ),
191+ "G" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
192+ "G2" , tuple (qs ) if isinstance (qs , list ) else qs , params
193+ ),
194+ "G2" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
195+ "G2" , tuple (qs ) if isinstance (qs , list ) else qs , params
196+ ),
167197 "MZ" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("MZ" , q , params ),
168198 "MX" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("MX" , q , params ),
169199 "MY" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("MY" , q , params ),
@@ -203,16 +233,28 @@ def run_circuit(
203233 "F2d" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("F2dg" , q , params ),
204234 "F3d" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("F3dg" , q , params ),
205235 "F4d" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("F4dg" , q , params ),
206- "SqrtXX" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SXX" , qs , params ),
207- "SqrtYY" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SYY" , qs , params ),
208- "SqrtZZ" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SZZ" , qs , params ),
236+ "SqrtXX" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
237+ "SXX" , tuple (qs ) if isinstance (qs , list ) else qs , params
238+ ),
239+ "SqrtYY" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
240+ "SYY" , tuple (qs ) if isinstance (qs , list ) else qs , params
241+ ),
242+ "SqrtZZ" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
243+ "SZZ" , tuple (qs ) if isinstance (qs , list ) else qs , params
244+ ),
209245 "Measure" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("MZ" , q , params ),
210246 "measure Z" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("MZ" , q , params ),
211247 # "MZForced": lambda sim, q, **params: sim._sim.run_1q_gate("MZForced", q, params),
212248 # "PZForced": lambda sim, q, **params: sim._sim.run_1q_gate("PZForced", q, params),
213- "SqrtXXd" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SXXdg" , qs , params ),
214- "SqrtYYd" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SYYdg" , qs , params ),
215- "SqrtZZd" : lambda sim , qs , ** params : sim ._sim .run_2q_gate ("SZZdg" , qs , params ),
249+ "SqrtXXd" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
250+ "SXXdg" , tuple (qs ) if isinstance (qs , list ) else qs , params
251+ ),
252+ "SqrtYYd" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
253+ "SYYdg" , tuple (qs ) if isinstance (qs , list ) else qs , params
254+ ),
255+ "SqrtZZd" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
256+ "SZZdg" , tuple (qs ) if isinstance (qs , list ) else qs , params
257+ ),
216258 "SqrtX" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("SX" , q , params ),
217259 "SqrtXd" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("SXdg" , q , params ),
218260 "SqrtY" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("SY" , q , params ),
@@ -243,27 +285,27 @@ def run_circuit(
243285 "Tdg" : lambda sim , q , ** params : sim ._sim .run_1q_gate ("Tdg" , q , params ),
244286 "RXX" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
245287 "RXX" ,
246- qs ,
288+ tuple ( qs ) if isinstance ( qs , list ) else qs ,
247289 {"angle" : params ["angles" ][0 ]} if "angles" in params else {"angle" : 0 },
248290 ),
249291 "RYY" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
250292 "RYY" ,
251- qs ,
293+ tuple ( qs ) if isinstance ( qs , list ) else qs ,
252294 {"angle" : params ["angles" ][0 ]} if "angles" in params else {"angle" : 0 },
253295 ),
254296 "RZZ" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
255297 "RZZ" ,
256- qs ,
298+ tuple ( qs ) if isinstance ( qs , list ) else qs ,
257299 {"angle" : params ["angles" ][0 ]} if "angles" in params else {"angle" : 0 },
258300 ),
259301 "RZZRYYRXX" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
260302 "RZZRYYRXX" ,
261- qs ,
303+ tuple ( qs ) if isinstance ( qs , list ) else qs ,
262304 {"angles" : params ["angles" ]} if "angles" in params else {"angles" : [0 , 0 , 0 ]},
263305 ),
264306 "R2XXYYZZ" : lambda sim , qs , ** params : sim ._sim .run_2q_gate (
265307 "RZZRYYRXX" ,
266- qs ,
308+ tuple ( qs ) if isinstance ( qs , list ) else qs ,
267309 {"angles" : params ["angles" ]} if "angles" in params else {"angles" : [0 , 0 , 0 ]},
268310 ),
269311}
0 commit comments