eqc-models 0.10.2__tar.gz → 0.10.3__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 (122) hide show
  1. {eqc_models-0.10.2/eqc_models.egg-info → eqc_models-0.10.3}/PKG-INFO +3 -2
  2. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/combinatorics/setcover.py +34 -17
  3. {eqc_models-0.10.2 → eqc_models-0.10.3/eqc_models.egg-info}/PKG-INFO +3 -2
  4. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testsetcovermodel.py +3 -3
  5. {eqc_models-0.10.2 → eqc_models-0.10.3}/.gitlab-ci.yml +0 -0
  6. {eqc_models-0.10.2 → eqc_models-0.10.3}/LICENSE.txt +0 -0
  7. {eqc_models-0.10.2 → eqc_models-0.10.3}/MANIFEST.in +0 -0
  8. {eqc_models-0.10.2 → eqc_models-0.10.3}/README.md +0 -0
  9. {eqc_models-0.10.2 → eqc_models-0.10.3}/compile_extensions.py +0 -0
  10. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/Makefile +0 -0
  11. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/build/html/_static/basic.css +0 -0
  12. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/build/html/_static/css/badge_only.css +0 -0
  13. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/build/html/_static/css/theme.css +0 -0
  14. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/build/html/_static/custom.css +0 -0
  15. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/build/html/_static/file.png +0 -0
  16. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/build/html/_static/minus.png +0 -0
  17. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/build/html/_static/plus.png +0 -0
  18. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/build/html/_static/pygments.css +0 -0
  19. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/build/html/_static/white_logo.png +0 -0
  20. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/make.bat +0 -0
  21. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/source/_static/custom.css +0 -0
  22. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/source/_static/white_logo.png +0 -0
  23. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/source/conf.py +0 -0
  24. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/source/dependencies.rst +0 -0
  25. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/source/eqc_models.rst +0 -0
  26. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/source/index.rst +0 -0
  27. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/source/modules.rst +0 -0
  28. {eqc_models-0.10.2 → eqc_models-0.10.3}/docs/source/usage.rst +0 -0
  29. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/__init__.py +0 -0
  30. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/algorithms/__init__.py +0 -0
  31. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/algorithms/base.py +0 -0
  32. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/algorithms/penaltymultiplier.py +0 -0
  33. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/allocation/__init__.py +0 -0
  34. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/allocation/allocation.py +0 -0
  35. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/allocation/portbase.py +0 -0
  36. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/allocation/portmomentum.py +0 -0
  37. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/assignment/__init__.py +0 -0
  38. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/assignment/qap.py +0 -0
  39. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/assignment/setpartition.py +0 -0
  40. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/base/__init__.py +0 -0
  41. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/base/base.py +0 -0
  42. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/base/constraints.py +0 -0
  43. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/base/operators.py +0 -0
  44. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/base/polyeval.c +0 -0
  45. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/base/polyeval.pyx +0 -0
  46. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/base/polynomial.py +0 -0
  47. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/base/quadratic.py +0 -0
  48. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/combinatorics/__init__.py +0 -0
  49. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/combinatorics/setpartition.py +0 -0
  50. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/decoding.py +0 -0
  51. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/graph/__init__.py +0 -0
  52. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/graph/base.py +0 -0
  53. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/graph/hypergraph.py +0 -0
  54. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/graph/maxcut.py +0 -0
  55. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/graph/maxkcut.py +0 -0
  56. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/graph/partition.py +0 -0
  57. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/__init__.py +0 -0
  58. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/classifierbase.py +0 -0
  59. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/classifierqboost.py +0 -0
  60. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/classifierqsvm.py +0 -0
  61. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/clustering.py +0 -0
  62. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/clusteringbase.py +0 -0
  63. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/cvqboost_hamiltonian.pyx +0 -0
  64. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/cvqboost_hamiltonian_c_func.c +0 -0
  65. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/cvqboost_hamiltonian_c_func.h +0 -0
  66. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/decomposition.py +0 -0
  67. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/forecast.py +0 -0
  68. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/forecastbase.py +0 -0
  69. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/regressor.py +0 -0
  70. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/regressorbase.py +0 -0
  71. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/ml/reservoir.py +0 -0
  72. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/sequence/__init__.py +0 -0
  73. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/sequence/tsp.py +0 -0
  74. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/solvers/__init__.py +0 -0
  75. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/solvers/qciclient.py +0 -0
  76. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/utilities/__init__.py +0 -0
  77. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/utilities/fileio.py +0 -0
  78. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/utilities/polynomial.py +0 -0
  79. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models/utilities/qplib.py +0 -0
  80. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models.egg-info/SOURCES.txt +0 -0
  81. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models.egg-info/dependency_links.txt +0 -0
  82. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models.egg-info/requires.txt +0 -0
  83. {eqc_models-0.10.2 → eqc_models-0.10.3}/eqc_models.egg-info/top_level.txt +0 -0
  84. {eqc_models-0.10.2 → eqc_models-0.10.3}/pyproject.toml +0 -0
  85. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/binary_job_example.py +0 -0
  86. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/c6h6_graph_clustering.py +0 -0
  87. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/clustering.py +0 -0
  88. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/continuous_job_example.py +0 -0
  89. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/duality_example.py +0 -0
  90. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/graph_clustering.py +0 -0
  91. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/graph_partitioning.py +0 -0
  92. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/hamiltonian_to_polynomial.py +0 -0
  93. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/hypergraph.py +0 -0
  94. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/integer_job_example.py +0 -0
  95. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/karate_graph_clustering.py +0 -0
  96. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/lin_reg_dirac3.py +0 -0
  97. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/mackey_glass_cell_production_series.csv +0 -0
  98. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/pca_iris_dirac3.py +0 -0
  99. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/port_opt_dirac3.py +0 -0
  100. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/qboost_iris_dirac3.py +0 -0
  101. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/qplib_benchmark_config.py +0 -0
  102. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/qplib_reader.py +0 -0
  103. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/qplib_runner.py +0 -0
  104. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/qsvm_iris_dirac3.py +0 -0
  105. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/reservoir_forecast.py +0 -0
  106. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/rundoctests.py +0 -0
  107. {eqc_models-0.10.2 → eqc_models-0.10.3}/scripts/utils.py +0 -0
  108. {eqc_models-0.10.2 → eqc_models-0.10.3}/setup.cfg +0 -0
  109. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/doctest_base.py +0 -0
  110. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testallocationmodel.py +0 -0
  111. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testconstraint.py +0 -0
  112. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testcvqboost.py +0 -0
  113. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testeqcdirectsolver.py +0 -0
  114. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testgraphpartitionmodel.py +0 -0
  115. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testhypergraphmodel.py +0 -0
  116. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testmaxcutmodel.py +0 -0
  117. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testpolynomialmodel.py +0 -0
  118. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testqapmodel.py +0 -0
  119. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testqciclientsolver.py +0 -0
  120. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testquadraticmodel.py +0 -0
  121. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testsetpartitionmodel.py +0 -0
  122. {eqc_models-0.10.2 → eqc_models-0.10.3}/test/testtsp.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: eqc-models
