@@ -359,34 +359,42 @@ def XYXClifford(qubit, cliff_num):
359
359
360
360
clifford_map = {}
361
361
clifford_map ['STD' ] = StdClifford
362
- clifford_map ['DIAC' ] = DiAC
362
+ clifford_map ['DIAC' ] = DiAC
363
363
clifford_map ['ZXZXZ' ] = lambda q ,c : DiAC (q ,c ,compiled = False )
364
- clifford_map ['AC' ] = AC
364
+ clifford_map ['AC' ] = AC
365
365
clifford_map ['XYX' ] = XYXClifford
366
366
367
367
def Cx2 (c1 , c2 , q1 , q2 , kind = 'std' ):
368
368
"""
369
369
Helper function to create pulse block for a pair of single-qubit Cliffords
370
370
"""
371
-
371
+
372
372
clifford_fun = clifford_map [kind .upper ()]
373
373
seq1 = clifford_fun (q1 , c1 )
374
374
seq2 = clifford_fun (q2 , c2 )
375
375
376
376
#Create the pulse block
377
377
return seq1 * seq2
378
378
379
- def entangling_seq (gate , q1 , q2 ):
379
+ def entangling_seq (gate , q1 , q2 , swap = False ):
380
380
"""
381
381
Helper function to create the entangling gate sequence
382
382
"""
383
- if gate == "CNOT" :
384
- return ZX90_CR (q2 , q1 )
385
- elif gate == "iSWAP" :
386
- return [ZX90_CR (q2 , q1 ) , Y90m (q1 ) * Y90m (q2 ), ZX90_CR (q2 , q1 )]
387
- elif gate == "SWAP" :
388
- return [ZX90_CR (q2 , q1 ), Y90m (q1 ) * Y90m (q2 ), ZX90_CR (
389
- q2 , q1 ), (X90 (q1 ) + Y90m (q1 )) * X90 (q2 ), ZX90_CR (q2 , q1 )]
383
+ if swap == False :
384
+ if gate == "CNOT" :
385
+ return ZX90_CR (q2 , q1 )
386
+ elif gate == "iSWAP" :
387
+ return [ZX90_CR (q2 , q1 ) , Y90m (q1 ) * Y90m (q2 ), ZX90_CR (q2 , q1 )]
388
+ elif gate == "SWAP" :
389
+ return [ZX90_CR (q2 , q1 ), Y90m (q1 ) * Y90m (q2 ), ZX90_CR (
390
+ q2 , q1 ), (X90 (q1 ) + Y90m (q1 )) * X90 (q2 ), ZX90_CR (q2 , q1 )]
391
+ else :
392
+ if gate == "CNOT" :
393
+ return ZX90_CR (q2 , q1 )
394
+ elif gate == "iSWAP" :
395
+ return [ZX90_CR (q2 , q1 ) , Y90m (q1 ) * Y90m (q2 ), ZX90_CR (q2 , q1 )]
396
+ elif gate == "SWAP" :
397
+ return [SWAP (q2 ,q1 )]
390
398
391
399
def TwoQubitClifford (q1 , q2 , cliffNum , kind = 'std' ):
392
400
@@ -399,4 +407,4 @@ def TwoQubitClifford(q1, q2, cliffNum, kind='std'):
399
407
seq += entangling_seq (c [1 ], q1 , q2 )
400
408
if c [2 ]:
401
409
seq += [Cx2 (c [2 ][0 ], c [2 ][1 ], q1 , q2 , kind = kind )]
402
- return seq
410
+ return seq
0 commit comments