eqc-models 0.12.0__py3-none-any.whl → 0.14.0__py3-none-any.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.
Files changed (72) hide show
  1. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/base/base.py +11 -0
  2. eqc_models-0.14.0.data/platlib/eqc_models/base/binaries.py +33 -0
  3. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/base/constraints.py +39 -0
  4. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/base/polyeval.c +443 -267
  5. eqc_models-0.14.0.data/platlib/eqc_models/base/polyeval.cpython-310-darwin.so +0 -0
  6. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/base/polynomial.py +21 -2
  7. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/base/results.py +81 -1
  8. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/graph/__init__.py +2 -0
  9. eqc_models-0.14.0.data/platlib/eqc_models/graph/rcshortestpath.py +81 -0
  10. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/graph/shortestpath.py +52 -19
  11. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/classifierbase.py +0 -5
  12. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/classifierqboost.py +115 -72
  13. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/clustering.py +29 -1
  14. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/clusteringbase.py +29 -7
  15. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/decomposition.py +50 -11
  16. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/regressor.py +14 -0
  17. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/regressorbase.py +24 -6
  18. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/reservoir.py +17 -2
  19. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/solvers/__init__.py +9 -1
  20. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/solvers/eqcdirect.py +27 -6
  21. eqc_models-0.14.0.data/platlib/eqc_models/solvers/mip.py +115 -0
  22. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/solvers/qciclient.py +11 -22
  23. eqc_models-0.14.0.data/platlib/eqc_models/solvers/responselog.py +47 -0
  24. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/utilities/__init__.py +2 -1
  25. eqc_models-0.14.0.data/platlib/eqc_models/utilities/general.py +83 -0
  26. {eqc_models-0.12.0.dist-info → eqc_models-0.14.0.dist-info}/METADATA +10 -9
  27. eqc_models-0.14.0.dist-info/RECORD +70 -0
  28. eqc_models-0.12.0.data/platlib/eqc_models/base/polyeval.cpython-310-darwin.so +0 -0
  29. eqc_models-0.12.0.dist-info/RECORD +0 -65
  30. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/compile_extensions.py +0 -0
  31. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/__init__.py +0 -0
  32. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/algorithms/__init__.py +0 -0
  33. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/algorithms/base.py +0 -0
  34. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/algorithms/penaltymultiplier.py +0 -0
  35. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/allocation/__init__.py +0 -0
  36. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/allocation/allocation.py +0 -0
  37. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/allocation/portbase.py +0 -0
  38. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/allocation/portmomentum.py +0 -0
  39. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/assignment/__init__.py +0 -0
  40. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/assignment/qap.py +0 -0
  41. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/assignment/resource.py +0 -0
  42. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/assignment/setpartition.py +0 -0
  43. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/base/__init__.py +0 -0
  44. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/base/operators.py +0 -0
  45. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/base/polyeval.pyx +0 -0
  46. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/base/quadratic.py +0 -0
  47. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/combinatorics/__init__.py +0 -0
  48. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/combinatorics/setcover.py +0 -0
  49. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/combinatorics/setpartition.py +0 -0
  50. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/decoding.py +0 -0
  51. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/graph/base.py +0 -0
  52. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/graph/hypergraph.py +0 -0
  53. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/graph/maxcut.py +0 -0
  54. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/graph/maxkcut.py +0 -0
  55. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/graph/partition.py +0 -0
  56. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/__init__.py +0 -0
  57. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/classifierqsvm.py +0 -0
  58. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/cvqboost_hamiltonian.pyx +0 -0
  59. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/cvqboost_hamiltonian_c_func.c +0 -0
  60. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/cvqboost_hamiltonian_c_func.h +0 -0
  61. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/forecast.py +0 -0
  62. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/ml/forecastbase.py +0 -0
  63. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/process/base.py +0 -0
  64. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/process/mpc.py +0 -0
  65. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/sequence/__init__.py +0 -0
  66. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/sequence/tsp.py +0 -0
  67. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/utilities/fileio.py +0 -0
  68. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/utilities/polynomial.py +0 -0
  69. {eqc_models-0.12.0.data → eqc_models-0.14.0.data}/platlib/eqc_models/utilities/qplib.py +0 -0
  70. {eqc_models-0.12.0.dist-info → eqc_models-0.14.0.dist-info}/WHEEL +0 -0
  71. {eqc_models-0.12.0.dist-info → eqc_models-0.14.0.dist-info}/licenses/LICENSE.txt +0 -0
  72. {eqc_models-0.12.0.dist-info → eqc_models-0.14.0.dist-info}/top_level.txt +0 -0
