pyqrack-cpu 1.46.1__py3-none-win_amd64.whl → 1.46.3__py3-none-win_amd64.whl

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.

Potentially problematic release.


This version of pyqrack-cpu might be problematic. Click here for more details.

@@ -48,10 +48,12 @@ class QrackAceBackend:
48
48
  isBinaryDecisionTree=False,
49
49
  toClone=None,
50
50
  ):
51
- if recursive_stack_depth < 1:
52
- recursive_stack_depth = 1
53
51
  if toClone:
54
52
  qubit_count = toClone.num_qubits()
53
+ recursive_stack_depth = toClone.recursive_stack_depth
54
+ if recursive_stack_depth < 1:
55
+ recursive_stack_depth = 1
56
+ self.recursive_stack_depth = recursive_stack_depth
55
57
  if recursive_stack_depth > 1:
56
58
  recursive_stack_depth -= 1
57
59
  self.sim = (
@@ -510,28 +512,38 @@ class QrackAceBackend:
510
512
 
511
513
  def m_all(self):
512
514
  result = 0
513
- # Whenever a nonzero syndrome occurs (so the code has an error),
514
- # we insert the more-probable results and collapse towards it.
515
- # Randomize the order of post-selection to amortize error.
516
- lqubits = list(range(self.sim.num_qubits() // 3))
517
- random.shuffle(lqubits)
518
- for lq in lqubits:
519
- if self.m(lq):
520
- result |= 1 << lq
515
+ # Randomize the order of measurement to amortize error.
516
+ # However, locality of collapse matters:
517
+ # always measure across rows, and by consecutive rows.
518
+ row_offset = rand.randint(0, self.col_length - 1)
519
+ row_reverse = bool(random.randint(0, 1))
520
+ row_alternate = bool(random.randint(0, 1))
521
+ for row in range(self.col_length):
522
+ r = row
523
+ if row_alternate:
524
+ half_row = row >> 1
525
+ r = (self.col_length // 2) + (half_row if row & 1 else -half_row)
526
+ lq_row = (((self.col_length - r) if row_reverse else r) + row_offset) % self.col_length
527
+ col_offset = rand.randint(0, self.row_length - 1)
528
+ col_reverse = self.alternating_codes and (r & 1)
529
+ for c in range(self.row_length):
530
+ lq_col = (((self.row_length - (c + 1)) if col_reverse else c) + col_offset) % self.row_length
531
+ lq = lq_row * self.row_length + lq_col
532
+ if self.m(lq):
533
+ result |= 1 << lq
521
534
 
522
535
  return result
523
536
 
524
537
  def measure_shots(self, q, s, high_accuracy=True):
525
538
  if high_accuracy:
526
539
  samples = []
527
- _q = q.copy()
528
540
  for _ in range(s):
529
541
  clone = self.sim.clone()
542
+ _sample = clone.m_all()
530
543
  sample = 0
531
- random.shuffle(_q)
532
- for b in _q:
533
- if clone.m(b):
534
- sample |= 1 << q.index(b)
544
+ for i in range(len(q)):
545
+ if (_sample >> q[i]) & 1:
546
+ sample |= 1 << i
535
547
  samples.append(sample)
536
548
 
537
549
  return samples
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyqrack-cpu
3
- Version: 1.46.1
3
+ Version: 1.46.3
4
4
  Summary: pyqrack - Pure Python vm6502q/qrack Wrapper
5
5
  Home-page: https://github.com/vm6502q/pyqrack
6
6
  Author: Daniel Strano
@@ -1,7 +1,7 @@
1
1
  pyqrack/__init__.py,sha256=9fGCYdEUg_AsENCDRylbrZvUMVbUajRTn3CyuFGuFyM,805
2
2
  pyqrack/neuron_activation_fn.py,sha256=GOqcCkiEB60jCojTrcuHuZMDP5aTOy0adtR8SY_2EZc,614
3
3
  pyqrack/pauli.py,sha256=TUm1SN_HLz3eMW9gD_eg-IYXcMCyr36mYSytq_ExZIU,673
4
- pyqrack/qrack_ace_backend.py,sha256=ijZabv6tO3atrfLsMULl0hGsjdPC0yg0JF6HtMprfvo,31475
4
+ pyqrack/qrack_ace_backend.py,sha256=GYOqNYufyig9DQ66REbBJ8PYltOQozxrSpMgxnE84mE,32262
5
5
  pyqrack/qrack_circuit.py,sha256=QK2dtPYurdXuw-efVq7lYz40_480NxCejXhOVwBGkXs,20122
6
6
  pyqrack/qrack_neuron.py,sha256=a3F0hduVvXZi9aXsY0du5hBFXpMq_R5UHHDOv2-YtFM,9305
7
7
  pyqrack/qrack_neuron_torch_layer.py,sha256=OhNSldzaqLaMoNBkin68j8QWOOiuZCQJDZPgSDRI2Fk,6330
@@ -10,12 +10,12 @@ pyqrack/qrack_stabilizer.py,sha256=AJe7dfFcxFKyig3tjWXw0UKhXer5Wl9QNvjNNqlOL5M,2
10
10
  pyqrack/quimb_circuit_type.py,sha256=iC0CCpZBGhziFC8-uBCH43Mi29uvVUrtBG6W9YBlyps,638
11
11
  pyqrack/qrack_system/__init__.py,sha256=PUterej-xpA4BqFmiBrQCMeTQlsRf-K8Dxnwp-iVvUQ,343
12
12
  pyqrack/qrack_system/qrack_system.py,sha256=L4OHVmw1HQlLagkQN4xUweDuB0tn5-lK4vzjplDt_hw,43950
13
- pyqrack/qrack_system/qrack_lib/qrack_pinvoke.dll,sha256=DCBEa04ffxShz8rDsIXFH2wT2LHB-d4Ma0-NK0cepFw,1740288
13
+ pyqrack/qrack_system/qrack_lib/qrack_pinvoke.dll,sha256=34_QrYxaPBMa_D0SDNxDYbsWghPM0I1fvBtw02AcRfE,1740288
14
14
  pyqrack/stats/__init__.py,sha256=hI715MGW7D4mDYhUFpRI4ZLsynYDO4tN-rjsuuYbG6Q,282
15
15
  pyqrack/stats/load_quantized_data.py,sha256=_1w9BPrZNreP0wOAyaAZHdEGKoGiI7tMeFD9P3eyJC0,1219
16
16
  pyqrack/stats/quantize_by_range.py,sha256=0eBIqByIxa4vfm4fQGZLAMGR9y8raxde3e5rvUWJ_dQ,2326
17
- pyqrack_cpu-1.46.1.dist-info/LICENSE,sha256=IdAVedmFOPQtHi_XeEI9OhJwUuwlT6tCJwrT55zAn3w,1090
18
- pyqrack_cpu-1.46.1.dist-info/METADATA,sha256=rlygUq5rV54jXmgovgIcaY-Iw8bULKZzrDGUOdYKLMM,6560
19
- pyqrack_cpu-1.46.1.dist-info/WHEEL,sha256=JMWfR_Dj7ISokcwe0cBhCfK6JKnIi-ZX11L6d_ntt6o,98
20
- pyqrack_cpu-1.46.1.dist-info/top_level.txt,sha256=YE_3q9JTGRLMilNg2tGP1y7uU-Dx8PDao2OhwoIbv8E,8
21
- pyqrack_cpu-1.46.1.dist-info/RECORD,,
17
+ pyqrack_cpu-1.46.3.dist-info/LICENSE,sha256=IdAVedmFOPQtHi_XeEI9OhJwUuwlT6tCJwrT55zAn3w,1090
18
+ pyqrack_cpu-1.46.3.dist-info/METADATA,sha256=NGU5Ykt-BiBaEbGuf-C2c-chZddEv1SqiH1Q8b8-o9M,6560
19
+ pyqrack_cpu-1.46.3.dist-info/WHEEL,sha256=JMWfR_Dj7ISokcwe0cBhCfK6JKnIi-ZX11L6d_ntt6o,98
20
+ pyqrack_cpu-1.46.3.dist-info/top_level.txt,sha256=YE_3q9JTGRLMilNg2tGP1y7uU-Dx8PDao2OhwoIbv8E,8
21
+ pyqrack_cpu-1.46.3.dist-info/RECORD,,