pyqrackising 9.5.6__tar.gz → 9.5.8__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.
Potentially problematic release.
This version of pyqrackising might be problematic. Click here for more details.
- {pyqrackising-9.5.6/pyqrackising.egg-info → pyqrackising-9.5.8}/PKG-INFO +1 -1
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyproject.toml +1 -1
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/otoc.py +27 -29
- {pyqrackising-9.5.6 → pyqrackising-9.5.8/pyqrackising.egg-info}/PKG-INFO +1 -1
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/setup.py +1 -1
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/LICENSE.md +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/MANIFEST.in +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/README.md +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/__init__.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/convert_tensor_network_to_tsp.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/generate_tfim_samples.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/kernels.cl +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/maxcut_tfim.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/maxcut_tfim_sparse.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/maxcut_tfim_streaming.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/maxcut_tfim_util.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/spin_glass_solver.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/spin_glass_solver_sparse.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/spin_glass_solver_streaming.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/tfim_magnetization.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/tfim_square_magnetization.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/tsp.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising/tsp_maxcut.py +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising.egg-info/SOURCES.txt +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising.egg-info/dependency_links.txt +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising.egg-info/not-zip-safe +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/pyqrackising.egg-info/top_level.txt +0 -0
- {pyqrackising-9.5.6 → pyqrackising-9.5.8}/setup.cfg +0 -0
|
@@ -10,7 +10,7 @@ build-backend = "setuptools.build_meta"
|
|
|
10
10
|
|
|
11
11
|
[project]
|
|
12
12
|
name = "pyqrackising"
|
|
13
|
-
version = "9.5.
|
|
13
|
+
version = "9.5.8"
|
|
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
|
-
|
|
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
|
-
|
|
38
|
+
signal_frac -= 0.5 * pauli_string.count('X') + pauli_string.count('Z') + 1.5 * pauli_string.count('Y')
|
|
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
|
|
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
|
|
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
|
-
|
|
57
|
-
|
|
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
|
-
|
|
189
|
+
signal_frac = 0.0
|
|
192
190
|
for pauli_string in pauli_strings:
|
|
193
191
|
pauli_string = list(pauli_string)
|
|
194
|
-
|
|
195
|
-
|
|
192
|
+
signal_frac -= 0.5 * pauli_string.count('X') + pauli_string.count('Z') + 1.5 * pauli_string.count('Y')
|
|
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() <
|
|
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
|
|
@@ -7,7 +7,7 @@ with open(README_PATH) as readme_file:
|
|
|
7
7
|
|
|
8
8
|
setup(
|
|
9
9
|
name='pyqrackising',
|
|
10
|
-
version='9.5.
|
|
10
|
+
version='9.5.8',
|
|
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
|
|
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
|