eqc-models 0.14.3__tar.gz → 0.14.4__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 (189) hide show
  1. {eqc_models-0.14.3 → eqc_models-0.14.4}/PKG-INFO +1 -1
  2. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/classifierbase.py +11 -9
  3. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/classifierqboost.py +12 -5
  4. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/classifierqsvm.py +30 -14
  5. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/clustering.py +39 -23
  6. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/clusteringbase.py +11 -5
  7. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/decomposition.py +30 -14
  8. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/forecast.py +24 -23
  9. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/forecastbase.py +1 -0
  10. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/regressor.py +15 -7
  11. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/regressorbase.py +14 -10
  12. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/reservoir.py +20 -19
  13. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models.egg-info/PKG-INFO +1 -1
  14. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/clustering.py +4 -0
  15. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/graph_clustering.py +5 -1
  16. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/lin_reg_dirac3.py +4 -0
  17. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/pca_iris_dirac3.py +4 -0
  18. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/qboost_iris_dirac3.py +4 -0
  19. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/qsvm_dual_iris_dirac3.py +4 -0
  20. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/qsvm_iris_dirac3.py +4 -0
  21. {eqc_models-0.14.3 → eqc_models-0.14.4}/.gitignore +0 -0
  22. {eqc_models-0.14.3 → eqc_models-0.14.4}/.gitlab-ci.yml +0 -0
  23. {eqc_models-0.14.3 → eqc_models-0.14.4}/LICENSE.txt +0 -0
  24. {eqc_models-0.14.3 → eqc_models-0.14.4}/MANIFEST.in +0 -0
  25. {eqc_models-0.14.3 → eqc_models-0.14.4}/README.md +0 -0
  26. {eqc_models-0.14.3 → eqc_models-0.14.4}/compile_extensions.py +0 -0
  27. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/Makefile +0 -0
  28. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/build/html/_static/basic.css +0 -0
  29. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/build/html/_static/css/badge_only.css +0 -0
  30. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/build/html/_static/css/theme.css +0 -0
  31. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/build/html/_static/custom.css +0 -0
  32. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/build/html/_static/file.png +0 -0
  33. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/build/html/_static/minus.png +0 -0
  34. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/build/html/_static/plus.png +0 -0
  35. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/build/html/_static/pygments.css +0 -0
  36. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/build/html/_static/white_logo.png +0 -0
  37. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/make.bat +0 -0
  38. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/source/_static/custom.css +0 -0
  39. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/source/_static/white_logo.png +0 -0
  40. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/source/conf.py +0 -0
  41. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/source/dependencies.rst +0 -0
  42. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/source/eqc_models.rst +0 -0
  43. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/source/index.rst +0 -0
  44. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/source/modules.rst +0 -0
  45. {eqc_models-0.14.3 → eqc_models-0.14.4}/docs/source/usage.rst +0 -0
  46. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/__init__.py +0 -0
  47. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/algorithms/__init__.py +0 -0
  48. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/algorithms/base.py +0 -0
  49. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/algorithms/penaltymultiplier.py +0 -0
  50. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/allocation/__init__.py +0 -0
  51. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/allocation/allocation.py +0 -0
  52. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/allocation/portbase.py +0 -0
  53. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/allocation/portmomentum.py +0 -0
  54. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/assignment/__init__.py +0 -0
  55. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/assignment/qap.py +0 -0
  56. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/assignment/resource.py +0 -0
  57. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/assignment/setpartition.py +0 -0
  58. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/base/__init__.py +0 -0
  59. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/base/base.py +0 -0
  60. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/base/binaries.py +0 -0
  61. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/base/constraints.py +0 -0
  62. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/base/operators.py +0 -0
  63. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/base/polyeval.pyx +0 -0
  64. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/base/polynomial.py +0 -0
  65. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/base/quadratic.py +0 -0
  66. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/base/results.py +0 -0
  67. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/combinatorics/__init__.py +0 -0
  68. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/combinatorics/setcover.py +0 -0
  69. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/combinatorics/setpartition.py +0 -0
  70. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/decoding.py +0 -0
  71. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/graph/__init__.py +0 -0
  72. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/graph/base.py +0 -0
  73. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/graph/hypergraph.py +0 -0
  74. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/graph/maxcut.py +0 -0
  75. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/graph/maxkcut.py +0 -0
  76. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/graph/partition.py +0 -0
  77. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/graph/rcshortestpath.py +0 -0
  78. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/graph/shortestpath.py +0 -0
  79. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/__init__.py +0 -0
  80. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/cvqboost_hamiltonian.pyx +0 -0
  81. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/cvqboost_hamiltonian_c_func.c +0 -0
  82. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/ml/cvqboost_hamiltonian_c_func.h +0 -0
  83. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/process/base.py +0 -0
  84. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/process/mpc.py +0 -0
  85. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/sequence/__init__.py +0 -0
  86. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/sequence/tsp.py +0 -0
  87. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/solvers/__init__.py +0 -0
  88. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/solvers/eqcdirect.py +0 -0
  89. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/solvers/mip.py +0 -0
  90. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/solvers/qciclient.py +0 -0
  91. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/solvers/responselog.py +0 -0
  92. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/utilities/__init__.py +0 -0
  93. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/utilities/fileio.py +0 -0
  94. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/utilities/general.py +0 -0
  95. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/utilities/polynomial.py +0 -0
  96. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models/utilities/qplib.py +0 -0
  97. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models.egg-info/SOURCES.txt +0 -0
  98. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models.egg-info/dependency_links.txt +0 -0
  99. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models.egg-info/requires.txt +0 -0
  100. {eqc_models-0.14.3 → eqc_models-0.14.4}/eqc_models.egg-info/top_level.txt +0 -0
  101. {eqc_models-0.14.3 → eqc_models-0.14.4}/pyproject.toml +0 -0
  102. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/binary_job_example.py +0 -0
  103. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/binary_w_continuous_solver_example.py +0 -0
  104. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/c6h6_graph_clustering.py +0 -0
  105. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/continuous_job_example.py +0 -0
  106. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/convert_to_json_problem.py +0 -0
  107. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/crew_assignment_example.py +0 -0
  108. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/graph_partitioning.py +0 -0
  109. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/hamiltonian_to_polynomial.py +0 -0
  110. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/hypergraph.py +0 -0
  111. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/integer_job_example.py +0 -0
  112. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/karate_graph_clustering.py +0 -0
  113. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/mackey_glass_cell_production_series.csv +0 -0
  114. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/mip_example.py +0 -0
  115. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/port_opt_dirac3.py +0 -0
  116. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/qboost_iris_dirac3_weak_cls.py +0 -0
  117. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/qplib_benchmark_config.py +0 -0
  118. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/qplib_reader.py +0 -0
  119. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/qplib_runner.py +0 -0
  120. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/reservoir_forecast.py +0 -0
  121. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/results_example.py +0 -0
  122. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/rundoctests.py +0 -0
  123. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/test_shortestpath.py +0 -0
  124. {eqc_models-0.14.3 → eqc_models-0.14.4}/scripts/utils.py +0 -0
  125. {eqc_models-0.14.3 → eqc_models-0.14.4}/setup.cfg +0 -0
  126. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/doctest_base.py +0 -0
  127. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testallocationmodel.py +0 -0
  128. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testconstraint.py +0 -0
  129. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testcvqboost.py +0 -0
  130. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testeqcdirectsolver.py +0 -0
  131. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testgraphpartitionmodel.py +0 -0
  132. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testhypergraphmodel.py +0 -0
  133. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testmaxcutmodel.py +0 -0
  134. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testpolynomialmodel.py +0 -0
  135. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testqapmodel.py +0 -0
  136. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testqciclientsolver.py +0 -0
  137. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testquadraticmodel.py +0 -0
  138. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testsetcovermodel.py +0 -0
  139. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testsetpartitionmodel.py +0 -0
  140. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testshortestpath.py +0 -0
  141. {eqc_models-0.14.3 → eqc_models-0.14.4}/test/testtsp.py +0 -0
  142. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/README.txt +0 -0
  143. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/run_tests.py +0 -0
  144. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/c6h6_graph_clustering/c6h6_graph_clustering.py +0 -0
  145. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/clustering/clustering.py +0 -0
  146. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/clustering/data/X.npy +0 -0
  147. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/cvqboost_iris.py +0 -0
  148. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/data/X_test.npy +0 -0
  149. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/data/X_train.npy +0 -0
  150. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/data/y_test.npy +0 -0
  151. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/data/y_train.npy +0 -0
  152. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/karate_graph_clustering/karate_graph_clustering.py +0 -0
  153. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/pca_iris/pca_iris.py +0 -0
  154. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1MJC/data/C_1MJC.npy +0 -0
  155. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1MJC/data/J_1MJC.npy +0 -0
  156. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1MJC/protein_design_1MJC.py +0 -0
  157. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1NXB/data/C_1NXB.npy +0 -0
  158. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1NXB/data/J_1NXB.npy +0 -0
  159. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1NXB/protein_design_1NXB.py +0 -0
  160. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1POH/data/C_1POH.npy +0 -0
  161. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1POH/data/J_1POH.npy +0 -0
  162. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1POH/protein_design_1POH.py +0 -0
  163. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/data/X_test.npy +0 -0
  164. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/data/X_train.npy +0 -0
  165. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/data/y_test.npy +0 -0
  166. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/data/y_train.npy +0 -0
  167. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/qsvm_dual_iris.py +0 -0
  168. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/data/X_test.npy +0 -0
  169. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/data/X_train.npy +0 -0
  170. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/data/y_test.npy +0 -0
  171. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/data/y_train.npy +0 -0
  172. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/qsvm_primal_iris.py +0 -0
  173. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_100/data/C_8000000_100.npy +0 -0
  174. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_100/data/J_8000000_100.npy +0 -0
  175. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_100/synthetic_cls_100.py +0 -0
  176. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_300/data/C_8000000_300.npy +0 -0
  177. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_300/data/J_8000000_300.npy +0 -0
  178. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_300/synthetic_cls_300.py +0 -0
  179. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_500/data/C_8000000_500.npy +0 -0
  180. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_500/data/J_8000000_500.npy +0 -0
  181. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_500/synthetic_cls_500.py +0 -0
  182. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_700/data/C_8000000_700.npy +0 -0
  183. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_700/data/J_8000000_700.npy +0 -0
  184. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_700/synthetic_cls_700.py +0 -0
  185. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_900/data/C_8000000_900.npy +0 -0
  186. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_900/data/J_8000000_900.npy +0 -0
  187. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_900/synthetic_cls_900.py +0 -0
  188. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_suite_config.json +0 -0
  189. {eqc_models-0.14.3 → eqc_models-0.14.4}/test_suite/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eqc-models
