qaoalib 0.1.7__tar.gz → 0.1.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.
- {qaoalib-0.1.7 → qaoalib-0.1.8}/PKG-INFO +1 -1
- qaoalib-0.1.8/qaoalib/data/__init__.py +0 -0
- qaoalib-0.1.8/qaoalib/data/graph.py +18 -0
- qaoalib-0.1.8/qaoalib/data/result.py +26 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/qmc.py +2 -0
- qaoalib-0.1.8/qaoalib/qaoa/strategy.py +70 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/utils.py +43 -0
- qaoalib-0.1.8/qaoalib/version.py +1 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib.egg-info/PKG-INFO +1 -1
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib.egg-info/SOURCES.txt +4 -0
- qaoalib-0.1.7/qaoalib/version.py +0 -1
- {qaoalib-0.1.7 → qaoalib-0.1.8}/LICENSE +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/README.md +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/__init__.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/json.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/math.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/__init__.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/landscape/__init__.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/landscape/base.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/landscape/direct_numpy.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/landscape/hadamard_test.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/landscape/hybrid_fast.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/layerwise.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/qis.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib/qaoa/utils.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib.egg-info/dependency_links.txt +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib.egg-info/requires.txt +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/qaoalib.egg-info/top_level.txt +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/setup.cfg +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/setup.py +0 -0
- {qaoalib-0.1.7 → qaoalib-0.1.8}/test/test.py +0 -0
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from typing import Sequence
|
|
2
|
+
from pydantic import BaseModel
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GraphData(BaseModel):
|
|
6
|
+
n_nodes: int
|
|
7
|
+
edges: list[Sequence[int]]
|
|
8
|
+
n_edges: int
|
|
9
|
+
shift: float
|
|
10
|
+
true_obj: int
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class RegGraphData(GraphData):
|
|
14
|
+
deg: int
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class GnpGraphData(GraphData):
|
|
18
|
+
prob: float
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from typing import Union, Any
|
|
2
|
+
from typing_extensions import TypeAlias
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
from .graph import RegGraphData, GnpGraphData
|
|
6
|
+
|
|
7
|
+
SingleTrialDict: TypeAlias = dict[int, Any]
|
|
8
|
+
MultipleTrialDict: TypeAlias = dict[int, list[Any]]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class Result(BaseModel):
|
|
12
|
+
graph: Union[RegGraphData, GnpGraphData]
|
|
13
|
+
expectations: SingleTrialDict
|
|
14
|
+
alpha: SingleTrialDict
|
|
15
|
+
initial_params: SingleTrialDict
|
|
16
|
+
opt_params: SingleTrialDict
|
|
17
|
+
nfev: SingleTrialDict
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class PfResult(BaseModel):
|
|
21
|
+
graph: Union[RegGraphData, GnpGraphData]
|
|
22
|
+
expectations: MultipleTrialDict
|
|
23
|
+
alpha: MultipleTrialDict
|
|
24
|
+
initial_params: MultipleTrialDict
|
|
25
|
+
opt_params: MultipleTrialDict
|
|
26
|
+
nfev: MultipleTrialDict
|
|
@@ -5,6 +5,7 @@ from .qis import qaoa_circuit, sv_backend
|
|
|
5
5
|
from .utils import expectation, I, Z
|
|
6
6
|
from ..math import fast_kron
|
|
7
7
|
|
|
8
|
+
|
|
8
9
|
class Qmc:
|
|
9
10
|
def __init__(self, G, params):
|
|
10
11
|
self.graph = G
|
|
@@ -28,6 +29,7 @@ class Qmc:
|
|
|
28
29
|
|
|
29
30
|
self.expectation = expectation(self.graph, self.result)
|
|
30
31
|
|
|
32
|
+
|
|
31
33
|
class QmcFastKron(Qmc):
|
|
32
34
|
def __init__(self, G, params):
|
|
33
35
|
super().__init__(G, params)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
from typing import TYPE_CHECKING, Optional, Union, Sequence
|
|
3
|
+
from typing_extensions import TypeAlias
|
|
4
|
+
# from .params import Params
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
import numpy.typing as npt
|
|
8
|
+
|
|
9
|
+
Params: TypeAlias = Union[Sequence[float], "npt.NDArray[np.float_]"]
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def interp():
|
|
13
|
+
...
|
|
14
|
+
|
|
15
|
+
def bilinear(
|
|
16
|
+
prev_params: Params,
|
|
17
|
+
pp_params: Params,
|
|
18
|
+
gamma_bound: Optional[tuple[float, float]] = None,
|
|
19
|
+
beta_bound: Optional[tuple[float, float]] = None,
|
|
20
|
+
) -> "npt.NDArray[np.float_]":
|
|
21
|
+
if gamma_bound is None:
|
|
22
|
+
gamma_bound = (0, np.pi)
|
|
23
|
+
if beta_bound is None:
|
|
24
|
+
beta_bound = (0, np.pi/2)
|
|
25
|
+
|
|
26
|
+
prev_params = np.asarray(prev_params)
|
|
27
|
+
pp_params = np.asarray(pp_params) # prev_prev_params (p-2)
|
|
28
|
+
|
|
29
|
+
# split into gamma and beta
|
|
30
|
+
prev_gb = np.split(prev_params, 2)
|
|
31
|
+
pp_gb = np.split(pp_params, 2)
|
|
32
|
+
|
|
33
|
+
new_gb = []
|
|
34
|
+
for i in range(2):
|
|
35
|
+
delta2 = prev_gb[i][-2] - pp_gb[i][-1]
|
|
36
|
+
pp_gb[i] = np.hstack([pp_gb[i], prev_gb[i][-1] - delta2])
|
|
37
|
+
|
|
38
|
+
diff = prev_gb[i] - pp_gb[i]
|
|
39
|
+
new_x = prev_gb[i] + diff
|
|
40
|
+
|
|
41
|
+
delta3 = new_x[-1] - new_x[-2]
|
|
42
|
+
new_x = np.hstack([new_x, new_x[-1] + delta3])
|
|
43
|
+
|
|
44
|
+
if i == 0:
|
|
45
|
+
new_x = np.clip(new_x, *gamma_bound)
|
|
46
|
+
else:
|
|
47
|
+
new_x = np.clip(new_x, *beta_bound)
|
|
48
|
+
|
|
49
|
+
new_gb.append(new_x)
|
|
50
|
+
|
|
51
|
+
return np.hstack(new_gb)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def params_fixing(
|
|
55
|
+
prev_params: Params,
|
|
56
|
+
gamma_bound: Optional[tuple[float, float]] = None,
|
|
57
|
+
beta_bound: Optional[tuple[float, float]] = None,
|
|
58
|
+
) -> "npt.NDArray[np.float_]":
|
|
59
|
+
if gamma_bound is None:
|
|
60
|
+
gamma_bound = (0, np.pi)
|
|
61
|
+
if beta_bound is None:
|
|
62
|
+
beta_bound = (0, np.pi/2)
|
|
63
|
+
|
|
64
|
+
prev_params = np.asarray(prev_params)
|
|
65
|
+
gamma, beta = np.split(prev_params)
|
|
66
|
+
|
|
67
|
+
gamma = np.hstack([gamma, np.random.uniform(*gamma_bound)])
|
|
68
|
+
beta = np.hstack([beta, np.random.uniform(*beta_bound)])
|
|
69
|
+
|
|
70
|
+
return np.hstack([gamma, beta])
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
from typing import Union, Literal, Optional
|
|
1
2
|
import warnings
|
|
2
3
|
import numpy as np
|
|
3
4
|
import networkx as nx
|
|
4
5
|
|
|
6
|
+
from .data.graph import RegGraphData, GnpGraphData
|
|
7
|
+
|
|
5
8
|
|
|
6
9
|
def get_info(filename, indicator, mode='get-numeric'):
|
|
7
10
|
try:
|
|
@@ -261,3 +264,43 @@ def post_process(data):
|
|
|
261
264
|
for p, arr in data['expectations'].items():
|
|
262
265
|
data['energies'][p] = -(np.asarray(arr) + data['shift'])
|
|
263
266
|
data['alpha'][p] = np.asarray(arr) / data['true_obj']
|
|
267
|
+
|
|
268
|
+
def convert_graph(
|
|
269
|
+
G: nx.Graph,
|
|
270
|
+
graph_type: Literal['reg', 'gnp'],
|
|
271
|
+
prob: Optional[float] = None,
|
|
272
|
+
solve_brute: bool = True,
|
|
273
|
+
) -> Union[RegGraphData, GnpGraphData]:
|
|
274
|
+
|
|
275
|
+
if solve_brute:
|
|
276
|
+
true_obj, _ = maxcut_brute(G)
|
|
277
|
+
else:
|
|
278
|
+
true_obj = 0
|
|
279
|
+
|
|
280
|
+
n_nodes = len(G.nodes)
|
|
281
|
+
edges = list(G.edges)
|
|
282
|
+
n_edges = len(G.edges)
|
|
283
|
+
shift = -n_edges / 2.0
|
|
284
|
+
|
|
285
|
+
if graph_type == 'reg':
|
|
286
|
+
deg = len(list(G.neighbors(0)))
|
|
287
|
+
return RegGraphData(
|
|
288
|
+
deg=deg,
|
|
289
|
+
n_nodes=n_nodes,
|
|
290
|
+
edges=edges,
|
|
291
|
+
n_edges=n_edges,
|
|
292
|
+
shift=shift,
|
|
293
|
+
true_obj=true_obj,
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
elif graph_type == 'gnp':
|
|
297
|
+
if prob is None:
|
|
298
|
+
raise ValueError('`prob` must be passed for Gnp graphs.')
|
|
299
|
+
return GnpGraphData(
|
|
300
|
+
prob=prob,
|
|
301
|
+
n_nodes=n_nodes,
|
|
302
|
+
edges=edges,
|
|
303
|
+
n_edges=n_edges,
|
|
304
|
+
shift=shift,
|
|
305
|
+
true_obj=true_obj,
|
|
306
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.1.8'
|
|
@@ -11,10 +11,14 @@ qaoalib.egg-info/SOURCES.txt
|
|
|
11
11
|
qaoalib.egg-info/dependency_links.txt
|
|
12
12
|
qaoalib.egg-info/requires.txt
|
|
13
13
|
qaoalib.egg-info/top_level.txt
|
|
14
|
+
qaoalib/data/__init__.py
|
|
15
|
+
qaoalib/data/graph.py
|
|
16
|
+
qaoalib/data/result.py
|
|
14
17
|
qaoalib/qaoa/__init__.py
|
|
15
18
|
qaoalib/qaoa/layerwise.py
|
|
16
19
|
qaoalib/qaoa/qis.py
|
|
17
20
|
qaoalib/qaoa/qmc.py
|
|
21
|
+
qaoalib/qaoa/strategy.py
|
|
18
22
|
qaoalib/qaoa/utils.py
|
|
19
23
|
qaoalib/qaoa/landscape/__init__.py
|
|
20
24
|
qaoalib/qaoa/landscape/base.py
|
qaoalib-0.1.7/qaoalib/version.py
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '0.1.7'
|
|
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
|