pyqrack-cuda 1.46.1__tar.gz → 1.46.3__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.
- {pyqrack_cuda-1.46.1/pyqrack_cuda.egg-info → pyqrack_cuda-1.46.3}/PKG-INFO +1 -1
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/qrack_ace_backend.py +27 -15
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/setup.py +1 -1
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/LICENSE +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/MANIFEST.in +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/Makefile +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/README.md +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyproject.toml +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/__init__.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/neuron_activation_fn.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/pauli.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/qrack_circuit.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/qrack_neuron.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/qrack_neuron_torch_layer.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/qrack_simulator.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/qrack_stabilizer.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/qrack_system/__init__.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/qrack_system/qrack_system.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/quimb_circuit_type.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/stats/__init__.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/stats/load_quantized_data.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack/stats/quantize_by_range.py +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack_cuda.egg-info/requires.txt +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/pyqrack_cuda.egg-info/top_level.txt +0 -0
- {pyqrack_cuda-1.46.1 → pyqrack_cuda-1.46.3}/setup.cfg +0 -0
@@ -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
|
-
#
|
514
|
-
#
|
515
|
-
#
|
516
|
-
|
517
|
-
random.
|
518
|
-
|
519
|
-
|
520
|
-
|
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
|
-
|
532
|
-
|
533
|
-
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|