pyqrackising 9.4.0__py3-none-win_amd64.whl → 9.5.0__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 pyqrackising might be problematic. Click here for more details.

pyqrackising/otoc.py CHANGED
@@ -7,45 +7,44 @@ import sys
7
7
  epsilon = opencl_context.epsilon
8
8
 
9
9
 
10
- def get_otoc_hamming_distribution(J=-1.0, h=2.0, z=4, theta=0.174532925199432957, t=5, n_qubits=56, cycles=1, pauli_string = 'X' + 'I' * 55):
11
- pauli_string = list(pauli_string)
12
- if len(pauli_string) != n_qubits:
13
- raise ValueError("OTOCS pauli_string must be same length as n_qubits! (Use 'I' for qubits that aren't changed.)")
14
-
10
+ def get_otoc_hamming_distribution(J=-1.0, h=2.0, z=4, theta=0.0, t=5, n_qubits=65, pauli_strings = ['X' + 'I' * 64]):
15
11
  n_bias = n_qubits + 1
16
12
  if h <= epsilon:
17
13
  bias = np.empty(n_bias, dtype=np.float64)
18
14
  bias[0] = 1.0
19
- return { 'X': bias, 'Y': bias, 'Z': bias }
20
-
21
- fwd = probability_by_hamming_weight(J, h, z, theta, t, n_qubits + 1)
22
- rev = probability_by_hamming_weight(-J, -h, z, theta + np.pi, t, n_qubits + 1)
23
- diff_theta = rev - fwd
24
-
25
- phi = theta + np.pi / 2
26
- fwd = probability_by_hamming_weight(-h, -J, z, phi, t, n_qubits + 1)
27
- rev = probability_by_hamming_weight(h, J, z, phi + np.pi, t, n_qubits + 1)
28
- diff_phi = rev - fwd
29
-
30
- # Lambda (Y-axis) is at a right angle to both J and h,
31
- # so there is no difference in this dimension.
32
-
33
- diff_theta *= cycles
34
- diff_phi *= cycles
15
+ return bias
35
16
 
36
17
  diff_z = np.zeros(n_bias, dtype=np.float64)
37
- for b in pauli_string:
38
- match b:
39
- case 'X':
40
- diff_z += diff_theta
41
- case 'Z':
42
- diff_z += diff_phi
43
- case 'Y':
44
- diff_z += diff_theta + diff_phi
45
- case _:
46
- pass
47
-
48
- diff_z[0] += n_qubits
18
+ for pauli_string in pauli_strings:
19
+ pauli_string = list(pauli_string)
20
+ if len(pauli_string) != n_qubits:
21
+ raise ValueError("OTOCS pauli_string must be same length as n_qubits! (Use 'I' for qubits that aren't changed.)")
22
+
23
+ fwd = probability_by_hamming_weight(J, h, z, theta, t, n_qubits + 1)
24
+ rev = probability_by_hamming_weight(-J, -h, z, theta + np.pi, t, n_qubits + 1)
25
+ diff_theta = rev - fwd
26
+
27
+ phi = theta + np.pi / 2
28
+ fwd = probability_by_hamming_weight(-h, -J, z, phi, t, n_qubits + 1)
29
+ rev = probability_by_hamming_weight(h, J, z, phi + np.pi, t, n_qubits + 1)
30
+ diff_phi = rev - fwd
31
+
32
+ # Lambda (Y-axis) is at a right angle to both J and h,
33
+ # so there is no difference in this dimension.
34
+
35
+ diff_z[0] += n_qubits
36
+ for b in pauli_string:
37
+ match b:
38
+ case 'X':
39
+ diff_z += diff_theta
40
+ case 'Z':
41
+ diff_z += diff_phi
42
+ case 'Y':
43
+ diff_z += diff_theta + diff_phi
44
+ case _:
45
+ pass
46
+
47
+ # Normalize:
49
48
  diff_z /= diff_z.sum()
50
49
 
51
50
  return diff_z
@@ -162,22 +161,19 @@ def get_inv_dist(butterfly_idx_x, butterfly_idx_z, n_qubits, row_len, col_len):
162
161
  return inv_dist
163
162
 
164
163
 
165
- def generate_otoc_samples(J=-1.0, h=2.0, z=4, theta=0.174532925199432957, t=5, n_qubits=56, cycles=1, pauli_string = 'X' + 'I' * 55, shots=100, is_orbifold=True):
166
- pauli_string = list(pauli_string)
167
- if len(pauli_string) != n_qubits:
168
- raise ValueError("OTOC pauli_string must be same length as n_qubits! (Use 'I' for qubits that aren't changed.)")
169
-
170
- thresholds = fix_cdf(get_otoc_hamming_distribution(J, h, z, theta, t, n_qubits, cycles, pauli_string))
164
+ def generate_otoc_samples(J=-1.0, h=2.0, z=4, theta=0.0, t=5, n_qubits=65, pauli_strings = ['X' + 'I' * 64], shots=100, is_orbifold=True):
165
+ thresholds = fix_cdf(get_otoc_hamming_distribution(J, h, z, theta, t, n_qubits, pauli_strings))
171
166
 
172
167
  row_len, col_len = factor_width(n_qubits)
