pyqrack-cuda 1.44.29__tar.gz → 1.44.31__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.29/pyqrack_cuda.egg-info → pyqrack_cuda-1.44.31}/PKG-INFO +1 -1
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/qrack_ace_backend.py +33 -10
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/setup.py +1 -1
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/LICENSE +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/MANIFEST.in +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/Makefile +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/README.md +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyproject.toml +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/__init__.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/neuron_activation_fn.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/pauli.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/qrack_circuit.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/qrack_neuron.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/qrack_neuron_torch_layer.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/qrack_simulator.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/qrack_stabilizer.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/qrack_system/__init__.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/qrack_system/qrack_system.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/quimb_circuit_type.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/stats/__init__.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/stats/load_quantized_data.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack/stats/quantize_by_range.py +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack_cuda.egg-info/requires.txt +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/pyqrack_cuda.egg-info/top_level.txt +0 -0
- {pyqrack_cuda-1.44.29 → pyqrack_cuda-1.44.31}/setup.cfg +0 -0
@@ -163,27 +163,50 @@ class QrackAceBackend:
|
|
163
163
|
single_bit_value = self.sim.prob(hq[single_bit])
|
164
164
|
single_bit_polarization = max(single_bit_value, 1 - single_bit_value)
|
165
165
|
samples = self.sim.measure_shots([hq[other_bits[0]], hq[other_bits[1]]], shots)
|
166
|
-
syndrome_indices =
|
166
|
+
syndrome_indices = (
|
167
|
+
[other_bits[1], other_bits[0]]
|
168
|
+
if (single_bit_value >= 0.5)
|
169
|
+
else [other_bits[0], other_bits[1]]
|
170
|
+
)
|
167
171
|
syndrome = [0, 0, 0]
|
172
|
+
values = []
|
168
173
|
for sample in samples:
|
169
174
|
match sample:
|
170
175
|
case 0:
|
171
|
-
|
176
|
+
value = single_bit_value
|
177
|
+
syndrome[single_bit] += value
|
172
178
|
case 1:
|
173
|
-
|
179
|
+
value = single_bit_polarization
|
180
|
+
syndrome[syndrome_indices[0]] += value
|
174
181
|
case 2:
|
175
|
-
|
182
|
+
value = single_bit_polarization
|
183
|
+
syndrome[syndrome_indices[1]] += value
|
176
184
|
case 3:
|
177
|
-
|
185
|
+
value = 1 - single_bit_value
|
186
|
+
syndrome[single_bit] += value
|
187
|
+
values.append(value)
|
178
188
|
|
179
189
|
# Suggestion from Elara (custom OpenAI GPT):
|
180
|
-
#
|
181
|
-
# Only correct if we're outside a confidence interval.
|
190
|
+
# Compute the standard deviation and only correct if we're outside a confidence interval.
|
182
191
|
# (This helps avoid limit-point over-correction.)
|
183
|
-
|
192
|
+
syndrome_sum = sum(syndrome)
|
193
|
+
z_score_numer = syndrome_sum - shots / 2
|
194
|
+
z_score = 0
|
195
|
+
if z_score_numer > 0:
|
196
|
+
syndrome_mean = syndrome_sum / shots
|
197
|
+
syndrome_variance = (
|
198
|
+
sum((value - syndrome_mean) ** 2 for value in values) / shots
|
199
|
+
)
|
200
|
+
z_score_denom = math.sqrt(syndrome_variance)
|
201
|
+
z_score = (
|
202
|
+
math.inf
|
203
|
+
if math.isclose(z_score_denom, 0)
|
204
|
+
else (z_score_numer / z_score_denom)
|
205
|
+
)
|
206
|
+
|
184
207
|
force_syndrome = True
|
185
|
-
# (
|
186
|
-
if
|
208
|
+
# (From Elara, this is the value that minimizes the sum of Type I and Type II error.)
|
209
|
+
if z_score >= (497 / 999):
|
187
210
|
# There is an error.
|
188
211
|
error_bit = syndrome.index(max(syndrome))
|
189
212
|
if error_bit == single_bit:
|
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
|