@@ -308,6 +308,16 @@ macro qubitop2(name, kernel)
308
308
end
309
309
# x1 z1 x2 z2
310
310
@qubitop2 SWAP (x2 , z2 , x1 , z1 , false )
311
+
312
+ @qubitop2 SWAPCX (x2 , z2⊻ z1 , x2⊻ x1 , z1 , ~ iszero ((x1 & z1 & x2 & z2) | (~ x1 & z1 & x2 & ~ z2)))
313
+ @qubitop2 InvSWAPCX (x2⊻ x1 , z2 , x1 , z2⊻ z1 , ~ iszero ((x1 & z1 & x2 & z2) | ( x1 &~ z1 &~ x2 & z2)))
314
+
315
+ @qubitop2 ISWAP (x2 , x1⊻ z2⊻ x2 , x1 , x1⊻ x2⊻ z1 , ~ iszero ((x1 & z1 & ~ x2) | (~ x1 & x2 & z2)))
316
+ @qubitop2 InvISWAP (x2 , x1⊻ z2⊻ x2 , x1 , x1⊻ x2⊻ z1 , ~ iszero ((x1 &~ z1 & ~ x2) | (~ x1 & x2 &~ z2)))
317
+
318
+ @qubitop2 CZSWAP (x2 , z2⊻ x1 , x1 , x2⊻ z1 , ~ iszero ((x1 & ~ z1 & x2 & z2) | (x1 & z1 & x2 & ~ z2)))
319
+ @qubitop2 CXSWAP (x2⊻ x1 , z2 , x1 , z2⊻ z1 , ~ iszero ((x1 & ~ z1 &~ x2 & z2) | (x1 & z1 & x2 & z2)))
320
+
311
321
@qubitop2 CNOT (x1 , z1⊻ z2 , x2⊻ x1 , z2 , ~ iszero ( (x1 & z1 & x2 & z2) | (x1 & z2 &~ (z1| x2)) ))
312
322
@qubitop2 CPHASE (x1 , z1⊻ x2 , x2 , z2⊻ x1 , ~ iszero ( (x1 & z1 & x2 &~ z2) | (x1 &~ z1 & x2 & z2) ))
313
323
326
336
@qubitop2 ZCrY (x1, x1⊻ z1⊻ x2⊻ z2, x1⊻ x2, x1⊻ z2, ~ iszero ((x1 &~ z1 & x2) | (x1 & ~ z1 & ~ z2) | (x1 & x2 & ~ z2)))
327
337
@qubitop2 InvZCrY (x1, x1⊻ z1⊻ x2⊻ z2, x1⊻ x2, x1⊻ z2, ~ iszero ((x1 & z1 &~ x2) | (x1 & z1 & z2) | (x1 &~ x2 & z2)))
328
338
339
+ @qubitop2 SQRTZZ (x1 , x1⊻ x2⊻ z1 , x2 , x1⊻ z2⊻ x2 , ~ iszero ((x1 & z1 & ~ x2) | (~ x1 & x2 & z2)))
340
+ @qubitop2 InvSQRTZZ (x1 , x1⊻ x2⊻ z1 , x2 , x1⊻ z2⊻ x2 , ~ iszero ((x1 &~ z1 & ~ x2) | (~ x1 & x2 &~ z2)))
341
+
329
342
#=
330
343
To get the boolean formulas for the phase, it is easiest to first write down the truth table for the phase:
331
344
for i in 0:15
@@ -370,20 +383,28 @@ function Base.show(io::IO, op::AbstractTwoQubitOperator)
370
383
end
371
384
end
372
385
373
- LinearAlgebra. inv (op:: sSWAP ) = sSWAP (op. q1, op. q2)
374
- LinearAlgebra. inv (op:: sCNOT ) = sCNOT (op. q1, op. q2)
375
- LinearAlgebra. inv (op:: sCPHASE ) = sCPHASE (op. q1, op. q2)
376
- LinearAlgebra. inv (op:: sZCX ) = sZCX (op. q1, op. q2)
377
- LinearAlgebra. inv (op:: sZCY ) = sZCY (op. q1, op. q2)
378
- LinearAlgebra. inv (op:: sZCZ ) = sZCZ (op. q1, op. q2)
379
- LinearAlgebra. inv (op:: sXCX ) = sXCX (op. q1, op. q2)
380
- LinearAlgebra. inv (op:: sXCY ) = sXCY (op. q1, op. q2)
381
- LinearAlgebra. inv (op:: sXCZ ) = sXCZ (op. q1, op. q2)
382
- LinearAlgebra. inv (op:: sYCX ) = sYCX (op. q1, op. q2)
383
- LinearAlgebra. inv (op:: sYCY ) = sYCY (op. q1, op. q2)
384
- LinearAlgebra. inv (op:: sYCZ ) = sYCZ (op. q1, op. q2)
385
- LinearAlgebra. inv (op:: sZCrY ) = sInvZCrY (op. q1, op. q2)
386
- LinearAlgebra. inv (op:: sInvZCrY ) = sZCrY (op. q1, op. q2)
386
+ LinearAlgebra. inv (op:: sSWAP ) = sSWAP (op. q1, op. q2)
387
+ LinearAlgebra. inv (op:: sCNOT ) = sCNOT (op. q1, op. q2)
388
+ LinearAlgebra. inv (op:: sCPHASE ) = sCPHASE (op. q1, op. q2)
389
+ LinearAlgebra. inv (op:: sZCX ) = sZCX (op. q1, op. q2)
390
+ LinearAlgebra. inv (op:: sZCY ) = sZCY (op. q1, op. q2)
391
+ LinearAlgebra. inv (op:: sZCZ ) = sZCZ (op. q1, op. q2)
392
+ LinearAlgebra. inv (op:: sXCX ) = sXCX (op. q1, op. q2)
393
+ LinearAlgebra. inv (op:: sXCY ) = sXCY (op. q1, op. q2)
394
+ LinearAlgebra. inv (op:: sXCZ ) = sXCZ (op. q1, op. q2)
395
+ LinearAlgebra. inv (op:: sYCX ) = sYCX (op. q1, op. q2)
396
+ LinearAlgebra. inv (op:: sYCY ) = sYCY (op. q1, op. q2)
397
+ LinearAlgebra. inv (op:: sYCZ ) = sYCZ (op. q1, op. q2)
398
+ LinearAlgebra. inv (op:: sZCrY ) = sInvZCrY (op. q1, op. q2)
399
+ LinearAlgebra. inv (op:: sInvZCrY ) = sZCrY (op. q1, op. q2)
400
+ LinearAlgebra. inv (op:: sSWAPCX ) = sInvSWAPCX (op. q1, op. q2)
401
+ LinearAlgebra. inv (op:: sInvSWAPCX ) = sSWAPCX (op. q1, op. q2)
402
+ LinearAlgebra. inv (op:: sCZSWAP ) = sCZSWAP (op. q1, op. q2)
403
+ LinearAlgebra. inv (op:: sCXSWAP ) = sSWAPCX (op. q1, op. q2)
404
+ LinearAlgebra. inv (op:: sISWAP ) = sInvISWAP (op. q1, op. q2)
405
+ LinearAlgebra. inv (op:: sInvISWAP ) = sISWAP (op. q1, op. q2)
406
+ LinearAlgebra. inv (op:: sSQRTZZ ) = sInvSQRTZZ (op. q1, op. q2)
407
+ LinearAlgebra. inv (op:: sInvSQRTZZ ) = sSQRTZZ (op. q1, op. q2)
387
408
388
409
# #############################
389
410
# Functions that perform direct application of common operators without needing an operator instance
0 commit comments