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,67 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from luna_quantum.client.controllers.luna_platform_client import (
|
|
6
|
+
LunaPlatformClient,
|
|
7
|
+
LunaPrefixEnum,
|
|
8
|
+
)
|
|
9
|
+
from luna_quantum.client.interfaces.services.luna_q_i import ILunaQ
|
|
10
|
+
from luna_quantum.client.rest_client import CircuitRestClient, QpuTokenRestClient
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from luna_quantum.client.interfaces.clients import ICircuitRestClient
|
|
14
|
+
from luna_quantum.client.interfaces.clients.qpu_token_rest_client_i import (
|
|
15
|
+
IQpuTokenRestClient,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class LunaQ(LunaPlatformClient, ILunaQ):
|
|
20
|
+
"""Implementation of LunaQ service."""
|
|
21
|
+
|
|
22
|
+
qpu_token: IQpuTokenRestClient = None # type: ignore[assignment]
|
|
23
|
+
circuit: ICircuitRestClient = None # type: ignore[assignment]
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self, api_key: str | None = None, timeout: float | None = 240.0
|
|
27
|
+
) -> None:
|
|
28
|
+
"""
|
|
29
|
+
LunaQ is the main entrypoint for all LunaQ related tasks.
|
|
30
|
+
|
|
31
|
+
Parameters
|
|
32
|
+
----------
|
|
33
|
+
api_key: str
|
|
34
|
+
User's API key
|
|
35
|
+
timeout: float
|
|
36
|
+
Default timeout in seconds for the requests via the LunaQ client. `None`
|
|
37
|
+
means that the SDK uses no timeouts. Note that either way the Luna platform
|
|
38
|
+
itself will time out after 240 seconds.
|
|
39
|
+
Default: 240.0
|
|
40
|
+
"""
|
|
41
|
+
super().__init__(api_key=api_key, timeout=timeout)
|
|
42
|
+
|
|
43
|
+
self.circuit = CircuitRestClient(self)
|
|
44
|
+
self.qpu_token = QpuTokenRestClient(self)
|
|
45
|
+
|
|
46
|
+
@classmethod
|
|
47
|
+
def get_api(cls) -> LunaPrefixEnum:
|
|
48
|
+
"""Return the api of the client."""
|
|
49
|
+
return LunaPrefixEnum.LUNA_Q
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def authenticate(cls, api_key: str) -> None:
|
|
53
|
+
"""
|
|
54
|
+
Authenticate the client with the given API key.
|
|
55
|
+
|
|
56
|
+
Parameters
|
|
57
|
+
----------
|
|
58
|
+
api_key : str
|
|
59
|
+
The API key used to authenticate the client.
|
|
60
|
+
|
|
61
|
+
Returns
|
|
62
|
+
-------
|
|
63
|
+
None
|
|
64
|
+
This method does not return any value.
|
|
65
|
+
"""
|
|
66
|
+
cls(api_key=api_key)
|
|
67
|
+
cls._api_key = api_key
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from luna_quantum.client.controllers.luna_platform_client import (
|
|
6
|
+
LunaPlatformClient,
|
|
7
|
+
LunaPrefixEnum,
|
|
8
|
+
)
|
|
9
|
+
from luna_quantum.client.interfaces.services.luna_solve_i import ILunaSolve
|
|
10
|
+
from luna_quantum.client.rest_client.info_rest_client import InfoRestClient
|
|
11
|
+
from luna_quantum.client.rest_client.model_rest_client import (
|
|
12
|
+
ModelRestClient,
|
|
13
|
+
)
|
|
14
|
+
from luna_quantum.client.rest_client.qpu_token_rest_client import QpuTokenRestClient
|
|
15
|
+
from luna_quantum.client.rest_client.solve_job_rest_client import SolveJobRestClient
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from luna_quantum.client.interfaces.clients import ISolveJobRestClient
|
|
19
|
+
from luna_quantum.client.interfaces.clients.info_rest_client_i import (
|
|
20
|
+
IInfoRestClient,
|
|
21
|
+
)
|
|
22
|
+
from luna_quantum.client.interfaces.clients.model_rest_client_i import (
|
|
23
|
+
IModelRestClient,
|
|
24
|
+
)
|
|
25
|
+
from luna_quantum.client.interfaces.clients.qpu_token_rest_client_i import (
|
|
26
|
+
IQpuTokenRestClient,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class LunaSolve(LunaPlatformClient, ILunaSolve):
|
|
31
|
+
"""Implementation of LunaSolve service."""
|
|
32
|
+
|
|
33
|
+
_model: IModelRestClient
|
|
34
|
+
_solve_job: ISolveJobRestClient
|
|
35
|
+
_qpu_token: IQpuTokenRestClient
|
|
36
|
+
_info: IInfoRestClient
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self, api_key: str | None = None, timeout: float | None = 240.0
|
|
40
|
+
) -> None:
|
|
41
|
+
"""
|
|
42
|
+
LunaSolve is the main entrypoint for all LunaSolve related tasks.
|
|
43
|
+
|
|
44
|
+
Parameters
|
|
45
|
+
----------
|
|
46
|
+
api_key: str
|
|
47
|
+
User's API key
|
|
48
|
+
timeout: float
|
|
49
|
+
Default timeout in seconds for the requests via the LunaQ client. `None`
|
|
50
|
+
means that the SDK uses no timeouts. Note that either way the Luna platform
|
|
51
|
+
itself will time out after 240 seconds.
|
|
52
|
+
Default: 240.0
|
|
53
|
+
"""
|
|
54
|
+
super().__init__(
|
|
55
|
+
api_key=api_key,
|
|
56
|
+
timeout=timeout,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
self._model = ModelRestClient(self)
|
|
60
|
+
self._solve_job = SolveJobRestClient(self)
|
|
61
|
+
self._qpu_token = QpuTokenRestClient(self)
|
|
62
|
+
self._info = InfoRestClient(self)
|
|
63
|
+
|
|
64
|
+
@classmethod
|
|
65
|
+
def get_api(cls) -> LunaPrefixEnum:
|
|
66
|
+
"""Return the api of the client."""
|
|
67
|
+
return LunaPrefixEnum.LUNA_SOLVE
|
|
68
|
+
|
|
69
|
+
@classmethod
|
|
70
|
+
def authenticate(cls, api_key: str) -> None:
|
|
71
|
+
"""
|
|
72
|
+
Authenticate the client with the given API key.
|
|
73
|
+
|
|
74
|
+
Parameters
|
|
75
|
+
----------
|
|
76
|
+
api_key : str
|
|
77
|
+
The API key used to authenticate the client.
|
|
78
|
+
|
|
79
|
+
Returns
|
|
80
|
+
-------
|
|
81
|
+
None
|
|
82
|
+
This method does not return any value.
|
|
83
|
+
"""
|
|
84
|
+
cls(api_key=api_key)
|
|
85
|
+
cls._api_key = api_key
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def model(self) -> IModelRestClient:
|
|
89
|
+
"""
|
|
90
|
+
Returns a model rest client.
|
|
91
|
+
|
|
92
|
+
Returns
|
|
93
|
+
-------
|
|
94
|
+
IModelRestClient
|
|
95
|
+
"""
|
|
96
|
+
return self._model
|
|
97
|
+
|
|
98
|
+
@property
|
|
99
|
+
def solve_job(self) -> ISolveJobRestClient:
|
|
100
|
+
"""
|
|
101
|
+
Returns a solve job rest client.
|
|
102
|
+
|
|
103
|
+
Returns
|
|
104
|
+
-------
|
|
105
|
+
ISolveJobRestClient
|
|
106
|
+
"""
|
|
107
|
+
return self._solve_job
|
|
108
|
+
|
|
109
|
+
@property
|
|
110
|
+
def qpu_token(self) -> IQpuTokenRestClient:
|
|
111
|
+
"""
|
|
112
|
+
Returns a qpu token rest client.
|
|
113
|
+
|
|
114
|
+
Returns
|
|
115
|
+
-------
|
|
116
|
+
IQpuTokenRestClient
|
|
117
|
+
"""
|
|
118
|
+
return self._qpu_token
|
|
119
|
+
|
|
120
|
+
@property
|
|
121
|
+
def info(self) -> IInfoRestClient:
|
|
122
|
+
"""
|
|
123
|
+
Returns an info rest client.
|
|
124
|
+
|
|
125
|
+
Returns
|
|
126
|
+
-------
|
|
127
|
+
IInfoRestClient
|
|
128
|
+
"""
|
|
129
|
+
return self._info
|
|
File without changes
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from luna_quantum.client.error.luna_error import LunaError
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class LunaApiKeyInvalidError(LunaError):
|
|
5
|
+
"""Raised when the Luna API key is invalid."""
|
|
6
|
+
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
super().__init__(
|
|
9
|
+
"Luna API key is invalid. Please provide a valid Luna API key."
|
|
10
|
+
)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from luna_quantum.client.error.luna_error import LunaError
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class LunaApiKeyMissingError(LunaError):
|
|
5
|
+
"""Raised when the Luna API key is missing."""
|
|
6
|
+
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
super().__init__(
|
|
9
|
+
"Luna API key is missing. Please set the LUNA_API_KEY environment variable."
|
|
10
|
+
)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from luna_quantum.client.error.luna_error import LunaError
|
|
2
|
+
from luna_quantum.client.schemas.error_message import ErrorMessage
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class LunaServerError(LunaError):
|
|
6
|
+
"""Luna HTTP server error."""
|
|
7
|
+
|
|
8
|
+
http_status_code: int
|
|
9
|
+
error_message: ErrorMessage
|
|
10
|
+
|
|
11
|
+
def __init__(self, http_status_code: int, error_message: ErrorMessage) -> None:
|
|
12
|
+
self.http_status_code = http_status_code
|
|
13
|
+
self.error_message = error_message
|
|
14
|
+
super().__init__(error_message.message)
|
|
15
|
+
|
|
16
|
+
def __str__(self) -> str: # noqa: D105
|
|
17
|
+
return (
|
|
18
|
+
f"The Luna-Server reported the error '{self.error_message.internal_code}' "
|
|
19
|
+
f"with the message:\n {self.error_message.message}"
|
|
20
|
+
)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from luna_quantum.client.error.luna_error import LunaError
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class LunaTimeoutError(LunaError):
|
|
5
|
+
"""Luna timeout error."""
|
|
6
|
+
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
super().__init__(
|
|
9
|
+
"Luna Timeout. The request took too long to complete."
|
|
10
|
+
" Please increase timeout value or try again later."
|
|
11
|
+
" If the problem persists, please contact our support team."
|
|
12
|
+
)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from luna_quantum.client.error.luna_error import LunaError
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class TransformationError(LunaError):
|
|
5
|
+
"""Luna transformation error."""
|
|
6
|
+
|
|
7
|
+
def __str__(self) -> str: # noqa: D105
|
|
8
|
+
return (
|
|
9
|
+
"An unexpected error occurred during transformation,"
|
|
10
|
+
" please contact support or open an issue."
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class WeightedConstraintError(LunaError):
|
|
15
|
+
"""Error if weighted constraints provided in CQM."""
|
|
16
|
+
|
|
17
|
+
def __str__(self) -> str: # noqa: D105
|
|
18
|
+
return "Weighted constraints for CQM are not supported"
|
|
File without changes
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from http import HTTPStatus
|
|
4
|
+
|
|
5
|
+
import httpx
|
|
6
|
+
from httpx import RequestError, Response
|
|
7
|
+
|
|
8
|
+
from luna_quantum.client.error.luna_server_error import LunaServerError
|
|
9
|
+
from luna_quantum.client.schemas.error_message import ErrorMessage
|
|
10
|
+
from luna_quantum.util.log_utils import Logging
|
|
11
|
+
|
|
12
|
+
logger = Logging.get_logger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class HttpErrorUtils:
|
|
16
|
+
"""Class for handling Luna HTTP errors."""
|
|
17
|
+
|
|
18
|
+
@staticmethod
|
|
19
|
+
def __sdk_custom_request_errors(
|
|
20
|
+
response: Response,
|
|
21
|
+
) -> LunaServerError | None:
|
|
22
|
+
"""
|
|
23
|
+
Check if the response needs a custom error message from the SDK.
|
|
24
|
+
|
|
25
|
+
This is the place to add other custom error messages.
|
|
26
|
+
It's helpful then the default http error messages are not enough for the user.
|
|
27
|
+
|
|
28
|
+
Parameters
|
|
29
|
+
----------
|
|
30
|
+
response:
|
|
31
|
+
Response object from the request
|
|
32
|
+
|
|
33
|
+
Returns
|
|
34
|
+
-------
|
|
35
|
+
Optional[LunaServerError]
|
|
36
|
+
If the response needs a custom error message, return the exception.
|
|
37
|
+
Otherwise, return None.
|
|
38
|
+
"""
|
|
39
|
+
exception: LunaServerError | None = None
|
|
40
|
+
|
|
41
|
+
def create_error_message(internal_code: str, message: str) -> LunaServerError:
|
|
42
|
+
return LunaServerError(
|
|
43
|
+
response.status_code,
|
|
44
|
+
ErrorMessage(
|
|
45
|
+
internal_code=f"SDK-{internal_code}",
|
|
46
|
+
message=message,
|
|
47
|
+
),
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
if response.status_code == HTTPStatus.BAD_GATEWAY:
|
|
51
|
+
# Catch error when upload was too long
|
|
52
|
+
exception = create_error_message(
|
|
53
|
+
"LUNA_GATEWAY_TIMEOUT",
|
|
54
|
+
"The Luna server did not respond within time,"
|
|
55
|
+
" leading to a timeout. Try reducing the size of the model.",
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
elif response.status_code == HTTPStatus.FORBIDDEN:
|
|
59
|
+
exception = create_error_message(
|
|
60
|
+
"FORBIDDEN",
|
|
61
|
+
response.text,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
return exception
|
|
65
|
+
|
|
66
|
+
@staticmethod
|
|
67
|
+
def check_for_error(response: Response) -> None:
|
|
68
|
+
"""
|
|
69
|
+
Check if an error occurred and rais the error if so.
|
|
70
|
+
|
|
71
|
+
Parameters
|
|
72
|
+
----------
|
|
73
|
+
response: Response
|
|
74
|
+
Response object from the request
|
|
75
|
+
|
|
76
|
+
Raises
|
|
77
|
+
------
|
|
78
|
+
LunaServerException
|
|
79
|
+
If an error occurred with the request.
|
|
80
|
+
The error message is in the exception.
|
|
81
|
+
RequestError
|
|
82
|
+
If an error occurred with the request outside the http status codes
|
|
83
|
+
4xx and 5xx.
|
|
84
|
+
"""
|
|
85
|
+
try:
|
|
86
|
+
response.read()
|
|
87
|
+
response.raise_for_status()
|
|
88
|
+
except httpx.HTTPStatusError:
|
|
89
|
+
exception: LunaServerError | None
|
|
90
|
+
|
|
91
|
+
try:
|
|
92
|
+
error_msg: ErrorMessage = ErrorMessage.model_validate_json(
|
|
93
|
+
response.text
|
|
94
|
+
)
|
|
95
|
+
# Convert the error message to the correct exception
|
|
96
|
+
exception = LunaServerError(response.status_code, error_msg)
|
|
97
|
+
|
|
98
|
+
except ValueError:
|
|
99
|
+
# The server can generate errors that are in a different format, and we
|
|
100
|
+
# have less to no control how they look like.
|
|
101
|
+
# In this case, we will try to create a custom error messages.
|
|
102
|
+
exception = HttpErrorUtils.__sdk_custom_request_errors(response)
|
|
103
|
+
|
|
104
|
+
if exception:
|
|
105
|
+
logger.exception(exception, exc_info=False)
|
|
106
|
+
raise exception from None
|
|
107
|
+
logger.error(exception, exc_info=True)
|
|
108
|
+
raise
|
|
109
|
+
|
|
110
|
+
except RequestError as e:
|
|
111
|
+
logger.error(e, exc_info=True)
|
|
112
|
+
raise
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from luna_quantum.client.interfaces.clients.circuit_rest_client_i import (
|
|
2
|
+
ICircuitRestClient,
|
|
3
|
+
)
|
|
4
|
+
from luna_quantum.client.interfaces.clients.info_rest_client_i import IInfoRestClient
|
|
5
|
+
from luna_quantum.client.interfaces.clients.model_rest_client_i import (
|
|
6
|
+
IModelRestClient,
|
|
7
|
+
)
|
|
8
|
+
from luna_quantum.client.interfaces.clients.qpu_token_rest_client_i import (
|
|
9
|
+
IQpuTokenRestClient,
|
|
10
|
+
)
|
|
11
|
+
from luna_quantum.client.interfaces.clients.rest_client_i import IRestClient
|
|
12
|
+
from luna_quantum.client.interfaces.clients.solve_job_rest_client_i import (
|
|
13
|
+
ISolveJobRestClient,
|
|
14
|
+
)
|
|
15
|
+
from luna_quantum.client.interfaces.clients.users_rest_client_i import IUsersRestClient
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
"ICircuitRestClient",
|
|
19
|
+
"IInfoRestClient",
|
|
20
|
+
"IModelRestClient",
|
|
21
|
+
"IQpuTokenRestClient",
|
|
22
|
+
"IRestClient",
|
|
23
|
+
"ISolveJobRestClient",
|
|
24
|
+
"IUsersRestClient",
|
|
25
|
+
]
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
from luna_quantum.client.interfaces.clients.rest_client_i import IRestClient
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from luna_quantum.client.schemas.circuit import CircuitJob, CircuitResult
|
|
10
|
+
from luna_quantum.client.schemas.enums.circuit import CircuitProviderEnum
|
|
11
|
+
from luna_quantum.client.schemas.qpu_token.qpu_token import TokenProvider
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ICircuitRestClient(IRestClient, ABC):
|
|
15
|
+
"""Interface for circuit rest client."""
|
|
16
|
+
|
|
17
|
+
@abstractmethod
|
|
18
|
+
def create(
|
|
19
|
+
self,
|
|
20
|
+
circuit: str,
|
|
21
|
+
provider: CircuitProviderEnum,
|
|
22
|
+
params: dict[str, Any] | None = None,
|
|
23
|
+
qpu_tokens: TokenProvider | None = None,
|
|
24
|
+
**kwargs: Any,
|
|
25
|
+
) -> CircuitJob:
|
|
26
|
+
"""
|
|
27
|
+
Create a circuit solution.
|
|
28
|
+
|
|
29
|
+
Parameters
|
|
30
|
+
----------
|
|
31
|
+
circuit: str
|
|
32
|
+
The circuit which to create a solution for.
|
|
33
|
+
provider: CircuitProviderEnum
|
|
34
|
+
Which provider to use to solve the circuit.
|
|
35
|
+
params: Dict[str, Any]
|
|
36
|
+
Additional parameters of the circuit.
|
|
37
|
+
qpu_tokens: Optional[TokenProvider]
|
|
38
|
+
The tokens to be used for the QPU.
|
|
39
|
+
**kwargs
|
|
40
|
+
Parameters to pass to `httpx.request`.
|
|
41
|
+
|
|
42
|
+
Returns
|
|
43
|
+
-------
|
|
44
|
+
CircuitJob
|
|
45
|
+
The created circuit job.
|
|
46
|
+
"""
|
|
47
|
+
raise NotImplementedError
|
|
48
|
+
|
|
49
|
+
@abstractmethod
|
|
50
|
+
def get(
|
|
51
|
+
self,
|
|
52
|
+
job: CircuitJob,
|
|
53
|
+
**kwargs: Any,
|
|
54
|
+
) -> CircuitResult:
|
|
55
|
+
"""
|
|
56
|
+
Get the result of a circuit.
|
|
57
|
+
|
|
58
|
+
Parameters
|
|
59
|
+
----------
|
|
60
|
+
**kwargs
|
|
61
|
+
Parameters to pass to `httpx.request`.
|
|
62
|
+
|
|
63
|
+
Returns
|
|
64
|
+
-------
|
|
65
|
+
CircuitResult
|
|
66
|
+
The result of solving the circuit.
|
|
67
|
+
"""
|
|
68
|
+
raise NotImplementedError
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
from luna_quantum.client.interfaces.clients.rest_client_i import IRestClient
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from luna_quantum.client.schemas.solver_info import SolverInfo
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class IInfoRestClient(IRestClient, ABC):
|
|
13
|
+
"""Interface of the info rest client."""
|
|
14
|
+
|
|
15
|
+
@abstractmethod
|
|
16
|
+
def solvers_available(
|
|
17
|
+
self, solver_name: str | None = None, **kwargs: dict[str, Any]
|
|
18
|
+
) -> dict[str, dict[str, SolverInfo]]:
|
|
19
|
+
"""
|
|
20
|
+
Get list of available solvers.
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
solver_name: Optional[str]
|
|
25
|
+
Name of the solver that should be retrieved. If not specified, all solvers
|
|
26
|
+
will be returned.
|
|
27
|
+
**kwargs
|
|
28
|
+
Parameters to pass to `httpx.request`.
|
|
29
|
+
|
|
30
|
+
Returns
|
|
31
|
+
-------
|
|
32
|
+
Dict[str, Dict[str, SolverInfo]]
|
|
33
|
+
Dictionary containing the provider name as the key, and a dictionary of
|
|
34
|
+
the solver name and solver-specific information as the value.
|
|
35
|
+
"""
|
|
36
|
+
raise NotImplementedError
|
|
37
|
+
|
|
38
|
+
@abstractmethod
|
|
39
|
+
def providers_available(self, **kwargs: dict[str, Any]) -> list[str]:
|
|
40
|
+
"""
|
|
41
|
+
Get list of available providers.
|
|
42
|
+
|
|
43
|
+
Parameters
|
|
44
|
+
----------
|
|
45
|
+
**kwargs
|
|
46
|
+
Parameters to pass to `httpx.request`.
|
|
47
|
+
|
|
48
|
+
Returns
|
|
49
|
+
-------
|
|
50
|
+
List[str]
|
|
51
|
+
List of available QPU providers.
|
|
52
|
+
"""
|
|
53
|
+
raise NotImplementedError
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
from luna_quantum.client.interfaces.clients.rest_client_i import IRestClient
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from luna_quantum.aqm_overwrites.model import Model
|
|
10
|
+
from luna_quantum.client.schemas.enums.timeframe import TimeframeEnum
|
|
11
|
+
from luna_quantum.client.schemas.model_metadata import ModelMetadataSchema
|
|
12
|
+
from luna_quantum.solve.use_cases import UseCase
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class IModelRestClient(IRestClient, ABC):
|
|
16
|
+
"""Interface for model rest client."""
|
|
17
|
+
|
|
18
|
+
@abstractmethod
|
|
19
|
+
def get(self, model_id: str, **kwargs: dict[str, Any]) -> ModelMetadataSchema:
|
|
20
|
+
"""
|
|
21
|
+
Retrieve the model metadata by its id.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
model_id: str
|
|
26
|
+
Id of the model to be retrieved.
|
|
27
|
+
**kwargs
|
|
28
|
+
Parameters to pass to `httpx.request`.
|
|
29
|
+
|
|
30
|
+
Returns
|
|
31
|
+
-------
|
|
32
|
+
ModelMetadataSchema:
|
|
33
|
+
Metadata of the model.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
@abstractmethod
|
|
37
|
+
def get_model(self, model_id: str, **kwargs: dict[str, Any]) -> Model:
|
|
38
|
+
"""
|
|
39
|
+
Retrieve a model by the id.
|
|
40
|
+
|
|
41
|
+
Parameters
|
|
42
|
+
----------
|
|
43
|
+
model_id: str
|
|
44
|
+
Id of the model to be retrieved.
|
|
45
|
+
**kwargs
|
|
46
|
+
Parameters to pass to `httpx.request`.
|
|
47
|
+
|
|
48
|
+
Returns
|
|
49
|
+
-------
|
|
50
|
+
Model:
|
|
51
|
+
The model.
|
|
52
|
+
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
@abstractmethod
|
|
56
|
+
def get_metadata_by_hash(self, model_hash: int) -> ModelMetadataSchema:
|
|
57
|
+
"""
|
|
58
|
+
Retrieve metadata for a model using its hash.
|
|
59
|
+
|
|
60
|
+
This method fetches metadata associated with a given model hash.
|
|
61
|
+
|
|
62
|
+
Parameters
|
|
63
|
+
----------
|
|
64
|
+
model_hash : int
|
|
65
|
+
The hash identifier of the model.
|
|
66
|
+
|
|
67
|
+
Returns
|
|
68
|
+
-------
|
|
69
|
+
ModelMetadataSchema
|
|
70
|
+
Metadata information of the model.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
@abstractmethod
|
|
74
|
+
def get_all(
|
|
75
|
+
self,
|
|
76
|
+
timeframe: TimeframeEnum | None = None,
|
|
77
|
+
limit: int = 50,
|
|
78
|
+
offset: int = 0,
|
|
79
|
+
**kwargs: dict[str, Any],
|
|
80
|
+
) -> list[ModelMetadataSchema]:
|
|
81
|
+
"""
|
|
82
|
+
Retrieve a list of model metadata.
|
|
83
|
+
|
|
84
|
+
Parameters
|
|
85
|
+
----------
|
|
86
|
+
timeframe: Optional[TimeframeEnum]
|
|
87
|
+
Only return optimizations created within a specified timeframe.
|
|
88
|
+
Default None.
|
|
89
|
+
limit:
|
|
90
|
+
Limit the number of optimizations to be returned. Default value 50.
|
|
91
|
+
offset:
|
|
92
|
+
Offset the list of optimizations by this amount. Default value 0.
|
|
93
|
+
**kwargs
|
|
94
|
+
Parameters to pass to `httpx.request`.
|
|
95
|
+
|
|
96
|
+
Returns
|
|
97
|
+
-------
|
|
98
|
+
List[ModelMetadataSchema]:
|
|
99
|
+
List of model metadata.
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
@abstractmethod
|
|
103
|
+
def create(self, model: Model) -> ModelMetadataSchema:
|
|
104
|
+
"""
|
|
105
|
+
Create a model based on the provided Model instance.
|
|
106
|
+
|
|
107
|
+
This function saves the model and returns metadata about it.
|
|
108
|
+
|
|
109
|
+
Parameters
|
|
110
|
+
----------
|
|
111
|
+
model : Model
|
|
112
|
+
Instance of the Model which should be saved.
|
|
113
|
+
|
|
114
|
+
Returns
|
|
115
|
+
-------
|
|
116
|
+
ModelMetadataSchema
|
|
117
|
+
Metadata of the created model containing information about its
|
|
118
|
+
configuration and properties.
|
|
119
|
+
|
|
120
|
+
"""
|
|
121
|
+
|
|
122
|
+
@abstractmethod
|
|
123
|
+
def create_from_use_case(
|
|
124
|
+
self, name: str, use_case: UseCase, **kwargs: Any
|
|
125
|
+
) -> ModelMetadataSchema:
|
|
126
|
+
"""Create a model from a use case."""
|
|
127
|
+
|
|
128
|
+
@abstractmethod
|
|
129
|
+
def delete(self, model_id: str, **kwargs: dict[str, Any]) -> None:
|
|
130
|
+
"""
|
|
131
|
+
Delete a model and the model metadata by its id.
|
|
132
|
+
|
|
133
|
+
Parameters
|
|
134
|
+
----------
|
|
135
|
+
model_id: str
|
|
136
|
+
Id of the model to be deleted.
|
|
137
|
+
**kwargs
|
|
138
|
+
Parameters to pass to `httpx.request`.
|
|
139
|
+
"""
|