pyqrack-cuda 1.44.31__tar.gz → 1.44.33__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.44.31/pyqrack_cuda.egg-info → pyqrack_cuda-1.44.33}/PKG-INFO +1 -1
  2. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_ace_backend.py +40 -11
  3. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
  4. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/setup.py +1 -1
  5. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/LICENSE +0 -0
  6. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/MANIFEST.in +0 -0
  7. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/Makefile +0 -0
  8. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/README.md +0 -0
  9. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyproject.toml +0 -0
  10. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/__init__.py +0 -0
  11. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/neuron_activation_fn.py +0 -0
  12. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/pauli.py +0 -0
  13. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_circuit.py +0 -0
  14. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_neuron.py +0 -0
  15. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_neuron_torch_layer.py +0 -0
  16. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_simulator.py +0 -0
  17. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_stabilizer.py +0 -0
  18. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_system/__init__.py +0 -0
  19. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_system/qrack_system.py +0 -0
  20. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/quimb_circuit_type.py +0 -0
  21. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/stats/__init__.py +0 -0
  22. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/stats/load_quantized_data.py +0 -0
  23. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/stats/quantize_by_range.py +0 -0
  24. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
  25. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
  26. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
  27. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/requires.txt +0 -0
  28. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/top_level.txt +0 -0
  29. {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.44.31
3
+ Version: 1.44.33
4
4
  Summary: pyqrack - Pure Python vm6502q/qrack Wrapper
5
5
  Home-page: https://github.com/vm6502q/pyqrack
6
6
  Author: Daniel Strano
@@ -193,11 +193,11 @@ class QrackAceBackend:
193
193
  z_score_numer = syndrome_sum - shots / 2
194
194
  z_score = 0
195
195
  if z_score_numer > 0:
196
- syndrome_mean = syndrome_sum / shots
197
- syndrome_variance = (
198
- sum((value - syndrome_mean) ** 2 for value in values) / shots
196
+ syndrome_component_mean = syndrome_sum / shots
197
+ syndrome_total_variance = sum(
198
+ (value - syndrome_component_mean) ** 2 for value in values
199
199
  )
200
- z_score_denom = math.sqrt(syndrome_variance)
200
+ z_score_denom = math.sqrt(syndrome_total_variance)
201
201
  z_score = (
202
202
  math.inf
203
203
  if math.isclose(z_score_denom, 0)
@@ -423,17 +423,34 @@ class QrackAceBackend:
423
423
 
424
424
  def m(self, lq):
425
425
  hq = self._unpack(lq)
426
+ even_row = not ((lq // self.row_length) & 1)
427
+ if not self.alternating_codes or even_row:
428
+ single_bit = 2
429
+ other_bits = [0, 1]
430
+ else:
431
+ single_bit = 0
432
+ other_bits = [1, 2]
426
433
  syndrome = 0
427
434
  bits = []
428
- for q in hq:
429
- bits.append(self.sim.m(q))
435
+ for q in other_bits:
436
+ bits.append(self.sim.m(hq[q]))
430
437
  if bits[-1]:
431
438
  syndrome += 1
432
- result = True if (syndrome > 1) else False
433
- for i in range(len(hq)):
439
+ # single_bit never shares entanglement with other_bits.
440
+ # In the ideal, it should simply duplicate other_bits.
441
+ # So get more precision by using it analytically.
442
+ analytical = self.sim.prob(hq[single_bit])
443
+ syndrome += analytical
444
+ result = True if (syndrome >= 1.5) else False
445
+ # The two separable parts of the code are correlated,
446
+ # but not non-locally, via entanglement.
447
+ # Prefer to collapse the analytical part toward agreement.
448
+ bits.append(self.sim.m(hq[single_bit]) if math.isclose(analytical, 0 if result else 1) else self.sim.force_m(hq[single_bit], result))
449
+ for i in range(2):
434
450
  if bits[i] != result:
435
- self.sim.x(hq[i])
436
-
451
+ self.sim.x(hq[other_bits[i]])
452
+ if bits[2] != result:
453
+ self.sim.x(hq[single_bit])
437
454
  self._is_init[lq] = False
438
455
 
439
456
  return result
@@ -447,7 +464,19 @@ class QrackAceBackend:
447
464
 
448
465
  return result
449
466
 
450
- def measure_shots(self, q, s):
467
+ def measure_shots(self, q, s, high_accuracy=False):
468
+ if high_accuracy:
469
+ samples = []
470
+ for _ in range(s):
471
+ clone = self.sim.clone()
472
+ sample = 0
473
+ for i in range(len(q)):
474
+ if clone.m(q[i]):
475
+ sample |= 1 << i
476
+ samples.append(sample)
477
+
478
+ return samples
479
+
451
480
  _q = []
452
481
  for i in q:
453
482
  _q.append(3 * i)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.44.31
3
+ Version: 1.44.33
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.44.31"
10
+ VERSION = "1.44.33"
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