3
- Version: 0.14.3
3
+ Version: 0.14.4
4
4
  Summary: Optimization and ML modeling package targeting EQC devices
5
5
  Author-email: "Quantum Computing Inc." <support@quantumcomputinginc.com>
6
6
  Project-URL: Homepage, https://quantumcomputinginc.com
@@ -20,18 +20,21 @@ class ClassifierBase(QuadraticModel):
20
20
  relaxation_schedule=2,
21
21
  num_samples=1,
22
22
  solver_access="cloud",
23
+ api_url=None,
24
+ api_token=None,
23
25
  ip_addr=None,
24
26
  port=None,
25
27
  ):
26
-
27
28
  super(self).__init__(None, None, None)
28
-
29
+
29
30
  self.relaxation_schedule = relaxation_schedule
30
31
  self.num_samples = num_samples
31
32
 
32
33
  assert solver_access in ["cloud", "direct"]
33
34
 
34
35
  self.solver_access = solver_access
36
+ self.api_url = api_url
37
+ self.api_token = api_token
35
38
  self.ip_addr = ip_addr
36
39
  self.port = port
37
40
  self.params = None
@@ -49,7 +52,6 @@ class ClassifierBase(QuadraticModel):
49
52
  pass
50
53
 
51
54
  def set_model(self, J, C, sum_constraint):
