pyqrack-cuda 1.47.0__tar.gz → 1.48.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.47.0/pyqrack_cuda.egg-info → pyqrack_cuda-1.48.0}/PKG-INFO +1 -1
  2. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/qrack_ace_backend.py +23 -45
  3. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
  4. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/setup.py +1 -1
  5. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/LICENSE +0 -0
  6. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/MANIFEST.in +0 -0
  7. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/Makefile +0 -0
  8. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/README.md +0 -0
  9. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyproject.toml +0 -0
  10. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/__init__.py +0 -0
  11. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/neuron_activation_fn.py +0 -0
  12. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/pauli.py +0 -0
  13. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/qrack_circuit.py +0 -0
  14. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/qrack_neuron.py +0 -0
  15. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/qrack_neuron_torch_layer.py +0 -0
  16. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/qrack_simulator.py +0 -0
  17. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/qrack_stabilizer.py +0 -0
  18. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/qrack_system/__init__.py +0 -0
  19. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/qrack_system/qrack_system.py +0 -0
  20. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/quimb_circuit_type.py +0 -0
  21. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/stats/__init__.py +0 -0
  22. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/stats/load_quantized_data.py +0 -0
  23. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack/stats/quantize_by_range.py +0 -0
  24. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
  25. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
  26. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
  27. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack_cuda.egg-info/requires.txt +0 -0
  28. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/pyqrack_cuda.egg-info/top_level.txt +0 -0
  29. {pyqrack_cuda-1.47.0 → pyqrack_cuda-1.48.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.47.0
3
+ Version: 1.48.0
4
4
  Summary: pyqrack - Pure Python vm6502q/qrack Wrapper
5
5
  Home-page: https://github.com/vm6502q/pyqrack
6
6
  Author: Daniel Strano
@@ -34,16 +34,15 @@ class QrackAceBackend:
34
34
  Attributes:
35
35
  sim(QrackSimulator): Corresponding simulator.
36
36
  alternating_codes(bool): Alternate repetition code elision by index?
37
- recursive_stack_depth(int): How many recursive nestings?
38
37
  row_length(int): Qubits per row.
39
38
  col_length(int): Qubits per column.
39
+ long_range_columns(int): How many ideal rows between QEC boundary rows?
40
40
  """
41
41
 
42
42
  def __init__(
43
43
  self,
44
44
  qubit_count=1,
45
- long_range_rows=0,
46
- recursive_stack_depth=1,
45
+ long_range_columns=0,
47
46
  alternating_codes=True,
48
47
  reverse_row_and_col=False,
49
48
  isTensorNetwork=False,
@@ -51,62 +50,41 @@ class QrackAceBackend:
51
50
  isBinaryDecisionTree=False,
52
51
  toClone=None,
53
52
  ):
53
+ if long_range_columns < 0:
54
+ long_range_columns = 0
55
+ if qubit_count < 0:
56
+ qubit_count = 0
54
57
  if toClone:
55
58
  qubit_count = toClone.num_qubits()
56
- recursive_stack_depth = toClone.recursive_stack_depth
57
- if recursive_stack_depth < 1:
58
- recursive_stack_depth = 1
59
- if long_range_rows < 0:
60
- long_range_rows = 0
59
+ long_range_columns = toClone.long_range_columns
61
60
 
62
- self.recursive_stack_depth = recursive_stack_depth
63
61
  self._factor_width(qubit_count, reverse_row_and_col)
64
62
  self.alternating_codes = alternating_codes
63
+ self.long_range_columns = long_range_columns
65
64
  self._is_init = [False] * qubit_count
66
65
 
67
- col_seq = [False] + [True] * long_range_rows
68
- self._is_col_long_range = col_seq * (self.row_length // len(col_seq))
69
- self._is_col_long_range += [True] * (
70
- self.row_length - len(self._is_col_long_range)
71
- )
66
+ col_seq = [False] + [True] * long_range_columns
67
+ len_col_seq = len(col_seq)
68
+ self._is_col_long_range = (col_seq * ((self.row_length + len_col_seq - 1) // len_col_seq))[:self.row_length]
72
69
  self._hardware_offset = []
73
70
  tot_qubits = 0
74
- for _ in range(self.row_length):
71
+ for _ in range(self.col_length):
75
72
  for c in self._is_col_long_range:
76
73
  self._hardware_offset.append(tot_qubits)
77
74
  tot_qubits += 1 if c else 3
78
75
  self._ancilla = tot_qubits
79
76
  tot_qubits += 1
80
77
 
81
- if recursive_stack_depth > 1:
82
- recursive_stack_depth -= 1
83
- self.sim = (
84
- toClone.sim
85
- if toClone
86
- else QrackAceBackend(
87
- tot_qubits,
88
- recursive_stack_depth,
89
- alternating_codes,
90
- reverse_row_and_col,
91
- isTensorNetwork,
92
- isStabilizerHybrid,
93
- isBinaryDecisionTree,
94
- )
95
- )
96
- # This leaves an "odd-man-out" ancillary qubit.
97
- self.sim.row_length = 3 * self.row_length
98
- self.sim.col_length = self.col_length
99
- else:
100
- self.sim = (
101
- toClone.sim.clone()
102
- if toClone
103
- else QrackSimulator(
104
- tot_qubits,
105
- isTensorNetwork=isTensorNetwork,
106
- isStabilizerHybrid=isStabilizerHybrid,
107
- isBinaryDecisionTree=isBinaryDecisionTree,
108
- )
78
+ self.sim = (
79
+ toClone.sim.clone()
80
+ if toClone
81
+ else QrackSimulator(
82
+ tot_qubits,
83
+ isTensorNetwork=isTensorNetwork,
84
+ isStabilizerHybrid=isStabilizerHybrid,
85
+ isBinaryDecisionTree=isBinaryDecisionTree,
109
86
  )
87
+ )
110
88
 
111
89
  def clone(self):
112
90
  return QrackAceBackend(toClone=self)
@@ -621,6 +599,7 @@ class QrackAceBackend:
621
599
  self.swap(lq1, lq2)
622
600
 
623
601
  def m(self, lq):
602
+ self._is_init[lq] = False
624
603
  hq = self._unpack(lq)
625
604
  if self._is_col_long_range[lq % self.row_length]:
626
605
  return self.sim.m(hq[0])
@@ -639,19 +618,18 @@ class QrackAceBackend:
639
618
  # but not non-locally, via entanglement.
640
619
  # Collapse the other separable part toward agreement.
641
620
  syndrome += self.sim.force_m(hq[single_bit], bool(syndrome))
642
- self._is_init[lq] = False
643
621
 
644
622
  return True if (syndrome > 1) else False
645
623
 
646
624
  def force_m(self, lq, c):
647
625
  hq = self._unpack(lq)
626
+ self._is_init[lq] = False
648
627
  if self._is_col_long_range[lq % self.row_length]:
649
628
  return self.sim.force_m(hq[0])
650
629
 
651
630
  self._correct(lq)
652
631
  for q in hq:
653
632
  self.sim.force_m(q, c)
654
- self._is_init[lq] = False
655
633
 
656
634
  return c
657
635
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.47.0
3
+ Version: 1.48.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.47.0"
10
+ VERSION = "1.48.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