eqc-models 0.10.1__py3-none-any.whl → 0.10.3__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 (69) hide show
  1. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/__init__.py +2 -1
  2. eqc_models-0.10.3.data/platlib/eqc_models/assignment/setpartition.py +4 -0
  3. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/base/base.py +44 -4
  4. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/base/polyeval.c +163 -163
  5. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/base/polyeval.cpython-310-darwin.so +0 -0
  6. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/base/polynomial.py +7 -3
  7. eqc_models-0.10.3.data/platlib/eqc_models/combinatorics/__init__.py +6 -0
  8. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/combinatorics/setcover.py +34 -17
  9. {eqc_models-0.10.1.data/platlib/eqc_models/assignment → eqc_models-0.10.3.data/platlib/eqc_models/combinatorics}/setpartition.py +2 -0
  10. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/graph/maxkcut.py +26 -68
  11. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/solvers/qciclient.py +11 -2
  12. {eqc_models-0.10.1.dist-info → eqc_models-0.10.3.dist-info}/METADATA +3 -2
  13. eqc_models-0.10.3.dist-info/RECORD +59 -0
  14. {eqc_models-0.10.1.dist-info → eqc_models-0.10.3.dist-info}/WHEEL +1 -1
  15. eqc_models-0.10.1.data/platlib/eqc_models/base.py +0 -115
  16. eqc_models-0.10.1.data/platlib/eqc_models/combinatorics/__init__.py +0 -5
  17. eqc_models-0.10.1.data/platlib/eqc_models/communitydetection.py +0 -25
  18. eqc_models-0.10.1.data/platlib/eqc_models/eqcdirectsolver.py +0 -61
  19. eqc_models-0.10.1.data/platlib/eqc_models/graphs.py +0 -28
  20. eqc_models-0.10.1.data/platlib/eqc_models/maxcut.py +0 -113
  21. eqc_models-0.10.1.data/platlib/eqc_models/maxkcut.py +0 -185
  22. eqc_models-0.10.1.data/platlib/eqc_models/quadraticmodel.py +0 -131
  23. eqc_models-0.10.1.data/platlib/eqc_models/solvers/eqcdirect.py +0 -160
  24. eqc_models-0.10.1.dist-info/RECORD +0 -66
  25. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/compile_extensions.py +0 -0
  26. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/algorithms/__init__.py +0 -0
  27. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/algorithms/base.py +0 -0
  28. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/algorithms/penaltymultiplier.py +0 -0
  29. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/allocation/__init__.py +0 -0
  30. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/allocation/allocation.py +0 -0
  31. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/allocation/portbase.py +0 -0
  32. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/allocation/portmomentum.py +0 -0
  33. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/assignment/__init__.py +0 -0
  34. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/assignment/qap.py +0 -0
  35. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/base/__init__.py +0 -0
  36. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/base/constraints.py +0 -0
  37. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/base/operators.py +0 -0
  38. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/base/polyeval.pyx +0 -0
  39. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/base/quadratic.py +0 -0
  40. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/decoding.py +0 -0
  41. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/graph/__init__.py +0 -0
  42. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/graph/base.py +0 -0
  43. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/graph/hypergraph.py +0 -0
  44. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/graph/maxcut.py +0 -0
  45. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/graph/partition.py +0 -0
  46. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/__init__.py +0 -0
  47. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/classifierbase.py +0 -0
  48. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/classifierqboost.py +0 -0
  49. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/classifierqsvm.py +0 -0
  50. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/clustering.py +0 -0
  51. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/clusteringbase.py +0 -0
  52. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/cvqboost_hamiltonian.pyx +0 -0
  53. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/cvqboost_hamiltonian_c_func.c +0 -0
  54. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/cvqboost_hamiltonian_c_func.h +0 -0
  55. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/decomposition.py +0 -0
  56. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/forecast.py +0 -0
  57. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/forecastbase.py +0 -0
  58. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/regressor.py +0 -0
  59. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/regressorbase.py +0 -0
  60. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/ml/reservoir.py +0 -0
  61. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/sequence/__init__.py +0 -0
  62. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/sequence/tsp.py +0 -0
  63. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/solvers/__init__.py +0 -0
  64. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/utilities/__init__.py +0 -0
  65. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/utilities/fileio.py +0 -0
  66. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/utilities/polynomial.py +0 -0
  67. {eqc_models-0.10.1.data → eqc_models-0.10.3.data}/platlib/eqc_models/utilities/qplib.py +0 -0
  68. {eqc_models-0.10.1.dist-info → eqc_models-0.10.3.dist-info/licenses}/LICENSE.txt +0 -0
  69. {eqc_models-0.10.1.dist-info → eqc_models-0.10.3.dist-info}/top_level.txt +0 -0
