pyqrack-cpu 1.32.19__py3-none-win_amd64.whl → 1.32.21__py3-none-win_amd64.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.

pyqrack/qrack_circuit.py CHANGED
@@ -12,7 +12,7 @@ _IS_QISKIT_AVAILABLE = True
12
12
  try:
13
13
  from qiskit.circuit.quantumcircuit import QuantumCircuit
14
14
  from qiskit.compiler.transpiler import transpile
15
- from qiskit.circuit.library import UCGate
15
+ from qiskit.circuit.library import U3Gate, UCGate
16
16
  import numpy as np
17
17
  import math
18
18
  except ImportError:
@@ -31,6 +31,23 @@ try:
31
31
  except ImportError:
32
32
  _IS_TENSORCIRCUIT_AVAILABLE = False
33
33
 
34
+
35
+ def euler_angles_1q(m):
36
+ phase = (m[0][0] * m[1][1] - m[0][1] * m[1][0]) ** (-1.0/2.0)
37
+ U = [[phase * m[0][0], phase * m[0][1]], [phase * m[1][0], phase * m[1][1]]]
38
+
39
+ theta = 2 * math.atan2(abs(U[1][0]), abs(U[0][0]))
40
+
41
+ # Find phi and lambda
42
+ phiplambda = 2 * np.angle(U[1][1])
43
+ phimlambda = 2 * np.angle(U[1][0])
44
+
45
+ phi = (phiplambda + phimlambda) / 2.0
46
+ lamb = (phiplambda - phimlambda) / 2.0
47
+
48
+ return theta, phi, lamb
49
+
50
+
34
51
  class QrackCircuit:
35
52
  """Class that exposes the QCircuit class of Qrack
36
53
 
@@ -200,6 +217,19 @@ class QrackCircuit:
200
217
 
201
218
  return out
202
219
 
220
+ def file_gate_count(filename):
221
+ """File gate count
222
+
223
+ Return the count of gates in a QrackCircuit file
224
+
225
+ Args:
226
+ filename: Name of file
227
+ """
228
+ tokens = []
229
+ with open(filename, 'r') as file:
230
+ tokens = file.read().split()
231
+ return int(tokens[1])
232
+
203
233
  def file_to_qiskit_circuit(filename):
204
234
  """Convert an output file to a Qiskit circuit
205
235
 
@@ -286,13 +316,25 @@ class QrackCircuit:
286
316
  payloads[key] = np.array(op)
287
317
 
288
318
  gate_list = []
289
- for j in range(1 << control_count):
290
- if j in payloads:
291
- gate_list.append(payloads[j])
292
- else:
293
- gate_list.append(np.array([[1, 0],[0, 1]]))
294
-
295
- circ.append(UCGate(gate_list), controls + [target])
319
+ control_pow = 1 << control_count
320
+ pLen = len(payloads)
321
+ if (pLen == 1) or ((control_pow - pLen) > (1 << 15)):
322
+ for c, p in payloads.items():
323
+ theta, phi, lam = euler_angles_1q(p)
324
+ if control_count > 0:
325
+ circ.append(
326
+ U3Gate(theta, phi, lam).control(num_ctrl_qubits=control_count, ctrl_state=c),
327
+ controls + [target]
328
+ )
329
+ else:
330
+ circ.append(U3Gate(theta, phi, lam), [target])
331
+ else:
332
+ for j in range(control_pow):
333
+ if j in payloads:
334
+ gate_list.append(payloads[j])
335
+ else:
336
+ gate_list.append(np.array([[1, 0],[0, 1]]))
337
+ circ.append(UCGate(gate_list), controls + [target])
296
338
 
297
339
  return circ
298
340
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyqrack-cpu
3
- Version: 1.32.19
3
+ Version: 1.32.21
4
4
  Summary: pyqrack - Pure Python vm6502q/qrack Wrapper
5
5
  Home-page: https://github.com/vm6502q/pyqrack
6
6
  Author: Daniel Strano
@@ -1,17 +1,17 @@
1
1
  pyqrack/__init__.py,sha256=gDz6LYCK_3GgGF973p3OGPfocfPgEs-qWaiL_tCw1fs,594
