43
43
single_gate_list = [
44
44
{"qiskit" : qiskit_gate .HGate , "tq" : tq .h , "name" : "Hadamard" },
45
45
{"qiskit" : qiskit_gate .XGate , "tq" : tq .x , "name" : "x" },
46
- # {"qiskit": qiskit_gate.YGate, "tq": tq.y, "name": "y"},
46
+ {"qiskit" : qiskit_gate .YGate , "tq" : tq .y , "name" : "y" },
47
47
{"qiskit" : qiskit_gate .ZGate , "tq" : tq .z , "name" : "z" },
48
- {"qiskit" : qiskit_gate .SGate , "tq" : tq .S , "name" : "S" },
49
- {"qiskit" : qiskit_gate .TGate , "tq" : tq .T , "name" : "T" },
50
- # {"qiskit": qiskit_gate.SXGate, "tq": tq.SX, "name": "SX"},
51
- {"qiskit" : qiskit_gate .SdgGate , "tq" : tq .SDG , "name" : "SDG" },
52
- {"qiskit" : qiskit_gate .TdgGate , "tq" : tq .TDG , "name" : "TDG" }
48
+ {"qiskit" : qiskit_gate .SGate , "tq" : tq .s , "name" : "S" },
49
+ {"qiskit" : qiskit_gate .TGate , "tq" : tq .t , "name" : "T" },
50
+ {"qiskit" : qiskit_gate .SdgGate , "tq" : tq .sdg , "name" : "SDG" },
51
+ {"qiskit" : qiskit_gate .TdgGate , "tq" : tq .tdg , "name" : "TDG" }
53
52
]
54
53
55
54
single_param_gate_list = [
56
55
57
56
]
58
57
59
58
two_qubit_gate_list = [
60
- {"qiskit" : qiskit_gate .CXGate , "tq" : tq .CNOT , "name" : "CNOT" },
61
- {"qiskit" : qiskit_gate .CYGate , "tq" : tq .CY , "name" : "CY" },
62
- {"qiskit" : qiskit_gate .CZGate , "tq" : tq .CZ , "name" : "CZ" },
63
- {"qiskit" : qiskit_gate .SwapGate , "tq" : tq .SWAP , "name" : "SWAP" }
59
+ {"qiskit" : qiskit_gate .CXGate , "tq" : tq .cnot , "name" : "CNOT" },
60
+ {"qiskit" : qiskit_gate .CXGate , "tq" : tq .cx , "name" : "CY" },
61
+ {"qiskit" : qiskit_gate .CYGate , "tq" : tq .cy , "name" : "CY" },
62
+ {"qiskit" : qiskit_gate .CZGate , "tq" : tq .cz , "name" : "CZ" },
63
+ {"qiskit" : qiskit_gate .CSGate , "tq" : tq .cs , "name" : "CS" },
64
+ {"qiskit" : qiskit_gate .SwapGate , "tq" : tq .swap , "name" : "SWAP" },
65
+ {"qiskit" : qiskit_gate .iSwapGate , "tq" : tq .iswap , "name" : "iSWAP" }
64
66
]
65
67
66
68
two_qubit_param_gate_list = [
67
69
68
70
]
69
71
70
72
three_qubit_gate_list = [
71
- {"qiskit" : qiskit_gate .CCXGate , "tq" : tq .Toffoli , "name" : "Toffoli" },
72
- {"qiskit" : qiskit_gate .CSwapGate , "tq" : tq .CSWAP , "name" : "CSWAP" }
73
+ {"qiskit" : qiskit_gate .CCXGate , "tq" : tq .ccx , "name" : "Toffoli" },
74
+ {"qiskit" : qiskit_gate .CSwapGate , "tq" : tq .cswap , "name" : "CSWAP" },
73
75
]
74
76
75
77
three_qubit_param_gate_list = [
76
78
]
77
79
78
80
pair_list = [
79
- {"qiskit" : qiskit_gate .HGate , "tq" : tq .Hadamard },
80
- {"qiskit" : None , "tq" : tq .SHadamard },
81
- {"qiskit" : qiskit_gate .XGate , "tq" : tq .PauliX },
82
- {"qiskit" : qiskit_gate .YGate , "tq" : tq .PauliY },
83
- {"qiskit" : qiskit_gate .ZGate , "tq" : tq .PauliZ },
84
- {"qiskit" : qiskit_gate .SGate , "tq" : tq .S },
85
- {"qiskit" : qiskit_gate .TGate , "tq" : tq .T },
86
81
{"qiskit" : qiskit_gate .SXGate , "tq" : tq .SX },
87
82
{"qiskit" : qiskit_gate .CXGate , "tq" : tq .CNOT },
88
- {"qiskit" : qiskit_gate .CYGate , "tq" : tq .CY },
89
- {"qiskit" : qiskit_gate .CZGate , "tq" : tq .CZ },
90
83
{"qiskit" : qiskit_gate .RXGate , "tq" : tq .RX },
91
84
{"qiskit" : qiskit_gate .RYGate , "tq" : tq .RY },
92
85
{"qiskit" : qiskit_gate .RZGate , "tq" : tq .RZ },
93
86
{"qiskit" : qiskit_gate .RXXGate , "tq" : tq .RXX },
94
87
{"qiskit" : qiskit_gate .RYYGate , "tq" : tq .RYY },
95
88
{"qiskit" : qiskit_gate .RZZGate , "tq" : tq .RZZ },
96
89
{"qiskit" : qiskit_gate .RZXGate , "tq" : tq .RZX },
97
- {"qiskit" : qiskit_gate .SwapGate , "tq" : tq .SWAP },
98
90
# {'qiskit': qiskit_gate.?, 'tq': tq.SSWAP},
99
91
{"qiskit" : qiskit_gate .CSwapGate , "tq" : tq .CSWAP },
100
92
{"qiskit" : qiskit_gate .CCXGate , "tq" : tq .Toffoli },
136
128
{"qiskit" : qiskit_gate .C3SXGate , "tq" : tq .C3SX },
137
129
]
138
130
139
- maximum_qubit_num = 5
131
+ maximum_qubit_num = 10
140
132
141
133
142
134
def density_is_close (mat1 : np .ndarray , mat2 : np .ndarray ):
143
135
assert mat1 .shape == mat2 .shape
144
- return np .allclose (mat1 , mat2 )
136
+ return np .allclose (mat1 , mat2 , 1e-3 , 1e-6 )
145
137
146
138
147
139
class single_qubit_test (TestCase ):
@@ -257,13 +249,33 @@ def single_qubit_random_layer(self, gatestrength):
257
249
qdev = tq .NoiseDevice (n_wires = qubit_num , bsz = 1 , device = "cpu" , record_op = True )
258
250
rho_qiskit = qiskitDensity .from_label ('0' * qubit_num )
259
251
gate_num = int (gatestrength * qubit_num )
260
- for i in range (0 , gate_num + 1 ):
252
+ gate_list = []
253
+ for i in range (0 , gate_num ):
261
254
random_gate_index = randrange (length )
262
255
gate_pair = single_gate_list [random_gate_index ]
263
256
random_qubit_index = randrange (qubit_num )
257
+ gate_list .append (gate_pair ["name" ])
264
258
gate_pair ['tq' ](qdev , [random_qubit_index ])
265
259
rho_qiskit = rho_qiskit .evolve (gate_pair ['qiskit' ](), [qubit_num - 1 - random_qubit_index ])
266
-
260
+ '''
261
+ print(i)
262
+ print("gate list:")
263
+ print(gate_list)
264
+ print("qdev history")
265
+ print(qdev.op_history)
266
+ mat1_tmp = np.array(qdev.get_2d_matrix(0))
267
+ mat2_tmp = np.array(rho_qiskit.to_operator())
268
+ print("Torch quantum result:")
269
+ print(mat1_tmp)
270
+ print("Qiskit result:")
271
+ print(mat2_tmp)
272
+ if not density_is_close(mat1_tmp, mat2_tmp):
273
+ passed = False
274
+ print("Failed! Current gate list:")
275
+ print(gate_list)
276
+ print(qdev.op_history)
277
+ return passed
278
+ '''
267
279
mat1 = np .array (qdev .get_2d_matrix (0 ))
268
280
mat2 = np .array (rho_qiskit .to_operator ())
269
281
@@ -276,11 +288,14 @@ def single_qubit_random_layer(self, gatestrength):
276
288
print (
277
289
"Test falied for single qubit gate random layer on qubit with %d gates when qubit_number is %d!" % (
278
290
gate_num , qubit_num ))
291
+ print (gate_list )
292
+ print (qdev .op_history )
293
+
279
294
return passed
280
295
281
296
def test_single_qubit_random_layer (self ):
282
297
repeat_num = 5
283
- gate_strength_list = [0.5 , 1 , 1.5 , 2 ]
298
+ gate_strength_list = [0.5 , 1 , 1.5 , 2 , 2.5 , 3.5 , 4.5 , 5 , 5.5 , 6.5 , 7.5 , 8.5 , 9.5 , 10 ]
284
299
for i in range (0 , repeat_num ):
285
300
for gatestrength in gate_strength_list :
286
301
self .assertTrue (self .single_qubit_random_layer (gatestrength ))
@@ -434,10 +449,9 @@ def mix_random_layer(self, gatestrength):
434
449
gate_num , qubit_num ))
435
450
return passed
436
451
437
-
438
452
def test_mix_random_layer (self ):
439
453
repeat_num = 5
440
454
gate_strength_list = [0.5 , 1 , 1.5 , 2 ]
441
455
for i in range (0 , repeat_num ):
442
456
for gatestrength in gate_strength_list :
443
- self .assertTrue (self .mix_random_layer (gatestrength ))
457
+ self .assertTrue (self .mix_random_layer (gatestrength ))
0 commit comments