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,230 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Literal
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, PrivateAttr
|
|
6
|
+
|
|
7
|
+
from luna_quantum.client.schemas.enums.call_style import CallStyle
|
|
8
|
+
from luna_quantum.client.schemas.enums.model_format import ModelFormat # noqa: TC001
|
|
9
|
+
from luna_quantum.client.schemas.enums.status import StatusEnum # noqa: TC001
|
|
10
|
+
from luna_quantum.client.schemas.wrappers import PydanticDatetimeWrapper # noqa: TC001
|
|
11
|
+
from luna_quantum.factories.luna_solve_client_factory import LunaSolveClientFactory
|
|
12
|
+
from luna_quantum.util.log_utils import Logging
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from logging import Logger
|
|
16
|
+
|
|
17
|
+
from luna_quantum._core import Solution
|
|
18
|
+
from luna_quantum.aqm_overwrites.model import Model
|
|
19
|
+
from luna_quantum.client.interfaces.services.luna_solve_i import ILunaSolve
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class SolveJob(BaseModel):
|
|
23
|
+
"""A model to represent a job for solving model problems."""
|
|
24
|
+
|
|
25
|
+
_logger: ClassVar[Logger] = Logging.get_logger(__name__)
|
|
26
|
+
id: str
|
|
27
|
+
status: StatusEnum
|
|
28
|
+
status_timeline: dict[StatusEnum, PydanticDatetimeWrapper]
|
|
29
|
+
error_message: str | None = None
|
|
30
|
+
solver_job_info: str | None = None
|
|
31
|
+
used_format: ModelFormat | None = None
|
|
32
|
+
provider: str | None = None
|
|
33
|
+
is_cancelable: bool = True
|
|
34
|
+
is_cancellation_requested: bool = False
|
|
35
|
+
|
|
36
|
+
metadata: dict[str, Any] | None = None
|
|
37
|
+
_result: Solution | None = PrivateAttr(default=None)
|
|
38
|
+
|
|
39
|
+
_model: Model | None = PrivateAttr(default=None)
|
|
40
|
+
|
|
41
|
+
def set_evaluation_model(self, model: Model | None) -> None:
|
|
42
|
+
"""
|
|
43
|
+
Set the evaluation model for the solved job.
|
|
44
|
+
|
|
45
|
+
This will be done automatically. Normally there is no need to call this method.
|
|
46
|
+
|
|
47
|
+
Parameters
|
|
48
|
+
----------
|
|
49
|
+
model: Model|None
|
|
50
|
+
|
|
51
|
+
"""
|
|
52
|
+
self._model = model
|
|
53
|
+
|
|
54
|
+
def get_status(
|
|
55
|
+
self,
|
|
56
|
+
client: ILunaSolve | None = None,
|
|
57
|
+
status_source: Literal["cached", "remote"] = "cached",
|
|
58
|
+
) -> StatusEnum:
|
|
59
|
+
"""
|
|
60
|
+
Retrieve the current status of the solve job.
|
|
61
|
+
|
|
62
|
+
Parameters
|
|
63
|
+
----------
|
|
64
|
+
status_source : Literal["cached", "remote"], optional
|
|
65
|
+
If "cached", the status is retrieved from the cached status. If "remote",
|
|
66
|
+
the status is retrieved from the remote service.
|
|
67
|
+
|
|
68
|
+
client : Optional[ILunaSolve], optional
|
|
69
|
+
The client to be used. If not provided, a new client is created using
|
|
70
|
+
|
|
71
|
+
Returns
|
|
72
|
+
-------
|
|
73
|
+
StatusEnum
|
|
74
|
+
The current status of the solve job, represented as a value
|
|
75
|
+
from the `StatusEnum` enumeration.
|
|
76
|
+
|
|
77
|
+
"""
|
|
78
|
+
if status_source == "remote":
|
|
79
|
+
c: ILunaSolve = LunaSolveClientFactory.get_client(client)
|
|
80
|
+
|
|
81
|
+
from luna_quantum.factories.usecase_factory import ( # noqa: PLC0415
|
|
82
|
+
UseCaseFactory,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
UseCaseFactory.solve_job_fetch_update(client=c).__call__(solve_job=self)
|
|
86
|
+
|
|
87
|
+
return self.status
|
|
88
|
+
|
|
89
|
+
def result(
|
|
90
|
+
self,
|
|
91
|
+
client: ILunaSolve | None = None,
|
|
92
|
+
sleep_time_max: float = 60.0,
|
|
93
|
+
sleep_time_increment: float = 5.0,
|
|
94
|
+
sleep_time_initial: float = 5.0,
|
|
95
|
+
call_style: CallStyle = CallStyle.ACTIVE_WAITING,
|
|
96
|
+
) -> Solution | None:
|
|
97
|
+
"""
|
|
98
|
+
Get the result of the solve job.
|
|
99
|
+
|
|
100
|
+
This function uses the provided client or creates a new one to retrieve
|
|
101
|
+
and the result of this solve job. Depending on the call style, it can
|
|
102
|
+
actively wait for the result or return immediately.
|
|
103
|
+
|
|
104
|
+
Parameters
|
|
105
|
+
----------
|
|
106
|
+
client : Optional[ILunaSolve], optional
|
|
107
|
+
The client to be used. If not provided, a new client is created using
|
|
108
|
+
ClientFactory.
|
|
109
|
+
sleep_time_max : float, optional
|
|
110
|
+
Maximum sleep time in seconds between consecutive active waiting checks.
|
|
111
|
+
sleep_time_increment : float, optional
|
|
112
|
+
Increment value for the sleep time between checks during active waiting.
|
|
113
|
+
sleep_time_initial : float, optional
|
|
114
|
+
Initial sleep time in seconds for the active waiting process.
|
|
115
|
+
call_style : CallStyle, optional
|
|
116
|
+
Determines if this function will actively wait for the result or return
|
|
117
|
+
immediately.
|
|
118
|
+
|
|
119
|
+
Returns
|
|
120
|
+
-------
|
|
121
|
+
Optional[Solution]
|
|
122
|
+
The result of the solve job or None if not available.
|
|
123
|
+
|
|
124
|
+
Raises
|
|
125
|
+
------
|
|
126
|
+
Any exceptions raised by the use case's solve job call will propagate.
|
|
127
|
+
"""
|
|
128
|
+
if self._result:
|
|
129
|
+
return self._result
|
|
130
|
+
|
|
131
|
+
c: ILunaSolve = LunaSolveClientFactory.get_client(client)
|
|
132
|
+
|
|
133
|
+
from luna_quantum.factories.usecase_factory import ( # noqa: PLC0415
|
|
134
|
+
UseCaseFactory,
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
self._result = UseCaseFactory.solve_job_get_result(client=c).__call__(
|
|
138
|
+
solve_job=self,
|
|
139
|
+
sleep_time_max=sleep_time_max,
|
|
140
|
+
sleep_time_increment=sleep_time_increment,
|
|
141
|
+
sleep_time_initial=sleep_time_initial,
|
|
142
|
+
call_style=call_style,
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
if self._result is None:
|
|
146
|
+
return None
|
|
147
|
+
if self._model is None:
|
|
148
|
+
SolveJob._logger.info(
|
|
149
|
+
"The solve job object does not contain a model. "
|
|
150
|
+
"This solution is not evaluated."
|
|
151
|
+
)
|
|
152
|
+
else:
|
|
153
|
+
self._result = self._model.evaluate(self._result)
|
|
154
|
+
|
|
155
|
+
return self._result
|
|
156
|
+
|
|
157
|
+
def cancel(self, client: ILunaSolve | None = None) -> None:
|
|
158
|
+
"""
|
|
159
|
+
Cancel a solve job.
|
|
160
|
+
|
|
161
|
+
This method cancels an already initiated solve job using the provided client
|
|
162
|
+
or a default one if no client is specified.
|
|
163
|
+
|
|
164
|
+
Parameters
|
|
165
|
+
----------
|
|
166
|
+
client : Optional[ILunaSolve], optional
|
|
167
|
+
The client instance used to perform the cancel operation. If None, the
|
|
168
|
+
client is obtained via the ClientFactory.
|
|
169
|
+
|
|
170
|
+
Returns
|
|
171
|
+
-------
|
|
172
|
+
None
|
|
173
|
+
"""
|
|
174
|
+
c: ILunaSolve = LunaSolveClientFactory.get_client(client)
|
|
175
|
+
|
|
176
|
+
from luna_quantum.factories.usecase_factory import ( # noqa: PLC0415
|
|
177
|
+
UseCaseFactory,
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
UseCaseFactory.solve_job_cancel(client=c).__call__(self)
|
|
181
|
+
|
|
182
|
+
def delete(self, client: ILunaSolve | None = None) -> None:
|
|
183
|
+
"""
|
|
184
|
+
Delete a job using the specified or default client.
|
|
185
|
+
|
|
186
|
+
This method deletes this job and solution. A client can optionally be provided
|
|
187
|
+
otherwise, a default client is obtained through the factory.
|
|
188
|
+
|
|
189
|
+
Parameters
|
|
190
|
+
----------
|
|
191
|
+
client : Optional[ILunaSolve], optional
|
|
192
|
+
The client to be used for job deletion. If not provided, a default client
|
|
193
|
+
is retrieved using `ClientFactory`.
|
|
194
|
+
"""
|
|
195
|
+
c: ILunaSolve = LunaSolveClientFactory.get_client(client)
|
|
196
|
+
|
|
197
|
+
from luna_quantum.factories.usecase_factory import ( # noqa: PLC0415
|
|
198
|
+
UseCaseFactory,
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
UseCaseFactory.solve_job_delete(client=c).__call__(solve_job_id=self.id)
|
|
202
|
+
|
|
203
|
+
@staticmethod
|
|
204
|
+
def get_by_id(solve_job_id: str, client: ILunaSolve | None = None) -> SolveJob:
|
|
205
|
+
"""
|
|
206
|
+
Retrieve a solve-job by its ID.
|
|
207
|
+
|
|
208
|
+
Para>meters
|
|
209
|
+
----------
|
|
210
|
+
solve_job_id: str
|
|
211
|
+
Get the solve-job id for which a SolveJob should be retrieved.
|
|
212
|
+
client : Optional[ILunaSolve], optional
|
|
213
|
+
The client to be used for job deletion. If not provided, a default client
|
|
214
|
+
is retrieved using `ClientFactory`.
|
|
215
|
+
|
|
216
|
+
Returns
|
|
217
|
+
-------
|
|
218
|
+
SolveJob
|
|
219
|
+
The solve-job object.
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
"""
|
|
223
|
+
c: ILunaSolve = LunaSolveClientFactory.get_client(client)
|
|
224
|
+
from luna_quantum.factories.usecase_factory import ( # noqa: PLC0415
|
|
225
|
+
UseCaseFactory,
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
return UseCaseFactory.solve_job_get_by_id(client=c).__call__(
|
|
229
|
+
solve_job_id=solve_job_id
|
|
230
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from luna_quantum.solve.errors.solve_base_error import SolveBaseError
|
|
2
|
+
from luna_quantum.solve.interfaces.algorithm_i import BACKEND_TYPE, IAlgorithm
|
|
3
|
+
from luna_quantum.solve.interfaces.backend_i import IBackend
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class IncompatibleBackendError(SolveBaseError):
|
|
7
|
+
"""Exception raised if the backend is incompatible with the algorithm."""
|
|
8
|
+
|
|
9
|
+
def __init__(
|
|
10
|
+
self, backend: IBackend, algorithm: type[IAlgorithm[BACKEND_TYPE]]
|
|
11
|
+
) -> None:
|
|
12
|
+
super().__init__(
|
|
13
|
+
f"Backend {backend.__class__.__name__} is incompatible "
|
|
14
|
+
f"with algorithm {algorithm.__name__}."
|
|
15
|
+
)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from luna_quantum.solve.errors.solve_base_error import SolveBaseError
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ModelMetadataMissingError(SolveBaseError):
|
|
5
|
+
"""Exception raised for errors in the input."""
|
|
6
|
+
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
self.message = (
|
|
9
|
+
"Model metadata is required to complete this action. "
|
|
10
|
+
"Make sure that the model has been saved."
|
|
11
|
+
)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from luna_quantum.solve.errors.solve_base_error import SolveBaseError
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TokenMissingError(SolveBaseError):
|
|
5
|
+
"""Exception raised, when token is missing."""
|
|
6
|
+
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
self.message = (
|
|
9
|
+
"To complete this action, a token is required. "
|
|
10
|
+
"Make sure that the token has been set."
|
|
11
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from typing import Any, Generic, TypeVar
|
|
3
|
+
|
|
4
|
+
from pydantic import BaseModel
|
|
5
|
+
|
|
6
|
+
from luna_quantum.aqm_overwrites.model import Model
|
|
7
|
+
from luna_quantum.solve.domain.solve_job import SolveJob
|
|
8
|
+
from luna_quantum.solve.interfaces.backend_i import IBackend
|
|
9
|
+
|
|
10
|
+
BACKEND_TYPE = TypeVar("BACKEND_TYPE", bound=IBackend)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class IAlgorithm(ABC, BaseModel, Generic[BACKEND_TYPE]):
|
|
14
|
+
"""
|
|
15
|
+
Interface for an algorithm that performs solve tasks based on a given model.
|
|
16
|
+
|
|
17
|
+
This interface defines the structure expected for any solver implementation
|
|
18
|
+
that can solve model problems and return results in the form of a `SolveJob`.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
@abstractmethod
|
|
22
|
+
def run(
|
|
23
|
+
self,
|
|
24
|
+
model: Model | str,
|
|
25
|
+
name: str | None = None,
|
|
26
|
+
backend: BACKEND_TYPE | None = None,
|
|
27
|
+
*args: Any | None,
|
|
28
|
+
**kwargs: Any | None,
|
|
29
|
+
) -> SolveJob:
|
|
30
|
+
"""
|
|
31
|
+
Solve the given model problem and return the resulting job.
|
|
32
|
+
|
|
33
|
+
Parameters
|
|
34
|
+
----------
|
|
35
|
+
model: Optimization
|
|
36
|
+
An instance of the `Optimization` class representing the problem
|
|
37
|
+
to be solved, including any constraints or objectives.
|
|
38
|
+
name: Optional[str]
|
|
39
|
+
If provided, the name of the job. Defaults to None.
|
|
40
|
+
backend: Optional[BACKEND_TYPE]
|
|
41
|
+
If provided, the backend to use for the solver. If no backend is provided,
|
|
42
|
+
the default backend for the solver will be used.
|
|
43
|
+
|
|
44
|
+
Returns
|
|
45
|
+
-------
|
|
46
|
+
SolveJob
|
|
47
|
+
A `SolveJob` object representing the results of the solve_job process,
|
|
48
|
+
including the solve_job state and related metadata.
|
|
49
|
+
"""
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, ConfigDict
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class IBackend(BaseModel, ABC):
|
|
7
|
+
"""
|
|
8
|
+
Base interface for backend providers.
|
|
9
|
+
|
|
10
|
+
Defines an abstract interface for backend providers. This is used as a
|
|
11
|
+
base class for implementing and configuring specific backend providers.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
@property
|
|
15
|
+
@abstractmethod
|
|
16
|
+
def provider(self) -> str:
|
|
17
|
+
"""
|
|
18
|
+
Retrieve the name of the provider.
|
|
19
|
+
|
|
20
|
+
Returns
|
|
21
|
+
-------
|
|
22
|
+
str
|
|
23
|
+
The name of the provider.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
model_config = ConfigDict(
|
|
27
|
+
extra="forbid",
|
|
28
|
+
)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from .model_delete_usecase_i import (
|
|
2
|
+
IModelDeleteUseCase,
|
|
3
|
+
)
|
|
4
|
+
from .model_fetch_metadata_usecase_i import (
|
|
5
|
+
IModelFetchMetadataUseCase,
|
|
6
|
+
)
|
|
7
|
+
from .model_get_solutions_usecase_i import (
|
|
8
|
+
IModelGetSolutionUseCase,
|
|
9
|
+
)
|
|
10
|
+
from .model_get_solve_jobs_usecase_i import (
|
|
11
|
+
IModelGetSolveJobUseCase,
|
|
12
|
+
)
|
|
13
|
+
from .model_load_by_id_usecase_i import (
|
|
14
|
+
IModelLoadByIdUseCase,
|
|
15
|
+
)
|
|
16
|
+
from .model_load_by_metadata_usecase_i import (
|
|
17
|
+
IModelLoadByMetadataUseCase,
|
|
18
|
+
)
|
|
19
|
+
from .model_load_metadata_by_hash_usecase_i import (
|
|
20
|
+
IModelLoadMetadataByHashUseCase,
|
|
21
|
+
)
|
|
22
|
+
from .model_save_usecase_i import (
|
|
23
|
+
IModelSaveUseCase,
|
|
24
|
+
)
|
|
25
|
+
from .solve_job_cancel_usecase_i import (
|
|
26
|
+
ISolveJobCancelUseCase,
|
|
27
|
+
)
|
|
28
|
+
from .solve_job_create_usecase_i import (
|
|
29
|
+
ISolveJobCreateUseCase,
|
|
30
|
+
)
|
|
31
|
+
from .solve_job_delete_usecase_i import (
|
|
32
|
+
ISolveJobDeleteUseCase,
|
|
33
|
+
)
|
|
34
|
+
from .solve_job_fetch_updates_usecase_i import (
|
|
35
|
+
ISolveJobFetchUpdatesUseCase,
|
|
36
|
+
)
|
|
37
|
+
from .solve_job_get_by_id_usecase_i import (
|
|
38
|
+
ISolveJobGetByIdUseCase,
|
|
39
|
+
)
|
|
40
|
+
from .solve_job_get_result_usecase_i import (
|
|
41
|
+
ISolveJobGetResultUseCase,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
__all__ = [
|
|
45
|
+
"IModelDeleteUseCase",
|
|
46
|
+
"IModelFetchMetadataUseCase",
|
|
47
|
+
"IModelGetSolutionUseCase",
|
|
48
|
+
"IModelGetSolveJobUseCase",
|
|
49
|
+
"IModelLoadByIdUseCase",
|
|
50
|
+
"IModelLoadByMetadataUseCase",
|
|
51
|
+
"IModelLoadMetadataByHashUseCase",
|
|
52
|
+
"IModelSaveUseCase",
|
|
53
|
+
"ISolveJobCancelUseCase",
|
|
54
|
+
"ISolveJobCreateUseCase",
|
|
55
|
+
"ISolveJobDeleteUseCase",
|
|
56
|
+
"ISolveJobFetchUpdatesUseCase",
|
|
57
|
+
"ISolveJobGetByIdUseCase",
|
|
58
|
+
"ISolveJobGetResultUseCase",
|
|
59
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from luna_quantum.aqm_overwrites import Model
|
|
8
|
+
from luna_quantum.client.interfaces.services.luna_solve_i import ILunaSolve
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class IModelDeleteUseCase(ABC):
|
|
12
|
+
"""Interface for deleting a models."""
|
|
13
|
+
|
|
14
|
+
@abstractmethod
|
|
15
|
+
def __init__(self, client: ILunaSolve) -> None:
|
|
16
|
+
pass
|
|
17
|
+
|
|
18
|
+
@abstractmethod
|
|
19
|
+
def __call__(self, model: Model) -> None:
|
|
20
|
+
"""
|
|
21
|
+
Abstract method for deleting a model.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
model : Model
|
|
26
|
+
Model to be deleted.
|
|
27
|
+
"""
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from luna_quantum.aqm_overwrites import Model
|
|
8
|
+
from luna_quantum.client.interfaces.services.luna_solve_i import ILunaSolve
|
|
9
|
+
from luna_quantum.solve.domain.model_metadata import ModelMetadata
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IModelFetchMetadataUseCase(ABC):
|
|
13
|
+
"""Abstract base class for fetching metadata of models."""
|
|
14
|
+
|
|
15
|
+
@abstractmethod
|
|
16
|
+
def __init__(self, client: ILunaSolve) -> None:
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
@abstractmethod
|
|
20
|
+
def __call__(self, model: Model) -> ModelMetadata:
|
|
21
|
+
"""
|
|
22
|
+
Abstract method for fetching metadata of an AQ model.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
model : Model
|
|
27
|
+
The model for which metadata is to be fetched.
|
|
28
|
+
|
|
29
|
+
Returns
|
|
30
|
+
-------
|
|
31
|
+
ModelMetadata
|
|
32
|
+
Metadata of the AQ model.
|
|
33
|
+
"""
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from luna_quantum import Model, Solution
|
|
8
|
+
from luna_quantum.client.interfaces.services.luna_solve_i import ILunaSolve
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class IModelGetSolutionUseCase(ABC):
|
|
12
|
+
"""Interface to retrieve solutions for a specific Model."""
|
|
13
|
+
|
|
14
|
+
@abstractmethod
|
|
15
|
+
def __init__(self, client: ILunaSolve) -> None:
|
|
16
|
+
pass
|
|
17
|
+
|
|
18
|
+
@abstractmethod
|
|
19
|
+
def __call__(self, model: Model) -> list[Solution]:
|
|
20
|
+
"""
|
|
21
|
+
Abstract method to retrieve solutions for a specific Model.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
model : Model
|
|
26
|
+
The model to be processed.
|
|
27
|
+
|
|
28
|
+
Returns
|
|
29
|
+
-------
|
|
30
|
+
list[Solution]
|
|
31
|
+
A list of solutions generated after processing the query model.
|
|
32
|
+
|
|
33
|
+
"""
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from luna_quantum.aqm_overwrites import Model
|
|
8
|
+
from luna_quantum.client.interfaces.services.luna_solve_i import ILunaSolve
|
|
9
|
+
from luna_quantum.solve.domain.solve_job import SolveJob
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IModelGetSolveJobUseCase(ABC):
|
|
13
|
+
"""Interface for obtaining and solving Model jobs."""
|
|
14
|
+
|
|
15
|
+
@abstractmethod
|
|
16
|
+
def __init__(self, client: ILunaSolve) -> None:
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
@abstractmethod
|
|
20
|
+
def __call__(self, model: Model) -> list[SolveJob]:
|
|
21
|
+
"""
|
|
22
|
+
Abstract function to retrieve list of SolveJob objects from a given client.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
model : Model
|
|
27
|
+
The model for which SolveJob objects are to be retrieved.
|
|
28
|
+
|
|
29
|
+
Returns
|
|
30
|
+
-------
|
|
31
|
+
List[SolveJob]
|
|
32
|
+
A list of SolveJob objects.
|
|
33
|
+
"""
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from luna_quantum.aqm_overwrites import Model
|
|
8
|
+
from luna_quantum.client.interfaces.services.luna_solve_i import ILunaSolve
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class IModelLoadByIdUseCase(ABC):
|
|
12
|
+
"""Interface for loading an AQ Model by its ID."""
|
|
13
|
+
|
|
14
|
+
@abstractmethod
|
|
15
|
+
def __init__(self, client: ILunaSolve) -> None:
|
|
16
|
+
pass
|
|
17
|
+
|
|
18
|
+
@abstractmethod
|
|
19
|
+
def __call__(self, model_id: str) -> Model:
|
|
20
|
+
"""
|
|
21
|
+
Abstract method that retrieves a model instance by its identifier.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
model_id : str
|
|
26
|
+
A unique identifier of the model to be retrieved.
|
|
27
|
+
|
|
28
|
+
Returns
|
|
29
|
+
-------
|
|
30
|
+
Model
|
|
31
|
+
The model instance corresponding to the given identifier.
|
|
32
|
+
"""
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from luna_quantum.aqm_overwrites import Model
|
|
8
|
+
from luna_quantum.client.interfaces.services.luna_solve_i import ILunaSolve
|
|
9
|
+
from luna_quantum.solve.domain.model_metadata import ModelMetadata
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IModelLoadByMetadataUseCase(ABC):
|
|
13
|
+
"""Interface for loading an AQ model using metadata."""
|
|
14
|
+
|
|
15
|
+
@abstractmethod
|
|
16
|
+
def __init__(self, client: ILunaSolve) -> None:
|
|
17
|
+
pass
|
|
18
|
+
|
|
19
|
+
@abstractmethod
|
|
20
|
+
def __call__(self, model_metadata: ModelMetadata) -> Model:
|
|
21
|
+
"""
|
|
22
|
+
Abstract method for loading the model by the metadata.
|
|
23
|
+
|
|
24
|
+
This method acts as an interface for running a specific AQ Model based on the
|
|
25
|
+
provided metadata and returning the constructed AQ model instance.
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
model_metadata : ModelMetadata
|
|
30
|
+
Metadata required for constructing or running the AQ Model.
|
|
31
|
+
|
|
32
|
+
Returns
|
|
33
|
+
-------
|
|
34
|
+
Model
|
|
35
|
+
The constructed AQ Model instance.
|
|
36
|
+
|
|
37
|
+
"""
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from luna_quantum.client.interfaces.services.luna_solve_i import ILunaSolve
|
|
8
|
+
from luna_quantum.solve.domain.model_metadata import ModelMetadata
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class IModelLoadMetadataByHashUseCase(ABC):
|
|
12
|
+
"""Interface for loading model metadata by hash."""
|
|
13
|
+
|
|
14
|
+
@abstractmethod
|
|
15
|
+
def __init__(self, client: ILunaSolve) -> None:
|
|
16
|
+
pass
|
|
17
|
+
|
|
18
|
+
@abstractmethod
|
|
19
|
+
def __call__(self, model_hash: int) -> ModelMetadata:
|
|
20
|
+
"""
|
|
21
|
+
Abstract base class for callable objects that provide Model metadata.
|
|
22
|
+
|
|
23
|
+
This class defines a contract for objects that, when called, return
|
|
24
|
+
metadata associated with a particular Model specified by a unique
|
|
25
|
+
hash value.
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
model_hash : int
|
|
30
|
+
A hash value uniquely identifying the Model for which metadata
|
|
31
|
+
is requested.
|
|
32
|
+
|
|
33
|
+
Returns
|
|
34
|
+
-------
|
|
35
|
+
ModelMetadata
|
|
36
|
+
Metadata associated with the specified Model.
|
|
37
|
+
|
|
38
|
+
"""
|