3
- Version: 0.10.2
3
+ Version: 0.10.3
4
4
  Summary: Optimization and ML modeling package targeting EQC devices
5
5
  Author: Quantum Computing Inc.
6
6
  Author-email: support@quantumcomputinginc.com
@@ -22,6 +22,7 @@ Provides-Extra: dev
22
22
  Requires-Dist: pytest<8,>=7.1.0; extra == "dev"
23
23
  Requires-Dist: pytest-cov; extra == "dev"
24
24
  Requires-Dist: sphinx_rtd_theme<2,>=1.3.0; extra == "dev"
25
+ Dynamic: license-file
25
26
 
26
27
  # EQC Models
27
28
 
@@ -41,41 +41,57 @@ class SetCoverModel(ConstrainedQuadraticModel):
41
41
  >>> X = [set(['A', 'B']), set(['B', 'C']), set(['C'])]
42
42
  >>> weights = [2, 2, 1]
43
43
  >>> model = SetCoverModel(X, weights)
44
- >>> model.penalty_multiplier = 2
44
+ >>> model.penalty_multiplier = 8
45
+ >>> lhs, rhs = model.constraints
46
+ >>> lhs
47
+ array([[ 1, 0, 0, 0, 0],
48
+ [ 1, 1, 0, -1, 0],
49
+ [ 0, 1, 1, 0, -1]])
45
50
  >>> from eqc_models.solvers import Dirac3IntegerCloudSolver
46
51
  >>> solver = Dirac3IntegerCloudSolver()
47
52
  >>> response = solver.solve(model, relaxation_schedule=1, num_samples=5) #doctest: +ELLIPSIS
48
53
  20...
49
54
  >>> solutions = response["results"]["solutions"]
50
55
  >>> solutions[0]
51
- [1, 0, 1, 0, 0, 0]
52
- >>> model.decode(solutions[0])
53
- [{'B', 'A'}, {'C'}]
56
+ [1, 0, 1, 0, 0]
57
+ >>> selections = model.decode(solutions[0])
58
+ >>> assert {'B', 'A'} in selections
59
+ >>> assert {'C'} in selections
60
+ >>> assert len(selections) == 2
54
61
 