52
-
53
55
  # Set hamiltonians
54
56
  self._C = C
55
57
  self._J = J
@@ -59,17 +61,17 @@ class ClassifierBase(QuadraticModel):
59
61
  # Set upper_bound
60
62
  num_variables = C.shape[0]
61
63
  self.upper_bound = sum_constraint * np.ones((num_variables,))
62
-
64
+
63
65
  return
64
66
 
65
67
  def solve(self):
66
-
67
68
  if self.solver_access == "direct":
68
69
  solver = Dirac3DirectSolver()
69
70
  solver.connect(self.ip_addr, self.port)
70
71
  else:
71
72
  solver = Dirac3CloudSolver()
72
-
73
+ solver.connect(self.api_url, self.api_token)
74
+
73
75
  response = solver.solve(
74
76
  self,
75
77
  sum_constraint=self._sum_constraint,
@@ -83,12 +85,12 @@ class ClassifierBase(QuadraticModel):
83
85
  elif self.solver_access == "direct":
84
86
  energies = response["energy"]
85
87
  solutions = response["solution"]
86
-
88
+
87
89
  min_id = np.argmin(energies)
88
90
  sol = solutions[min_id]
89
91
 
90
92
  print(response)
91
-
93
+
92
94
  return sol, response
93
95
 
94
96
  def convert_sol_to_params(self, sol):
@@ -96,7 +98,7 @@ class ClassifierBase(QuadraticModel):
96
98
 
97
99
  def fit(self, X, y):
98
100
  return self
99
-
101
+
100
102
  def get_dynamic_range(self):
101
103
  C = self._C
102
104
  J = self._J
@@ -106,6 +106,10 @@ class QBoostClassifier(ClassifierBase):
106
106
 
107
107
  solver_access: Solver access type: cloud or direct; default: cloud.
108
108
 
109
+ api_url: API URL used when cloud access is used; default: None.
110
+
111
+ api_token: API token used when cloud access is used; default: None.
112
+
109
113
  ip_addr: IP address of the device when direct access is used; default: None.
110
114
 
111
115
  port: Port number of the device when direct access is used; default: None.
@@ -182,6 +186,8 @@ class QBoostClassifier(ClassifierBase):
182
186
  relaxation_schedule=2,
183
187
  num_samples=1,
184
188
  solver_access="cloud",
189
+ api_url=None,
190
+ api_token=None,
185
191
  ip_addr=None,
186
192
  port=None,
187
193
  lambda_coef=0,
@@ -217,6 +223,8 @@ class QBoostClassifier(ClassifierBase):
217
223
  self.relaxation_schedule = relaxation_schedule
218
224
  self.num_samples = num_samples
219
225
  self.solver_access = solver_access
226
+ self.api_url = api_url
227
+ self.api_token = api_token
220
228
  self.ip_addr = ip_addr
221
229
  self.port = port
222
230
  self.lambda_coef = lambda_coef
@@ -235,14 +243,13 @@ class QBoostClassifier(ClassifierBase):
235
243
  self.classes_ = None
236
244
 
237
245
  def topNPairs(self, X, n):
238
-
239
- assert n <= int(X.shape[1] * (X.shape[1] - 3) /2)
240
-
246
+ assert n <= int(X.shape[1] * (X.shape[1] - 3) / 2)
247
+
241
248
  cov = np.corrcoef(X, rowvar=False)
242
249
  abscov = np.abs(cov)
243
250
  flatcov = []
244
251
  for i in range(X.shape[1]):
245
- for j in range(i+1, X.shape[1]):
252
+ for j in range(i + 1, X.shape[1]):
246
253
  flatcov.append((abscov[i, j], (i, j)))
247
254
  flatcov.sort()
248
255
  return [idx for val, idx in flatcov[-n:]]
@@ -286,7 +293,7 @@ class QBoostClassifier(ClassifierBase):
286
293
  X[:, [i, j]],
287
294
  y,
288
295
  self.weak_cls_type,
289
- self.weak_cls_params,
296
+ self.weak_cls_params,
290
297
  )