173
- p_string = "".join(pauli_string)
174
- butterfly_idx_x = find_all_str_occurrences(p_string, 'X')
175
- butterfly_idx_z = find_all_str_occurrences(p_string, 'Z')
176
-
177
- if is_orbifold:
178
- inv_dist = get_inv_dist(butterfly_idx_x, butterfly_idx_z, n_qubits, row_len, col_len)
179
- else:
180
- inv_dist = get_willow_inv_dist(butterfly_idx_x, butterfly_idx_z, n_qubits, row_len, col_len)
168
+ inv_dist = np.zeros(n_qubits, dtype=np.float64)
169
+ for pauli_string in pauli_strings:
170
+ butterfly_idx_x = find_all_str_occurrences(pauli_string, 'X')
171
+ butterfly_idx_z = find_all_str_occurrences(pauli_string, 'Z')
172
+ if is_orbifold:
173
+ inv_dist += get_inv_dist(butterfly_idx_x, butterfly_idx_z, n_qubits, row_len, col_len)
174
+ else:
175
+ inv_dist += get_willow_inv_dist(butterfly_idx_x, butterfly_idx_z, n_qubits, row_len, col_len)
176
+ inv_dist /= 2.0
181
177
 
182
178
  samples = []
183
179
  for _ in range(shots):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrackising
3
- Version: 9.4.0
3
+ Version: 9.5.0
4
4
  Summary: Fast MAXCUT, TSP, and sampling heuristics from near-ideal transverse field Ising model (TFIM)
5
5
  Home-page: https://github.com/vm6502q/PyQrackIsing
6
6
  Author: Dan Strano
@@ -6,7 +6,7 @@ pyqrackising/maxcut_tfim.py,sha256=U1nNjyfMS48TtTQk7TRf5_VF3pVPfAcZEa2awc2nR8k,1
6
6
  pyqrackising/maxcut_tfim_sparse.py,sha256=eenJNSEwRvgwACfKoH0tj6rpn7uqH6nNTBuxUPh_lDg,11941
7
7
  pyqrackising/maxcut_tfim_streaming.py,sha256=FkBsRoXSRhv4gUeN9O7Ivx54oxq_SqiCDKnYsyxU4bs,6664
8
8
  pyqrackising/maxcut_tfim_util.py,sha256=nMLrbvDMsCtVgbS4vbRNSZYpdne5YzdifjlQbbWmKjU,16935
9
- pyqrackising/otoc.py,sha256=YGDjsM5J6p_tmKTaeeZMfxcV9rJ1k7oWfT22w7DgAXk,6428
9
+ pyqrackising/otoc.py,sha256=B70mFX7GDBR0VPAjIUFCJfqJig6QjvrPfkSyJ5w6vo0,6350
10
10
  pyqrackising/spin_glass_solver.py,sha256=tgmdJ6b1TetnFM--QEzOZFsNkquQYRVYiHVSzIGYvMI,14207
11
11
  pyqrackising/spin_glass_solver_sparse.py,sha256=cmXfAR43n1beRk4LaQbwfrQWkkhMPzPXpdK2T1HhQrk,15159
12
12
  pyqrackising/spin_glass_solver_streaming.py,sha256=joQLMKotgjQMwbG0msv_AookiWva_AiVBIR0Xr1Unho,10310
@@ -14,8 +14,8 @@ pyqrackising/tfim_magnetization.py,sha256=On1MhCNGGHRxJFRmCOpMcdqQJiy25gWkjz0Ka8
14
14
  pyqrackising/tfim_square_magnetization.py,sha256=9uJCT8ytyufcGFrZiignjCkWJr9UcP44sAAy0BIBw34,531
15
15
  pyqrackising/tsp.py,sha256=k8VK6fKw_niR-dVz8MyOT7LedABIwTzcSkhTOircYBg,64290
16
16
  pyqrackising/tsp_maxcut.py,sha256=lEDruz5lhjVu0ufvH5VaMJW3_nohO-rEijJJabEtuSU,10084
17
- pyqrackising-9.4.0.dist-info/licenses/LICENSE.md,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
18
- pyqrackising-9.4.0.dist-info/METADATA,sha256=4JhSdjeWRNgMpmJF78y5JupPS-V_6CWl8bzL3sEr5xE,1170
19
- pyqrackising-9.4.0.dist-info/WHEEL,sha256=ZjXRCNaQ9YSypEK2TE0LRB0sy2OVXSszb4Sx1XjM99k,97
20
- pyqrackising-9.4.0.dist-info/top_level.txt,sha256=bxlfGuLwzeVEI8Jm5D9HvC_WedgvvkSrpFwbGDjg-Ag,13
21
- pyqrackising-9.4.0.dist-info/RECORD,,
17
+ pyqrackising-9.5.0.dist-info/licenses/LICENSE.md,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
18
+ pyqrackising-9.5.0.dist-info/METADATA,sha256=bx799MMc3V0fTNSj_Yi-xs3mwJOGkZ0yat1SxxheDlE,1170
19
+ pyqrackising-9.5.0.dist-info/WHEEL,sha256=ZjXRCNaQ9YSypEK2TE0LRB0sy2OVXSszb4Sx1XjM99k,97
20
+ pyqrackising-9.5.0.dist-info/top_level.txt,sha256=bxlfGuLwzeVEI8Jm5D9HvC_WedgvvkSrpFwbGDjg-Ag,13
21
+ pyqrackising-9.5.0.dist-info/RECORD,,