pyqrack-cuda 1.45.0__tar.gz → 1.45.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.45.0/pyqrack_cuda.egg-info → pyqrack_cuda-1.45.2}/PKG-INFO +1 -1
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/qrack_ace_backend.py +13 -14
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/setup.py +1 -1
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/LICENSE +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/MANIFEST.in +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/Makefile +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/README.md +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyproject.toml +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/__init__.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/neuron_activation_fn.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/pauli.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/qrack_circuit.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/qrack_neuron.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/qrack_neuron_torch_layer.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/qrack_simulator.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/qrack_stabilizer.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/qrack_system/__init__.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/qrack_system/qrack_system.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/quimb_circuit_type.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/stats/__init__.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/stats/load_quantized_data.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack/stats/quantize_by_range.py +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack_cuda.egg-info/requires.txt +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/pyqrack_cuda.egg-info/top_level.txt +0 -0
- {pyqrack_cuda-1.45.0 → pyqrack_cuda-1.45.2}/setup.cfg +0 -0
@@ -430,34 +430,31 @@ class QrackAceBackend:
|
|
430
430
|
else:
|
431
431
|
single_bit = 0
|
432
432
|
other_bits = [1, 2]
|
433
|
+
# The syndrome of "other_bits" is guaranteed to be fixed, after this.
|
434
|
+
self._correct(lq)
|
433
435
|
syndrome = 0
|
434
|
-
bits = []
|
435
436
|
for q in other_bits:
|
436
|
-
|
437
|
-
syndrome += bits[-1]
|
437
|
+
syndrome += self.sim.m(hq[q])
|
438
438
|
# The two separable parts of the code are correlated,
|
439
439
|
# but not non-locally, via entanglement.
|
440
|
-
# Prefer to collapse the
|
440
|
+
# Prefer to collapse the third toward agreement.
|
441
441
|
if syndrome == 0:
|
442
442
|
self.sim.force_m(hq[single_bit], False)
|
443
443
|
elif syndrome == 2:
|
444
444
|
syndrome += self.sim.force_m(hq[single_bit], True)
|
445
445
|
else:
|
446
|
-
syndrome
|
447
|
-
result = True if (syndrome > 1) else False
|
448
|
-
for i in range(2):
|
449
|
-
if bits[i] != result:
|
450
|
-
self.sim.x(hq[other_bits[i]])
|
446
|
+
raise RuntimeError("Unexpected syndrome in m()!")
|
451
447
|
self._is_init[lq] = False
|
452
448
|
|
453
|
-
return
|
449
|
+
return True if (syndrome > 1) else False
|
454
450
|
|
455
451
|
def m_all(self):
|
456
452
|
result = 0
|
457
453
|
# Whenever a nonzero syndrome occurs (so the code has an error),
|
458
454
|
# we insert the more-probable results and collapse towards it.
|
459
455
|
# Randomize the order of post-selection to amortize error.
|
460
|
-
lqubits =
|
456
|
+
lqubits = list(range(self.sim.num_qubits() // 3))
|
457
|
+
random.shuffle(lqubits)
|
461
458
|
for lq in lqubits:
|
462
459
|
if self.m(lq):
|
463
460
|
result |= 1 << lq
|
@@ -467,12 +464,14 @@ class QrackAceBackend:
|
|
467
464
|
def measure_shots(self, q, s, high_accuracy=True):
|
468
465
|
if high_accuracy:
|
469
466
|
samples = []
|
467
|
+
_q = q.copy()
|
470
468
|
for _ in range(s):
|
471
469
|
clone = self.sim.clone()
|
472
470
|
sample = 0
|
473
|
-
|
474
|
-
|
475
|
-
|
471
|
+
random.shuffle(_q)
|
472
|
+
for b in _q:
|
473
|
+
if clone.m(b):
|
474
|
+
sample |= 1 << q.index(b)
|
476
475
|
samples.append(sample)
|
477
476
|
|
478
477
|
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
|