@@ -41,6 +41,7 @@ class EqcModel:
41
41
  _upper_bound = None
42
42
  _H = None
43
43
  _machine_slacks = 0
44
+ _is_discrete = None
44
45
 
45
46
  def decode(self, solution : np.ndarray, from_encoding : str=None) -> np.ndarray:
46
47
  """
@@ -117,6 +118,16 @@ class EqcModel:
117
118
  warn("The domains property is deprecated in favor of naming it upper_bound", DeprecationWarning)
118
119
  self._upper_bound = value
119
120
 
121
+ @property
122
+ def is_discrete(self) -> List:
123
+ """ An array of boolean values indicating if variable should be restricted to a discrete domain """
124
+
125
+ return self._is_discrete
126
+
127
+ @is_discrete.setter
128
+ def is_discrete(self, value : List):
129
+ self._is_discrete = value
130
+
120
131
  @property
121
132
  def n(self) -> int:
122
133
  """ Return the number of variables """
@@ -0,0 +1,33 @@
1
+
2
+ def make_binary_penalty(var_idx, slack_idx, max_degree=2, penalty_multiplier=None):
3
+ """
4
+ Make a penalty expression enforcing binary values
5
+
6
+ The expression is formed from the conditions
7
+
8
+ $$
9
+ x + w = 1
10
+ $$
11
+
12
+ $$
13
+ xw = 0
14
+ $$
15
+
16
+ $$
17
+ w^2 + 2xw + x^2 - 2w - 2x + 1 + xw = 0
18
+ $$
19
+
20
+ $$
21
+ 3xw + w^2 + x^2 - 2w - 2x + 1 = 0
22
+ $$
23
+
24
+ """
25
+
26
+ indices = [(0, var_idx), (0, slack_idx), (var_idx, slack_idx), (var_idx, var_idx), (slack_idx, slack_idx)]
27
+ coefficients = [-2, -2, 3, 1, 1]
28
+ offset = 1
29
+ if penalty_multiplier is not None:
30
+ coefficients = [penalty_multiplier * c for c in coefficients]
31
+ offset *- penalty_multiplier
32
+ return coefficients, indices, offset
33
+
@@ -82,6 +82,45 @@ class ConstraintsMixIn:
82
82
  def constraints(self, value: Tuple[np.ndarray, np.ndarray]):
83
83
  self.lhs, self.rhs = value
84
84
 
85
+ @staticmethod
86
+ def _stackLHS(*args):
87
+ """
88
+
89
+ >>> m1 = np.array([1, 1, 1])
90
+ >>> m2 = np.array([[2.0, 2.0]])
91
+ >>> m3 = np.array([[0, 3, 3, 1], [1, 0, 1, 0]])
92
+ >>> ConstraintsMixIn._stackLHS(m1, m2, m3)
93
+ array([[1., 1., 1., 0.],
94
+ [2., 2., 0., 0.],
95
+ [0., 3., 3., 1.],
96
+ [1., 0., 1., 0.]])
97
+
98
+ """
99
+ n = 0
100
+ m = 0
101
+ dtype = np.int32
102
+ def update_dtype(matrix):
103
+ type_rank = ["int8", "int16", "int32", "int64", "float8", "float16", "float32", "float64"]
104
+ try:
105
+ idx = type_rank.index(str(matrix.dtype))
106
+ except ValueError:
107
+ raise TypeError(f"matrix type {matrix.dtype} not supported")
108
+ new_args = []
109
+ for mat in args:
110
+ if len(mat.shape) == 1:
111
+ mat = mat.reshape((1, mat.size))
112
+ if mat.shape[1] > n:
113
+ n = mat.shape[1]
114
+ m += mat.shape[0]
115
+ dtype = update_dtype(mat)
116
+ new_args.append(mat)
117
+ new_lhs = np.zeros((m, n), dtype=dtype)
118
+ idx = 0
119
+ for mat in new_args:
120
+ new_lhs[idx:idx+mat.shape[0],:mat.shape[1]] = mat
121
+ idx += mat.shape[0]
122
+ return new_lhs
123
+
85
124
  @property
86
125
  def offset(self) -> float:
87
126
  """ Calculate the offset due to the conversion of constraints to penalties """