pyqrack-cuda 1.44.23__tar.gz → 1.44.24__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.23/pyqrack_cuda.egg-info → pyqrack_cuda-1.44.24}/PKG-INFO +1 -1
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/qrack_ace_backend.py +19 -6
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24/pyqrack_cuda.egg-info}/PKG-INFO +1 -1
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/setup.py +1 -1
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/LICENSE +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/MANIFEST.in +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/Makefile +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/README.md +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyproject.toml +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/__init__.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/neuron_activation_fn.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/pauli.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/qrack_circuit.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/qrack_neuron.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/qrack_neuron_torch_layer.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/qrack_simulator.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/qrack_stabilizer.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/qrack_system/__init__.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/qrack_system/qrack_system.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/quimb_circuit_type.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/stats/__init__.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/stats/load_quantized_data.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack/stats/quantize_by_range.py +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack_cuda.egg-info/SOURCES.txt +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack_cuda.egg-info/dependency_links.txt +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack_cuda.egg-info/not-zip-safe +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack_cuda.egg-info/requires.txt +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/pyqrack_cuda.egg-info/top_level.txt +0 -0
- {pyqrack_cuda-1.44.23 → pyqrack_cuda-1.44.24}/setup.cfg +0 -0
@@ -38,8 +38,18 @@ class QrackAceBackend:
|
|
38
38
|
col_length(int): Qubits per column.
|
39
39
|
"""
|
40
40
|
|
41
|
-
def __init__(
|
42
|
-
self
|
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,6 +140,8 @@ 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!
|
@@ -156,7 +168,7 @@ class QrackAceBackend:
|
|
156
168
|
even_row = not (row & 1)
|
157
169
|
single_bit = 0
|
158
170
|
other_bits = []
|
159
|
-
if
|
171
|
+
if not self.alternating_codes or even_row:
|
160
172
|
single_bit = 2
|
161
173
|
other_bits = [0, 1]
|
162
174
|
else:
|
@@ -193,6 +205,8 @@ class QrackAceBackend:
|
|
193
205
|
self.sim.force_m(self._ancilla, False)
|
194
206
|
|
195
207
|
def _correct_if_like_h(self, th, lq):
|
208
|
+
if not self._is_init[lq]:
|
209
|
+
return
|
196
210
|
while th > math.pi:
|
197
211
|
th -= 2 * math.pi
|
198
212
|
while th <= -math.pi:
|
@@ -201,7 +215,6 @@ class QrackAceBackend:
|
|
201
215
|
if not math.isclose(th, 0):
|
202
216
|
self._correct(lq)
|
203
217
|
|
204
|
-
|
205
218
|
def u(self, th, ph, lm, lq):
|
206
219
|
while ph > math.pi:
|
207
220
|
ph -= 2 * math.pi
|
@@ -242,7 +255,6 @@ class QrackAceBackend:
|
|
242
255
|
self._encode(hq)
|
243
256
|
|
244
257
|
def h(self, lq):
|
245
|
-
self._correct(lq)
|
246
258
|
hq = self._unpack(lq)
|
247
259
|
self._decode(hq)
|
248
260
|
self.sim.h(hq[0])
|
@@ -302,6 +314,8 @@ class QrackAceBackend:
|
|
302
314
|
return
|
303
315
|
|
304
316
|
if not self._is_init[lq1]:
|
317
|
+
hq1 = self._unpack(lq1)
|
318
|
+
hq2 = self._unpack(lq2)
|
305
319
|
gate([hq1[0]], hq2[0])
|
306
320
|
gate([hq1[1]], hq2[1])
|
307
321
|
gate([hq1[2]], hq2[2])
|
@@ -343,7 +357,6 @@ class QrackAceBackend:
|
|
343
357
|
gate([hq1[1]], hq2[1])
|
344
358
|
gate([hq1[2]], hq2[2])
|
345
359
|
|
346
|
-
|
347
360
|
def cx(self, lq1, lq2):
|
348
361
|
self._cpauli(lq1, lq2, False, Pauli.PauliX)
|
349
362
|
|
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
|