pyqrack-cpu-complex128 1.81.0__py3-none-macosx_15_0_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1366 @@
1
+ # (C) Daniel Strano and the Qrack contributors 2017-2021. All rights reserved.
2
+ #
3
+ # "QrackSystem" is a central access point, in Python, to the vm6502q/qrack
4
+ # shared library, in C++11. For ease, it wraps all Qrack shared library
5
+ # functions with native Python method signatures.
6
+ #
7
+ # The "QrackSystem" references underlying distinct Qrack simulator instances
8
+ # via integer IDs that are created upon request to allocate a new simulator.
9
+ # While you can directly use QrackSystem to manage all your simulators, we
10
+ # suggest that you instead instantiate an instance of "QrackSimulator", which
11
+ # requests its own new simulator ID and supplies it to "QrackSystem" for all
12
+ # Qrack shared library calls, therefore acting as an independent Qrack
13
+ # simulator object.
14
+ #
15
+ # Use of this source code is governed by an MIT-style license that can be
16
+ # found in the LICENSE file or at https://opensource.org/licenses/MIT.
17
+
18
+ import os
19
+ from ctypes import *
20
+ from sys import platform as _platform
21
+
22
+
23
+ class QrackSystem:
24
+ def __init__(self):
25
+ shared_lib_path = ""
26
+ if os.environ.get("PYQRACK_SHARED_LIB_PATH") != None:
27
+ shared_lib_path = os.environ.get("PYQRACK_SHARED_LIB_PATH")
28
+ elif _platform == "win32":
29
+ shared_lib_path = os.path.dirname(__file__) + "/qrack_lib/qrack_pinvoke.dll"
30
+ elif _platform == "darwin":
31
+ shared_lib_path = os.path.dirname(__file__) + "/qrack_lib/libqrack_pinvoke.dylib"
32
+ else:
33
+ shared_lib_path = os.path.dirname(__file__) + "/qrack_lib/libqrack_pinvoke.so"
34
+
35
+ try:
36
+ self.qrack_lib = CDLL(shared_lib_path)
37
+ except Exception as e:
38
+ if _platform == "win32":
39
+ shared_lib_path = "C:/Program Files (x86)/Qrack/bin/qrack_pinvoke.dll"
40
+ elif _platform == "darwin":
41
+ shared_lib_path = "/usr/local/lib/qrack/libqrack_pinvoke.dylib"
42
+ else:
43
+ shared_lib_path = "/usr/local/lib/qrack/libqrack_pinvoke.so"
44
+
45
+ try:
46
+ self.qrack_lib = CDLL(shared_lib_path)
47
+ except Exception as e:
48
+ if _platform == "win32":
49
+ shared_lib_path = "C:/Program Files (x86)/Qrack/bin/qrack_pinvoke.dll"
50
+ elif _platform == "darwin":
51
+ shared_lib_path = "/usr/lib/qrack/libqrack_pinvoke.dylib"
52
+ else:
53
+ shared_lib_path = "/usr/lib/qrack/libqrack_pinvoke.so"
54
+
55
+ try:
56
+ self.qrack_lib = CDLL(shared_lib_path)
57
+ except Exception as e:
58
+ print(
59
+ "IMPORTANT: Did you remember to install OpenCL, if your Qrack version was built with OpenCL?"
60
+ )
61
+ raise e
62
+
63
+ self.fppow = 6
64
+ if "QRACK_FPPOW" in os.environ:
65
+ self.fppow = int(os.environ.get("QRACK_FPPOW"))
66
+ if self.fppow < 4 or self.fppow > 7:
67
+ raise ValueError(
68
+ "QRACK_FPPOW environment variable must be an integer >3 and <8. (Qrack builds from 4 for fp16/half, up to 7 for fp128/quad."
69
+ )
70
+
71
+ # Define function signatures, up front
72
+
73
+ # non-quantum
74
+
75
+ self.qrack_lib.DumpIds.restype = None
76
+ self.qrack_lib.DumpIds.argtypes = [c_ulonglong, CFUNCTYPE(None, c_ulonglong)]
77
+
78
+ self.qrack_lib.Dump.restype = None
79
+ self.qrack_lib.Dump.argtypes = [
80
+ c_ulonglong,
81
+ CFUNCTYPE(c_ulonglong, c_double, c_double),
82
+ ]
83
+
84
+ # These next few methods need to have c_double pointers, if PyQrack is built with fp64.
85
+ self.qrack_lib.InKet.restype = None
86
+ self.qrack_lib.OutKet.restype = None
87
+ self.qrack_lib.OutProbs.restype = None
88
+ self.qrack_lib.OutReducedDensityMatrix.restype = None
89
+
90
+ if self.fppow < 6:
91
+ self.qrack_lib.InKet.argtypes = [c_ulonglong, POINTER(c_float)]
92
+ self.qrack_lib.OutKet.argtypes = [c_ulonglong, POINTER(c_float)]
93
+ self.qrack_lib.OutProbs.argtypes = [c_ulonglong, POINTER(c_float)]
94
+ self.qrack_lib.OutReducedDensityMatrix.argtypes = [
95
+ c_ulonglong,
96
+ c_ulonglong,
97
+ POINTER(c_ulonglong),
98
+ POINTER(c_float),
99
+ ]
100
+ else:
101
+ self.qrack_lib.InKet.argtypes = [c_ulonglong, POINTER(c_double)]
102
+ self.qrack_lib.OutKet.argtypes = [c_ulonglong, POINTER(c_double)]
103
+ self.qrack_lib.OutProbs.argtypes = [c_ulonglong, POINTER(c_double)]
104
+ self.qrack_lib.OutReducedDensityMatrix.argtypes = [
105
+ c_ulonglong,
106
+ c_ulonglong,
107
+ POINTER(c_ulonglong),
108
+ POINTER(c_double),
109
+ ]
110
+
111
+ self.qrack_lib.init.restype = c_ulonglong
112
+ self.qrack_lib.init.argtypes = []
113
+
114
+ self.qrack_lib.get_error.restype = c_int
115
+ self.qrack_lib.get_error.argtypes = [c_ulonglong]
116
+
117
+ self.qrack_lib.init_count.restype = c_ulonglong
118
+ self.qrack_lib.init_count.argtypes = [c_ulonglong, c_bool, c_bool]
119
+
120
+ self.qrack_lib.init_count_pager.restype = c_ulonglong
121
+ self.qrack_lib.init_count_pager.argtypes = [c_ulonglong, c_bool, c_bool]
122
+
123
+ self.qrack_lib.init_count_type.restype = c_ulonglong
124
+ self.qrack_lib.init_count_type.argtypes = [
125
+ c_ulonglong,
126
+ c_bool,
127
+ c_bool,
128
+ c_bool,
129
+ c_bool,
130
+ c_bool,
131
+ c_bool,
132
+ c_bool,
133
+ c_bool,
134
+ c_bool,
135
+ c_bool,
136
+ c_bool,
137
+ ]
138
+
139
+ self.qrack_lib.init_count_stabilizer.restype = c_ulonglong
140
+ self.qrack_lib.init_count_stabilizer.argtypes = [c_ulonglong]
141
+
142
+ self.qrack_lib.init_clone.restype = c_ulonglong
143
+ self.qrack_lib.init_clone.argtypes = [c_ulonglong]
144
+
145
+ self.qrack_lib.destroy.restype = None
146
+ self.qrack_lib.destroy.argtypes = [c_ulonglong]
147
+
148
+ self.qrack_lib.seed.restype = None
149
+ self.qrack_lib.seed.argtypes = [c_ulonglong, c_ulonglong]
150
+
151
+ self.qrack_lib.set_concurrency.restype = None
152
+ self.qrack_lib.set_concurrency.argtypes = [c_ulonglong, c_ulonglong]
153
+
154
+ self.qrack_lib.set_device.restype = None
155
+ self.qrack_lib.set_device.argtypes = [c_ulonglong, c_longlong]
156
+
157
+ self.qrack_lib.set_device_list.restype = None
158
+ self.qrack_lib.set_device_list.argtypes = [
159
+ c_ulonglong,
160
+ c_ulonglong,
161
+ POINTER(c_longlong),
162
+ ]
163
+
164
+ # pseudo-quantum
165
+
166
+ self.qrack_lib.HighestProbAll.restype = None
167
+ self.qrack_lib.HighestProbAll.argtypes = [c_ulonglong, POINTER(c_ulonglong)]
168
+
169
+ self.qrack_lib.HighestProbAllN.restype = None
170
+ self.qrack_lib.HighestProbAllN.argtypes = [c_ulonglong, c_ulonglong, POINTER(c_ulonglong)]
171
+
172
+ self.qrack_lib.ProbAll.restype = None
173
+ if self.fppow <= 5:
174
+ self.qrack_lib.ProbAll.argtypes = [
175
+ c_ulonglong,
176
+ c_ulonglong,
177
+ POINTER(c_ulonglong),
178
+ POINTER(c_float),
179
+ ]
180
+ else:
181
+ self.qrack_lib.ProbAll.argtypes = [
182
+ c_ulonglong,
183
+ c_ulonglong,
184
+ POINTER(c_ulonglong),
185
+ POINTER(c_double),
186
+ ]
187
+
188
+ self.qrack_lib.Prob.restype = c_double
189
+ self.qrack_lib.Prob.argtypes = [c_ulonglong, c_ulonglong]
190
+
191
+ self.qrack_lib.ProbRdm.restype = c_double
192
+ self.qrack_lib.ProbRdm.argtypes = [c_ulonglong, c_ulonglong]
193
+
194
+ self.qrack_lib.PermutationProb.restype = c_double
195
+ self.qrack_lib.PermutationProb.argtypes = [
196
+ c_ulonglong,
197
+ c_ulonglong,
198
+ POINTER(c_ulonglong),
199
+ POINTER(c_bool),
200
+ ]
201
+
202
+ self.qrack_lib.PermutationProbRdm.restype = c_double
203
+ self.qrack_lib.PermutationProbRdm.argtypes = [
204
+ c_ulonglong,
205
+ c_ulonglong,
206
+ POINTER(c_ulonglong),
207
+ POINTER(c_bool),
208
+ c_bool,
209
+ ]
210
+
211
+ self.qrack_lib.PermutationExpectation.restype = c_double
212
+ self.qrack_lib.PermutationExpectation.argtypes = [
213
+ c_ulonglong,
214
+ c_ulonglong,
215
+ POINTER(c_ulonglong),
216
+ ]
217
+
218
+ self.qrack_lib.PermutationExpectationRdm.restype = c_double
219
+ self.qrack_lib.PermutationExpectationRdm.argtypes = [
220
+ c_ulonglong,
221
+ c_ulonglong,
222
+ POINTER(c_ulonglong),
223
+ c_bool,
224
+ ]
225
+
226
+ self.qrack_lib.FactorizedExpectation.restype = c_double
227
+ self.qrack_lib.FactorizedExpectation.argtypes = [
228
+ c_ulonglong,
229
+ c_ulonglong,
230
+ POINTER(c_ulonglong),
231
+ c_ulonglong,
232
+ POINTER(c_ulonglong),
233
+ ]
234
+
235
+ self.qrack_lib.FactorizedExpectationRdm.restype = c_double
236
+ self.qrack_lib.FactorizedExpectationRdm.argtypes = [
237
+ c_ulonglong,
238
+ c_ulonglong,
239
+ POINTER(c_ulonglong),
240
+ c_ulonglong,
241
+ POINTER(c_ulonglong),
242
+ c_bool,
243
+ ]
244
+
245
+ if self.fppow <= 5:
246
+ self.qrack_lib.FactorizedExpectationFp.restype = c_double
247
+ self.qrack_lib.FactorizedExpectationFp.argtypes = [
248
+ c_ulonglong,
249
+ c_ulonglong,
250
+ POINTER(c_ulonglong),
251
+ POINTER(c_float),
252
+ ]
253
+ self.qrack_lib.FactorizedExpectationFpRdm.restype = c_double
254
+ self.qrack_lib.FactorizedExpectationFpRdm.argtypes = [
255
+ c_ulonglong,
256
+ c_ulonglong,
257
+ POINTER(c_ulonglong),
258
+ POINTER(c_float),
259
+ c_bool,
260
+ ]
261
+ self.qrack_lib.UnitaryExpectation.restype = c_double
262
+ self.qrack_lib.UnitaryExpectation.argtypes = [
263
+ c_ulonglong,
264
+ c_ulonglong,
265
+ POINTER(c_ulonglong),
266
+ POINTER(c_float),
267
+ ]
268
+ self.qrack_lib.MatrixExpectation.restype = c_double
269
+ self.qrack_lib.MatrixExpectation.argtypes = [
270
+ c_ulonglong,
271
+ c_ulonglong,
272
+ POINTER(c_ulonglong),
273
+ POINTER(c_float),
274
+ ]
275
+ self.qrack_lib.UnitaryExpectationEigenVal.restype = c_double
276
+ self.qrack_lib.UnitaryExpectationEigenVal.argtypes = [
277
+ c_ulonglong,
278
+ c_ulonglong,
279
+ POINTER(c_ulonglong),
280
+ POINTER(c_float),
281
+ POINTER(c_float),
282
+ ]
283
+ self.qrack_lib.MatrixExpectationEigenVal.restype = c_double
284
+ self.qrack_lib.MatrixExpectationEigenVal.argtypes = [
285
+ c_ulonglong,
286
+ c_ulonglong,
287
+ POINTER(c_ulonglong),
288
+ POINTER(c_float),
289
+ POINTER(c_float),
290
+ ]
291
+ else:
292
+ self.qrack_lib.FactorizedExpectationFp.restype = c_double
293
+ self.qrack_lib.FactorizedExpectationFp.argtypes = [
294
+ c_ulonglong,
295
+ c_ulonglong,
296
+ POINTER(c_ulonglong),
297
+ POINTER(c_double),
298
+ ]
299
+ self.qrack_lib.FactorizedExpectationFpRdm.restype = c_double
300
+ self.qrack_lib.FactorizedExpectationFpRdm.argtypes = [
301
+ c_ulonglong,
302
+ c_ulonglong,
303
+ POINTER(c_ulonglong),
304
+ POINTER(c_double),
305
+ c_bool,
306
+ ]
307
+ self.qrack_lib.UnitaryExpectation.restype = c_double
308
+ self.qrack_lib.UnitaryExpectation.argtypes = [
309
+ c_ulonglong,
310
+ c_ulonglong,
311
+ POINTER(c_ulonglong),
312
+ POINTER(c_double),
313
+ ]
314
+ self.qrack_lib.MatrixExpectation.restype = c_double
315
+ self.qrack_lib.MatrixExpectation.argtypes = [
316
+ c_ulonglong,
317
+ c_ulonglong,
318
+ POINTER(c_ulonglong),
319
+ POINTER(c_double),
320
+ ]
321
+ self.qrack_lib.UnitaryExpectationEigenVal.restype = c_double
322
+ self.qrack_lib.UnitaryExpectationEigenVal.argtypes = [
323
+ c_ulonglong,
324
+ c_ulonglong,
325
+ POINTER(c_ulonglong),
326
+ POINTER(c_double),
327
+ POINTER(c_double),
328
+ ]
329
+ self.qrack_lib.MatrixExpectationEigenVal.restype = c_double
330
+ self.qrack_lib.MatrixExpectationEigenVal.argtypes = [
331
+ c_ulonglong,
332
+ c_ulonglong,
333
+ POINTER(c_ulonglong),
334
+ POINTER(c_double),
335
+ POINTER(c_double),
336
+ ]
337
+
338
+ self.qrack_lib.PauliExpectation.restype = c_double
339
+ self.qrack_lib.PauliExpectation.argtypes = [
340
+ c_ulonglong,
341
+ c_ulonglong,
342
+ POINTER(c_ulonglong),
343
+ POINTER(c_ulonglong),
344
+ ]
345
+
346
+ self.qrack_lib.Variance.restype = c_double
347
+ self.qrack_lib.Variance.argtypes = [
348
+ c_ulonglong,
349
+ c_ulonglong,
350
+ POINTER(c_ulonglong),
351
+ ]
352
+
353
+ self.qrack_lib.VarianceRdm.restype = c_double
354
+ self.qrack_lib.VarianceRdm.argtypes = [
355
+ c_ulonglong,
356
+ c_ulonglong,
357
+ POINTER(c_ulonglong),
358
+ c_bool,
359
+ ]
360
+
361
+ self.qrack_lib.FactorizedVariance.restype = c_double
362
+ self.qrack_lib.FactorizedVariance.argtypes = [
363
+ c_ulonglong,
364
+ c_ulonglong,
365
+ POINTER(c_ulonglong),
366
+ c_ulonglong,
367
+ POINTER(c_ulonglong),
368
+ ]
369
+
370
+ self.qrack_lib.FactorizedVarianceRdm.restype = c_double
371
+ self.qrack_lib.FactorizedVarianceRdm.argtypes = [
372
+ c_ulonglong,
373
+ c_ulonglong,
374
+ POINTER(c_ulonglong),
375
+ c_ulonglong,
376
+ POINTER(c_ulonglong),
377
+ c_bool,
378
+ ]
379
+
380
+ if self.fppow <= 5:
381
+ self.qrack_lib.FactorizedVarianceFp.restype = c_double
382
+ self.qrack_lib.FactorizedVarianceFp.argtypes = [
383
+ c_ulonglong,
384
+ c_ulonglong,
385
+ POINTER(c_ulonglong),
386
+ POINTER(c_float),
387
+ ]
388
+ self.qrack_lib.FactorizedVarianceFpRdm.restype = c_double
389
+ self.qrack_lib.FactorizedVarianceFpRdm.argtypes = [
390
+ c_ulonglong,
391
+ c_ulonglong,
392
+ POINTER(c_ulonglong),
393
+ POINTER(c_float),
394
+ c_bool,
395
+ ]
396
+ self.qrack_lib.UnitaryVariance.restype = c_double
397
+ self.qrack_lib.UnitaryVariance.argtypes = [
398
+ c_ulonglong,
399
+ c_ulonglong,
400
+ POINTER(c_ulonglong),
401
+ POINTER(c_float),
402
+ ]
403
+ self.qrack_lib.MatrixVariance.restype = c_double
404
+ self.qrack_lib.MatrixVariance.argtypes = [
405
+ c_ulonglong,
406
+ c_ulonglong,
407
+ POINTER(c_ulonglong),
408
+ POINTER(c_float),
409
+ ]
410
+ self.qrack_lib.UnitaryVarianceEigenVal.restype = c_double
411
+ self.qrack_lib.UnitaryVarianceEigenVal.argtypes = [
412
+ c_ulonglong,
413
+ c_ulonglong,
414
+ POINTER(c_ulonglong),
415
+ POINTER(c_float),
416
+ POINTER(c_float),
417
+ ]
418
+ self.qrack_lib.MatrixVarianceEigenVal.restype = c_double
419
+ self.qrack_lib.MatrixVarianceEigenVal.argtypes = [
420
+ c_ulonglong,
421
+ c_ulonglong,
422
+ POINTER(c_ulonglong),
423
+ POINTER(c_float),
424
+ POINTER(c_float),
425
+ ]
426
+ else:
427
+ self.qrack_lib.FactorizedVarianceFp.restype = c_double
428
+ self.qrack_lib.FactorizedVarianceFp.argtypes = [
429
+ c_ulonglong,
430
+ c_ulonglong,
431
+ POINTER(c_ulonglong),
432
+ POINTER(c_double),
433
+ ]
434
+ self.qrack_lib.FactorizedVarianceFpRdm.restype = c_double
435
+ self.qrack_lib.FactorizedVarianceFpRdm.argtypes = [
436
+ c_ulonglong,
437
+ c_ulonglong,
438
+ POINTER(c_ulonglong),
439
+ POINTER(c_double),
440
+ c_bool,
441
+ ]
442
+ self.qrack_lib.UnitaryVariance.restype = c_double
443
+ self.qrack_lib.UnitaryVariance.argtypes = [
444
+ c_ulonglong,
445
+ c_ulonglong,
446
+ POINTER(c_ulonglong),
447
+ POINTER(c_double),
448
+ ]
449
+ self.qrack_lib.MatrixVariance.restype = c_double
450
+ self.qrack_lib.MatrixVariance.argtypes = [
451
+ c_ulonglong,
452
+ c_ulonglong,
453
+ POINTER(c_ulonglong),
454
+ POINTER(c_double),
455
+ ]
456
+ self.qrack_lib.UnitaryVarianceEigenVal.restype = c_double
457
+ self.qrack_lib.UnitaryVarianceEigenVal.argtypes = [
458
+ c_ulonglong,
459
+ c_ulonglong,
460
+ POINTER(c_ulonglong),
461
+ POINTER(c_double),
462
+ POINTER(c_double),
463
+ ]
464
+ self.qrack_lib.MatrixVarianceEigenVal.restype = c_double
465
+ self.qrack_lib.MatrixVarianceEigenVal.argtypes = [
466
+ c_ulonglong,
467
+ c_ulonglong,
468
+ POINTER(c_ulonglong),
469
+ POINTER(c_double),
470
+ POINTER(c_double),
471
+ ]
472
+
473
+ self.qrack_lib.PauliVariance.restype = c_double
474
+ self.qrack_lib.PauliVariance.argtypes = [
475
+ c_ulonglong,
476
+ c_ulonglong,
477
+ POINTER(c_ulonglong),
478
+ POINTER(c_ulonglong),
479
+ ]
480
+
481
+ self.qrack_lib.JointEnsembleProbability.restype = c_double
482
+ self.qrack_lib.JointEnsembleProbability.argtypes = [
483
+ c_ulonglong,
484
+ c_ulonglong,
485
+ POINTER(c_int),
486
+ c_ulonglong,
487
+ ]
488
+
489
+ self.qrack_lib.PhaseParity.restype = None
490
+ self.qrack_lib.PhaseParity.argtypes = [
491
+ c_ulonglong,
492
+ c_double,
493
+ c_ulonglong,
494
+ POINTER(c_ulonglong),
495
+ ]
496
+
497
+ self.qrack_lib.PhaseRootN.restype = None
498
+ self.qrack_lib.PhaseRootN.argtypes = [
499
+ c_ulonglong,
500
+ c_ulonglong,
501
+ c_ulonglong,
502
+ POINTER(c_ulonglong),
503
+ ]
504
+
505
+ self.qrack_lib.ResetAll.restype = None
506
+ self.qrack_lib.ResetAll.argtypes = [c_ulonglong]
507
+
508
+ # allocate and release
509
+
510
+ self.qrack_lib.allocateQubit.restype = None
511
+ self.qrack_lib.allocateQubit.argtypes = [c_ulonglong, c_ulonglong]
512
+
513
+ self.qrack_lib.release.restype = c_bool
514
+ self.qrack_lib.release.argtypes = [c_ulonglong, c_ulonglong]
515
+
516
+ self.qrack_lib.num_qubits.restype = c_ulonglong
517
+ self.qrack_lib.num_qubits.argtypes = [c_ulonglong]
518
+
519
+ # single-qubit gates
520
+
521
+ self.qrack_lib.X.restype = None
522
+ self.qrack_lib.X.argtypes = [c_ulonglong, c_ulonglong]
523
+
524
+ self.qrack_lib.Y.restype = None
525
+ self.qrack_lib.Y.argtypes = [c_ulonglong, c_ulonglong]
526
+
527
+ self.qrack_lib.Z.restype = None
528
+ self.qrack_lib.Z.argtypes = [c_ulonglong, c_ulonglong]
529
+
530
+ self.qrack_lib.H.restype = None
531
+ self.qrack_lib.H.argtypes = [c_ulonglong, c_ulonglong]
532
+
533
+ self.qrack_lib.S.restype = None
534
+ self.qrack_lib.S.argtypes = [c_ulonglong, c_ulonglong]
535
+
536
+ self.qrack_lib.T.restype = None
537
+ self.qrack_lib.T.argtypes = [c_ulonglong, c_ulonglong]
538
+
539
+ self.qrack_lib.AdjS.restype = None
540
+ self.qrack_lib.AdjS.argtypes = [c_ulonglong, c_ulonglong]
541
+
542
+ self.qrack_lib.AdjT.restype = None
543
+ self.qrack_lib.AdjT.argtypes = [c_ulonglong, c_ulonglong]
544
+
545
+ self.qrack_lib.U.restype = None
546
+ self.qrack_lib.U.argtypes = [
547
+ c_ulonglong,
548
+ c_ulonglong,
549
+ c_double,
550
+ c_double,
551
+ c_double,
552
+ ]
553
+
554
+ self.qrack_lib.Mtrx.restype = None
555
+ self.qrack_lib.Mtrx.argtypes = [c_ulonglong, POINTER(c_double), c_ulonglong]
556
+
557
+ # multi-controlled single-qubit gates
558
+
559
+ self.qrack_lib.MCX.restype = None
560
+ self.qrack_lib.MCX.argtypes = [
561
+ c_ulonglong,
562
+ c_ulonglong,
563
+ POINTER(c_ulonglong),
564
+ c_ulonglong,
565
+ ]
566
+
567
+ self.qrack_lib.MCY.restype = None
568
+ self.qrack_lib.MCY.argtypes = [
569
+ c_ulonglong,
570
+ c_ulonglong,
571
+ POINTER(c_ulonglong),
572
+ c_ulonglong,
573
+ ]
574
+
575
+ self.qrack_lib.MCZ.restype = None
576
+ self.qrack_lib.MCZ.argtypes = [
577
+ c_ulonglong,
578
+ c_ulonglong,
579
+ POINTER(c_ulonglong),
580
+ c_ulonglong,
581
+ ]
582
+
583
+ self.qrack_lib.MCH.restype = None
584
+ self.qrack_lib.MCH.argtypes = [
585
+ c_ulonglong,
586
+ c_ulonglong,
587
+ POINTER(c_ulonglong),
588
+ c_ulonglong,
589
+ ]
590
+
591
+ self.qrack_lib.MCS.restype = None
592
+ self.qrack_lib.MCS.argtypes = [
593
+ c_ulonglong,
594
+ c_ulonglong,
595
+ POINTER(c_ulonglong),
596
+ c_ulonglong,
597
+ ]
598
+
599
+ self.qrack_lib.MCT.restype = None
600
+ self.qrack_lib.MCT.argtypes = [
601
+ c_ulonglong,
602
+ c_ulonglong,
603
+ POINTER(c_ulonglong),
604
+ c_ulonglong,
605
+ ]
606
+
607
+ self.qrack_lib.MCAdjS.restype = None
608
+ self.qrack_lib.MCAdjS.argtypes = [
609
+ c_ulonglong,
610
+ c_ulonglong,
611
+ POINTER(c_ulonglong),
612
+ c_ulonglong,
613
+ ]
614
+
615
+ self.qrack_lib.MCAdjT.restype = None
616
+ self.qrack_lib.MCAdjT.argtypes = [
617
+ c_ulonglong,
618
+ c_ulonglong,
619
+ POINTER(c_ulonglong),
620
+ c_ulonglong,
621
+ ]
622
+
623
+ self.qrack_lib.MCU.restype = None
624
+ self.qrack_lib.MCU.argtypes = [
625
+ c_ulonglong,
626
+ c_ulonglong,
627
+ POINTER(c_ulonglong),
628
+ c_ulonglong,
629
+ c_double,
630
+ c_double,
631
+ c_double,
632
+ ]
633
+
634
+ self.qrack_lib.MCMtrx.restype = None
635
+ self.qrack_lib.MCMtrx.argtypes = [
636
+ c_ulonglong,
637
+ c_ulonglong,
638
+ POINTER(c_ulonglong),
639
+ POINTER(c_double),
640
+ c_ulonglong,
641
+ ]
642
+
643
+ # multi-anti-controlled single-qubit gates
644
+
645
+ self.qrack_lib.MACX.restype = None
646
+ self.qrack_lib.MACX.argtypes = [
647
+ c_ulonglong,
648
+ c_ulonglong,
649
+ POINTER(c_ulonglong),
650
+ c_ulonglong,
651
+ ]
652
+
653
+ self.qrack_lib.MACY.restype = None
654
+ self.qrack_lib.MACY.argtypes = [
655
+ c_ulonglong,
656
+ c_ulonglong,
657
+ POINTER(c_ulonglong),
658
+ c_ulonglong,
659
+ ]
660
+
661
+ self.qrack_lib.MACZ.restype = None
662
+ self.qrack_lib.MACZ.argtypes = [
663
+ c_ulonglong,
664
+ c_ulonglong,
665
+ POINTER(c_ulonglong),
666
+ c_ulonglong,
667
+ ]
668
+
669
+ self.qrack_lib.MACH.restype = None
670
+ self.qrack_lib.MACH.argtypes = [
671
+ c_ulonglong,
672
+ c_ulonglong,
673
+ POINTER(c_ulonglong),
674
+ c_ulonglong,
675
+ ]
676
+
677
+ self.qrack_lib.MACS.restype = None
678
+ self.qrack_lib.MACS.argtypes = [
679
+ c_ulonglong,
680
+ c_ulonglong,
681
+ POINTER(c_ulonglong),
682
+ c_ulonglong,
683
+ ]
684
+
685
+ self.qrack_lib.MACT.restype = None
686
+ self.qrack_lib.MACT.argtypes = [
687
+ c_ulonglong,
688
+ c_ulonglong,
689
+ POINTER(c_ulonglong),
690
+ c_ulonglong,
691
+ ]
692
+
693
+ self.qrack_lib.MACAdjS.restype = None
694
+ self.qrack_lib.MACAdjS.argtypes = [
695
+ c_ulonglong,
696
+ c_ulonglong,
697
+ POINTER(c_ulonglong),
698
+ c_ulonglong,
699
+ ]
700
+
701
+ self.qrack_lib.MACAdjT.restype = None
702
+ self.qrack_lib.MACAdjT.argtypes = [
703
+ c_ulonglong,
704
+ c_ulonglong,
705
+ POINTER(c_ulonglong),
706
+ c_ulonglong,
707
+ ]
708
+
709
+ self.qrack_lib.MACU.restype = None
710
+ self.qrack_lib.MACU.argtypes = [
711
+ c_ulonglong,
712
+ c_ulonglong,
713
+ POINTER(c_ulonglong),
714
+ c_ulonglong,
715
+ c_double,
716
+ c_double,
717
+ c_double,
718
+ ]
719
+
720
+ self.qrack_lib.MACMtrx.restype = None
721
+ self.qrack_lib.MACMtrx.argtypes = [
722
+ c_ulonglong,
723
+ c_ulonglong,
724
+ POINTER(c_ulonglong),
725
+ POINTER(c_double),
726
+ c_ulonglong,
727
+ ]
728
+
729
+ self.qrack_lib.UCMtrx.restype = None
730
+ self.qrack_lib.UCMtrx.argtypes = [
731
+ c_ulonglong,
732
+ c_ulonglong,
733
+ POINTER(c_ulonglong),
734
+ POINTER(c_double),
735
+ c_ulonglong,
736
+ c_ulonglong,
737
+ ]
738
+
739
+ self.qrack_lib.Multiplex1Mtrx.restype = None
740
+ self.qrack_lib.Multiplex1Mtrx.argtypes = [
741
+ c_ulonglong,
742
+ c_ulonglong,
743
+ POINTER(c_ulonglong),
744
+ c_ulonglong,
745
+ POINTER(c_double),
746
+ ]
747
+
748
+ # coalesced single qubit gates
749
+
750
+ self.qrack_lib.MX.restype = None
751
+ self.qrack_lib.MX.argtypes = [c_ulonglong, c_ulonglong, POINTER(c_ulonglong)]
752
+
753
+ self.qrack_lib.MY.restype = None
754
+ self.qrack_lib.MY.argtypes = [c_ulonglong, c_ulonglong, POINTER(c_ulonglong)]
755
+
756
+ self.qrack_lib.MZ.restype = None
757
+ self.qrack_lib.MZ.argtypes = [c_ulonglong, c_ulonglong, POINTER(c_ulonglong)]
758
+
759
+ # rotations
760
+
761
+ self.qrack_lib.R.restype = None
762
+ self.qrack_lib.R.argtypes = [c_ulonglong, c_ulonglong, c_double, c_ulonglong]
763
+
764
+ self.qrack_lib.MCR.restype = None
765
+ self.qrack_lib.MCR.argtypes = [
766
+ c_ulonglong,
767
+ c_ulonglong,
768
+ c_double,
769
+ c_ulonglong,
770
+ POINTER(c_ulonglong),
771
+ c_ulonglong,
772
+ ]
773
+
774
+ # exponential of Pauli operators
775
+
776
+ self.qrack_lib.Exp.restype = None
777
+ self.qrack_lib.Exp.argtypes = [
778
+ c_ulonglong,
779
+ c_ulonglong,
780
+ POINTER(c_int),
781
+ c_double,
782
+ POINTER(c_ulonglong),
783
+ ]
784
+
785
+ self.qrack_lib.MCExp.restype = None
786
+ self.qrack_lib.MCExp.argtypes = [
787
+ c_ulonglong,
788
+ c_ulonglong,
789
+ POINTER(c_int),
790
+ c_double,
791
+ c_ulonglong,
792
+ POINTER(c_ulonglong),
793
+ POINTER(c_ulonglong),
794
+ ]
795
+
796
+ # measurements
797
+
798
+ self.qrack_lib.M.restype = c_ulonglong
799
+ self.qrack_lib.M.argtypes = [c_ulonglong, c_ulonglong]
800
+
801
+ self.qrack_lib.ForceM.restype = c_ulonglong
802
+ self.qrack_lib.ForceM.argtypes = [c_ulonglong, c_ulonglong, c_bool]
803
+
804
+ self.qrack_lib.MAll.restype = c_ulonglong
805
+ self.qrack_lib.MAll.argtypes = [c_ulonglong]
806
+
807
+ self.qrack_lib.MAllLong.restype = None
808
+ self.qrack_lib.MAllLong.argtypes = [c_ulonglong, POINTER(c_ulonglong)]
809
+
810
+ self.qrack_lib.Measure.restype = c_ulonglong
811
+ self.qrack_lib.Measure.argtypes = [
812
+ c_ulonglong,
813
+ c_ulonglong,
814
+ POINTER(c_int),
815
+ POINTER(c_ulonglong),
816
+ ]
817
+
818
+ self.qrack_lib.MeasureShots.restype = None
819
+ self.qrack_lib.MeasureShots.argtypes = [
820
+ c_ulonglong,
821
+ c_ulonglong,
822
+ POINTER(c_ulonglong),
823
+ c_ulonglong,
824
+ POINTER(c_ulonglong),
825
+ ]
826
+
827
+ # swap
828
+
829
+ self.qrack_lib.SWAP.restype = None
830
+ self.qrack_lib.SWAP.argtypes = [c_ulonglong, c_ulonglong, c_ulonglong]
831
+
832
+ self.qrack_lib.ISWAP.restype = None
833
+ self.qrack_lib.ISWAP.argtypes = [c_ulonglong, c_ulonglong, c_ulonglong]
834
+
835
+ self.qrack_lib.AdjISWAP.restype = None
836
+ self.qrack_lib.AdjISWAP.argtypes = [c_ulonglong, c_ulonglong, c_ulonglong]
837
+
838
+ self.qrack_lib.FSim.restype = None
839
+ self.qrack_lib.FSim.argtypes = [
840
+ c_ulonglong,
841
+ c_double,
842
+ c_double,
843
+ c_ulonglong,
844
+ c_ulonglong,
845
+ ]
846
+
847
+ self.qrack_lib.CSWAP.restype = None
848
+ self.qrack_lib.CSWAP.argtypes = [
849
+ c_ulonglong,
850
+ c_ulonglong,
851
+ POINTER(c_ulonglong),
852
+ c_ulonglong,
853
+ c_ulonglong,
854
+ ]
855
+
856
+ self.qrack_lib.ACSWAP.restype = None
857
+ self.qrack_lib.ACSWAP.argtypes = [
858
+ c_ulonglong,
859
+ c_ulonglong,
860
+ POINTER(c_ulonglong),
861
+ c_ulonglong,
862
+ c_ulonglong,
863
+ ]
864
+
865
+ # Schmidt decomposition
866
+
867
+ self.qrack_lib.Compose.restype = None
868
+ self.qrack_lib.Compose.argtypes = [
869
+ c_ulonglong,
870
+ c_ulonglong,
871
+ POINTER(c_ulonglong),
872
+ ]
873
+
874
+ self.qrack_lib.Decompose.restype = c_ulonglong
875
+ self.qrack_lib.Decompose.argtypes = [
876
+ c_ulonglong,
877
+ c_ulonglong,
878
+ POINTER(c_ulonglong),
879
+ ]
880
+
881
+ self.qrack_lib.Dispose.restype = None
882
+ self.qrack_lib.Dispose.argtypes = [
883
+ c_ulonglong,
884
+ c_ulonglong,
885
+ POINTER(c_ulonglong),
886
+ ]
887
+
888
+ # (quasi-)Boolean gates
889
+
890
+ self.qrack_lib.AND.restype = None
891
+ self.qrack_lib.AND.argtypes = [
892
+ c_ulonglong,
893
+ c_ulonglong,
894
+ c_ulonglong,
895
+ c_ulonglong,
896
+ ]
897
+
898
+ self.qrack_lib.OR.restype = None
899
+ self.qrack_lib.OR.argtypes = [
900
+ c_ulonglong,
901
+ c_ulonglong,
902
+ c_ulonglong,
903
+ c_ulonglong,
904
+ ]
905
+
906
+ self.qrack_lib.XOR.restype = None
907
+ self.qrack_lib.XOR.argtypes = [
908
+ c_ulonglong,
909
+ c_ulonglong,
910
+ c_ulonglong,
911
+ c_ulonglong,
912
+ ]
913
+
914
+ self.qrack_lib.NAND.restype = None
915
+ self.qrack_lib.NAND.argtypes = [
916
+ c_ulonglong,
917
+ c_ulonglong,
918
+ c_ulonglong,
919
+ c_ulonglong,
920
+ ]
921
+
922
+ self.qrack_lib.NOR.restype = None
923
+ self.qrack_lib.NOR.argtypes = [
924
+ c_ulonglong,
925
+ c_ulonglong,
926
+ c_ulonglong,
927
+ c_ulonglong,
928
+ ]
929
+
930
+ self.qrack_lib.XNOR.restype = None
931
+ self.qrack_lib.XNOR.argtypes = [
932
+ c_ulonglong,
933
+ c_ulonglong,
934
+ c_ulonglong,
935
+ c_ulonglong,
936
+ ]
937
+
938
+ # half classical (quasi-)Boolean gates
939
+
940
+ self.qrack_lib.CLAND.restype = None
941
+ self.qrack_lib.CLAND.argtypes = [c_ulonglong, c_bool, c_ulonglong, c_ulonglong]
942
+
943
+ self.qrack_lib.CLOR.restype = None
944
+ self.qrack_lib.CLOR.argtypes = [c_ulonglong, c_bool, c_ulonglong, c_ulonglong]
945
+
946
+ self.qrack_lib.CLXOR.restype = None
947
+ self.qrack_lib.CLXOR.argtypes = [c_ulonglong, c_bool, c_ulonglong, c_ulonglong]
948
+
949
+ self.qrack_lib.CLNAND.restype = None
950
+ self.qrack_lib.CLNAND.argtypes = [c_ulonglong, c_bool, c_ulonglong, c_ulonglong]
951
+
952
+ self.qrack_lib.CLNOR.restype = None
953
+ self.qrack_lib.CLNOR.argtypes = [c_ulonglong, c_bool, c_ulonglong, c_ulonglong]
954
+
955
+ self.qrack_lib.CLXNOR.restype = None
956
+ self.qrack_lib.CLXNOR.argtypes = [c_ulonglong, c_bool, c_ulonglong, c_ulonglong]
957
+
958
+ # Fourier transform
959
+
960
+ self.qrack_lib.QFT.restype = None
961
+ self.qrack_lib.QFT.argtypes = [c_ulonglong, c_ulonglong, POINTER(c_ulonglong)]
962
+
963
+ self.qrack_lib.IQFT.restype = None
964
+ self.qrack_lib.IQFT.argtypes = [c_ulonglong, c_ulonglong, POINTER(c_ulonglong)]
965
+
966
+ # Arithmetic-Logic-Unit (ALU)
967
+
968
+ self.qrack_lib.ADD.restype = None
969
+ self.qrack_lib.ADD.argtypes = [
970
+ c_ulonglong,
971
+ c_ulonglong,
972
+ POINTER(c_ulonglong),
973
+ c_ulonglong,
974
+ POINTER(c_ulonglong),
975
+ ]
976
+
977
+ self.qrack_lib.SUB.restype = None
978
+ self.qrack_lib.SUB.argtypes = [
979
+ c_ulonglong,
980
+ c_ulonglong,
981
+ POINTER(c_ulonglong),
982
+ c_ulonglong,
983
+ POINTER(c_ulonglong),
984
+ ]
985
+
986
+ self.qrack_lib.ADDS.restype = None
987
+ self.qrack_lib.ADDS.argtypes = [
988
+ c_ulonglong,
989
+ c_ulonglong,
990
+ POINTER(c_ulonglong),
991
+ c_ulonglong,
992
+ c_ulonglong,
993
+ POINTER(c_ulonglong),
994
+ ]
995
+
996
+ self.qrack_lib.SUBS.restype = None
997
+ self.qrack_lib.SUBS.argtypes = [
998
+ c_ulonglong,
999
+ c_ulonglong,
1000
+ POINTER(c_ulonglong),
1001
+ c_ulonglong,
1002
+ c_ulonglong,
1003
+ POINTER(c_ulonglong),
1004
+ ]
1005
+
1006
+ self.qrack_lib.MUL.restype = None
1007
+ self.qrack_lib.MUL.argtypes = [
1008
+ c_ulonglong,
1009
+ c_ulonglong,
1010
+ POINTER(c_ulonglong),
1011
+ c_ulonglong,
1012
+ POINTER(c_ulonglong),
1013
+ POINTER(c_ulonglong),
1014
+ ]
1015
+
1016
+ self.qrack_lib.DIV.restype = None
1017
+ self.qrack_lib.DIV.argtypes = [
1018
+ c_ulonglong,
1019
+ c_ulonglong,
1020
+ POINTER(c_ulonglong),
1021
+ c_ulonglong,
1022
+ POINTER(c_ulonglong),
1023
+ POINTER(c_ulonglong),
1024
+ ]
1025
+
1026
+ self.qrack_lib.MULN.restype = None
1027
+ self.qrack_lib.MULN.argtypes = [
1028
+ c_ulonglong,
1029
+ c_ulonglong,
1030
+ POINTER(c_ulonglong),
1031
+ POINTER(c_ulonglong),
1032
+ c_ulonglong,
1033
+ POINTER(c_ulonglong),
1034
+ POINTER(c_ulonglong),
1035
+ ]
1036
+
1037
+ self.qrack_lib.DIVN.restype = None
1038
+ self.qrack_lib.DIVN.argtypes = [
1039
+ c_ulonglong,
1040
+ c_ulonglong,
1041
+ POINTER(c_ulonglong),
1042
+ POINTER(c_ulonglong),
1043
+ c_ulonglong,
1044
+ POINTER(c_ulonglong),
1045
+ POINTER(c_ulonglong),
1046
+ ]
1047
+
1048
+ self.qrack_lib.POWN.restype = None
1049
+ self.qrack_lib.POWN.argtypes = [
1050
+ c_ulonglong,
1051
+ c_ulonglong,
1052
+ POINTER(c_ulonglong),
1053
+ POINTER(c_ulonglong),
1054
+ c_ulonglong,
1055
+ POINTER(c_ulonglong),
1056
+ POINTER(c_ulonglong),
1057
+ ]
1058
+
1059
+ self.qrack_lib.MCADD.restype = None
1060
+ self.qrack_lib.MCADD.argtypes = [
1061
+ c_ulonglong,
1062
+ c_ulonglong,
1063
+ POINTER(c_ulonglong),
1064
+ c_ulonglong,
1065
+ POINTER(c_ulonglong),
1066
+ c_ulonglong,
1067
+ POINTER(c_ulonglong),
1068
+ ]
1069
+
1070
+ self.qrack_lib.MCSUB.restype = None
1071
+ self.qrack_lib.MCSUB.argtypes = [
1072
+ c_ulonglong,
1073
+ c_ulonglong,
1074
+ POINTER(c_ulonglong),
1075
+ c_ulonglong,
1076
+ POINTER(c_ulonglong),
1077
+ c_ulonglong,
1078
+ POINTER(c_ulonglong),
1079
+ ]
1080
+
1081
+ self.qrack_lib.MCMUL.restype = None
1082
+ self.qrack_lib.MCMUL.argtypes = [
1083
+ c_ulonglong,
1084
+ c_ulonglong,
1085
+ POINTER(c_ulonglong),
1086
+ c_ulonglong,
1087
+ POINTER(c_ulonglong),
1088
+ c_ulonglong,
1089
+ POINTER(c_ulonglong),
1090
+ ]
1091
+
1092
+ self.qrack_lib.MCDIV.restype = None
1093
+ self.qrack_lib.MCDIV.argtypes = [
1094
+ c_ulonglong,
1095
+ c_ulonglong,
1096
+ POINTER(c_ulonglong),
1097
+ c_ulonglong,
1098
+ POINTER(c_ulonglong),
1099
+ c_ulonglong,
1100
+ POINTER(c_ulonglong),
1101
+ ]
1102
+
1103
+ self.qrack_lib.MCMULN.restype = None
1104
+ self.qrack_lib.MCMULN.argtypes = [
1105
+ c_ulonglong,
1106
+ c_ulonglong,
1107
+ POINTER(c_ulonglong),
1108
+ c_ulonglong,
1109
+ POINTER(c_ulonglong),
1110
+ POINTER(c_ulonglong),
1111
+ c_ulonglong,
1112
+ POINTER(c_ulonglong),
1113
+ POINTER(c_ulonglong),
1114
+ ]
1115
+
1116
+ self.qrack_lib.MCDIVN.restype = None
1117
+ self.qrack_lib.MCDIVN.argtypes = [
1118
+ c_ulonglong,
1119
+ c_ulonglong,
1120
+ POINTER(c_ulonglong),
1121
+ c_ulonglong,
1122
+ POINTER(c_ulonglong),
1123
+ POINTER(c_ulonglong),
1124
+ c_ulonglong,
1125
+ POINTER(c_ulonglong),
1126
+ POINTER(c_ulonglong),
1127
+ ]
1128
+
1129
+ self.qrack_lib.MCPOWN.restype = None
1130
+ self.qrack_lib.MCPOWN.argtypes = [
1131
+ c_ulonglong,
1132
+ c_ulonglong,
1133
+ POINTER(c_ulonglong),
1134
+ c_ulonglong,
1135
+ POINTER(c_ulonglong),
1136
+ POINTER(c_ulonglong),
1137
+ c_ulonglong,
1138
+ POINTER(c_ulonglong),
1139
+ POINTER(c_ulonglong),
1140
+ ]
1141
+
1142
+ self.qrack_lib.LDA.restype = None
1143
+ self.qrack_lib.LDA.argType = [
1144
+ c_ulonglong,
1145
+ c_ulonglong,
1146
+ POINTER(c_ulonglong),
1147
+ c_ulonglong,
1148
+ POINTER(c_ulonglong),
1149
+ POINTER(c_ubyte),
1150
+ ]
1151
+
1152
+ self.qrack_lib.ADC.restype = None
1153
+ self.qrack_lib.ADC.argType = [
1154
+ c_ulonglong,
1155
+ c_ulonglong,
1156
+ c_ulonglong,
1157
+ POINTER(c_ulonglong),
1158
+ c_ulonglong,
1159
+ POINTER(c_ulonglong),
1160
+ POINTER(c_ubyte),
1161
+ ]
1162
+
1163
+ self.qrack_lib.SBC.restype = None
1164
+ self.qrack_lib.SBC.argType = [
1165
+ c_ulonglong,
1166
+ c_ulonglong,
1167
+ c_ulonglong,
1168
+ POINTER(c_ulonglong),
1169
+ c_ulonglong,
1170
+ POINTER(c_ulonglong),
1171
+ POINTER(c_ubyte),
1172
+ ]
1173
+
1174
+ self.qrack_lib.Hash.restype = None
1175
+ self.qrack_lib.Hash.argType = [
1176
+ c_ulonglong,
1177
+ c_ulonglong,
1178
+ POINTER(c_ulonglong),
1179
+ POINTER(c_ubyte),
1180
+ ]
1181
+
1182
+ # miscellaneous
1183
+
1184
+ self.qrack_lib.TrySeparate1Qb.restype = c_bool
1185
+ self.qrack_lib.TrySeparate1Qb.argtypes = [c_ulonglong, c_ulonglong]
1186
+
1187
+ self.qrack_lib.TrySeparate2Qb.restype = c_bool
1188
+ self.qrack_lib.TrySeparate2Qb.argtypes = [c_ulonglong, c_ulonglong, c_ulonglong]
1189
+
1190
+ self.qrack_lib.TrySeparateTol.restype = c_bool
1191
+ self.qrack_lib.TrySeparateTol.argtypes = [
1192
+ c_ulonglong,
1193
+ c_ulonglong,
1194
+ POINTER(c_ulonglong),
1195
+ c_double,
1196
+ ]
1197
+
1198
+ self.qrack_lib.Separate.restype = None
1199
+ self.qrack_lib.Separate.argtypes = [
1200
+ c_ulonglong,
1201
+ c_ulonglong,
1202
+ POINTER(c_ulonglong),
1203
+ ]
1204
+
1205
+ self.qrack_lib.GetUnitaryFidelity.restype = c_double
1206
+ self.qrack_lib.GetUnitaryFidelity.argtypes = [c_ulonglong]
1207
+
1208
+ self.qrack_lib.ResetUnitaryFidelity.restype = None
1209
+ self.qrack_lib.ResetUnitaryFidelity.argtypes = [c_ulonglong]
1210
+
1211
+ self.qrack_lib.SetSdrp.restype = None
1212
+ self.qrack_lib.SetSdrp.argtypes = [c_ulonglong, c_double]
1213
+
1214
+ self.qrack_lib.SetNcrp.restype = None
1215
+ self.qrack_lib.SetNcrp.argtypes = [c_ulonglong, c_double]
1216
+
1217
+ self.qrack_lib.SetReactiveSeparate.restype = None
1218
+ self.qrack_lib.SetReactiveSeparate.argtypes = [c_ulonglong, c_bool]
1219
+
1220
+ self.qrack_lib.SetTInjection.restype = None
1221
+ self.qrack_lib.SetTInjection.argtypes = [c_ulonglong, c_bool]
1222
+
1223
+ self.qrack_lib.SetNoiseParameter.restype = None
1224
+ self.qrack_lib.SetNoiseParameter.argtypes = [c_ulonglong, c_double]
1225
+
1226
+ self.qrack_lib.SetAceMaxQb.restype = None
1227
+ self.qrack_lib.SetAceMaxQb.argtypes = [c_ulonglong, c_ulonglong]
1228
+
1229
+ self.qrack_lib.SetSparseAceMaxMb.restype = None
1230
+ self.qrack_lib.SetSparseAceMaxMb.argtypes = [c_ulonglong, c_size_t]
1231
+
1232
+ self.qrack_lib.Normalize.restype = None
1233
+ self.qrack_lib.Normalize.argtypes = [c_ulonglong]
1234
+
1235
+ self.qrack_lib.qstabilizer_out_to_file.restype = None
1236
+ self.qrack_lib.qstabilizer_out_to_file.argtypes = [c_ulonglong, c_char_p]
1237
+
1238
+ self.qrack_lib.qstabilizer_in_from_file.restype = None
1239
+ self.qrack_lib.qstabilizer_in_from_file.argtypes = [c_ulonglong, c_char_p]
1240
+
1241
+ self.qrack_lib.init_qneuron.restype = c_ulonglong
1242
+ self.qrack_lib.init_qneuron.argtypes = [
1243
+ c_ulonglong,
1244
+ c_ulonglong,
1245
+ POINTER(c_ulonglong),
1246
+ c_ulonglong,
1247
+ ]
1248
+
1249
+ self.qrack_lib.clone_qneuron.restype = c_ulonglong
1250
+ self.qrack_lib.clone_qneuron.argtypes = [c_ulonglong]
1251
+
1252
+ self.qrack_lib.destroy_qneuron.restype = None
1253
+ self.qrack_lib.destroy_qneuron.argtypes = [c_ulonglong]
1254
+
1255
+ self.qrack_lib.set_qneuron_sim.restype = None
1256
+ self.qrack_lib.set_qneuron_sim.argtypes = [
1257
+ c_ulonglong,
1258
+ c_ulonglong,
1259
+ c_ulonglong,
1260
+ POINTER(c_ulonglong),
1261
+ c_ulonglong
1262
+ ]
1263
+
1264
+ if self.fppow <= 5:
1265
+ self.qrack_lib.qneuron_predict.restype = c_double
1266
+ self.qrack_lib.qneuron_predict.argtypes = [c_ulonglong, POINTER(c_float), c_bool, c_bool, c_ulonglong, c_double]
1267
+
1268
+ self.qrack_lib.qneuron_unpredict.restype = c_double
1269
+ self.qrack_lib.qneuron_unpredict.argtypes = [c_ulonglong, POINTER(c_float), c_bool, c_ulonglong, c_double]
1270
+
1271
+ self.qrack_lib.qneuron_learn_cycle.restype = c_double
1272
+ self.qrack_lib.qneuron_learn_cycle.argtypes = [c_ulonglong, POINTER(c_float), c_bool, c_ulonglong, c_double]
1273
+
1274
+ self.qrack_lib.qneuron_learn.restype = None
1275
+ self.qrack_lib.qneuron_learn.argtypes = [c_ulonglong, POINTER(c_float), c_double, c_bool, c_bool, c_ulonglong, c_double]
1276
+
1277
+ self.qrack_lib.qneuron_learn_permutation.restype = None
1278
+ self.qrack_lib.qneuron_learn_permutation.argtypes = [
1279
+ c_ulonglong,
1280
+ POINTER(c_float),
1281
+ c_double,
1282
+ c_bool,
1283
+ c_bool,
1284
+ c_ulonglong,
1285
+ c_double,
1286
+ ]
1287
+ else:
1288
+ self.qrack_lib.qneuron_predict.restype = c_double
1289
+ self.qrack_lib.qneuron_predict.argtypes = [c_ulonglong, POINTER(c_double), c_bool, c_bool, c_ulonglong, c_double]
1290
+
1291
+ self.qrack_lib.qneuron_unpredict.restype = c_double
1292
+ self.qrack_lib.qneuron_unpredict.argtypes = [c_ulonglong, POINTER(c_double), c_bool, c_ulonglong, c_double]
1293
+
1294
+ self.qrack_lib.qneuron_learn_cycle.restype = c_double
1295
+ self.qrack_lib.qneuron_learn_cycle.argtypes = [c_ulonglong, POINTER(c_double), c_bool, c_ulonglong, c_double]
1296
+
1297
+ self.qrack_lib.qneuron_learn.restype = None
1298
+ self.qrack_lib.qneuron_learn.argtypes = [c_ulonglong, POINTER(c_double), c_double, c_bool, c_bool, c_ulonglong, c_double]
1299
+
1300
+ self.qrack_lib.qneuron_learn_permutation.restype = None
1301
+ self.qrack_lib.qneuron_learn_permutation.argtypes = [
1302
+ c_ulonglong,
1303
+ POINTER(c_double),
1304
+ c_double,
1305
+ c_bool,
1306
+ c_bool,
1307
+ c_ulonglong,
1308
+ c_double,
1309
+ ]
1310
+
1311
+ self.qrack_lib.init_qcircuit.restype = c_ulonglong
1312
+ self.qrack_lib.init_qcircuit.argtypes = [c_bool, c_bool]
1313
+
1314
+ self.qrack_lib.init_qcircuit_clone.restype = c_ulonglong
1315
+ self.qrack_lib.init_qcircuit_clone.argtypes = [c_ulonglong]
1316
+
1317
+ self.qrack_lib.qcircuit_inverse.restype = c_ulonglong
1318
+ self.qrack_lib.qcircuit_inverse.argtypes = [c_ulonglong]
1319
+
1320
+ self.qrack_lib.qcircuit_past_light_cone.restype = c_ulonglong
1321
+ self.qrack_lib.qcircuit_past_light_cone.argtypes = [
1322
+ c_ulonglong,
1323
+ c_ulonglong,
1324
+ POINTER(c_ulonglong),
1325
+ ]
1326
+
1327
+ self.qrack_lib.destroy_qcircuit.restype = None
1328
+ self.qrack_lib.destroy_qcircuit.argtypes = [c_ulonglong]
1329
+
1330
+ self.qrack_lib.get_qcircuit_qubit_count.restype = c_ulonglong
1331
+ self.qrack_lib.get_qcircuit_qubit_count.argtypes = [c_ulonglong]
1332
+
1333
+ self.qrack_lib.qcircuit_swap.restype = None
1334
+ self.qrack_lib.qcircuit_swap.argtypes = [c_ulonglong, c_ulonglong, c_ulonglong]
1335
+
1336
+ self.qrack_lib.qcircuit_append_1qb.restype = None
1337
+ self.qrack_lib.qcircuit_append_1qb.argtypes = [
1338
+ c_ulonglong,
1339
+ POINTER(c_double),
1340
+ c_ulonglong,
1341
+ ]
1342
+
1343
+ self.qrack_lib.qcircuit_append_mc.restype = None
1344
+ self.qrack_lib.qcircuit_append_mc.argtypes = [
1345
+ c_ulonglong,
1346
+ POINTER(c_double),
1347
+ c_ulonglong,
1348
+ POINTER(c_ulonglong),
1349
+ c_ulonglong,
1350
+ c_ulonglong,
1351
+ ]
1352
+
1353
+ self.qrack_lib.qcircuit_run.restype = None
1354
+ self.qrack_lib.qcircuit_run.argtypes = [c_ulonglong, c_ulonglong]
1355
+
1356
+ self.qrack_lib.qcircuit_out_to_file.restype = None
1357
+ self.qrack_lib.qcircuit_out_to_file.argtypes = [c_ulonglong, c_char_p]
1358
+
1359
+ self.qrack_lib.qcircuit_in_from_file.restype = None
1360
+ self.qrack_lib.qcircuit_in_from_file.argtypes = [c_ulonglong, c_char_p]
1361
+
1362
+ self.qrack_lib.qcircuit_out_to_string_length.restype = c_size_t
1363
+ self.qrack_lib.qcircuit_out_to_string_length.argtypes = [c_ulonglong]
1364
+
1365
+ self.qrack_lib.qcircuit_out_to_string.restype = None
1366
+ self.qrack_lib.qcircuit_out_to_string.argtypes = [c_ulonglong, c_char_p]