pyqrack-cuda 1.46.0__tar.gz → 1.46.2__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.0/pyqrack_cuda.egg-info → pyqrack_cuda-1.46.2}/PKG-INFO +1 -1
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/qrack_ace_backend.py +23 -14
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/setup.py +1 -1
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/LICENSE +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/MANIFEST.in +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/Makefile +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/README.md +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyproject.toml +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/__init__.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/neuron_activation_fn.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/pauli.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/qrack_circuit.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/qrack_neuron.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/qrack_neuron_torch_layer.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/qrack_simulator.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/qrack_stabilizer.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/qrack_system/__init__.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/qrack_system/qrack_system.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/quimb_circuit_type.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/stats/__init__.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/stats/load_quantized_data.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack/stats/quantize_by_range.py +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack_cuda.egg-info/requires.txt +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/pyqrack_cuda.egg-info/top_level.txt +0 -0
- {pyqrack_cuda-1.46.0 → pyqrack_cuda-1.46.2}/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,12 +512,20 @@ class QrackAceBackend:
|
|
510
512
|
|
511
513
|
def m_all(self):
|
512
514
|
result = 0
|
513
|
-
#
|
514
|
-
#
|
515
|
-
#
|
515
|
+
# Randomize the order of measurement to amortize error.
|
516
|
+
# However, locality of collapse matters:
|
517
|
+
# always measure across rows, and by consecutive rows.
|
516
518
|
lqubits = list(range(self.sim.num_qubits() // 3))
|
517
|
-
|
519
|
+
row = rand.randint(0, self.col_length - 1)
|
520
|
+
index = row * self.row_length
|
521
|
+
lqubits = lqubits[index:] + lqubits[:index]
|
522
|
+
col = rand.randint(0, self.row_length - 1)
|
523
|
+
if random.randint(0, 1):
|
524
|
+
lqubits.reverse()
|
518
525
|
for lq in lqubits:
|
526
|
+
lq_row = i // self.row_length
|
527
|
+
lq_col = (i + col) % self.row_length
|
528
|
+
lq = lq_row * self.row_length + lq_col
|
519
529
|
if self.m(lq):
|
520
530
|
result |= 1 << lq
|
521
531
|
|
@@ -524,14 +534,13 @@ class QrackAceBackend:
|
|
524
534
|
def measure_shots(self, q, s, high_accuracy=True):
|
525
535
|
if high_accuracy:
|
526
536
|
samples = []
|
527
|
-
_q = q.copy()
|
528
537
|
for _ in range(s):
|
529
538
|
clone = self.sim.clone()
|
539
|
+
_sample = clone.m_all()
|
530
540
|
sample = 0
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
sample |= 1 << q.index(b)
|
541
|
+
for i in range(len(q)):
|
542
|
+
if (_sample >> q[i]) & 1:
|
543
|
+
sample |= 1 << i
|
535
544
|
samples.append(sample)
|
536
545
|
|
537
546
|
return samples
|
@@ -568,9 +577,9 @@ class QrackAceBackend:
|
|
568
577
|
other_bits = [0, 1]
|
569
578
|
else:
|
570
579
|
other_bits = [1, 2]
|
571
|
-
self.sim.mcx([other_bits[0]], other_bits[1])
|
572
|
-
result = self.sim.prob(hq[
|
573
|
-
self.sim.mcx([other_bits[0]], other_bits[1])
|
580
|
+
self.sim.mcx([hq[other_bits[0]]], hq[other_bits[1]])
|
581
|
+
result = self.sim.prob(hq[other_bits[0]])
|
582
|
+
self.sim.mcx([hq[other_bits[0]]], hq[other_bits[1]])
|
574
583
|
|
575
584
|
return result
|
576
585
|
|
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
|