pyqrackising 9.5.5__tar.gz → 9.5.7__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.
Files changed (28) hide show
  1. {pyqrackising-9.5.5/pyqrackising.egg-info → pyqrackising-9.5.7}/PKG-INFO +1 -1
  2. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyproject.toml +1 -1
  3. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/otoc.py +27 -29
  4. {pyqrackising-9.5.5 → pyqrackising-9.5.7/pyqrackising.egg-info}/PKG-INFO +1 -1
  5. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/setup.py +1 -1
  6. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/LICENSE.md +0 -0
  7. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/MANIFEST.in +0 -0
  8. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/README.md +0 -0
  9. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/__init__.py +0 -0
  10. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/convert_tensor_network_to_tsp.py +0 -0
  11. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/generate_tfim_samples.py +0 -0
  12. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/kernels.cl +0 -0
  13. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/maxcut_tfim.py +0 -0
  14. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/maxcut_tfim_sparse.py +0 -0
  15. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/maxcut_tfim_streaming.py +0 -0
  16. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/maxcut_tfim_util.py +0 -0
  17. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/spin_glass_solver.py +0 -0
  18. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/spin_glass_solver_sparse.py +0 -0
  19. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/spin_glass_solver_streaming.py +0 -0
  20. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/tfim_magnetization.py +0 -0
  21. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/tfim_square_magnetization.py +0 -0
  22. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/tsp.py +0 -0
  23. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising/tsp_maxcut.py +0 -0
  24. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising.egg-info/SOURCES.txt +0 -0
  25. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising.egg-info/dependency_links.txt +0 -0
  26. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising.egg-info/not-zip-safe +0 -0
  27. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/pyqrackising.egg-info/top_level.txt +0 -0
  28. {pyqrackising-9.5.5 → pyqrackising-9.5.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrackising
3
- Version: 9.5.5
3
+ Version: 9.5.7
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
@@ -10,7 +10,7 @@ build-backend = "setuptools.build_meta"
10
10
 
11
11
  [project]
12
12
  name = "pyqrackising"
13
- version = "9.5.5"
13
+ version = "9.5.7"
14
14
  requires-python = ">=3.8"
15
15
  description = "Fast MAXCUT, TSP, and sampling heuristics from near-ideal transverse field Ising model (TFIM)"
16
16
  readme = {file = "README.txt", content-type = "text/markdown"}
@@ -15,29 +15,39 @@ def get_otoc_hamming_distribution(J=-1.0, h=2.0, z=4, theta=0.0, t=5, n_qubits=6
15
15
  bias[0] = 1.0
16
16
  return bias
17
17
 
18
- entropy_frac = 0.0
18
+ max_entropy = np.empty(n_bias, dtype=np.float64)
19
+ tot_prob = 0
20
+ p = 1.0
21
+ for q in range(n_qubits >> 1):
22
+ max_entropy[q] = p
23
+ max_entropy[n_bias - (q + 1)] = p
24
+ tot_prob += 2 * p
25
+ p = math.comb(n_qubits, q + 1)
26
+ if n_qubits & 1:
27
+ max_entropy[n_qubits >> 1] = p
28
+ tot_prob += p
29
+ max_entropy /= tot_prob
30
+
31
+ signal_frac = 0.0
19
32
  diff_z = np.zeros(n_bias, dtype=np.float64)
20
33
  for pauli_string in pauli_strings:
21
34
  pauli_string = list(pauli_string)
22
35
  if len(pauli_string) != n_qubits:
23
36
  raise ValueError("OTOCS pauli_string must be same length as n_qubits! (Use 'I' for qubits that aren't changed.)")
24
37
 
25
- entropy_frac += pauli_string.count('X') + pauli_string.count('Y') + pauli_string.count('Z')
38
+ signal_frac -= pauli_string.count('Y') + pauli_string.count('Z')
26
39
 
27
40
  fwd = probability_by_hamming_weight(J, h, z, theta, t, n_qubits + 1)
28
41
  rev = probability_by_hamming_weight(-J, -h, z, theta + np.pi, t, n_qubits + 1)
29
42
  diff_theta = rev - fwd
43
+ diff_theta[0] += 1.0
30
44
 
31
45
  phi = theta + np.pi / 2
32
46
  fwd = probability_by_hamming_weight(-h, -J, z, phi, t, n_qubits + 1)
33
- rev = probability_by_hamming_weight(h, J, z, phi + np.pi, t, n_qubits + 1)
34
- diff_phi = rev - fwd
35
-
36
- diff_lam = diff_theta + diff_phi
47
+ rev = probability_by_hamming_weight(h, J, z, phi - np.pi, t, n_qubits + 1)
48
+ diff_phi = (rev - fwd) + max_entropy
37
49
 
38
- diff_theta[0] += 1.0
39
- diff_phi[0] += 1.0
40
- diff_lam[0] += 1.0
50
+ diff_lam = (diff_theta + diff_phi) / 2
41
51
 
42
52
  for b in pauli_string:
43
53
  match b:
@@ -53,20 +63,8 @@ def get_otoc_hamming_distribution(J=-1.0, h=2.0, z=4, theta=0.0, t=5, n_qubits=6
53
63
  # Normalize:
54
64
  diff_z /= diff_z.sum()
55
65
 
56
- entropy_frac = np.atan2(entropy_frac, math.sqrt(n_qubits))
57
- max_entropy = np.empty(n_bias, dtype=np.float64)
58
- tot_prob = 0
59
- p = 1.0
60
- for q in range(n_qubits >> 1):
61
- max_entropy[q] = p
62
- max_entropy[n_bias - (q + 1)] = p
63
- tot_prob += 2 * p
64
- p = math.comb(n_qubits, q + 1)
65
- if n_qubits & 1:
66
- max_entropy[n_qubits >> 1] = p
67
- tot_prob += p
68
- max_entropy *= entropy_frac / tot_prob
69
- diff_z = max_entropy + (1 - entropy_frac) * diff_z
66
+ signal_frac = 2 ** signal_frac
67
+ diff_z = signal_frac * diff_z + (1 - signal_frac) * max_entropy
70
68
 
71
69
  # Normalize:
72
70
  diff_z /= diff_z.sum()
@@ -188,11 +186,11 @@ def get_inv_dist(butterfly_idx_x, butterfly_idx_z, n_qubits, row_len, col_len):
188
186
  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):
189
187
  thresholds = fix_cdf(get_otoc_hamming_distribution(J, h, z, theta, t, n_qubits, pauli_strings))
190
188
 
191
- entropy_frac = 0.0
189
+ signal_frac = 0.0
192
190
  for pauli_string in pauli_strings:
193
191
  pauli_string = list(pauli_string)
194
- entropy_frac += pauli_string.count('X') + pauli_string.count('Y') + pauli_string.count('Z')
195
- entropy_frac = np.atan2(entropy_frac, math.sqrt(n_qubits))
192
+ signal_frac -= pauli_string.count('Y') + pauli_string.count('Z')
193
+ signal_frac = 2 ** signal_frac
196
194
 
197
195
  row_len, col_len = factor_width(n_qubits)
198
196
  inv_dist = np.zeros(n_qubits, dtype=np.float64)
@@ -218,13 +216,13 @@ def generate_otoc_samples(J=-1.0, h=2.0, z=4, theta=0.0, t=5, n_qubits=65, pauli
218
216
  continue
219
217
 
220
218
  # Second dimension: permutation within Hamming weight
221
- if np.random.random() < entropy_frac:
219
+ if np.random.random() < signal_frac:
220
+ samples.append(take_sample(n_qubits, 0, m, inv_dist))
221
+ else:
222
222
  bit_pows = np.random.choice(qubit_pows, size=m, replace=False)
223
223
  sample = 0
224
224
  for bit_pow in bit_pows:
225
225
  sample |= bit_pow
226
226
  samples.append(sample)
227
- else:
228
- samples.append(take_sample(n_qubits, 0, m, inv_dist))
229
227
 
230
228
  return samples
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyqrackising
3
- Version: 9.5.5
3
+ Version: 9.5.7
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
@@ -7,7 +7,7 @@ with open(README_PATH) as readme_file:
7
7
 
8
8
  setup(
9
9
  name='pyqrackising',
10
- version='9.5.5',
10
+ version='9.5.7',
11
11
  author='Dan Strano',
12
12
  author_email='stranoj@gmail.com',
13
13
  description='Fast MAXCUT, TSP, and sampling heuristics from near-ideal transverse field Ising model (TFIM)',
File without changes
File without changes
File without changes
File without changes