@@ -8,8 +8,9 @@ from .base import QuadraticModel, PolynomialModel
8
8
  from .solvers import (Dirac1CloudSolver, Dirac3CloudSolver, Dirac3DirectSolver)
9
9
  from .allocation import AllocationModel, AllocationModelX, ResourceRuleEnum
10
10
  from .assignment import QAPModel
11
+ from .combinatorics import SetCoverModel, SetPartitionModel
11
12
 
12
13
  __all__ = ["QuadraticModel", "PolynomialModel", "Dirac1CloudSolver",
13
14
  "Dirac3CloudSolver", "AllocationModel", "AllocationModelX",
14
15
  "Dirac3DirectSolver", "ResourceRuleEnum",
15
- "QAPModel"]
16
+ "QAPModel", "SetPartitionModel", "SetCoverModel"]
@@ -0,0 +1,4 @@
1
+ from ..combinatorics import SetPartitionModel
2
+ import warnings
3
+
4
+ warnings.warn("import of SetPartitionModel through assignment is deprecated", DeprecationWarning)
@@ -42,12 +42,50 @@ class EqcModel:
42
42
  _H = None
43
43
  _machine_slacks = 0
44
44
 
45
- def decode(self, solution : np.ndarray) -> np.ndarray:
46
- """ Manipulate the solution to match the variable count """
45
+ def decode(self, solution : np.ndarray, from_encoding : str=None) -> np.ndarray:
46
+ """
47
+ Manipulate the solution to match the variable count. Optionally,
48
+ a log-encoded solution vector can be translated into a vector
49
+ with integral values.
50
+
51
+ Parameters
52
+ -----------
53
+
54
+ solution : np.ndarray
55
+ 1d solution vector
56
+
57
+ from_encoding : str
58
+ string indicating if the vector is an encoding of particular type. The
59
+ text 'qubo' is the only option that does anything for now.
60
+
61
+ >>> model = EqcModel()
62
+ >>> ub = np.array([1, 2, 5])
63
+ >>> model.upper_bound = ub
64
+ >>> model.machine_slacks = 1
65
+ >>> solution = np.array([1, 1, 1, 1, 0, 1, 0]) # this solution has a 3, which violates the upper bound, but decode doesn't care
66
+ >>> model.decode(solution, "qubo")
67
+ array([1, 3, 5])
68
+
69
+ """
47
70
 
71
+ solution = np.array(solution)
48
72
  # ignore any slacks that may have been added during encoding
49
- solution = solution[:-self.machine_slacks]
50
-
73
+ if self.machine_slacks > 0:
74
+ solution = solution[:-self.machine_slacks]
75
+ if from_encoding == "qubo":
76
+ ub = self.upper_bound
77
+ en = solution.shape[0]
78
+ assert en > 0
79
+ n = ub.shape[0]
80
+ linear_operator = np.zeros((n,en))
81
+ j = 0
82
+ for i in range(self.n):
83
+ m = int(np.floor(np.log2(ub[i]))+1)
84
+ bits = 2**np.arange(m)
85
+ assert j+m <= linear_operator.shape[1]+2, f"Invalid slice for i={i} {j}:{j+m}"
86
+ linear_operator[i,j:j+m] = bits
87
+ j += m
88
+ solution = (linear_operator@solution).astype(np.int64)
51
89
  return solution
52
90
 
53
91
  @property
@@ -64,6 +102,8 @@ class EqcModel:
64
102
  value = np.array(value)
65
103
  if (value != value.astype(np.int64)).any():
66
104
  raise ValueError("Upper bound values must be integer")
105
+ if (value==0).any():
106
+ raise ValueError("Zero values are not allowed as an upper_bound.")
67
107
  self._upper_bound = value.astype(np.int64)
68
108
 
69
109
  @property