pyqrack-cuda 1.49.8__tar.gz → 1.50.0__tar.gz

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.
Files changed (29) hide show
  1. {pyqrack_cuda-1.49.8/pyqrack_cuda.egg-info → pyqrack_cuda-1.50.0}/PKG-INFO +1 -1
  2. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/qrack_ace_backend.py +25 -13
  3. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
  4. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/setup.py +1 -1
  5. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/LICENSE +0 -0
  6. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/MANIFEST.in +0 -0
  7. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/Makefile +0 -0
  8. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/README.md +0 -0
  9. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyproject.toml +0 -0
  10. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/__init__.py +0 -0
  11. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/neuron_activation_fn.py +0 -0
  12. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/pauli.py +0 -0
  13. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/qrack_circuit.py +0 -0
  14. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/qrack_neuron.py +0 -0
  15. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/qrack_neuron_torch_layer.py +0 -0
  16. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/qrack_simulator.py +0 -0
  17. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/qrack_stabilizer.py +0 -0
  18. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/qrack_system/__init__.py +0 -0
  19. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/qrack_system/qrack_system.py +0 -0
  20. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/quimb_circuit_type.py +0 -0
  21. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/stats/__init__.py +0 -0
  22. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/stats/load_quantized_data.py +0 -0
  23. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack/stats/quantize_by_range.py +0 -0
  24. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
  25. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
  26. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
  27. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack_cuda.egg-info/requires.txt +0 -0
  28. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/pyqrack_cuda.egg-info/top_level.txt +0 -0
  29. {pyqrack_cuda-1.49.8 → pyqrack_cuda-1.50.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.49.8
3
+ Version: 1.50.0
4
4
  Summary: pyqrack - Pure Python vm6502q/qrack Wrapper
5
5
  Home-page: https://github.com/vm6502q/pyqrack
6
6
  Author: Daniel Strano
@@ -3,6 +3,7 @@
3
3
  # Use of this source code is governed by an MIT-style license that can be
4
4
  # found in the LICENSE file or at https://opensource.org/licenses/MIT.
5
5
  import math
6
+ import os
6
7
  import random
7
8
  import sys
8
9
  import time
@@ -48,7 +49,7 @@ class QrackAceBackend:
48
49
  def __init__(
49
50
  self,
50
51
  qubit_count=1,
51
- long_range_columns=2,
52
+ long_range_columns=-1,
52
53
  alternating_codes=True,
53
54
  reverse_row_and_col=False,
54
55
  isTensorNetwork=False,
@@ -56,8 +57,6 @@ class QrackAceBackend:
56
57
  isBinaryDecisionTree=False,
57
58
  toClone=None,
58
59
  ):
59
- if long_range_columns < 0:
60
- long_range_columns = 0
61
60
  if qubit_count < 0:
62
61
  qubit_count = 0
63
62
  if toClone:
@@ -65,8 +64,11 @@ class QrackAceBackend:
65
64
  long_range_columns = toClone.long_range_columns
66
65
 
67
66
  self._factor_width(qubit_count, reverse_row_and_col)
68
- self.alternating_codes = alternating_codes
67
+ if long_range_columns < 0:
68
+ long_range_columns = 3 if (self.row_length % 3) == 1 else 2
69
69
  self.long_range_columns = long_range_columns
70
+
71
+ self.alternating_codes = alternating_codes
70
72
  self._is_init = [False] * qubit_count
71
73
  self._coupling_map = None
72
74
 
@@ -103,6 +105,10 @@ class QrackAceBackend:
103
105
  )
104
106
  )
105
107
 
108
+ # You can still "monkey-patch" this, after the constructor.
109
+ if "QRACK_QUNIT_SEPARABILITY_THRESHOLD" not in os.environ:
110
+ self.sim.set_sdrp(0.03)
111
+
106
112
  def clone(self):
107
113
  return QrackAceBackend(toClone=self)
108
114
 
@@ -212,6 +218,12 @@ class QrackAceBackend:
212
218
  self.sim.mcx([hq[0]], hq[1])
