pyqrack-cuda 1.44.31__tar.gz → 1.44.33__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.44.31/pyqrack_cuda.egg-info → pyqrack_cuda-1.44.33}/PKG-INFO +1 -1
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_ace_backend.py +40 -11
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/setup.py +1 -1
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/LICENSE +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/MANIFEST.in +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/Makefile +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/README.md +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyproject.toml +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/__init__.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/neuron_activation_fn.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/pauli.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_circuit.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_neuron.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_neuron_torch_layer.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_simulator.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_stabilizer.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_system/__init__.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/qrack_system/qrack_system.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/quimb_circuit_type.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/stats/__init__.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/stats/load_quantized_data.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack/stats/quantize_by_range.py +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/requires.txt +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/pyqrack_cuda.egg-info/top_level.txt +0 -0
- {pyqrack_cuda-1.44.31 → pyqrack_cuda-1.44.33}/setup.cfg +0 -0
@@ -193,11 +193,11 @@ class QrackAceBackend:
|
|
193
193
|
z_score_numer = syndrome_sum - shots / 2
|
194
194
|
z_score = 0
|
195
195
|
if z_score_numer > 0:
|
196
|
-
|
197
|
-
|
198
|
-
|
196
|
+
syndrome_component_mean = syndrome_sum / shots
|
197
|
+
syndrome_total_variance = sum(
|
198
|
+
(value - syndrome_component_mean) ** 2 for value in values
|
199
199
|
)
|
200
|
-
z_score_denom = math.sqrt(
|
200
|
+
z_score_denom = math.sqrt(syndrome_total_variance)
|
201
201
|
z_score = (
|
202
202
|
math.inf
|
203
203
|
if math.isclose(z_score_denom, 0)
|
@@ -423,17 +423,34 @@ class QrackAceBackend:
|
|
423
423
|
|
424
424
|
def m(self, lq):
|
425
425
|
hq = self._unpack(lq)
|
426
|
+
even_row = not ((lq // self.row_length) & 1)
|
427
|
+
if not self.alternating_codes or even_row:
|
428
|
+
single_bit = 2
|
429
|
+
other_bits = [0, 1]
|
430
|
+
else:
|
431
|
+
single_bit = 0
|
432
|
+
other_bits = [1, 2]
|
426
433
|
syndrome = 0
|
427
434
|
bits = []
|
428
|
-
for q in
|
429
|
-
bits.append(self.sim.m(q))
|
435
|
+
for q in other_bits:
|
436
|
+
bits.append(self.sim.m(hq[q]))
|
430
437
|
if bits[-1]:
|
431
438
|
syndrome += 1
|
432
|
-
|
433
|
-
|
439
|
+
# single_bit never shares entanglement with other_bits.
|
440
|
+
# In the ideal, it should simply duplicate other_bits.
|
441
|
+
# So get more precision by using it analytically.
|
442
|
+
analytical = self.sim.prob(hq[single_bit])
|
443
|
+
syndrome += analytical
|
444
|
+
result = True if (syndrome >= 1.5) else False
|
445
|
+
# The two separable parts of the code are correlated,
|
446
|
+
# but not non-locally, via entanglement.
|
447
|
+
# Prefer to collapse the analytical part toward agreement.
|
448
|
+
bits.append(self.sim.m(hq[single_bit]) if math.isclose(analytical, 0 if result else 1) else self.sim.force_m(hq[single_bit], result))
|
449
|
+
for i in range(2):
|
434
450
|
if bits[i] != result:
|
435
|
-
self.sim.x(hq[i])
|
436
|
-
|
451
|
+
self.sim.x(hq[other_bits[i]])
|
452
|
+
if bits[2] != result:
|
453
|
+
self.sim.x(hq[single_bit])
|
437
454
|
self._is_init[lq] = False
|
438
455
|
|
439
456
|
return result
|
@@ -447,7 +464,19 @@ class QrackAceBackend:
|
|
447
464
|
|
448
465
|
return result
|
449
466
|
|
450
|
-
def measure_shots(self, q, s):
|
467
|
+
def measure_shots(self, q, s, high_accuracy=False):
|
468
|
+
if high_accuracy:
|
469
|
+
samples = []
|
470
|
+
for _ in range(s):
|
471
|
+
clone = self.sim.clone()
|
472
|
+
sample = 0
|
473
|
+
for i in range(len(q)):
|
474
|
+
if clone.m(q[i]):
|
475
|
+
sample |= 1 << i
|
476
|
+
samples.append(sample)
|
477
|
+
|
478
|
+
return samples
|
479
|
+
|
451
480
|
_q = []
|
452
481
|
for i in q:
|
453
482
|
_q.append(3 * i)
|
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
|