291
298
  weak_classifier.train()
292
299
  self.ind_list.append([i, j])
@@ -26,10 +26,14 @@ class QSVMClassifier(ClassifierBase):
26
26
 
27
27
  solver_access: Solver access type: cloud or direct; default: cloud.
28
28
 
29
+ api_url: API URL used when cloud access is used; default: None.
30
+
31
+ api_token: API token used when cloud access is used; default: None.
32
+
29
33
  ip_addr: IP address of the device when direct access is used; default: None.
30
-
31
- port: Port number of the device when direct access is used; default: None.
32
-
34
+
35
+ port: Port number of the device when direct access is used; default: None.
36
+
33
37
  lambda_coef: The penalty multipler
34
38
 
35
39
  Examples
@@ -74,19 +78,23 @@ class QSVMClassifier(ClassifierBase):
74
78
  relaxation_schedule=1,
75
79
  num_samples=1,
76
80
  solver_access="cloud",
81
+ api_url=None,
82
+ api_token=None,
77
83
  ip_addr=None,
78
- port=None,
84
+ port=None,
79
85
  lambda_coef=1.0,
80
86
  ):
81
87
  super(QSVMClassifier).__init__()
82
88
 
83
89
  assert solver_access in ["cloud", "direct"]
84
-
90
+
85
91
  self.relaxation_schedule = relaxation_schedule