2
2
  pyqrack/neuron_activation_fn.py,sha256=cvljN3vvoH71uPva8EFKxJomgiQMo7zqud2JoSpKTiM,615
3
3
  pyqrack/pauli.py,sha256=NgtZd4aBN4l8Car14Ris9lZ1Y5JDfNNCN7kDRuo9vWk,673
4
- pyqrack/qrack_circuit.py,sha256=gc5n-mNQCl5ZbcODXtLUnYilcAi2rrFUrq7jl9F6qSs,17712
4
+ pyqrack/qrack_circuit.py,sha256=6nSg4dp7Zv5vvWg9GxX6ypFz3wB50n4xzdiVDm0rOIg,19165
5
5
  pyqrack/qrack_neuron.py,sha256=kMQH2vlajXvkrycNcCs1A1odyp8-CMmaJKEujP4mi0I,9086
6
6
  pyqrack/qrack_simulator.py,sha256=fyGL9Tyq3GFlvZS00GDHVIxd5atSMz8sPtkw1qI9Q-A,136784
7
7
  pyqrack/quimb_circuit_type.py,sha256=fNsmfK9JoNdYN1_Clm9pmS_FTinNsGKJnKQID6L4Bgk,638
8
8
  pyqrack/qrack_system/__init__.py,sha256=PUterej-xpA4BqFmiBrQCMeTQlsRf-K8Dxnwp-iVvUQ,343
9
9
  pyqrack/qrack_system/qrack_system.py,sha256=UBDk7e-_B4Ve0Mjk4l4L6qppI9kqTpcXrjpCOzZ_d-I,42781
10
- pyqrack/qrack_system/qrack_lib/qrack_pinvoke.dll,sha256=ZliFCoCEMYdtDvXGS_bj7henRKEYapLIBfwRaLBNDRE,1735680
10
+ pyqrack/qrack_system/qrack_lib/qrack_pinvoke.dll,sha256=5OyrfHwHN1ICYYakTtvtMa7ZYrEQpDj7DoNkdm96xnQ,1734656
11
11
  pyqrack/util/__init__.py,sha256=cx9yH6Px9cIpBdLO3rftxscbXKUneB36nGRoA68x42c,341
12
12
  pyqrack/util/convert_qiskit_circuit_to_qasm_experiment.py,sha256=tcICZbIhTpM4hU_OfiS_n142cVoER9vR3ZWMaVf9-Zs,2126
13
- pyqrack_cpu-1.32.19.dist-info/LICENSE,sha256=IdAVedmFOPQtHi_XeEI9OhJwUuwlT6tCJwrT55zAn3w,1090
14
- pyqrack_cpu-1.32.19.dist-info/METADATA,sha256=YEMKzjysnGKJzIuaONxSkFsgqStZ6tmVwnCfRAQNKC4,5823
15
- pyqrack_cpu-1.32.19.dist-info/WHEEL,sha256=rNPRVbVGKrjWvrFestJftL7zG4L3SaPg4hx5cyTUI8U,98
16
- pyqrack_cpu-1.32.19.dist-info/top_level.txt,sha256=YE_3q9JTGRLMilNg2tGP1y7uU-Dx8PDao2OhwoIbv8E,8
17
- pyqrack_cpu-1.32.19.dist-info/RECORD,,
13
+ pyqrack_cpu-1.32.21.dist-info/LICENSE,sha256=IdAVedmFOPQtHi_XeEI9OhJwUuwlT6tCJwrT55zAn3w,1090
14
+ pyqrack_cpu-1.32.21.dist-info/METADATA,sha256=ZllbbMdAPrXEHKWtftdbHHpc1yMIwXvkpbTga4-WMVk,5823
15
+ pyqrack_cpu-1.32.21.dist-info/WHEEL,sha256=rNPRVbVGKrjWvrFestJftL7zG4L3SaPg4hx5cyTUI8U,98
16
+ pyqrack_cpu-1.32.21.dist-info/top_level.txt,sha256=YE_3q9JTGRLMilNg2tGP1y7uU-Dx8PDao2OhwoIbv8E,8
17
+ pyqrack_cpu-1.32.21.dist-info/RECORD,,