pyqrack-cuda 1.44.32__tar.gz → 1.44.34__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.32/pyqrack_cuda.egg-info → pyqrack_cuda-1.44.34}/PKG-INFO +1 -1
  2. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/qrack_ace_backend.py +42 -10
  3. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
  4. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/setup.py +1 -1
  5. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/LICENSE +0 -0
  6. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/MANIFEST.in +0 -0
  7. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/Makefile +0 -0
  8. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/README.md +0 -0
  9. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyproject.toml +0 -0
  10. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/__init__.py +0 -0
  11. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/neuron_activation_fn.py +0 -0
  12. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/pauli.py +0 -0
  13. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/qrack_circuit.py +0 -0
  14. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/qrack_neuron.py +0 -0
  15. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/qrack_neuron_torch_layer.py +0 -0
  16. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/qrack_simulator.py +0 -0
  17. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/qrack_stabilizer.py +0 -0
  18. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/qrack_system/__init__.py +0 -0
  19. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/qrack_system/qrack_system.py +0 -0
  20. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/quimb_circuit_type.py +0 -0
  21. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/stats/__init__.py +0 -0
  22. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/stats/load_quantized_data.py +0 -0
  23. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack/stats/quantize_by_range.py +0 -0
  24. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
  25. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
  26. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
  27. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack_cuda.egg-info/requires.txt +0 -0
  28. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/pyqrack_cuda.egg-info/top_level.txt +0 -0
  29. {pyqrack_cuda-1.44.32 → pyqrack_cuda-1.44.34}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.44.32
3
+ Version: 1.44.34
4
4
  Summary: pyqrack - Pure Python vm6502q/qrack Wrapper
5
5
  Home-page: https://github.com/vm6502q/pyqrack
6
6
  Author: Daniel Strano
@@ -423,31 +423,63 @@ 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
440
457
 
441
458
  def m_all(self):
442
459
  result = 0
443
- for lq in range(self.sim.num_qubits() // 3):
444
- result <<= 1
460
+ # Whenever a nonzero syndrome occurs (so the code has an error),
461
+ # we insert the more-probable results and collapse towards it.
462
+ # Randomize the order of post-selection to amortize error.
463
+ lqubits = random.shuffle(list(range(self.sim.num_qubits() // 3)))
464
+ for lq in lqubits:
445
465
  if self.m(lq):
446
- result |= 1
466
+ result |= 1 << lq
447
467
 
448
468
  return result
449
469
 
450
- def measure_shots(self, q, s):
470
+ def measure_shots(self, q, s, high_accuracy=False):
471
+ if high_accuracy:
472
+ samples = []
473
+ for _ in range(s):
474
+ clone = self.sim.clone()
475
+ sample = 0
476
+ for i in range(len(q)):
477
+ if clone.m(q[i]):
478
+ sample |= 1 << i
479
+ samples.append(sample)
480
+
481
+ return samples
482
+
451
483
  _q = []
452
484
  for i in q:
453
485
  _q.append(3 * i)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.44.32
3
+ Version: 1.44.34
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.32"
10
+ VERSION = "1.44.34"
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