86
92
  self.num_samples = num_samples
87
93
  self.solver_access = solver_access
94
+ self.api_url = api_url
95
+ self.api_token = api_token
88
96
  self.ip_addr = ip_addr
89
- self.port = port
97
+ self.port = port
90
98
  self.lambda_coef = lambda_coef
91
99
  self.fea_scaler = MinMaxScaler(feature_range=(-1, 1))
92
100
 
@@ -112,7 +120,7 @@ class QSVMClassifier(ClassifierBase):
112
120
  assert set(y) == {-1, 1}, "Target values should be in {-1, 1}"
113
121
 
114
122
  X = self.fea_scaler.fit_transform(X)
115
-
123
+
116
124
  J, C, sum_constraint = self.get_hamiltonian(X, y)
117
125
 
118
126
  assert J.shape[0] == J.shape[1], "Inconsistent hamiltonian size!"
@@ -145,7 +153,7 @@ class QSVMClassifier(ClassifierBase):
145
153
  The predicted classes.
146
154
  """
147
155
  n_records = X.shape[0]
148
- X = self.fea_scaler.transform(X)
156
+ X = self.fea_scaler.transform(X)
149
157
  X_tilde = np.concatenate((X, np.ones((n_records, 1))), axis=1)
150
158
 
151
159
  y = np.einsum("i,ki->k", self.params, X_tilde)
@@ -215,10 +223,14 @@ class QSVMClassifierDual(ClassifierBase):
215
223
 
216
224
  solver_access: Solver access type: cloud or direct; default: cloud.
217
225
 
226
+ api_url: API URL used when cloud access is used; default: None.
227
+
228
+ api_token: API token used when cloud access is used; default: None.
229
+
218
230
  ip_addr: IP address of the device when direct access is used; default: None.
219
-
220
- port: Port number of the device when direct access is used; default: None.
221
-
231
+
232
+ port: Port number of the device when direct access is used; default: None.
233
+
222
234
  upper_limit: Coefficient upper limit; a regularization parameter;
223
235
  default: 1.0.
224
236
 
@@ -274,8 +286,10 @@ class QSVMClassifierDual(ClassifierBase):
274
286
  relaxation_schedule=2,
275
287
  num_samples=1,
276
288
  solver_access="cloud",
289
+ api_url=None,
290
+ api_token=None,
277
291
  ip_addr=None,
278
- port=None,
292
+ port=None,
279
293
  upper_limit=1.0,
280
294
  gamma=1.0,
281
295
  eta=1.0,
@@ -284,12 +298,14 @@ class QSVMClassifierDual(ClassifierBase):
284
298
  super(QSVMClassifierDual).__init__()
285
299
 
286
300
  assert solver_access in ["cloud", "direct"]
287
-
301
+
288
302
  self.relaxation_schedule = relaxation_schedule
289
303
  self.num_samples = num_samples
290
304
  self.solver_access = solver_access
305
+ self.api_url = api_url
306
+ self.api_token = api_token
291
307
  self.ip_addr = ip_addr
292
- self.port = port
308
+ self.port = port
293
309
  self.upper_limit = upper_limit
294
310
  self.gamma = gamma
295
311
  self.eta = eta
@@ -11,25 +11,29 @@ class GraphClustering(ClusteringBase):
11
11
 
12
12
  Parameters
13
13
  ----------
14
-
14
+
15
15
  graph: A NetwrokX graph object representing the data.
16
16
  num_clusters: Number of clusters.
17
-
17
+
18
18
  alpha: A penalty term multilplier; default: 1.0.
19
-
19
+
20
20
  relaxation_schedule: Relaxation schedule used by Dirac-3; default:
21
21
  2.
22
-
22
+
23
23
  num_samples: Number of samples used by Dirac-3; default: 1.
24
-
24
+
25
25
  device: The device used, dirac-1 or dirac-3; default: dirac-3.
26
26
 
27
27
  solver_access: Solver access type: cloud or direct; default: cloud.
28
28
 
29
+ api_url: API URL used when cloud access is used; default: None.
30
+
31
+ api_token: API token used when cloud access is used; default: None.
32
+
29
33
  ip_addr: IP address of the device when direct access is used; default: None.
30
34
 
31
35
  port: Port number of the device when direct access is used; default: None.
32
-
36
+
33
37
  Examples
34
38
  ---------
35
39
 
@@ -46,7 +50,7 @@ class GraphClustering(ClusteringBase):
46
50
  >>> G.add_edge(7, 9, weight=5)
47
51
  >>> G.add_edge(3, 4, weight=0.5)
48
52
  >>> G.add_edge(6, 7, weight=0.5)
49
- >>> from eqc_models.ml.clustering import GraphClustering
53
+ >>> from eqc_models.ml.clustering import GraphClustering
50
54
  >>> from contextlib import redirect_stdout
51
55
  >>> import io
52
56
  >>> f = io.StringIO()
@@ -57,7 +61,7 @@ class GraphClustering(ClusteringBase):
57
61
  ... graph=G,
58
62
  ... num_clusters=3,
59
63
  ... alpha=10.0,
60
- ... device="dirac-3",
64
+ ... device="dirac-3",
61
65
  ... )
62
66
  ... labels = obj.fit_predict()
63
67
  """