55
62
  """
56
63
 
57
64
  def __init__(self, subsets, weights):
58
65
  # ensure that X is ordered
59
- self.X = X = list(subsets)
60
- self.S = S = set()
66
+ self.S = S = list(subsets)
67
+ self.universal_set = U = set()
61
68
 
62
69
  for x in subsets:
63
- S = S.union(x)
70
+ U.update(x)
64
71
  # elements is sorted to maintain consistent output
65
- elements = [a for a in S]
72
+ elements = [a for a in U]
66
73
  elements.sort()
67
74
  # constraints
68
75
  A = []
69
76
  b = []
70
- variables = [f'x_{i}' for i in range(len(X))]
77
+ variables = [f'x_{i}' for i in range(len(S))]
71
78
  pos = 0
79
+ num_slacks = 0
80
+ slack_ub = []
72
81
  for a in elements:
73
- variables.append(f"s_{pos}")
74
- constraint = [1 if a in X[i] else 0 for i in range(len(X))]
75
- slacks = [0 for i in range(len(S))]
76
- slacks[pos] = -1
82
+ num_sets = sum([1 if a in S[i] else 0 for i in range(len(S))])
83
+ assert num_sets >= 1, "Invalid subsets, check the universal set"
84
+ if num_sets > 1:
85
+ num_slacks += 1
86
+ slack_ub.append(num_sets-1)
87
+ for i, a in enumerate(elements):
88
+ constraint = [1 if a in S[j] else 0 for j in range(len(S))]
89
+ slacks = [0 for i in range(num_slacks)]
90
+ if slack_ub[i] > 0:
91
+ variables.append(f"s_{pos}")
92
+ slacks[pos] = -1
93
+ pos += 1
77
94
  A.append(constraint + slacks)
78
- pos += 1
79
95
  b.append(1)
80
96
  n = len(variables)
81
97
  J = np.zeros((n, n))
@@ -84,11 +100,12 @@ class SetCoverModel(ConstrainedQuadraticModel):
84
100
  # call the superclass constructor with the objective and constraints
85
101
  super(SetCoverModel, self).__init__(h, J, np.array(A), np.array(b))
86
102
  # set upper bound on the variables to be 1 for x_i and the length of X minus 1 for the slacks
87
- self.upper_bound = np.array([1 for i in range(len(weights))] + [len(X)-1 for i in range(n-len(weights))])
103
+ slack_ub = [val for val in slack_ub if val > 0]
104
+ self.upper_bound = np.array([1 for i in range(len(weights))] + slack_ub)
88
105
 
89
106
  def decode(self, solution) -> List:
90
107
  xbar = []
91
- for i in range(len(self.X)):
108
+ for i in range(len(self.S)):
92
109
  if solution[i] > 0.5:
93
- xbar.append(self.X[i])
110
+ xbar.append(self.S[i])
94
111
  return xbar
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: eqc-models
3
- Version: 0.10.2
3
+ Version: 0.10.3
4
4
  Summary: Optimization and ML modeling package targeting EQC devices
5
5
  Author: Quantum Computing Inc.
6
6
  Author-email: support@quantumcomputinginc.com
@@ -22,6 +22,7 @@ Provides-Extra: dev
22
22
  Requires-Dist: pytest<8,>=7.1.0; extra == "dev"
23
23
  Requires-Dist: pytest-cov; extra == "dev"
24
24
  Requires-Dist: sphinx_rtd_theme<2,>=1.3.0; extra == "dev"
25
+ Dynamic: license-file
25
26
 
26
27
  # EQC Models
27
28
 
@@ -15,11 +15,11 @@ class SetCoverTestCase(TestCase):
15
15
 
16
16
  def testConstraints(self):
17
17
  lhs, rhs = self.model.constraints
18
- assert lhs.shape == (3, 6)
18
+ assert lhs.shape == (3, 5)
19
19
  assert rhs.shape == (3,)
20
- assert (lhs == [[1, 0, 0, -1, 0, 0],[1, 1, 0, 0, -1, 0],[0, 1, 1, 0, 0, -1]]).all()
20
+ assert (lhs == [[1, 0, 0, 0, 0],[1, 1, 0, -1, 0],[0, 1, 1, 0, -1]]).all()
21
21
  assert (rhs == [1, 1, 1]).all()
22
22
 
23
23
  def testObjective(self):
24
24
  objective = self.model.linear_objective
25
- assert (objective == [2, 2, 1, 0, 0, 0]).all()
25
+ assert (objective == [2, 2, 1, 0, 0]).all()
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