pyqrack-cpu 1.44.23__py3-none-manylinux_2_39_x86_64.whl → 1.44.25__py3-none-manylinux_2_39_x86_64.whl

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.

Potentially problematic release.


This version of pyqrack-cpu might be problematic. Click here for more details.

@@ -38,8 +38,18 @@ class QrackAceBackend:
38
38
  col_length(int): Qubits per column.
39
39
  """
40
40
 
41
- def __init__(self, qubit_count=-1, alternating_codes=True, isTensorNetwork=False, toClone=None):
42
- self.sim = toClone.sim.clone() if toClone else QrackSimulator(3 * qubit_count + 1, isTensorNetwork=isTensorNetwork)
41
+ def __init__(
42
+ self,
43
+ qubit_count=1,
44
+ alternating_codes=True,
45
+ isTensorNetwork=False,
46
+ toClone=None,
47
+ ):
48
+ self.sim = (
49
+ toClone.sim.clone()
50
+ if toClone
51
+ else QrackSimulator(3 * qubit_count + 1, isTensorNetwork=isTensorNetwork)
52
+ )
43
53
  self._ancilla = 3 * qubit_count
44
54
  self._factor_width(qubit_count)
45
55
  self.alternating_codes = alternating_codes
@@ -130,38 +140,37 @@ class QrackAceBackend:
130
140
  self.sim.mcx([hq[0]], hq[1])
131
141
 
132
142
  def _correct(self, lq):
143
+ if not self._is_init[lq]:
144
+ return
133
145
  # We can't use true syndrome-based error correction,
134
146
  # because one of the qubits in the code is separated.
135
147
  # However, we can get pretty close!
136
- hq = self._unpack(lq)
137
148
  shots = 1024
138
- samples = self.sim.measure_shots(hq, shots)
139
- syndrome = [0, 0, 0]
140
- for sample in samples:
141
- match sample:
142
- case 1:
143
- syndrome[0] += 1
144
- case 2:
145
- syndrome[1] += 1
146
- case 4:
147
- syndrome[2] += 1
148
- case 6:
149
- syndrome[0] += 1
150
- case 5:
151
- syndrome[1] += 1
152
- case 3:
153
- syndrome[2] += 1
154
-
155
149
  row = lq // self.row_length
156
150
  even_row = not (row & 1)
157
151
  single_bit = 0
158
152
  other_bits = []
159
- if (not self.alternating_codes or even_row):
153
+ if not self.alternating_codes or even_row:
160
154
  single_bit = 2
161
155
  other_bits = [0, 1]
162
156
  else:
163
157
  single_bit = 0
164
158
  other_bits = [1, 2]
159
+ hq = self._unpack(lq)
160
+ single_bit_value = self.sim.prob(hq[single_bit])
161
+ samples = self.sim.measure_shots([hq[other_bits[0]], hq[other_bits[1]]], shots)
162
+ syndrome = [0, 0, 0]
163
+ syndrome_indices = [other_bits[1], other_bits[0]] if single_bit_value else [other_bits[0], other_bits[1]]
164
+ for sample in samples:
165
+ match sample:
166
+ case 0:
167
+ syndrome[single_bit] += single_bit_value
168
+ case 1:
169
+ syndrome[syndrome_indices[0]] += 1
170
+ case 2:
171
+ syndrome[syndrome_indices[1]] += 1
172
+ case 3:
173
+ syndrome[single_bit] += 1 - single_bit_value
165
174
 
166
175
  max_syndrome = max(syndrome)
167
176
  force_syndrome = True
@@ -193,6 +202,8 @@ class QrackAceBackend:
193
202
  self.sim.force_m(self._ancilla, False)
194
203
 
195
204
  def _correct_if_like_h(self, th, lq):
205
+ if not self._is_init[lq]:
206
+ return
196
207
  while th > math.pi:
197
208
  th -= 2 * math.pi
198
209
  while th <= -math.pi:
@@ -201,7 +212,6 @@ class QrackAceBackend:
201
212
  if not math.isclose(th, 0):
202
213
  self._correct(lq)
203
214
 
204
-
205
215
  def u(self, th, ph, lm, lq):
206
216
  while ph > math.pi:
207
217
  ph -= 2 * math.pi
@@ -242,7 +252,6 @@ class QrackAceBackend:
242
252
  self._encode(hq)
243
253
 
244
254
  def h(self, lq):
245
- self._correct(lq)
246
255
  hq = self._unpack(lq)
247
256
  self._decode(hq)
248
257
  self.sim.h(hq[0])
@@ -302,6 +311,8 @@ class QrackAceBackend:
302
311
  return
303
312
 
304
313
  if not self._is_init[lq1]:
314
+ hq1 = self._unpack(lq1)
315
+ hq2 = self._unpack(lq2)
305
316
  gate([hq1[0]], hq2[0])
306
317
  gate([hq1[1]], hq2[1])
307
318
  gate([hq1[2]], hq2[2])
@@ -343,7 +354,6 @@ class QrackAceBackend:
343
354
  gate([hq1[1]], hq2[1])
344
355
  gate([hq1[2]], hq2[2])
345
356
 
346
-
347
357
  def cx(self, lq1, lq2):
348
358
  self._cpauli(lq1, lq2, False, Pauli.PauliX)
349
359
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrack-cpu
3
- Version: 1.44.23
3
+ Version: 1.44.25
4
4
  Summary: pyqrack - Pure Python vm6502q/qrack Wrapper
5
5
  Home-page: https://github.com/vm6502q/pyqrack
6
6
  Author: Daniel Strano
@@ -1,7 +1,7 @@
1
1
  pyqrack/__init__.py,sha256=3tBwfCCD-zQjQ2g1EUZdggKdn-3b2uSFTbT7LS0YLaU,785
2
2
  pyqrack/neuron_activation_fn.py,sha256=fQTTFfsvwcot_43Vopacot47IV2Rxk8pelUyuzwpXPs,593
3
3
  pyqrack/pauli.py,sha256=wg500wDOwdIU4lEVJoMmjtbAdmtakZYzLPjdzC2rwUQ,654
4
- pyqrack/qrack_ace_backend.py,sha256=681s7Uf5n6J0K8IWHfeKvQo0Zs5uqRMCLfpBoP1aJZA,24623
4
+ pyqrack/qrack_ace_backend.py,sha256=AJgXlEG12wz3uxGbwpKGJVwELZOZ2H6U6o_fD9fzz_I,25037
5
5
  pyqrack/qrack_circuit.py,sha256=vDCKGbcEHJDFUKprjCpWgit8lXFnMrPimKHURD2_Hj4,19538
6
6
  pyqrack/qrack_neuron.py,sha256=UiJdjAGB6usjAGHWSosSFCUUeIkhh3MtZbsaxfsIsNw,9043
7
7
  pyqrack/qrack_neuron_torch_layer.py,sha256=Bs5BLC2GFevfSpo_jSJ2AZl-hfDRJmzlGN9pFw1CtoQ,6160
@@ -10,13 +10,13 @@ pyqrack/qrack_stabilizer.py,sha256=O-7VJ9Vw4h25PK_kesSjIqHXGSo8lLrQLIyGgmzG7Co,2
10
10
  pyqrack/quimb_circuit_type.py,sha256=Sk-Tmn38kUYmAkJJ75btWuhYZyTXOOezmowFhfdiGDc,621
11
11
  pyqrack/qrack_system/__init__.py,sha256=-oZ9dsb1hixsnrkUJRY_C5DzQ_l6MtifF_Z465BgqV4,334
12
12
  pyqrack/qrack_system/qrack_system.py,sha256=OG1D1PgUqYAYlyDH7QfgfcM_4NH4tpFgig3xe3RlE_0,42622
13
- pyqrack/qrack_system/qrack_lib/libqrack_pinvoke.so,sha256=Z3AcFPVpcPSv9USUJnqWjD_i8rnqMwXOIkMVrPk4WP0,3534968
14
- pyqrack/qrack_system/qrack_lib/libqrack_pinvoke.so.9.19.5,sha256=Z3AcFPVpcPSv9USUJnqWjD_i8rnqMwXOIkMVrPk4WP0,3534968
13
+ pyqrack/qrack_system/qrack_lib/libqrack_pinvoke.so,sha256=WdXNkTWEcvYsN99x4EmnHOnl-2tszlgpvQfv9lZbLWg,3530768
14
+ pyqrack/qrack_system/qrack_lib/libqrack_pinvoke.so.9.19.6,sha256=WdXNkTWEcvYsN99x4EmnHOnl-2tszlgpvQfv9lZbLWg,3530768
15
15
  pyqrack/stats/__init__.py,sha256=Hla85my2fY_roR9lIjGBVpEG7ySOTMwjWa8D6-kgCnY,276
16
16
  pyqrack/stats/load_quantized_data.py,sha256=z12u9F7Nt3P-i44nY1xxvso_klS6WIHS3iqq7R2_lqE,1184
17
17
  pyqrack/stats/quantize_by_range.py,sha256=UM0_7jJDdQ7g30cR3UQAxkbzkqrmsy1oUfqg0h11FUY,2270
18
- pyqrack_cpu-1.44.23.dist-info/licenses/LICENSE,sha256=HxB-7SaWTuewAk1nz-3_3FUD6QhgX73kNT_taKVUTq8,1069
19
- pyqrack_cpu-1.44.23.dist-info/METADATA,sha256=9KweOhYn68Pw11WDNdxWjzSDjTuXcXjfVusEAkaBzxQ,6703
20
- pyqrack_cpu-1.44.23.dist-info/WHEEL,sha256=k8EuOMBHdXsN9XSTE5LrpwS4FtdLkoSlyO_7W-lE_zg,109
21
- pyqrack_cpu-1.44.23.dist-info/top_level.txt,sha256=YE_3q9JTGRLMilNg2tGP1y7uU-Dx8PDao2OhwoIbv8E,8
22
- pyqrack_cpu-1.44.23.dist-info/RECORD,,
18
+ pyqrack_cpu-1.44.25.dist-info/licenses/LICENSE,sha256=HxB-7SaWTuewAk1nz-3_3FUD6QhgX73kNT_taKVUTq8,1069
19
+ pyqrack_cpu-1.44.25.dist-info/METADATA,sha256=bm91wVFq_aZRuI-ssSYrfd3SkchTIxAmpHMDpLTYLhU,6703
20
+ pyqrack_cpu-1.44.25.dist-info/WHEEL,sha256=k8EuOMBHdXsN9XSTE5LrpwS4FtdLkoSlyO_7W-lE_zg,109
21
+ pyqrack_cpu-1.44.25.dist-info/top_level.txt,sha256=YE_3q9JTGRLMilNg2tGP1y7uU-Dx8PDao2OhwoIbv8E,8
22
+ pyqrack_cpu-1.44.25.dist-info/RECORD,,