@@ -71,15 +75,17 @@ class GraphClustering(ClusteringBase):
71
75
  num_samples=1,
72
76
  device="dirac-3",
73
77
  solver_access="cloud",
78
+ api_url=None,
79
+ api_token=None,
74
80
  ip_addr=None,
75
- port=None,
81
+ port=None,
76
82
  ):
77
83
  super(GraphClustering).__init__()
78
84
 
79
85
  assert device in ["dirac-1", "dirac-3"]
80
86
 
81
87
  assert solver_access in ["cloud", "direct"]
82
-
88
+
83
89
  self.graph = graph
84
90
  self.num_nodes = graph.number_of_nodes()
85
91
  self.num_edges = graph.number_of_edges()
@@ -89,8 +95,10 @@ class GraphClustering(ClusteringBase):
89
95
  self.num_samples = num_samples
90
96
  self.device = device
91
97
  self.solver_access = solver_access
98
+ self.api_url = api_url
99
+ self.api_token = api_token
92
100
  self.ip_addr = ip_addr
93
- self.port = port
101
+ self.port = port
94
102
  self.labels = None
95
103
 
96
104
  def get_hamiltonian(self):
@@ -155,7 +163,7 @@ class GraphClustering(ClusteringBase):
155
163
  self.set_model(J, C, sum_constraint)
156
164
 
157
165
  sol, response = self.solve()
158
-
166
+
159
167
  assert len(sol) == C.shape[0], "Inconsistent solution size!"
160
168
  assert len(sol) == self.num_clusters * self.num_nodes
161
169
 
@@ -189,26 +197,30 @@ class Clustering(ClusteringBase):
189
197
 
190
198
  Parameters
191
199
  ----------
192
-
200
+
193
201
  num_clusters: Number of clusters.
194
-
202
+
195
203
  alpha: A penalty term multilplier; default: 1.0.
196
-
204
+
197
205
  relaxation_schedule: Relaxation schedule used by Dirac-3; default:
198
206
  2.
199
-
207
+
200
208
  num_samples: Number of samples used by Dirac-3; default: 1.
201
-
209
+
202
210
  distance_func: Distance function used; default: squared_l2_norm.
203
-
211
+
204
212
  device: The device used, dirac-1 or dirac-3; default: dirac-3.
205
213
 
206
214
  solver_access: Solver access type: cloud or direct; default: cloud.
207
215
 
216
+ api_url: API URL used when cloud access is used; default: None.
217
+
218
+ api_token: API token used when cloud access is used; default: None.
219
+
208
220
  ip_addr: IP address of the device when direct access is used; default: None.
209
221
 
210
222
  port: Port number of the device when direct access is used; default: None.
211
-
223
+
212
224
  Examples
213
225
  ---------
214
226
 
@@ -217,7 +229,7 @@ class Clustering(ClusteringBase):
217
229
  >>> cluster2 = np.random.randn(15, 2) * 0.5 + np.array([8, 3])
218
230
  >>> cluster3 = np.random.randn(15, 2) * 0.5 + np.array([5, 8])
219
231
  >>> X = np.vstack((cluster1, cluster2, cluster3))
