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