213
219
  self._cx_shadow(hq[0], hq[2])
214
220
 
221
+ def _encode_decode_1qb(self, lq, hq):
222
+ if not self.alternating_codes or not ((lq // self.row_length) & 1):
223
+ self.sim.mcx([hq[0]], hq[1])
224
+ else:
225
+ self.sim.mcx([hq[2]], hq[1])
226
+
215
227
  def _correct(self, lq):
216
228
  if not self._is_init[lq]:
217
229
  return
@@ -342,11 +354,11 @@ class QrackAceBackend:
342
354
  # Produces/destroys superposition
343
355
  if self._is_init[lq]:
344
356
  self._correct_if_like_h(th, lq)
345
- self.sim.mcx([hq[0]], hq[1])
357
+ self._encode_decode_1qb(lq, hq)
346
358
  self.sim.u(hq[0], th, ph, lm)
347
359
  self.sim.u(hq[2], th, ph, lm)
348
360
  if self._is_init[lq]:
349
- self.sim.mcx([hq[0]], hq[1])
361
+ self._encode_decode_1qb(lq, hq)
350
362
  else:
351
363
  self._encode(lq, hq)
352
364
  else:
@@ -374,11 +386,11 @@ class QrackAceBackend:
374
386
  else:
375
387
  # Produces/destroys superposition
376
388
  if self._is_init[lq]:
377
- self.sim.mcx([hq[0]], hq[1])
389
+ self._encode_decode_1qb(lq, hq)
378
390
  self.sim.r(p, th, hq[0])
379
391
  self.sim.r(p, th, hq[2])
380
392
  if self._is_init[lq]:
381
- self.sim.mcx([hq[0]], hq[1])
393
+ self._encode_decode_1qb(lq, hq)
382
394
  else:
383
395
  self._encode(lq, hq)
384
396
 
@@ -388,13 +400,13 @@ class QrackAceBackend:
388
400
  self.sim.h(hq[0])
389
401
  return
390
402
 
391
- self._correct(lq)
392
403
  if self._is_init[lq]:
393
- self.sim.mcx([hq[0]], hq[1])
404
+ self._correct(lq)
405
+ self._encode_decode_1qb(lq, hq)
394
406
  self.sim.h(hq[0])
395
407
  self.sim.h(hq[2])
396
408
  if self._is_init[lq]:
397
- self.sim.mcx([hq[0]], hq[1])
409
+ self._encode_decode_1qb(lq, hq)
398
410
  else:
399
411
  self._encode(lq, hq)
400
412
 
@@ -489,14 +501,14 @@ class QrackAceBackend:
489
501
  while self._is_col_long_range[c] and (len(connected_cols) < (self.row_length - 1)):
490
502
  connected_cols.append(c)
491
503
  c = (c - 1) % self.row_length
492
- if len(connected_cols) < self.row_length:
504
+ if len(connected_cols) < (self.row_length - 1):
493
505
  connected_cols.append(c)
494
506
  boundary = len(connected_cols)
495
507
  c = (lq1_col + 1) % self.row_length
496
508
  while self._is_col_long_range[c] and (len(connected_cols) < (self.row_length - 1)):
497
509
  connected_cols.append(c)
498
510
  c = (c + 1) % self.row_length
499
- if len(connected_cols) < self.row_length:
511
+ if len(connected_cols) < (self.row_length - 1):
500
512
  connected_cols.append(c)
501
513
 
502
514
  if lq1_lr and lq2_lr:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.49.8
3
+ Version: 1.50.0
4
4
  Summary: pyqrack - Pure Python vm6502q/qrack Wrapper
5
5
  Home-page: https://github.com/vm6502q/pyqrack
6
6
  Author: Daniel Strano
@@ -7,7 +7,7 @@ from setuptools import setup
7
7
  from setuptools.command.build_py import build_py
8
8
 
9
9
 
10
- VERSION = "1.49.8"
10
+ VERSION = "1.50.0"
11
11
 
12
12
  # Read long description from README.
13
13
  README_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'README.md')
File without changes
File without changes
File without changes
File without changes
File without changes