220
- >>> from eqc_models.ml.clustering import Clustering
232
+ >>> from eqc_models.ml.clustering import Clustering
221
233
  >>> from contextlib import redirect_stdout
222
234
  >>> import io
223
235
  >>> f = io.StringIO()
@@ -243,15 +255,17 @@ class Clustering(ClusteringBase):
243
255
  distance_func: str = "squared_l2_norm",
244
256
  device: str = "dirac-3",
245
257
  solver_access="cloud",
258
+ api_url=None,
259
+ api_token=None,
246
260
  ip_addr=None,
247
- port=None,
261
+ port=None,
248
262
  ):
249
263
  super(Clustering).__init__()
250
264
 
251
265
  assert device in ["dirac-1", "dirac-3"]
252
266
 
253
267
  assert solver_access in ["cloud", "direct"]
254
-
268
+
255
269
  self.num_clusters = num_clusters
256
270
  self.alpha = alpha
257
271
  self.relaxation_schedule = relaxation_schedule
@@ -259,8 +273,10 @@ class Clustering(ClusteringBase):
259
273
  self.distance_func = distance_func
260
274
  self.device = device
261
275
  self.solver_access = solver_access
276
+ self.api_url = api_url
277
+ self.api_token = api_token
262
278
  self.ip_addr = ip_addr
263
- self.port = port
279
+ self.port = port
264
280
  self.labels = None
265
281
 
