luna-quantum 1.1.0__cp312-cp312-win_amd64.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.
- luna_quantum/__init__.py +139 -0
- luna_quantum/__init__.pyi +98 -0
- luna_quantum/_core.cp312-win_amd64.pyd +0 -0
- luna_quantum/_core.pyi +4286 -0
- luna_quantum/_utility.py +148 -0
- luna_quantum/_utility.pyi +20 -0
- luna_quantum/algorithms/__init__.py +1 -0
- luna_quantum/aqm_overwrites/__init__.py +3 -0
- luna_quantum/aqm_overwrites/model.py +184 -0
- luna_quantum/backends/__init__.py +1 -0
- luna_quantum/client/__init__.py +0 -0
- luna_quantum/client/controllers/__init__.py +4 -0
- luna_quantum/client/controllers/luna_http_client.py +37 -0
- luna_quantum/client/controllers/luna_platform_client.py +256 -0
- luna_quantum/client/controllers/luna_q.py +67 -0
- luna_quantum/client/controllers/luna_solve.py +129 -0
- luna_quantum/client/error/__init__.py +0 -0
- luna_quantum/client/error/luna_api_key_invalid_error.py +10 -0
- luna_quantum/client/error/luna_api_key_missing_error.py +10 -0
- luna_quantum/client/error/luna_error.py +2 -0
- luna_quantum/client/error/luna_server_error.py +20 -0
- luna_quantum/client/error/timeout_error.py +12 -0
- luna_quantum/client/error/transformation_error.py +18 -0
- luna_quantum/client/error/utils/__init__.py +0 -0
- luna_quantum/client/error/utils/http_error_utils.py +112 -0
- luna_quantum/client/interfaces/__init__.py +4 -0
- luna_quantum/client/interfaces/clients/__init__.py +25 -0
- luna_quantum/client/interfaces/clients/circuit_rest_client_i.py +68 -0
- luna_quantum/client/interfaces/clients/info_rest_client_i.py +53 -0
- luna_quantum/client/interfaces/clients/model_rest_client_i.py +139 -0
- luna_quantum/client/interfaces/clients/qpu_token_rest_client_i.py +364 -0
- luna_quantum/client/interfaces/clients/rest_client_i.py +21 -0
- luna_quantum/client/interfaces/clients/solve_job_rest_client_i.py +201 -0
- luna_quantum/client/interfaces/clients/users_rest_client_i.py +29 -0
- luna_quantum/client/interfaces/services/__init__.py +0 -0
- luna_quantum/client/interfaces/services/luna_q_i.py +34 -0
- luna_quantum/client/interfaces/services/luna_solve_i.py +72 -0
- luna_quantum/client/interfaces/services/service_i.py +56 -0
- luna_quantum/client/rest_client/__init__.py +15 -0
- luna_quantum/client/rest_client/circuit_rest_client.py +107 -0
- luna_quantum/client/rest_client/info_rest_client.py +74 -0
- luna_quantum/client/rest_client/model_rest_client.py +216 -0
- luna_quantum/client/rest_client/qpu_token_rest_client.py +508 -0
- luna_quantum/client/rest_client/solve_job_rest_client.py +286 -0
- luna_quantum/client/rest_client/users_rest_client.py +35 -0
- luna_quantum/client/schemas/__init__.py +26 -0
- luna_quantum/client/schemas/circuit.py +48 -0
- luna_quantum/client/schemas/create/__init__.py +15 -0
- luna_quantum/client/schemas/create/circuit.py +30 -0
- luna_quantum/client/schemas/create/optimization.py +39 -0
- luna_quantum/client/schemas/create/qpu_token.py +22 -0
- luna_quantum/client/schemas/create/qpu_token_time_quota.py +35 -0
- luna_quantum/client/schemas/create/qpu_token_time_quota_update.py +24 -0
- luna_quantum/client/schemas/create/qubo.py +19 -0
- luna_quantum/client/schemas/create/solve_job_create.py +43 -0
- luna_quantum/client/schemas/enums/__init__.py +0 -0
- luna_quantum/client/schemas/enums/call_style.py +13 -0
- luna_quantum/client/schemas/enums/circuit.py +42 -0
- luna_quantum/client/schemas/enums/model_format.py +11 -0
- luna_quantum/client/schemas/enums/problem.py +50 -0
- luna_quantum/client/schemas/enums/qpu_token_type.py +20 -0
- luna_quantum/client/schemas/enums/sense.py +8 -0
- luna_quantum/client/schemas/enums/status.py +40 -0
- luna_quantum/client/schemas/enums/timeframe.py +11 -0
- luna_quantum/client/schemas/error_message.py +14 -0
- luna_quantum/client/schemas/model_metadata.py +35 -0
- luna_quantum/client/schemas/qpu_token/__init__.py +0 -0
- luna_quantum/client/schemas/qpu_token/qpu_token.py +154 -0
- luna_quantum/client/schemas/qpu_token/qpu_token_source.py +19 -0
- luna_quantum/client/schemas/qpu_token/qpu_token_time_quota.py +30 -0
- luna_quantum/client/schemas/qpu_token/token_provider.py +132 -0
- luna_quantum/client/schemas/representation.py +19 -0
- luna_quantum/client/schemas/solution.py +106 -0
- luna_quantum/client/schemas/solve_job.py +50 -0
- luna_quantum/client/schemas/solver_info.py +11 -0
- luna_quantum/client/schemas/user.py +11 -0
- luna_quantum/client/schemas/wrappers/__init__.py +5 -0
- luna_quantum/client/schemas/wrappers/datetime_wrapper.py +32 -0
- luna_quantum/client/utils/__init__.py +0 -0
- luna_quantum/client/utils/qpu_token_utils.py +147 -0
- luna_quantum/config.py +11 -0
- luna_quantum/decorators.py +248 -0
- luna_quantum/errors.py +34 -0
- luna_quantum/errors.pyi +287 -0
- luna_quantum/exceptions/__init__.py +0 -0
- luna_quantum/exceptions/base_luna_quantum_error.py +2 -0
- luna_quantum/exceptions/luna_quantum_call_type_error.py +9 -0
- luna_quantum/exceptions/patch_class_field_exists_error.py +10 -0
- luna_quantum/factories/__init__.py +4 -0
- luna_quantum/factories/luna_solve_client_factory.py +100 -0
- luna_quantum/factories/usecase_factory.py +489 -0
- luna_quantum/py.typed +0 -0
- luna_quantum/solve/__init__.py +13 -0
- luna_quantum/solve/default_token.py +304 -0
- luna_quantum/solve/domain/__init__.py +0 -0
- luna_quantum/solve/domain/abstract/__init__.py +4 -0
- luna_quantum/solve/domain/abstract/luna_algorithm.py +205 -0
- luna_quantum/solve/domain/abstract/qpu_token_backend.py +34 -0
- luna_quantum/solve/domain/model_metadata.py +56 -0
- luna_quantum/solve/domain/solve_job.py +230 -0
- luna_quantum/solve/errors/__init__.py +0 -0
- luna_quantum/solve/errors/incompatible_backend_error.py +15 -0
- luna_quantum/solve/errors/model_metadata_missing_error.py +11 -0
- luna_quantum/solve/errors/solve_base_error.py +5 -0
- luna_quantum/solve/errors/token_missing_error.py +11 -0
- luna_quantum/solve/interfaces/__init__.py +0 -0
- luna_quantum/solve/interfaces/algorithm_i.py +49 -0
- luna_quantum/solve/interfaces/backend_i.py +28 -0
- luna_quantum/solve/interfaces/usecases/__init__.py +59 -0
- luna_quantum/solve/interfaces/usecases/model_delete_usecase_i.py +27 -0
- luna_quantum/solve/interfaces/usecases/model_fetch_metadata_usecase_i.py +33 -0
- luna_quantum/solve/interfaces/usecases/model_get_solutions_usecase_i.py +33 -0
- luna_quantum/solve/interfaces/usecases/model_get_solve_jobs_usecase_i.py +33 -0
- luna_quantum/solve/interfaces/usecases/model_load_by_id_usecase_i.py +32 -0
- luna_quantum/solve/interfaces/usecases/model_load_by_metadata_usecase_i.py +37 -0
- luna_quantum/solve/interfaces/usecases/model_load_metadata_by_hash_usecase_i.py +38 -0
- luna_quantum/solve/interfaces/usecases/model_save_usecase_i.py +36 -0
- luna_quantum/solve/interfaces/usecases/solve_job_cancel_usecase_i.py +33 -0
- luna_quantum/solve/interfaces/usecases/solve_job_create_usecase_i.py +44 -0
- luna_quantum/solve/interfaces/usecases/solve_job_delete_usecase_i.py +32 -0
- luna_quantum/solve/interfaces/usecases/solve_job_fetch_updates_usecase_i.py +38 -0
- luna_quantum/solve/interfaces/usecases/solve_job_get_by_id_usecase_i.py +27 -0
- luna_quantum/solve/interfaces/usecases/solve_job_get_result_usecase_i.py +63 -0
- luna_quantum/solve/parameters/__init__.py +0 -0
- luna_quantum/solve/parameters/algorithms/__init__.py +51 -0
- luna_quantum/solve/parameters/algorithms/base_params/__init__.py +24 -0
- luna_quantum/solve/parameters/algorithms/base_params/decomposer.py +57 -0
- luna_quantum/solve/parameters/algorithms/base_params/qaoa_circuit_params.py +95 -0
- luna_quantum/solve/parameters/algorithms/base_params/quantum_annealing_params.py +79 -0
- luna_quantum/solve/parameters/algorithms/base_params/scipy_optimizer.py +122 -0
- luna_quantum/solve/parameters/algorithms/base_params/simulated_annealing_params.py +106 -0
- luna_quantum/solve/parameters/algorithms/base_params/tabu_kerberos_params.py +39 -0
- luna_quantum/solve/parameters/algorithms/base_params/tabu_search_params.py +129 -0
- luna_quantum/solve/parameters/algorithms/flexible_parameter_algorithm.py +59 -0
- luna_quantum/solve/parameters/algorithms/genetic_algorithms/__init__.py +4 -0
- luna_quantum/solve/parameters/algorithms/genetic_algorithms/qaga.py +131 -0
- luna_quantum/solve/parameters/algorithms/genetic_algorithms/saga.py +139 -0
- luna_quantum/solve/parameters/algorithms/lq_fda/__init__.py +3 -0
- luna_quantum/solve/parameters/algorithms/lq_fda/fujits_da_base.py +85 -0
- luna_quantum/solve/parameters/algorithms/lq_fda/fujitsu_da_v3c.py +155 -0
- luna_quantum/solve/parameters/algorithms/optimization_solvers/__init__.py +3 -0
- luna_quantum/solve/parameters/algorithms/optimization_solvers/scip.py +51 -0
- luna_quantum/solve/parameters/algorithms/quantum_annealing/__init__.py +19 -0
- luna_quantum/solve/parameters/algorithms/quantum_annealing/kerberos.py +149 -0
- luna_quantum/solve/parameters/algorithms/quantum_annealing/leap_hybrid_bqm.py +75 -0
- luna_quantum/solve/parameters/algorithms/quantum_annealing/leap_hybrid_cqm.py +75 -0
- luna_quantum/solve/parameters/algorithms/quantum_annealing/parallel_tempering_qpu.py +139 -0
- luna_quantum/solve/parameters/algorithms/quantum_annealing/population_annealing_qpu.py +109 -0
- luna_quantum/solve/parameters/algorithms/quantum_annealing/qbsolv_like_qpu.py +111 -0
- luna_quantum/solve/parameters/algorithms/quantum_annealing/quantum_annealing.py +121 -0
- luna_quantum/solve/parameters/algorithms/quantum_annealing/repeated_reverse_quantum_annealing.py +174 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/__init__.py +6 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/flex_qaoa/__init__.py +10 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/__init__.py +29 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/config.py +58 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/flexqaoa.py +188 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/optimizers.py +53 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/pipeline.py +164 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/qaoa.py +112 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/qaoa_fo.py +69 -0
- luna_quantum/solve/parameters/algorithms/quantum_gate/vqe.py +108 -0
- luna_quantum/solve/parameters/algorithms/search_algorithms/__init__.py +5 -0
- luna_quantum/solve/parameters/algorithms/search_algorithms/dialectic_search.py +136 -0
- luna_quantum/solve/parameters/algorithms/search_algorithms/qbsolv_like_tabu_search.py +117 -0
- luna_quantum/solve/parameters/algorithms/search_algorithms/tabu_search.py +126 -0
- luna_quantum/solve/parameters/algorithms/simulated_annealing/__init__.py +13 -0
- luna_quantum/solve/parameters/algorithms/simulated_annealing/parallel_tempering.py +131 -0
- luna_quantum/solve/parameters/algorithms/simulated_annealing/population_annealing.py +95 -0
- luna_quantum/solve/parameters/algorithms/simulated_annealing/qbsolv_like_simulated_annealing.py +141 -0
- luna_quantum/solve/parameters/algorithms/simulated_annealing/repeated_reverse_simulated_annealing.py +172 -0
- luna_quantum/solve/parameters/algorithms/simulated_annealing/simulated_annealing.py +126 -0
- luna_quantum/solve/parameters/backends/__init__.py +27 -0
- luna_quantum/solve/parameters/backends/aqarios.py +17 -0
- luna_quantum/solve/parameters/backends/aqarios_gpu.py +17 -0
- luna_quantum/solve/parameters/backends/aws/__init__.py +11 -0
- luna_quantum/solve/parameters/backends/aws/aws.py +36 -0
- luna_quantum/solve/parameters/backends/aws/aws_backend_base.py +74 -0
- luna_quantum/solve/parameters/backends/aws/ionq.py +43 -0
- luna_quantum/solve/parameters/backends/aws/iqm.py +31 -0
- luna_quantum/solve/parameters/backends/aws/rigetti.py +31 -0
- luna_quantum/solve/parameters/backends/cudaq/__init__.py +5 -0
- luna_quantum/solve/parameters/backends/cudaq/cudaq_base.py +16 -0
- luna_quantum/solve/parameters/backends/cudaq/cudaq_cpu.py +30 -0
- luna_quantum/solve/parameters/backends/cudaq/cudaq_gpu.py +32 -0
- luna_quantum/solve/parameters/backends/dwave.py +17 -0
- luna_quantum/solve/parameters/backends/dwave_qpu.py +166 -0
- luna_quantum/solve/parameters/backends/fda.py +17 -0
- luna_quantum/solve/parameters/backends/ibm.py +138 -0
- luna_quantum/solve/parameters/backends/qctrl.py +103 -0
- luna_quantum/solve/parameters/backends/zib.py +17 -0
- luna_quantum/solve/parameters/constants.py +11 -0
- luna_quantum/solve/parameters/errors.py +30 -0
- luna_quantum/solve/parameters/mixins/__init__.py +0 -0
- luna_quantum/solve/parameters/mixins/fujitsu_common_params_mixin.py +239 -0
- luna_quantum/solve/parameters/mixins/fujitsu_v2_mixin.py +70 -0
- luna_quantum/solve/parameters/mixins/qbsolv_like_mixin.py +60 -0
- luna_quantum/solve/use_cases/__init__.py +119 -0
- luna_quantum/solve/use_cases/arbitrage_edge_based.py +50 -0
- luna_quantum/solve/use_cases/arbitrage_node_based.py +55 -0
- luna_quantum/solve/use_cases/base.py +7 -0
- luna_quantum/solve/use_cases/binary_integer_linear_programming.py +54 -0
- luna_quantum/solve/use_cases/binary_paint_shop_problem.py +37 -0
- luna_quantum/solve/use_cases/credit_scoring_feature_selection.py +40 -0
- luna_quantum/solve/use_cases/dynamic_portfolio_optimization.py +64 -0
- luna_quantum/solve/use_cases/exact_cover.py +51 -0
- luna_quantum/solve/use_cases/flight_gate_assignment.py +79 -0
- luna_quantum/solve/use_cases/graph_coloring.py +42 -0
- luna_quantum/solve/use_cases/graph_isomorphism.py +52 -0
- luna_quantum/solve/use_cases/graph_partitioning.py +46 -0
- luna_quantum/solve/use_cases/hamiltonian_cycle.py +49 -0
- luna_quantum/solve/use_cases/induced_subgraph_isomorphism.py +50 -0
- luna_quantum/solve/use_cases/job_shop_scheduling.py +44 -0
- luna_quantum/solve/use_cases/k_medoids_clustering.py +49 -0
- luna_quantum/solve/use_cases/knapsack_integer_weights.py +56 -0
- luna_quantum/solve/use_cases/linear_regression.py +60 -0
- luna_quantum/solve/use_cases/lmwcs.py +84 -0
- luna_quantum/solve/use_cases/longest_path.py +50 -0
- luna_quantum/solve/use_cases/market_graph_clustering.py +61 -0
- luna_quantum/solve/use_cases/max2sat.py +54 -0
- luna_quantum/solve/use_cases/max3sat.py +55 -0
- luna_quantum/solve/use_cases/max_clique.py +60 -0
- luna_quantum/solve/use_cases/max_cut.py +48 -0
- luna_quantum/solve/use_cases/max_independent_set.py +37 -0
- luna_quantum/solve/use_cases/minimal_maximal_matching.py +54 -0
- luna_quantum/solve/use_cases/minimal_spanning_tree.py +90 -0
- luna_quantum/solve/use_cases/minimum_vertex_cover.py +45 -0
- luna_quantum/solve/use_cases/number_partitioning.py +32 -0
- luna_quantum/solve/use_cases/portfolio_optimization.py +46 -0
- luna_quantum/solve/use_cases/portfolio_optimization_ib_tv.py +63 -0
- luna_quantum/solve/use_cases/quadratic_assignment.py +49 -0
- luna_quantum/solve/use_cases/quadratic_knapsack.py +48 -0
- luna_quantum/solve/use_cases/satellite_scheduling.py +73 -0
- luna_quantum/solve/use_cases/sensor_placement.py +58 -0
- luna_quantum/solve/use_cases/set_cover.py +56 -0
- luna_quantum/solve/use_cases/set_packing.py +54 -0
- luna_quantum/solve/use_cases/set_partitioning.py +52 -0
- luna_quantum/solve/use_cases/subgraph_isomorphism.py +55 -0
- luna_quantum/solve/use_cases/subset_sum.py +37 -0
- luna_quantum/solve/use_cases/support_vector_machine.py +64 -0
- luna_quantum/solve/use_cases/traffic_flow.py +35 -0
- luna_quantum/solve/use_cases/travelling_salesman_problem.py +53 -0
- luna_quantum/solve/use_cases/type_aliases.py +9 -0
- luna_quantum/solve/use_cases/weighted_max_cut.py +37 -0
- luna_quantum/solve/usecases/__init__.py +45 -0
- luna_quantum/solve/usecases/model_delete_usecase.py +49 -0
- luna_quantum/solve/usecases/model_fetch_metadata_usecase.py +50 -0
- luna_quantum/solve/usecases/model_get_solution_usecase.py +59 -0
- luna_quantum/solve/usecases/model_get_solve_jobs_usecase.py +62 -0
- luna_quantum/solve/usecases/model_load_by_id_usecase.py +47 -0
- luna_quantum/solve/usecases/model_load_by_metadata_usecase.py +52 -0
- luna_quantum/solve/usecases/model_load_metadata_by_hash_usecase.py +51 -0
- luna_quantum/solve/usecases/model_save_usecase.py +63 -0
- luna_quantum/solve/usecases/solve_job_cancel_usecase.py +51 -0
- luna_quantum/solve/usecases/solve_job_create_usecase.py +112 -0
- luna_quantum/solve/usecases/solve_job_delete_usecase.py +38 -0
- luna_quantum/solve/usecases/solve_job_fetch_updates_usecase.py +49 -0
- luna_quantum/solve/usecases/solve_job_get_by_id_usecase.py +44 -0
- luna_quantum/solve/usecases/solve_job_get_result_usecase.py +105 -0
- luna_quantum/transformations.py +18 -0
- luna_quantum/transformations.pyi +371 -0
- luna_quantum/translator.py +23 -0
- luna_quantum/translator.pyi +869 -0
- luna_quantum/util/__init__.py +0 -0
- luna_quantum/util/active_waiting.py +79 -0
- luna_quantum/util/class_patcher.py +164 -0
- luna_quantum/util/debug_info.py +52 -0
- luna_quantum/util/log_utils.py +187 -0
- luna_quantum/util/pretty_base.py +67 -0
- luna_quantum/util/pydantic_utils.py +38 -0
- luna_quantum/utils.py +3 -0
- luna_quantum/utils.pyi +67 -0
- luna_quantum-1.1.0.dist-info/METADATA +36 -0
- luna_quantum-1.1.0.dist-info/RECORD +276 -0
- luna_quantum-1.1.0.dist-info/WHEEL +4 -0
- luna_quantum-1.1.0.dist-info/licenses/LICENSE +176 -0
- luna_quantum-1.1.0.dist-info/licenses/NOTICE +13 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any, ClassVar
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from luna_quantum._core import Solution
|
|
8
|
+
from luna_quantum.client.interfaces.clients.solve_job_rest_client_i import (
|
|
9
|
+
ISolveJobRestClient,
|
|
10
|
+
)
|
|
11
|
+
from luna_quantum.client.schemas import TokenProvider
|
|
12
|
+
from luna_quantum.client.schemas.create.solve_job_create import SolveJobCreate
|
|
13
|
+
from luna_quantum.client.schemas.enums.timeframe import TimeframeEnum
|
|
14
|
+
from luna_quantum.client.schemas.qpu_token.token_provider import RestAPITokenProvider
|
|
15
|
+
from luna_quantum.client.schemas.solution import (
|
|
16
|
+
UseCaseRepresentation,
|
|
17
|
+
UseCaseResult,
|
|
18
|
+
)
|
|
19
|
+
from luna_quantum.client.schemas.solve_job import SolveJobSchema
|
|
20
|
+
from luna_quantum.client.utils.qpu_token_utils import QpuTokenUtils
|
|
21
|
+
from luna_quantum.util.log_utils import Logging
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
from logging import Logger
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class SolveJobRestClient(ISolveJobRestClient):
|
|
28
|
+
"""Impelentation of a solve job REST client."""
|
|
29
|
+
|
|
30
|
+
logger: ClassVar[Logger] = Logging.get_logger(__name__)
|
|
31
|
+
|
|
32
|
+
def get_solution(self, solve_job_id: str, **kwargs: Any) -> Solution:
|
|
33
|
+
"""
|
|
34
|
+
Retrieve one solution by id.
|
|
35
|
+
|
|
36
|
+
Parameters
|
|
37
|
+
----------
|
|
38
|
+
solve_job_id: str
|
|
39
|
+
Id of the solve job for which a solution should be retrieved.
|
|
40
|
+
**kwargs
|
|
41
|
+
Parameters to pass to `httpx.request`.
|
|
42
|
+
|
|
43
|
+
Returns
|
|
44
|
+
-------
|
|
45
|
+
Solution
|
|
46
|
+
Solution instance
|
|
47
|
+
"""
|
|
48
|
+
response = self._client.get(f"{self._endpoint}/data/{solve_job_id}", **kwargs)
|
|
49
|
+
|
|
50
|
+
response.raise_for_status()
|
|
51
|
+
|
|
52
|
+
return Solution.deserialize(response.content)
|
|
53
|
+
|
|
54
|
+
def cancel(self, solve_job_id: str, **kwargs: Any) -> SolveJobSchema:
|
|
55
|
+
"""
|
|
56
|
+
Cancel a solve job for an id.
|
|
57
|
+
|
|
58
|
+
Parameters
|
|
59
|
+
----------
|
|
60
|
+
solve_job_id: str
|
|
61
|
+
The id of the solve job which should be canceled.
|
|
62
|
+
**kwargs
|
|
63
|
+
Parameters to pass to `httpx.request`.
|
|
64
|
+
|
|
65
|
+
Returns
|
|
66
|
+
-------
|
|
67
|
+
SolveJobSchema
|
|
68
|
+
The updated solve job, which can be used to retrieve the solution later.
|
|
69
|
+
"""
|
|
70
|
+
response = self._client.post(
|
|
71
|
+
f"{self._endpoint}/metadata/{solve_job_id}/cancel", **kwargs
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
response.raise_for_status()
|
|
75
|
+
|
|
76
|
+
return SolveJobSchema.model_validate(response.json())
|
|
77
|
+
|
|
78
|
+
@property
|
|
79
|
+
def _endpoint(self) -> str:
|
|
80
|
+
return "/solve-jobs"
|
|
81
|
+
|
|
82
|
+
def get(self, solve_job_id: str, **kwargs: Any) -> SolveJobSchema:
|
|
83
|
+
"""
|
|
84
|
+
Retrieve one SolveJob by id.
|
|
85
|
+
|
|
86
|
+
Parameters
|
|
87
|
+
----------
|
|
88
|
+
solve_job_id: str
|
|
89
|
+
Id of the solve job that should be retrieved.
|
|
90
|
+
**kwargs
|
|
91
|
+
Parameters to pass to `httpx.request`.
|
|
92
|
+
|
|
93
|
+
Returns
|
|
94
|
+
-------
|
|
95
|
+
SolveJobSchema
|
|
96
|
+
Instance of SolveJob.
|
|
97
|
+
"""
|
|
98
|
+
response = self._client.get(
|
|
99
|
+
f"{self._endpoint}/metadata/{solve_job_id}", **kwargs
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
response.raise_for_status()
|
|
103
|
+
|
|
104
|
+
return SolveJobSchema.model_validate(response.json())
|
|
105
|
+
|
|
106
|
+
def get_all(
|
|
107
|
+
self,
|
|
108
|
+
timeframe: TimeframeEnum | None = None,
|
|
109
|
+
limit: int = 50,
|
|
110
|
+
offset: int = 0,
|
|
111
|
+
model_id: str | None = None,
|
|
112
|
+
**kwargs: Any,
|
|
113
|
+
) -> list[SolveJobSchema]:
|
|
114
|
+
"""
|
|
115
|
+
Get list of available SolveJobs.
|
|
116
|
+
|
|
117
|
+
Parameters
|
|
118
|
+
----------
|
|
119
|
+
timeframe: Optional[TimeframeEnum]
|
|
120
|
+
Only return SolveJobs created within a specified timeframe. Default None.
|
|
121
|
+
limit:
|
|
122
|
+
Limit the number of SolveJobs to be returned. Default value 10.
|
|
123
|
+
offset:
|
|
124
|
+
Offset the list of solve job by this amount. Default value 0.
|
|
125
|
+
model_id: Optional[str]
|
|
126
|
+
Show solve job for only this model id. Default None.
|
|
127
|
+
**kwargs
|
|
128
|
+
Parameters to pass to `httpx.request`.
|
|
129
|
+
|
|
130
|
+
Returns
|
|
131
|
+
-------
|
|
132
|
+
List[SolveJobSchema]
|
|
133
|
+
List of SolveJob instances.
|
|
134
|
+
"""
|
|
135
|
+
params = {}
|
|
136
|
+
if timeframe and timeframe != TimeframeEnum.all_time: # no value == all_time
|
|
137
|
+
params["timeframe"] = timeframe.value
|
|
138
|
+
|
|
139
|
+
limit = max(limit, 1)
|
|
140
|
+
|
|
141
|
+
if model_id is not None:
|
|
142
|
+
params["model_id"] = str(model_id)
|
|
143
|
+
|
|
144
|
+
params["limit"] = str(limit)
|
|
145
|
+
params["offset"] = str(offset)
|
|
146
|
+
response = self._client.get(
|
|
147
|
+
f"{self._endpoint}/metadata", params=params, **kwargs
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
response.raise_for_status()
|
|
151
|
+
|
|
152
|
+
return [SolveJobSchema.model_validate(i) for i in response.json()]
|
|
153
|
+
|
|
154
|
+
def delete(self, solve_job_id: str, **kwargs: Any) -> None:
|
|
155
|
+
"""
|
|
156
|
+
Delete one solution by id.
|
|
157
|
+
|
|
158
|
+
Parameters
|
|
159
|
+
----------
|
|
160
|
+
solve_job_id: str
|
|
161
|
+
Id of the solve job that should be deleted.
|
|
162
|
+
**kwargs
|
|
163
|
+
Parameters to pass to `httpx.request`.
|
|
164
|
+
"""
|
|
165
|
+
self._client.delete(f"{self._endpoint}/{solve_job_id}", **kwargs)
|
|
166
|
+
|
|
167
|
+
def create( # noqa: PLR0913
|
|
168
|
+
self,
|
|
169
|
+
model_id: str,
|
|
170
|
+
solver_name: str,
|
|
171
|
+
provider: str,
|
|
172
|
+
qpu_tokens: TokenProvider | None = None,
|
|
173
|
+
solver_parameters: dict[str, Any] | BaseModel | None = None,
|
|
174
|
+
name: str | None = None,
|
|
175
|
+
**kwargs: Any,
|
|
176
|
+
) -> SolveJobSchema:
|
|
177
|
+
"""
|
|
178
|
+
Create a solution for a model.
|
|
179
|
+
|
|
180
|
+
Parameters
|
|
181
|
+
----------
|
|
182
|
+
model_id: str
|
|
183
|
+
The id of the model for which solution should be created.
|
|
184
|
+
solver_name: str
|
|
185
|
+
The name of the solver to use.
|
|
186
|
+
provider: str
|
|
187
|
+
The name of the provider to use.
|
|
188
|
+
qpu_tokens: Optional[TokenProvider]
|
|
189
|
+
The tokens to be used for the QPU.
|
|
190
|
+
solver_parameters: Optional[Union[Dict[str, Any], BaseModel]]
|
|
191
|
+
Parameters to be passed to the solver.
|
|
192
|
+
name: Optional[str]
|
|
193
|
+
Default: None, The name of the solution to create.
|
|
194
|
+
**kwargs
|
|
195
|
+
Parameters to pass to `httpx.request`.
|
|
196
|
+
|
|
197
|
+
Returns
|
|
198
|
+
-------
|
|
199
|
+
SolveJobSchema
|
|
200
|
+
The created solve job, which can be used to retrieve the solution later.
|
|
201
|
+
"""
|
|
202
|
+
if qpu_tokens is not None:
|
|
203
|
+
rest_qpu_tokens = RestAPITokenProvider.from_sdk_token_provider(
|
|
204
|
+
TokenProvider.model_validate(qpu_tokens)
|
|
205
|
+
)
|
|
206
|
+
else:
|
|
207
|
+
rest_qpu_tokens = None
|
|
208
|
+
# try to retrieve qpu tokens from env variables
|
|
209
|
+
|
|
210
|
+
if rest_qpu_tokens is None:
|
|
211
|
+
qpu_tokens = QpuTokenUtils.patch_qpu_tokens_from_env()
|
|
212
|
+
if qpu_tokens is not None:
|
|
213
|
+
rest_qpu_tokens = RestAPITokenProvider.from_sdk_token_provider(
|
|
214
|
+
qpu_tokens
|
|
215
|
+
)
|
|
216
|
+
params: dict[str, Any]
|
|
217
|
+
|
|
218
|
+
if isinstance(solver_parameters, BaseModel):
|
|
219
|
+
params = solver_parameters.model_dump()
|
|
220
|
+
elif isinstance(solver_parameters, dict):
|
|
221
|
+
params = solver_parameters
|
|
222
|
+
else:
|
|
223
|
+
params = {}
|
|
224
|
+
|
|
225
|
+
solve_job_create = SolveJobCreate(
|
|
226
|
+
model_id=model_id,
|
|
227
|
+
solver_name=solver_name,
|
|
228
|
+
provider=provider,
|
|
229
|
+
parameters=params,
|
|
230
|
+
qpu_tokens=rest_qpu_tokens,
|
|
231
|
+
name=name,
|
|
232
|
+
)
|
|
233
|
+
SolveJobRestClient.logger.debug(
|
|
234
|
+
solve_job_create.model_dump_json(exclude={"qpu_tokens"})
|
|
235
|
+
)
|
|
236
|
+
response = self._client.post(
|
|
237
|
+
self._endpoint, content=solve_job_create.model_dump_json(), **kwargs
|
|
238
|
+
)
|
|
239
|
+
response.raise_for_status()
|
|
240
|
+
|
|
241
|
+
return SolveJobSchema.model_validate(response.json())
|
|
242
|
+
|
|
243
|
+
def get_use_case_representation(
|
|
244
|
+
self, solve_job_id: str, **kwargs: Any
|
|
245
|
+
) -> UseCaseRepresentation:
|
|
246
|
+
"""
|
|
247
|
+
Get the use-case-specific representation of a solution.
|
|
248
|
+
|
|
249
|
+
Parameters
|
|
250
|
+
----------
|
|
251
|
+
solve_job_id: str
|
|
252
|
+
Id of the solve job that should be retrieved.
|
|
253
|
+
**kwargs
|
|
254
|
+
Parameters to pass to `httpx.request`.
|
|
255
|
+
|
|
256
|
+
Returns
|
|
257
|
+
-------
|
|
258
|
+
UseCaseRepresentation
|
|
259
|
+
The use-case-specific representation
|
|
260
|
+
"""
|
|
261
|
+
response = self._client.get(
|
|
262
|
+
f"{self._endpoint}/use-case/{solve_job_id}/representation", **kwargs
|
|
263
|
+
)
|
|
264
|
+
response.raise_for_status()
|
|
265
|
+
return UseCaseRepresentation.model_validate(response.json())
|
|
266
|
+
|
|
267
|
+
def get_best_use_case_result(
|
|
268
|
+
self,
|
|
269
|
+
use_case_representation: UseCaseRepresentation, # noqa: ARG002
|
|
270
|
+
) -> UseCaseResult | None:
|
|
271
|
+
"""
|
|
272
|
+
Retrieve the best result from a solution's use case representation.
|
|
273
|
+
|
|
274
|
+
Parameters
|
|
275
|
+
----------
|
|
276
|
+
use_case_representation : UseCaseRepresentation
|
|
277
|
+
A solution's use case representation.
|
|
278
|
+
|
|
279
|
+
Returns
|
|
280
|
+
-------
|
|
281
|
+
Optional[UseCaseResult]
|
|
282
|
+
The best result of the solution. If there are several best solve job with
|
|
283
|
+
the same objective value, return only the first. If the solution results are
|
|
284
|
+
not (yet) available or the solution sense is `None`, `None` is returned.
|
|
285
|
+
"""
|
|
286
|
+
return None
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any
|
|
4
|
+
|
|
5
|
+
from luna_quantum.client.interfaces.clients import IUsersRestClient
|
|
6
|
+
from luna_quantum.client.schemas.user import User
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from httpx import Response
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class UsersRestClient(IUsersRestClient):
|
|
13
|
+
"""UsersRestClient is a class for interacting with the Luna API's users endpoint."""
|
|
14
|
+
|
|
15
|
+
@property
|
|
16
|
+
def _endpoint(self) -> str:
|
|
17
|
+
return "/users"
|
|
18
|
+
|
|
19
|
+
def get_me(self, **kwargs: Any) -> User:
|
|
20
|
+
"""
|
|
21
|
+
Retrieve information about user.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
**kwargs
|
|
26
|
+
Parameters to pass to `httpx.request`.
|
|
27
|
+
|
|
28
|
+
Returns
|
|
29
|
+
-------
|
|
30
|
+
User:
|
|
31
|
+
User data.
|
|
32
|
+
"""
|
|
33
|
+
response: Response = self._client.get(f"{self._endpoint}/me", **kwargs)
|
|
34
|
+
response.raise_for_status()
|
|
35
|
+
return User.model_validate_json(response.text)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from luna_quantum.client.schemas.circuit import CircuitJob, CircuitResult
|
|
2
|
+
from luna_quantum.client.schemas.qpu_token.qpu_token import (
|
|
3
|
+
QpuToken,
|
|
4
|
+
QpuTokenOut,
|
|
5
|
+
QpuTokenSource,
|
|
6
|
+
TokenProvider,
|
|
7
|
+
)
|
|
8
|
+
from luna_quantum.client.schemas.solution import (
|
|
9
|
+
Result,
|
|
10
|
+
Runtime,
|
|
11
|
+
UseCaseRepresentation,
|
|
12
|
+
UseCaseResult,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"CircuitJob",
|
|
17
|
+
"CircuitResult",
|
|
18
|
+
"QpuToken",
|
|
19
|
+
"QpuTokenOut",
|
|
20
|
+
"QpuTokenSource",
|
|
21
|
+
"Result",
|
|
22
|
+
"Runtime",
|
|
23
|
+
"TokenProvider",
|
|
24
|
+
"UseCaseRepresentation",
|
|
25
|
+
"UseCaseResult",
|
|
26
|
+
]
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from luna_quantum.client.schemas.enums.circuit import (
|
|
8
|
+
CircuitProviderEnum,
|
|
9
|
+
CircuitStatusEnum,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CircuitJob(BaseModel):
|
|
14
|
+
"""
|
|
15
|
+
Object responsible of retrieving a circuit solution.
|
|
16
|
+
|
|
17
|
+
Attributes
|
|
18
|
+
----------
|
|
19
|
+
id: str
|
|
20
|
+
Id of the circuit job.
|
|
21
|
+
provider: CircuitProviderEnum
|
|
22
|
+
The provider used to solve this circuit.
|
|
23
|
+
params: Dict[str, Any]
|
|
24
|
+
Additional parameters that were used to create the circuit.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
id: str
|
|
28
|
+
provider: CircuitProviderEnum
|
|
29
|
+
params: dict[str, Any] | None = None
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class CircuitResult(BaseModel):
|
|
33
|
+
"""
|
|
34
|
+
The result of solving the circuit.
|
|
35
|
+
|
|
36
|
+
Attributes
|
|
37
|
+
----------
|
|
38
|
+
result: Optional[Dict[str, Any]]
|
|
39
|
+
The result if the job succeeded. Otherwise None
|
|
40
|
+
error: Optional[str]
|
|
41
|
+
The error message if the job failed. Otherwise None
|
|
42
|
+
status: CircuitStatusEnum
|
|
43
|
+
The job status.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
status: CircuitStatusEnum
|
|
47
|
+
result: dict[str, Any] | None = None
|
|
48
|
+
error_message: str | None = None
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from luna_quantum.client.schemas.create.circuit import CircuitIn
|
|
2
|
+
from luna_quantum.client.schemas.create.qpu_token import QpuTokenIn
|
|
3
|
+
from luna_quantum.client.schemas.create.qpu_token_time_quota import QpuTokenTimeQuotaIn
|
|
4
|
+
from luna_quantum.client.schemas.create.qpu_token_time_quota_update import (
|
|
5
|
+
QpuTokenTimeQuotaUpdate,
|
|
6
|
+
)
|
|
7
|
+
from luna_quantum.client.schemas.create.qubo import QUBOIn
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"CircuitIn",
|
|
11
|
+
"QUBOIn",
|
|
12
|
+
"QpuTokenIn",
|
|
13
|
+
"QpuTokenTimeQuotaIn",
|
|
14
|
+
"QpuTokenTimeQuotaUpdate",
|
|
15
|
+
]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from luna_quantum.client.schemas.enums.circuit import CircuitProviderEnum
|
|
8
|
+
from luna_quantum.client.schemas.qpu_token.token_provider import (
|
|
9
|
+
RestAPITokenProvider,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CircuitIn(BaseModel):
|
|
14
|
+
"""
|
|
15
|
+
Pydantic model for creation of circuits.
|
|
16
|
+
|
|
17
|
+
Attributes
|
|
18
|
+
----------
|
|
19
|
+
provider: str
|
|
20
|
+
The provider for circuit solving
|
|
21
|
+
provider: ProviderEnum
|
|
22
|
+
The QASM circuit
|
|
23
|
+
params: Dict[str, Any]
|
|
24
|
+
Additional parameters
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
provider: CircuitProviderEnum
|
|
28
|
+
circuit: str
|
|
29
|
+
params: dict[str, Any] = {}
|
|
30
|
+
qpu_tokens: RestAPITokenProvider | None = None
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any, Generic, TypeVar
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from luna_quantum.solve.use_cases import UseCase
|
|
8
|
+
|
|
9
|
+
# This works but is kind of ugly.
|
|
10
|
+
# In the future, we should find another solution for "dumping" a child of UseCase
|
|
11
|
+
# with the name and params.
|
|
12
|
+
# OptimizationUseCaseIn can still be created like this:
|
|
13
|
+
# `opt = optimizationusecasein(name=name, use_case=use_case)`
|
|
14
|
+
# Somehow this tricks pydantic into accepting the child of UseCase and adding
|
|
15
|
+
# it to the model_dump_json. Without the Generic[UseCase] only the name will be
|
|
16
|
+
# added to the model_dump_json
|
|
17
|
+
|
|
18
|
+
_UseCase = TypeVar("_UseCase", bound=UseCase)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class OptimizationUseCaseIn(BaseModel, Generic[_UseCase]):
|
|
22
|
+
"""
|
|
23
|
+
Input schema for creating an optimization use case.
|
|
24
|
+
|
|
25
|
+
Attributes
|
|
26
|
+
----------
|
|
27
|
+
name : str
|
|
28
|
+
A name for the optimization use case.
|
|
29
|
+
|
|
30
|
+
use_case : _UseCase
|
|
31
|
+
The actual use case object containing the problem definition.
|
|
32
|
+
|
|
33
|
+
params : dict[str, Any] | None
|
|
34
|
+
Optional dictionary of additional parameters for the optimization.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
name: str
|
|
38
|
+
use_case: _UseCase
|
|
39
|
+
params: dict[str, Any] | None
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from pydantic import BaseModel, ConfigDict
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class QpuTokenIn(BaseModel):
|
|
5
|
+
"""
|
|
6
|
+
Pydantic model for creation QPU token.
|
|
7
|
+
|
|
8
|
+
Attributes
|
|
9
|
+
----------
|
|
10
|
+
name: str
|
|
11
|
+
Name of the QPU token
|
|
12
|
+
provider: ProviderEnum
|
|
13
|
+
Name of provider
|
|
14
|
+
token: str
|
|
15
|
+
Token
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
name: str
|
|
19
|
+
provider: str
|
|
20
|
+
token: str
|
|
21
|
+
|
|
22
|
+
model_config = ConfigDict(extra="forbid")
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Self
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field, model_validator
|
|
6
|
+
|
|
7
|
+
from luna_quantum.client.schemas.wrappers import PydanticDatetimeWrapper
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class QpuTokenTimeQuotaIn(BaseModel):
|
|
11
|
+
"""
|
|
12
|
+
Pydantic model for creating a time quota on a qpu token.
|
|
13
|
+
|
|
14
|
+
Attributes
|
|
15
|
+
----------
|
|
16
|
+
quota: int
|
|
17
|
+
The amount of quota.
|
|
18
|
+
start: datetime | None
|
|
19
|
+
Effective start date of the time quota policy.
|
|
20
|
+
If None, policy will be in effect immediately.
|
|
21
|
+
end: datetime | None
|
|
22
|
+
Effective end date of the time quota policy.
|
|
23
|
+
If None, policy will be in effect until 365 days after the start date.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
quota: int = Field(ge=0)
|
|
27
|
+
start: PydanticDatetimeWrapper | None
|
|
28
|
+
end: PydanticDatetimeWrapper | None
|
|
29
|
+
|
|
30
|
+
@model_validator(mode="after")
|
|
31
|
+
def check_start_end_dates(self) -> Self:
|
|
32
|
+
"""Cheks that start date is befor end date if both provided."""
|
|
33
|
+
if self.start is not None and self.end is not None and self.start > self.end:
|
|
34
|
+
raise ValueError("Start date cannot be after end date.") # noqa: TRY003
|
|
35
|
+
return self
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from typing import Self
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
4
|
+
|
|
5
|
+
from luna_quantum.client.schemas.wrappers.datetime_wrapper import (
|
|
6
|
+
PydanticDatetimeWrapper,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class QpuTokenTimeQuotaUpdate(BaseModel):
|
|
11
|
+
"""Data structure to update the time quota of a qpu token."""
|
|
12
|
+
|
|
13
|
+
quota: int | None = Field(ge=0, default=None)
|
|
14
|
+
start: PydanticDatetimeWrapper | None = None
|
|
15
|
+
end: PydanticDatetimeWrapper | None = None
|
|
16
|
+
|
|
17
|
+
model_config = ConfigDict(extra="forbid")
|
|
18
|
+
|
|
19
|
+
@model_validator(mode="after")
|
|
20
|
+
def check_start_end_dates(self) -> Self:
|
|
21
|
+
"""Cheks that start date is befor end date if both provided."""
|
|
22
|
+
if self.start is not None and self.end is not None and self.start > self.end:
|
|
23
|
+
raise ValueError("Start date cannot be after end date.") # noqa: TRY003
|
|
24
|
+
return self
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class QUBOIn(BaseModel):
|
|
7
|
+
"""
|
|
8
|
+
Pydantic model for QUBO.
|
|
9
|
+
|
|
10
|
+
Attributes
|
|
11
|
+
----------
|
|
12
|
+
name: str
|
|
13
|
+
Name of the Model
|
|
14
|
+
matrix: List[List[float]]
|
|
15
|
+
QUBO matrix
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
name: str
|
|
19
|
+
matrix: list[list[float]]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
|
|
7
|
+
from luna_quantum.client.schemas.qpu_token.token_provider import (
|
|
8
|
+
RestAPITokenProvider,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SolveJobCreate(BaseModel):
|
|
13
|
+
"""
|
|
14
|
+
Schema for creating a new solve job.
|
|
15
|
+
|
|
16
|
+
Attributes
|
|
17
|
+
----------
|
|
18
|
+
model_id : str
|
|
19
|
+
Unique identifier of the model to be solved.
|
|
20
|
+
|
|
21
|
+
solver_name : str
|
|
22
|
+
Name of the solver algorithm to be used for the computation.
|
|
23
|
+
|
|
24
|
+
provider : str
|
|
25
|
+
Name of the provider that will execute the job.
|
|
26
|
+
|
|
27
|
+
parameters : dict[str, Any]
|
|
28
|
+
Dictionary of solver-specific parameters options.
|
|
29
|
+
|
|
30
|
+
qpu_tokens : RestAPITokenProvider | None, optional
|
|
31
|
+
Authentication tokens for accessing QPU providers.
|
|
32
|
+
Contains provider-specific authentication credentials.
|
|
33
|
+
|
|
34
|
+
name : str | None, optional
|
|
35
|
+
Optional user-defined name for the solve job.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
model_id: str # id of the model
|
|
39
|
+
solver_name: str
|
|
40
|
+
provider: str
|
|
41
|
+
parameters: dict[str, Any]
|
|
42
|
+
qpu_tokens: RestAPITokenProvider | None = None
|
|
43
|
+
name: str | None = None
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class CallStyle(str, Enum):
|
|
5
|
+
"""
|
|
6
|
+
Enumeration of all supported call styles.
|
|
7
|
+
|
|
8
|
+
This enumeration is used to prevent FBT001.
|
|
9
|
+
https://docs.astral.sh/ruff/rules/boolean-type-hint-positional-argument/
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
ACTIVE_WAITING = "active_waiting"
|
|
13
|
+
SINGLE_FETCH = "single_fetch"
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class CircuitProviderEnum(str, Enum):
|
|
5
|
+
"""
|
|
6
|
+
Enumeration of supported quantum circuit execution providers.
|
|
7
|
+
|
|
8
|
+
Enum Values
|
|
9
|
+
----------
|
|
10
|
+
IBM
|
|
11
|
+
IBM quantum computing services.
|
|
12
|
+
QCTRL
|
|
13
|
+
Q-CTRL quantum computing services.
|
|
14
|
+
AWS
|
|
15
|
+
AWS quantum computing services.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
IBM = "ibm"
|
|
19
|
+
QCTRL = "qctrl"
|
|
20
|
+
AWS = "aws"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class CircuitStatusEnum(str, Enum):
|
|
24
|
+
"""
|
|
25
|
+
Enumeration of possible status states for a circuit job.
|
|
26
|
+
|
|
27
|
+
Enum Values
|
|
28
|
+
----------
|
|
29
|
+
IN_PROGRESS
|
|
30
|
+
The circuit job is currently being executed.
|
|
31
|
+
DONE
|
|
32
|
+
The circuit job has completed successfully.
|
|
33
|
+
FAILED
|
|
34
|
+
The circuit job encountered an error during execution.
|
|
35
|
+
CANCELED
|
|
36
|
+
The circuit job was explicitly canceled.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
IN_PROGRESS = "IN_PROGRESS"
|
|
40
|
+
DONE = "DONE"
|
|
41
|
+
FAILED = "FAILED"
|
|
42
|
+
CANCELLED = "CANCELLED"
|