eqc-models 0.14.2__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.
- {eqc_models-0.14.2 → eqc_models-0.14.4}/PKG-INFO +1 -1
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/classifierbase.py +11 -9
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/classifierqboost.py +12 -5
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/classifierqsvm.py +30 -14
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/clustering.py +39 -23
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/clusteringbase.py +11 -5
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/decomposition.py +30 -14
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/forecast.py +24 -23
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/forecastbase.py +1 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/regressor.py +15 -7
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/regressorbase.py +14 -10
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/reservoir.py +20 -19
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/utilities/qplib.py +1 -1
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models.egg-info/PKG-INFO +1 -1
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/clustering.py +4 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/graph_clustering.py +5 -1
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/lin_reg_dirac3.py +4 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/pca_iris_dirac3.py +4 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/qboost_iris_dirac3.py +4 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/qsvm_dual_iris_dirac3.py +4 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/qsvm_iris_dirac3.py +4 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/.gitignore +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/.gitlab-ci.yml +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/LICENSE.txt +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/MANIFEST.in +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/README.md +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/compile_extensions.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/Makefile +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/build/html/_static/basic.css +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/build/html/_static/css/badge_only.css +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/build/html/_static/css/theme.css +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/build/html/_static/custom.css +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/build/html/_static/file.png +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/build/html/_static/minus.png +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/build/html/_static/plus.png +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/build/html/_static/pygments.css +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/build/html/_static/white_logo.png +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/make.bat +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/source/_static/custom.css +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/source/_static/white_logo.png +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/source/conf.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/source/dependencies.rst +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/source/eqc_models.rst +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/source/index.rst +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/source/modules.rst +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/docs/source/usage.rst +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/algorithms/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/algorithms/base.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/algorithms/penaltymultiplier.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/allocation/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/allocation/allocation.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/allocation/portbase.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/allocation/portmomentum.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/assignment/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/assignment/qap.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/assignment/resource.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/assignment/setpartition.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/base/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/base/base.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/base/binaries.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/base/constraints.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/base/operators.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/base/polyeval.pyx +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/base/polynomial.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/base/quadratic.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/base/results.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/combinatorics/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/combinatorics/setcover.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/combinatorics/setpartition.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/decoding.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/graph/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/graph/base.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/graph/hypergraph.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/graph/maxcut.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/graph/maxkcut.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/graph/partition.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/graph/rcshortestpath.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/graph/shortestpath.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/cvqboost_hamiltonian.pyx +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/cvqboost_hamiltonian_c_func.c +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/ml/cvqboost_hamiltonian_c_func.h +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/process/base.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/process/mpc.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/sequence/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/sequence/tsp.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/solvers/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/solvers/eqcdirect.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/solvers/mip.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/solvers/qciclient.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/solvers/responselog.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/utilities/__init__.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/utilities/fileio.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/utilities/general.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models/utilities/polynomial.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models.egg-info/SOURCES.txt +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models.egg-info/dependency_links.txt +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models.egg-info/requires.txt +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/eqc_models.egg-info/top_level.txt +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/pyproject.toml +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/binary_job_example.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/binary_w_continuous_solver_example.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/c6h6_graph_clustering.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/continuous_job_example.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/convert_to_json_problem.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/crew_assignment_example.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/graph_partitioning.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/hamiltonian_to_polynomial.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/hypergraph.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/integer_job_example.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/karate_graph_clustering.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/mackey_glass_cell_production_series.csv +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/mip_example.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/port_opt_dirac3.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/qboost_iris_dirac3_weak_cls.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/qplib_benchmark_config.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/qplib_reader.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/qplib_runner.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/reservoir_forecast.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/results_example.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/rundoctests.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/test_shortestpath.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/scripts/utils.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/setup.cfg +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/doctest_base.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testallocationmodel.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testconstraint.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testcvqboost.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testeqcdirectsolver.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testgraphpartitionmodel.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testhypergraphmodel.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testmaxcutmodel.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testpolynomialmodel.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testqapmodel.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testqciclientsolver.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testquadraticmodel.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testsetcovermodel.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testsetpartitionmodel.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testshortestpath.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test/testtsp.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/README.txt +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/run_tests.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/c6h6_graph_clustering/c6h6_graph_clustering.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/clustering/clustering.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/clustering/data/X.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/cvqboost_iris.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/data/X_test.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/data/X_train.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/data/y_test.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/cvqboost_iris/data/y_train.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/karate_graph_clustering/karate_graph_clustering.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/pca_iris/pca_iris.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1MJC/data/C_1MJC.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1MJC/data/J_1MJC.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1MJC/protein_design_1MJC.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1NXB/data/C_1NXB.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1NXB/data/J_1NXB.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1NXB/protein_design_1NXB.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1POH/data/C_1POH.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1POH/data/J_1POH.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/protein_design_1POH/protein_design_1POH.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/data/X_test.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/data/X_train.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/data/y_test.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/data/y_train.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_dual_iris/qsvm_dual_iris.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/data/X_test.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/data/X_train.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/data/y_test.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/data/y_train.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/qsvm_primal_iris/qsvm_primal_iris.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_100/data/C_8000000_100.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_100/data/J_8000000_100.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_100/synthetic_cls_100.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_300/data/C_8000000_300.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_300/data/J_8000000_300.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_300/synthetic_cls_300.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_500/data/C_8000000_500.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_500/data/J_8000000_500.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_500/synthetic_cls_500.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_700/data/C_8000000_700.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_700/data/J_8000000_700.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_700/synthetic_cls_700.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_900/data/C_8000000_900.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_900/data/J_8000000_900.npy +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_cases/synthetic_cls_900/synthetic_cls_900.py +0 -0
- {eqc_models-0.14.2 → eqc_models-0.14.4}/test_suite/test_suite_config.json +0 -0
- {eqc_models-0.14.2 → 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
|
+
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
|
-
|
|
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
|