266
282
  assert distance_func in ["squared_l2_norm"], (
@@ -9,6 +9,7 @@ from eqc_models.solvers.qciclient import (
9
9
  )
10
10
  from eqc_models.solvers.eqcdirect import Dirac3DirectSolver
11
11
 
12
+
12
13
  class ClusteringBase(QuadraticModel):
13
14
  """
14
15
  A base class for clustering algorithms
@@ -20,8 +21,10 @@ class ClusteringBase(QuadraticModel):
20
21
  num_samples=1,
21
22
  device="dirac-3",
22
23
  solver_access="cloud",
24
+ api_url=None,
25
+ api_token=None,
23
26
  ip_addr=None,
24
- port=None,
27
+ port=None,
25
28
  ):
26
29
  super(self).__init__(None, None, None)
27
30
 
@@ -32,11 +35,13 @@ class ClusteringBase(QuadraticModel):
32
35
  if device == "dirac-1" and solver_access == "direct":
33
36
  print("Dirac-1 is only available on cloud")
34
37
  solver_access = "cloud"
35
-
38
+
36
39
  self.relaxation_schedule = relaxation_schedule
37
40
  self.num_samples = num_samples
38
41
  self.device = device
39
42
  self.solver_access = solver_access
43
+ self.api_url = api_url
44
+ self.api_token = api_token
40
45
  self.ip_addr = ip_addr
41
46
  self.port = port
42
47
 
@@ -80,7 +85,8 @@ class ClusteringBase(QuadraticModel):
80
85
  solver.connect(self.ip_addr, self.port)
81
86
  else:
82
87
  solver = Dirac3CloudSolver()
83
-
88
+ solver.connect(self.api_url, self.api_token)
89
+
84
90
  response = solver.solve(
85
91
  self,
86
92
  sum_constraint=self._sum_constraint,
@@ -94,10 +100,10 @@ class ClusteringBase(QuadraticModel):
94
100
  elif self.solver_access == "direct":
95
101
  energies = response["energy"]
96
102
  solutions = response["solution"]
97
-
103
+
98
104
  min_id = np.argmin(energies)
99
105
  sol = solutions[min_id]
100
-
106
+
101
107
  print(response)
102
108
 
103
109
  return sol, response
@@ -17,6 +17,7 @@ from eqc_models.solvers.qciclient import (
17
17
  )
18
18
  from eqc_models.solvers.eqcdirect import Dirac3DirectSolver
19
19
 
20
+
20
21
  class DecompBase(QuadraticModel):
21
22
  """An Base class for decomposition algorithms.
22
23
 
@@ -30,9 +31,13 @@ class DecompBase(QuadraticModel):
30
31
 
31
32
  solver_access: Solver access type: cloud or direct; default: cloud.
32
33
 
34
+ api_url: API URL used when cloud access is used; default: None.
35
+
36
+ api_token: API token used when cloud access is used; default: None.
37
+
33
38
  ip_addr: IP address of the device when direct access is used; default: None.
34
39
 
35
- port: Port number of the device when direct access is used; default: None.
40
+ port: Port number of the device when direct access is used; default: None.
36
41
  """
37
42
 
38
43
  def __init__(
@@ -40,16 +45,20 @@ class DecompBase(QuadraticModel):
40
45
  relaxation_schedule=2,
41
46
  num_samples=1,
42
47
  solver_access="cloud",
48
+ api_url=None,
49
+ api_token=None,
43
50
  ip_addr=None,
44
- port=None,
51
+ port=None,
45
52
  ):
46
53
  super(self).__init__(None, None, None)
47
54
 
48
55
  assert solver_access in ["cloud", "direct"]
49
-
56
+
50
57
  self.relaxation_schedule = relaxation_schedule
51
58
  self.num_samples = num_samples
52
59
  self.solver_access = solver_access
60
+ self.api_url = api_url
61
+ self.api_token = api_token
53
62
  self.ip_addr = ip_addr
54
63
  self.port = port
55
64
 
@@ -73,13 +82,13 @@ class DecompBase(QuadraticModel):
73
82
  return
74
83
 
75
84
  def _solve(self):
76
-
77
85
  if self.solver_access == "direct":
78
86
  solver = Dirac3DirectSolver()
79
87
  solver.connect(self.ip_addr, self.port)
80
88
  else:
81
89
  solver = Dirac3CloudSolver()
82
-
90
+ solver.connect(self.api_url, self.api_token)
91
+
83
92
  response = solver.solve(
84
93
  self,
85
94
  sum_constraint=self._sum_constraint,
@@ -93,10 +102,10 @@ class DecompBase(QuadraticModel):
93
102
  elif self.solver_access == "direct":
94
103
  energies = response["energy"]
95
104
  solutions = response["solution"]
96
-
105
+
97
106
  min_id = np.argmin(energies)
98
107
  sol = solutions[min_id]
99
-
108
+
100
109
  print(response)
101
110
 
102
111
  return sol, response
@@ -209,10 +218,14 @@ class PCA(DecompBase):
209
218
 
210
219
  solver_access: Solver access type: cloud or direct; default: cloud.
211
220
 
221
+ api_url: API URL used when cloud access is used; default: None.
222
+
223
+ api_token: API token used when cloud access is used; default: None.
224
+
212
225
  ip_addr: IP address of the device when direct access is used; default: None.
213
226
 
214
227
  port: Port number of the device when direct access is used; default: None.
215
-
228
+
216
229
  mode: Compute the largest or smallest principal components,
217
230
  largest_components vs. smallest_components; default:
218
231
  largest_components.
@@ -246,22 +259,25 @@ class PCA(DecompBase):
246
259
  relaxation_schedule=2,
247
260
  num_samples=1,
248
261
  solver_access="cloud",
262
+ api_url=None,
263
+ api_token=None,
249
264
  ip_addr=None,
250
- port=None,
265
+ port=None,
251
266
  mode="largest_components",
252
267
  ):
253
-
254
268
  assert solver_access in ["cloud", "direct"]
255
269
  assert mode in ["largest_components", "smallest_components"], (
256
270
  "Invalid value of mode <%s>" % mode
257
271
  )
258
-
272
+
259
273
  self.n_components = n_components
260
274
  self.relaxation_schedule = relaxation_schedule
261
275
  self.num_samples = num_samples
262
276
  self.solver_access = solver_access
277
+ self.api_url = api_url
278
+ self.api_token = api_token
263
279
  self.ip_addr = ip_addr
264
- self.port = port
280
+ self.port = port
265
281
  self.mode = mode
266
282
  self.X = None
267
283
  self.X_pca = None
@@ -297,7 +313,7 @@ class PCA(DecompBase):
297
313
  assert J.shape[0] == C.shape[0], "Inconsistent hamiltonian size!"
298
314
 
299
315
  sum_constraint = 0.5 * (1.0 + C.shape[0])
300
-
316
+
301
317
  self._set_model(J, C, 1.0)
302
318
 
303
319
  sol, response = self._solve()
@@ -306,7 +322,7 @@ class PCA(DecompBase):
306
322
 
307
323
  sol = np.array(sol)
308
324
  sol = 2.0 * sol - 1.0
309
-
325
+
310
326
  fct = np.linalg.norm(sol)
311
327
  if fct > 0:
312
328
  fct = 1.0 / fct