pyqrack-cuda 1.44.23__tar.gz → 1.44.25__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.23 → pyqrack_cuda-1.44.25}/Makefile +1 -1
  2. {pyqrack_cuda-1.44.23/pyqrack_cuda.egg-info → pyqrack_cuda-1.44.25}/PKG-INFO +1 -1
  3. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/qrack_ace_backend.py +34 -24
  4. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
  5. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/setup.py +1 -1
  6. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/LICENSE +0 -0
  7. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/MANIFEST.in +0 -0
  8. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/README.md +0 -0
  9. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyproject.toml +0 -0
  10. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/__init__.py +0 -0
  11. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/neuron_activation_fn.py +0 -0
  12. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/pauli.py +0 -0
  13. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/qrack_circuit.py +0 -0
  14. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/qrack_neuron.py +0 -0
  15. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/qrack_neuron_torch_layer.py +0 -0
  16. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/qrack_simulator.py +0 -0
  17. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/qrack_stabilizer.py +0 -0
  18. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/qrack_system/__init__.py +0 -0
  19. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/qrack_system/qrack_system.py +0 -0
  20. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/quimb_circuit_type.py +0 -0
  21. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/stats/__init__.py +0 -0
  22. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/stats/load_quantized_data.py +0 -0
  23. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack/stats/quantize_by_range.py +0 -0
  24. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
  25. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
  26. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
  27. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack_cuda.egg-info/requires.txt +0 -0
  28. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/pyqrack_cuda.egg-info/top_level.txt +0 -0
  29. {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.25}/setup.cfg +0 -0
@@ -18,7 +18,7 @@ help:
18
18
  build-deps:
19
19
  ifneq ($(OS),Windows_NT)
20
20
  ifeq ($(QRACK_PRESENT),)
21
- git clone https://github.com/unitaryfund/qrack.git; cd qrack; git checkout ce668dd0177a28b52da4fb66380cd51fafd39a56; cd ..
21
+ git clone https://github.com/unitaryfund/qrack.git; cd qrack; git checkout 065d4575ca82be0398ed726de59899c16500581f; cd ..
22
22
  endif
23
23
  mkdir -p qrack/build
24
24
  ifeq ($(UNAME_S),Linux)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.44.23
3
+ Version: 1.44.25
4
4
  Summary: pyqrack - Pure Python vm6502q/qrack Wrapper
5
5
  Home-page: https://github.com/vm6502q/pyqrack
6
6
  Author: Daniel Strano
@@ -38,8 +38,18 @@ class QrackAceBackend:
38
38
  col_length(int): Qubits per column.
39
39
  """
40
40
 
41
- def __init__(self, qubit_count=-1, alternating_codes=True, isTensorNetwork=False, toClone=None):
42
- self.sim = toClone.sim.clone() if toClone else QrackSimulator(3 * qubit_count + 1, isTensorNetwork=isTensorNetwork)
41
+ def __init__(
42
+ self,
43
+ qubit_count=1,
44
+ alternating_codes=True,
45
+ isTensorNetwork=False,
46
+ toClone=None,
47
+ ):
48
+ self.sim = (
49
+ toClone.sim.clone()
50
+ if toClone
51
+ else QrackSimulator(3 * qubit_count + 1, isTensorNetwork=isTensorNetwork)
52
+ )
43
53
  self._ancilla = 3 * qubit_count
44
54
  self._factor_width(qubit_count)
45
55
  self.alternating_codes = alternating_codes
@@ -130,38 +140,37 @@ class QrackAceBackend:
130
140
  self.sim.mcx([hq[0]], hq[1])
131
141
 
132
142
  def _correct(self, lq):
143
+ if not self._is_init[lq]:
144
+ return
133
145
  # We can't use true syndrome-based error correction,
134
146
  # because one of the qubits in the code is separated.
135
147
  # However, we can get pretty close!
136
- hq = self._unpack(lq)
137
148
  shots = 1024
138
- samples = self.sim.measure_shots(hq, shots)
139
- syndrome = [0, 0, 0]
140
- for sample in samples:
141
- match sample:
142
- case 1:
143
- syndrome[0] += 1
144
- case 2:
145
- syndrome[1] += 1
146
- case 4:
147
- syndrome[2] += 1
148
- case 6:
149
- syndrome[0] += 1
150
- case 5:
151
- syndrome[1] += 1
152
- case 3:
153
- syndrome[2] += 1
154
-
155
149
  row = lq // self.row_length
156
150
  even_row = not (row & 1)
157
151
  single_bit = 0
158
152
  other_bits = []
159
- if (not self.alternating_codes or even_row):
153
+ if not self.alternating_codes or even_row:
160
154
  single_bit = 2
161
155
  other_bits = [0, 1]
162
156
  else:
163
157
  single_bit = 0
164
158
  other_bits = [1, 2]
159
+ hq = self._unpack(lq)
160
+ single_bit_value = self.sim.prob(hq[single_bit])
161
+ samples = self.sim.measure_shots([hq[other_bits[0]], hq[other_bits[1]]], shots)
162
+ syndrome = [0, 0, 0]
163
+ syndrome_indices = [other_bits[1], other_bits[0]] if single_bit_value else [other_bits[0], other_bits[1]]
164
+ for sample in samples:
165
+ match sample:
166
+ case 0:
167
+ syndrome[single_bit] += single_bit_value
168
+ case 1:
169
+ syndrome[syndrome_indices[0]] += 1
170
+ case 2:
171
+ syndrome[syndrome_indices[1]] += 1
172
+ case 3:
173
+ syndrome[single_bit] += 1 - single_bit_value
165
174
 
166
175
  max_syndrome = max(syndrome)
167
176
  force_syndrome = True
@@ -193,6 +202,8 @@ class QrackAceBackend:
193
202
  self.sim.force_m(self._ancilla, False)
194
203
 
195
204
  def _correct_if_like_h(self, th, lq):
205
+ if not self._is_init[lq]:
206
+ return
196
207
  while th > math.pi:
197
208
  th -= 2 * math.pi
198
209
  while th <= -math.pi:
@@ -201,7 +212,6 @@ class QrackAceBackend:
201
212
  if not math.isclose(th, 0):
202
213
  self._correct(lq)
203
214
 
204
-
205
215
  def u(self, th, ph, lm, lq):
206
216
  while ph > math.pi:
207
217
  ph -= 2 * math.pi
@@ -242,7 +252,6 @@ class QrackAceBackend:
242
252
  self._encode(hq)
243
253
 
244
254
  def h(self, lq):
245
- self._correct(lq)
246
255
  hq = self._unpack(lq)
247
256
  self._decode(hq)
248
257
  self.sim.h(hq[0])
@@ -302,6 +311,8 @@ class QrackAceBackend:
302
311
  return
303
312
 
304
313
  if not self._is_init[lq1]:
314
+ hq1 = self._unpack(lq1)
315
+ hq2 = self._unpack(lq2)
305
316
  gate([hq1[0]], hq2[0])
306
317
  gate([hq1[1]], hq2[1])
307
318
  gate([hq1[2]], hq2[2])
@@ -343,7 +354,6 @@ class QrackAceBackend:
343
354
  gate([hq1[1]], hq2[1])
344
355
  gate([hq1[2]], hq2[2])
345
356
 
346
-
347
357
  def cx(self, lq1, lq2):
348
358
  self._cpauli(lq1, lq2, False, Pauli.PauliX)
349
359
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cuda
3
- Version: 1.44.23
3
+ Version: 1.44.25
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.23"
10
+ VERSION = "1.44.25"
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