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.
Files changed (276) hide show
  1. luna_quantum/__init__.py +139 -0
  2. luna_quantum/__init__.pyi +98 -0
  3. luna_quantum/_core.cp312-win_amd64.pyd +0 -0
  4. luna_quantum/_core.pyi +4286 -0
  5. luna_quantum/_utility.py +148 -0
  6. luna_quantum/_utility.pyi +20 -0
  7. luna_quantum/algorithms/__init__.py +1 -0
  8. luna_quantum/aqm_overwrites/__init__.py +3 -0
  9. luna_quantum/aqm_overwrites/model.py +184 -0
  10. luna_quantum/backends/__init__.py +1 -0
  11. luna_quantum/client/__init__.py +0 -0
  12. luna_quantum/client/controllers/__init__.py +4 -0
  13. luna_quantum/client/controllers/luna_http_client.py +37 -0
  14. luna_quantum/client/controllers/luna_platform_client.py +256 -0
  15. luna_quantum/client/controllers/luna_q.py +67 -0
  16. luna_quantum/client/controllers/luna_solve.py +129 -0
  17. luna_quantum/client/error/__init__.py +0 -0
  18. luna_quantum/client/error/luna_api_key_invalid_error.py +10 -0
  19. luna_quantum/client/error/luna_api_key_missing_error.py +10 -0
  20. luna_quantum/client/error/luna_error.py +2 -0
  21. luna_quantum/client/error/luna_server_error.py +20 -0
  22. luna_quantum/client/error/timeout_error.py +12 -0
  23. luna_quantum/client/error/transformation_error.py +18 -0
  24. luna_quantum/client/error/utils/__init__.py +0 -0
  25. luna_quantum/client/error/utils/http_error_utils.py +112 -0
  26. luna_quantum/client/interfaces/__init__.py +4 -0
  27. luna_quantum/client/interfaces/clients/__init__.py +25 -0
  28. luna_quantum/client/interfaces/clients/circuit_rest_client_i.py +68 -0
  29. luna_quantum/client/interfaces/clients/info_rest_client_i.py +53 -0
  30. luna_quantum/client/interfaces/clients/model_rest_client_i.py +139 -0
  31. luna_quantum/client/interfaces/clients/qpu_token_rest_client_i.py +364 -0
  32. luna_quantum/client/interfaces/clients/rest_client_i.py +21 -0
  33. luna_quantum/client/interfaces/clients/solve_job_rest_client_i.py +201 -0
  34. luna_quantum/client/interfaces/clients/users_rest_client_i.py +29 -0
  35. luna_quantum/client/interfaces/services/__init__.py +0 -0
  36. luna_quantum/client/interfaces/services/luna_q_i.py +34 -0
  37. luna_quantum/client/interfaces/services/luna_solve_i.py +72 -0
  38. luna_quantum/client/interfaces/services/service_i.py +56 -0
  39. luna_quantum/client/rest_client/__init__.py +15 -0
  40. luna_quantum/client/rest_client/circuit_rest_client.py +107 -0
  41. luna_quantum/client/rest_client/info_rest_client.py +74 -0
  42. luna_quantum/client/rest_client/model_rest_client.py +216 -0
  43. luna_quantum/client/rest_client/qpu_token_rest_client.py +508 -0
  44. luna_quantum/client/rest_client/solve_job_rest_client.py +286 -0
  45. luna_quantum/client/rest_client/users_rest_client.py +35 -0
  46. luna_quantum/client/schemas/__init__.py +26 -0
  47. luna_quantum/client/schemas/circuit.py +48 -0
  48. luna_quantum/client/schemas/create/__init__.py +15 -0
  49. luna_quantum/client/schemas/create/circuit.py +30 -0
  50. luna_quantum/client/schemas/create/optimization.py +39 -0
  51. luna_quantum/client/schemas/create/qpu_token.py +22 -0
  52. luna_quantum/client/schemas/create/qpu_token_time_quota.py +35 -0
  53. luna_quantum/client/schemas/create/qpu_token_time_quota_update.py +24 -0
  54. luna_quantum/client/schemas/create/qubo.py +19 -0
  55. luna_quantum/client/schemas/create/solve_job_create.py +43 -0
  56. luna_quantum/client/schemas/enums/__init__.py +0 -0
  57. luna_quantum/client/schemas/enums/call_style.py +13 -0
  58. luna_quantum/client/schemas/enums/circuit.py +42 -0
  59. luna_quantum/client/schemas/enums/model_format.py +11 -0
  60. luna_quantum/client/schemas/enums/problem.py +50 -0
  61. luna_quantum/client/schemas/enums/qpu_token_type.py +20 -0
  62. luna_quantum/client/schemas/enums/sense.py +8 -0
  63. luna_quantum/client/schemas/enums/status.py +40 -0
  64. luna_quantum/client/schemas/enums/timeframe.py +11 -0
  65. luna_quantum/client/schemas/error_message.py +14 -0
  66. luna_quantum/client/schemas/model_metadata.py +35 -0
  67. luna_quantum/client/schemas/qpu_token/__init__.py +0 -0
  68. luna_quantum/client/schemas/qpu_token/qpu_token.py +154 -0
  69. luna_quantum/client/schemas/qpu_token/qpu_token_source.py +19 -0
  70. luna_quantum/client/schemas/qpu_token/qpu_token_time_quota.py +30 -0
  71. luna_quantum/client/schemas/qpu_token/token_provider.py +132 -0
  72. luna_quantum/client/schemas/representation.py +19 -0
  73. luna_quantum/client/schemas/solution.py +106 -0
  74. luna_quantum/client/schemas/solve_job.py +50 -0
  75. luna_quantum/client/schemas/solver_info.py +11 -0
  76. luna_quantum/client/schemas/user.py +11 -0
  77. luna_quantum/client/schemas/wrappers/__init__.py +5 -0
  78. luna_quantum/client/schemas/wrappers/datetime_wrapper.py +32 -0
  79. luna_quantum/client/utils/__init__.py +0 -0
  80. luna_quantum/client/utils/qpu_token_utils.py +147 -0
  81. luna_quantum/config.py +11 -0
  82. luna_quantum/decorators.py +248 -0
  83. luna_quantum/errors.py +34 -0
  84. luna_quantum/errors.pyi +287 -0
  85. luna_quantum/exceptions/__init__.py +0 -0
  86. luna_quantum/exceptions/base_luna_quantum_error.py +2 -0
  87. luna_quantum/exceptions/luna_quantum_call_type_error.py +9 -0
  88. luna_quantum/exceptions/patch_class_field_exists_error.py +10 -0
  89. luna_quantum/factories/__init__.py +4 -0
  90. luna_quantum/factories/luna_solve_client_factory.py +100 -0
  91. luna_quantum/factories/usecase_factory.py +489 -0
  92. luna_quantum/py.typed +0 -0
  93. luna_quantum/solve/__init__.py +13 -0
  94. luna_quantum/solve/default_token.py +304 -0
  95. luna_quantum/solve/domain/__init__.py +0 -0
  96. luna_quantum/solve/domain/abstract/__init__.py +4 -0
  97. luna_quantum/solve/domain/abstract/luna_algorithm.py +205 -0
  98. luna_quantum/solve/domain/abstract/qpu_token_backend.py +34 -0
  99. luna_quantum/solve/domain/model_metadata.py +56 -0
  100. luna_quantum/solve/domain/solve_job.py +230 -0
  101. luna_quantum/solve/errors/__init__.py +0 -0
  102. luna_quantum/solve/errors/incompatible_backend_error.py +15 -0
  103. luna_quantum/solve/errors/model_metadata_missing_error.py +11 -0
  104. luna_quantum/solve/errors/solve_base_error.py +5 -0
  105. luna_quantum/solve/errors/token_missing_error.py +11 -0
  106. luna_quantum/solve/interfaces/__init__.py +0 -0
  107. luna_quantum/solve/interfaces/algorithm_i.py +49 -0
  108. luna_quantum/solve/interfaces/backend_i.py +28 -0
  109. luna_quantum/solve/interfaces/usecases/__init__.py +59 -0
  110. luna_quantum/solve/interfaces/usecases/model_delete_usecase_i.py +27 -0
  111. luna_quantum/solve/interfaces/usecases/model_fetch_metadata_usecase_i.py +33 -0
  112. luna_quantum/solve/interfaces/usecases/model_get_solutions_usecase_i.py +33 -0
  113. luna_quantum/solve/interfaces/usecases/model_get_solve_jobs_usecase_i.py +33 -0
  114. luna_quantum/solve/interfaces/usecases/model_load_by_id_usecase_i.py +32 -0
  115. luna_quantum/solve/interfaces/usecases/model_load_by_metadata_usecase_i.py +37 -0
  116. luna_quantum/solve/interfaces/usecases/model_load_metadata_by_hash_usecase_i.py +38 -0
  117. luna_quantum/solve/interfaces/usecases/model_save_usecase_i.py +36 -0
  118. luna_quantum/solve/interfaces/usecases/solve_job_cancel_usecase_i.py +33 -0
  119. luna_quantum/solve/interfaces/usecases/solve_job_create_usecase_i.py +44 -0
  120. luna_quantum/solve/interfaces/usecases/solve_job_delete_usecase_i.py +32 -0
  121. luna_quantum/solve/interfaces/usecases/solve_job_fetch_updates_usecase_i.py +38 -0
  122. luna_quantum/solve/interfaces/usecases/solve_job_get_by_id_usecase_i.py +27 -0
  123. luna_quantum/solve/interfaces/usecases/solve_job_get_result_usecase_i.py +63 -0
  124. luna_quantum/solve/parameters/__init__.py +0 -0
  125. luna_quantum/solve/parameters/algorithms/__init__.py +51 -0
  126. luna_quantum/solve/parameters/algorithms/base_params/__init__.py +24 -0
  127. luna_quantum/solve/parameters/algorithms/base_params/decomposer.py +57 -0
  128. luna_quantum/solve/parameters/algorithms/base_params/qaoa_circuit_params.py +95 -0
  129. luna_quantum/solve/parameters/algorithms/base_params/quantum_annealing_params.py +79 -0
  130. luna_quantum/solve/parameters/algorithms/base_params/scipy_optimizer.py +122 -0
  131. luna_quantum/solve/parameters/algorithms/base_params/simulated_annealing_params.py +106 -0
  132. luna_quantum/solve/parameters/algorithms/base_params/tabu_kerberos_params.py +39 -0
  133. luna_quantum/solve/parameters/algorithms/base_params/tabu_search_params.py +129 -0
  134. luna_quantum/solve/parameters/algorithms/flexible_parameter_algorithm.py +59 -0
  135. luna_quantum/solve/parameters/algorithms/genetic_algorithms/__init__.py +4 -0
  136. luna_quantum/solve/parameters/algorithms/genetic_algorithms/qaga.py +131 -0
  137. luna_quantum/solve/parameters/algorithms/genetic_algorithms/saga.py +139 -0
  138. luna_quantum/solve/parameters/algorithms/lq_fda/__init__.py +3 -0
  139. luna_quantum/solve/parameters/algorithms/lq_fda/fujits_da_base.py +85 -0
  140. luna_quantum/solve/parameters/algorithms/lq_fda/fujitsu_da_v3c.py +155 -0
  141. luna_quantum/solve/parameters/algorithms/optimization_solvers/__init__.py +3 -0
  142. luna_quantum/solve/parameters/algorithms/optimization_solvers/scip.py +51 -0
  143. luna_quantum/solve/parameters/algorithms/quantum_annealing/__init__.py +19 -0
  144. luna_quantum/solve/parameters/algorithms/quantum_annealing/kerberos.py +149 -0
  145. luna_quantum/solve/parameters/algorithms/quantum_annealing/leap_hybrid_bqm.py +75 -0
  146. luna_quantum/solve/parameters/algorithms/quantum_annealing/leap_hybrid_cqm.py +75 -0
  147. luna_quantum/solve/parameters/algorithms/quantum_annealing/parallel_tempering_qpu.py +139 -0
  148. luna_quantum/solve/parameters/algorithms/quantum_annealing/population_annealing_qpu.py +109 -0
  149. luna_quantum/solve/parameters/algorithms/quantum_annealing/qbsolv_like_qpu.py +111 -0
  150. luna_quantum/solve/parameters/algorithms/quantum_annealing/quantum_annealing.py +121 -0
  151. luna_quantum/solve/parameters/algorithms/quantum_annealing/repeated_reverse_quantum_annealing.py +174 -0
  152. luna_quantum/solve/parameters/algorithms/quantum_gate/__init__.py +6 -0
  153. luna_quantum/solve/parameters/algorithms/quantum_gate/flex_qaoa/__init__.py +10 -0
  154. luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/__init__.py +29 -0
  155. luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/config.py +58 -0
  156. luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/flexqaoa.py +188 -0
  157. luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/optimizers.py +53 -0
  158. luna_quantum/solve/parameters/algorithms/quantum_gate/flexqaoa/pipeline.py +164 -0
  159. luna_quantum/solve/parameters/algorithms/quantum_gate/qaoa.py +112 -0
  160. luna_quantum/solve/parameters/algorithms/quantum_gate/qaoa_fo.py +69 -0
  161. luna_quantum/solve/parameters/algorithms/quantum_gate/vqe.py +108 -0
  162. luna_quantum/solve/parameters/algorithms/search_algorithms/__init__.py +5 -0
  163. luna_quantum/solve/parameters/algorithms/search_algorithms/dialectic_search.py +136 -0
  164. luna_quantum/solve/parameters/algorithms/search_algorithms/qbsolv_like_tabu_search.py +117 -0
  165. luna_quantum/solve/parameters/algorithms/search_algorithms/tabu_search.py +126 -0
  166. luna_quantum/solve/parameters/algorithms/simulated_annealing/__init__.py +13 -0
  167. luna_quantum/solve/parameters/algorithms/simulated_annealing/parallel_tempering.py +131 -0
  168. luna_quantum/solve/parameters/algorithms/simulated_annealing/population_annealing.py +95 -0
  169. luna_quantum/solve/parameters/algorithms/simulated_annealing/qbsolv_like_simulated_annealing.py +141 -0
  170. luna_quantum/solve/parameters/algorithms/simulated_annealing/repeated_reverse_simulated_annealing.py +172 -0
  171. luna_quantum/solve/parameters/algorithms/simulated_annealing/simulated_annealing.py +126 -0
  172. luna_quantum/solve/parameters/backends/__init__.py +27 -0
  173. luna_quantum/solve/parameters/backends/aqarios.py +17 -0
  174. luna_quantum/solve/parameters/backends/aqarios_gpu.py +17 -0
  175. luna_quantum/solve/parameters/backends/aws/__init__.py +11 -0
  176. luna_quantum/solve/parameters/backends/aws/aws.py +36 -0
  177. luna_quantum/solve/parameters/backends/aws/aws_backend_base.py +74 -0
  178. luna_quantum/solve/parameters/backends/aws/ionq.py +43 -0
  179. luna_quantum/solve/parameters/backends/aws/iqm.py +31 -0
  180. luna_quantum/solve/parameters/backends/aws/rigetti.py +31 -0
  181. luna_quantum/solve/parameters/backends/cudaq/__init__.py +5 -0
  182. luna_quantum/solve/parameters/backends/cudaq/cudaq_base.py +16 -0
  183. luna_quantum/solve/parameters/backends/cudaq/cudaq_cpu.py +30 -0
  184. luna_quantum/solve/parameters/backends/cudaq/cudaq_gpu.py +32 -0
  185. luna_quantum/solve/parameters/backends/dwave.py +17 -0
  186. luna_quantum/solve/parameters/backends/dwave_qpu.py +166 -0
  187. luna_quantum/solve/parameters/backends/fda.py +17 -0
  188. luna_quantum/solve/parameters/backends/ibm.py +138 -0
  189. luna_quantum/solve/parameters/backends/qctrl.py +103 -0
  190. luna_quantum/solve/parameters/backends/zib.py +17 -0
  191. luna_quantum/solve/parameters/constants.py +11 -0
  192. luna_quantum/solve/parameters/errors.py +30 -0
  193. luna_quantum/solve/parameters/mixins/__init__.py +0 -0
  194. luna_quantum/solve/parameters/mixins/fujitsu_common_params_mixin.py +239 -0
  195. luna_quantum/solve/parameters/mixins/fujitsu_v2_mixin.py +70 -0
  196. luna_quantum/solve/parameters/mixins/qbsolv_like_mixin.py +60 -0
  197. luna_quantum/solve/use_cases/__init__.py +119 -0
  198. luna_quantum/solve/use_cases/arbitrage_edge_based.py +50 -0
  199. luna_quantum/solve/use_cases/arbitrage_node_based.py +55 -0
  200. luna_quantum/solve/use_cases/base.py +7 -0
  201. luna_quantum/solve/use_cases/binary_integer_linear_programming.py +54 -0
  202. luna_quantum/solve/use_cases/binary_paint_shop_problem.py +37 -0
  203. luna_quantum/solve/use_cases/credit_scoring_feature_selection.py +40 -0
  204. luna_quantum/solve/use_cases/dynamic_portfolio_optimization.py +64 -0
  205. luna_quantum/solve/use_cases/exact_cover.py +51 -0
  206. luna_quantum/solve/use_cases/flight_gate_assignment.py +79 -0
  207. luna_quantum/solve/use_cases/graph_coloring.py +42 -0
  208. luna_quantum/solve/use_cases/graph_isomorphism.py +52 -0
  209. luna_quantum/solve/use_cases/graph_partitioning.py +46 -0
  210. luna_quantum/solve/use_cases/hamiltonian_cycle.py +49 -0
  211. luna_quantum/solve/use_cases/induced_subgraph_isomorphism.py +50 -0
  212. luna_quantum/solve/use_cases/job_shop_scheduling.py +44 -0
  213. luna_quantum/solve/use_cases/k_medoids_clustering.py +49 -0
  214. luna_quantum/solve/use_cases/knapsack_integer_weights.py +56 -0
  215. luna_quantum/solve/use_cases/linear_regression.py +60 -0
  216. luna_quantum/solve/use_cases/lmwcs.py +84 -0
  217. luna_quantum/solve/use_cases/longest_path.py +50 -0
  218. luna_quantum/solve/use_cases/market_graph_clustering.py +61 -0
  219. luna_quantum/solve/use_cases/max2sat.py +54 -0
  220. luna_quantum/solve/use_cases/max3sat.py +55 -0
  221. luna_quantum/solve/use_cases/max_clique.py +60 -0
  222. luna_quantum/solve/use_cases/max_cut.py +48 -0
  223. luna_quantum/solve/use_cases/max_independent_set.py +37 -0
  224. luna_quantum/solve/use_cases/minimal_maximal_matching.py +54 -0
  225. luna_quantum/solve/use_cases/minimal_spanning_tree.py +90 -0
  226. luna_quantum/solve/use_cases/minimum_vertex_cover.py +45 -0
  227. luna_quantum/solve/use_cases/number_partitioning.py +32 -0
  228. luna_quantum/solve/use_cases/portfolio_optimization.py +46 -0
  229. luna_quantum/solve/use_cases/portfolio_optimization_ib_tv.py +63 -0
  230. luna_quantum/solve/use_cases/quadratic_assignment.py +49 -0
  231. luna_quantum/solve/use_cases/quadratic_knapsack.py +48 -0
  232. luna_quantum/solve/use_cases/satellite_scheduling.py +73 -0
  233. luna_quantum/solve/use_cases/sensor_placement.py +58 -0
  234. luna_quantum/solve/use_cases/set_cover.py +56 -0
  235. luna_quantum/solve/use_cases/set_packing.py +54 -0
  236. luna_quantum/solve/use_cases/set_partitioning.py +52 -0
  237. luna_quantum/solve/use_cases/subgraph_isomorphism.py +55 -0
  238. luna_quantum/solve/use_cases/subset_sum.py +37 -0
  239. luna_quantum/solve/use_cases/support_vector_machine.py +64 -0
  240. luna_quantum/solve/use_cases/traffic_flow.py +35 -0
  241. luna_quantum/solve/use_cases/travelling_salesman_problem.py +53 -0
  242. luna_quantum/solve/use_cases/type_aliases.py +9 -0
  243. luna_quantum/solve/use_cases/weighted_max_cut.py +37 -0
  244. luna_quantum/solve/usecases/__init__.py +45 -0
  245. luna_quantum/solve/usecases/model_delete_usecase.py +49 -0
  246. luna_quantum/solve/usecases/model_fetch_metadata_usecase.py +50 -0
  247. luna_quantum/solve/usecases/model_get_solution_usecase.py +59 -0
  248. luna_quantum/solve/usecases/model_get_solve_jobs_usecase.py +62 -0
  249. luna_quantum/solve/usecases/model_load_by_id_usecase.py +47 -0
  250. luna_quantum/solve/usecases/model_load_by_metadata_usecase.py +52 -0
  251. luna_quantum/solve/usecases/model_load_metadata_by_hash_usecase.py +51 -0
  252. luna_quantum/solve/usecases/model_save_usecase.py +63 -0
  253. luna_quantum/solve/usecases/solve_job_cancel_usecase.py +51 -0
  254. luna_quantum/solve/usecases/solve_job_create_usecase.py +112 -0
  255. luna_quantum/solve/usecases/solve_job_delete_usecase.py +38 -0
  256. luna_quantum/solve/usecases/solve_job_fetch_updates_usecase.py +49 -0
  257. luna_quantum/solve/usecases/solve_job_get_by_id_usecase.py +44 -0
  258. luna_quantum/solve/usecases/solve_job_get_result_usecase.py +105 -0
  259. luna_quantum/transformations.py +18 -0
  260. luna_quantum/transformations.pyi +371 -0
  261. luna_quantum/translator.py +23 -0
  262. luna_quantum/translator.pyi +869 -0
  263. luna_quantum/util/__init__.py +0 -0
  264. luna_quantum/util/active_waiting.py +79 -0
  265. luna_quantum/util/class_patcher.py +164 -0
  266. luna_quantum/util/debug_info.py +52 -0
  267. luna_quantum/util/log_utils.py +187 -0
  268. luna_quantum/util/pretty_base.py +67 -0
  269. luna_quantum/util/pydantic_utils.py +38 -0
  270. luna_quantum/utils.py +3 -0
  271. luna_quantum/utils.pyi +67 -0
  272. luna_quantum-1.1.0.dist-info/METADATA +36 -0
  273. luna_quantum-1.1.0.dist-info/RECORD +276 -0
  274. luna_quantum-1.1.0.dist-info/WHEEL +4 -0
  275. luna_quantum-1.1.0.dist-info/licenses/LICENSE +176 -0
  276. luna_quantum-1.1.0.dist-info/licenses/NOTICE +13 -0
@@ -0,0 +1,27 @@
1
+ from .aqarios import Aqarios
2
+ from .aqarios_gpu import AqariosGpu
3
+ from .aws import AWS, IQM, IonQ, Rigetti
4
+ from .cudaq import CudaqCpu, CudaqGpu
5
+ from .dwave import DWave
6
+ from .dwave_qpu import DWaveQpu
7
+ from .fda import Fujitsu
8
+ from .ibm import IBM
9
+ from .qctrl import Qctrl
10
+ from .zib import ZIB
11
+
12
+ __all__: list[str] = [
13
+ "AWS",
14
+ "IBM",
15
+ "IQM",
16
+ "ZIB",
17
+ "Aqarios",
18
+ "AqariosGpu",
19
+ "CudaqCpu",
20
+ "CudaqGpu",
21
+ "DWave",
22
+ "DWaveQpu",
23
+ "Fujitsu",
24
+ "IonQ",
25
+ "Qctrl",
26
+ "Rigetti",
27
+ ]
@@ -0,0 +1,17 @@
1
+ from luna_quantum.solve.interfaces.backend_i import IBackend
2
+
3
+
4
+ class Aqarios(IBackend):
5
+ """Configuration class for the Aqarios backend."""
6
+
7
+ @property
8
+ def provider(self) -> str:
9
+ """
10
+ Retrieve the name of the provider.
11
+
12
+ Returns
13
+ -------
14
+ str
15
+ The name of the provider.
16
+ """
17
+ return "aqarios"
@@ -0,0 +1,17 @@
1
+ from luna_quantum.solve.interfaces.backend_i import IBackend
2
+
3
+
4
+ class AqariosGpu(IBackend):
5
+ """Configuration class for the Aqarios GPU backend."""
6
+
7
+ @property
8
+ def provider(self) -> str:
9
+ """
10
+ Retrieve the name of the provider.
11
+
12
+ Returns
13
+ -------
14
+ str
15
+ The name of the provider.
16
+ """
17
+ return "aqarios-gpu"
@@ -0,0 +1,11 @@
1
+ from .aws import AWS
2
+ from .ionq import IonQ
3
+ from .iqm import IQM
4
+ from .rigetti import Rigetti
5
+
6
+ __all__ = [
7
+ "AWS",
8
+ "IQM",
9
+ "IonQ",
10
+ "Rigetti",
11
+ ]
@@ -0,0 +1,36 @@
1
+ from typing import Literal
2
+
3
+ from pydantic import computed_field
4
+
5
+ from .aws_backend_base import AWSBackendBase
6
+
7
+
8
+ class AWS(AWSBackendBase):
9
+ """
10
+ Configuration parameters for AWS simulator backends.
11
+
12
+ Attributes
13
+ ----------
14
+ device: Literal["SV1", "DM1", "TN1"], default="SV1"
15
+ The specific AWS simulator to use for computations. Options are:
16
+
17
+ - "SV1": State vector simulator for smaller quantum circuits
18
+ - "DM1": Density matrix simulator for noisy quantum circuits
19
+ - "TN1": Tensor network simulator for larger quantum circuits
20
+
21
+ See the [AWS Braket
22
+ docs](https://docs.aws.amazon.com/braket/latest/developerguide/choose-a-simulator.html)
23
+ aws_access_key: str | QpuToken | None
24
+ The AWS access key
25
+ aws_secret_access_key: str | QpuToken | None
26
+ The AWS secret access key
27
+ aws_session_token: str | QpuToken | None
28
+ The AWS session token
29
+ """
30
+
31
+ @computed_field
32
+ def device_provider(self) -> str:
33
+ """Return the device provider identifier."""
34
+ return "Amazon"
35
+
36
+ device: Literal["SV1", "DM1", "TN1"] = "SV1"
@@ -0,0 +1,74 @@
1
+ from pydantic import Field
2
+
3
+ from luna_quantum.client.schemas.qpu_token.qpu_token import (
4
+ QpuToken,
5
+ QpuTokenSource,
6
+ TokenProvider,
7
+ )
8
+ from luna_quantum.solve.domain.abstract.qpu_token_backend import QpuTokenBackend
9
+
10
+
11
+ class AWSBackendBase(QpuTokenBackend):
12
+ """AWS Backend Mixin.
13
+
14
+ Attributes
15
+ ----------
16
+ aws_access_key: str | QpuToken | None
17
+ The AWS access key
18
+ aws_secret_access_key: str | QpuToken | None
19
+ The AWS secret access key
20
+ aws_session_token: str | QpuToken | None
21
+ The AWS session token
22
+ """
23
+
24
+ aws_access_key: str | QpuToken | None = Field(
25
+ repr=False, exclude=True, default=None
26
+ )
27
+ aws_secret_access_key: str | QpuToken | None = Field(
28
+ repr=False, exclude=True, default=None
29
+ )
30
+ aws_session_token: str | QpuToken | None = Field(
31
+ repr=False, exclude=True, default=None
32
+ )
33
+
34
+ @property
35
+ def provider(self) -> str:
36
+ """
37
+ Retrieve the name of the provider.
38
+
39
+ Returns
40
+ -------
41
+ str
42
+ The name of the provider.
43
+ """
44
+ return "aws"
45
+
46
+ def _get_token(self) -> TokenProvider | None:
47
+ if self.aws_access_key is None and self.aws_secret_access_key is None:
48
+ return None
49
+
50
+ token_provider = TokenProvider()
51
+ if isinstance(self.aws_access_key, QpuToken):
52
+ token_provider.aws_access_key = self.aws_access_key
53
+ elif isinstance(self.aws_access_key, str):
54
+ token_provider.aws_access_key = QpuToken(
55
+ source=QpuTokenSource.INLINE,
56
+ token=self.aws_access_key,
57
+ )
58
+
59
+ if isinstance(self.aws_secret_access_key, QpuToken):
60
+ token_provider.aws_secret_access_key = self.aws_secret_access_key
61
+ elif isinstance(self.aws_secret_access_key, str):
62
+ token_provider.aws_secret_access_key = QpuToken(
63
+ source=QpuTokenSource.INLINE,
64
+ token=self.aws_secret_access_key,
65
+ )
66
+
67
+ if isinstance(self.aws_session_token, QpuToken):
68
+ token_provider.aws_session_token = self.aws_session_token
69
+ elif isinstance(self.aws_session_token, str):
70
+ token_provider.aws_session_token = QpuToken(
71
+ source=QpuTokenSource.INLINE,
72
+ token=self.aws_session_token,
73
+ )
74
+ return token_provider
@@ -0,0 +1,43 @@
1
+ from typing import Literal
2
+
3
+ from pydantic import computed_field
4
+
5
+ from .aws_backend_base import AWSBackendBase
6
+
7
+
8
+ class IonQ(AWSBackendBase):
9
+ """
10
+ Configuration parameters for IonQ quantum backends, accessed via AWS.
11
+
12
+ Attributes
13
+ ----------
14
+ device: Literal["Aria1", "Aria2", "Forte1", "ForteEnterprise1"], \
15
+ default="Aria1"
16
+ The specific IonQ quantum device to use for computations. Options are:
17
+
18
+ - "Aria1": IonQ's flagship trapped-ion quantum computer
19
+ - "Aria2": Next-generation IonQ system with improved connectivity
20
+ - "Forte1": IonQ's enterprise-grade quantum system
21
+ - "ForteEnterprise1": Enhanced enterprise version with dedicated access
22
+
23
+ Different devices have varying characteristics such as qubit count,
24
+ connectivity, and error rates.
25
+ aws_access_key: str | QpuToken | None
26
+ The AWS access key
27
+ aws_secret_access_key: str | QpuToken | None
28
+ The AWS secret access key
29
+ aws_session_token: str | QpuToken | None
30
+ The AWS session token
31
+ """
32
+
33
+ device: Literal[
34
+ "Aria1",
35
+ "Aria2",
36
+ "Forte1",
37
+ "ForteEnterprise1",
38
+ ] = "Aria1"
39
+
40
+ @computed_field
41
+ def device_provider(self) -> str:
42
+ """Return the device provider identifier."""
43
+ return "IonQ"
@@ -0,0 +1,31 @@
1
+ from typing import Literal
2
+
3
+ from pydantic import computed_field
4
+
5
+ from .aws_backend_base import AWSBackendBase
6
+
7
+
8
+ class IQM(AWSBackendBase):
9
+ """
10
+ Configuration parameters for IQM quantum backends, accessed via AWS.
11
+
12
+ Attributes
13
+ ----------
14
+ device: Literal["Garnet"], default="Garnet"
15
+ The specific IQM quantum device to use for computations. Currently only
16
+ "Garnet" is available - IQM's superconducting quantum processor with
17
+ native two-qubit gates and optimized for near-term algorithms.
18
+ aws_access_key: str | QpuToken | None
19
+ The AWS access key
20
+ aws_secret_access_key: str | QpuToken | None
21
+ The AWS secret access key
22
+ aws_session_token: str | QpuToken | None
23
+ The AWS session token
24
+ """
25
+
26
+ device: Literal["Garnet"] = "Garnet"
27
+
28
+ @computed_field
29
+ def device_provider(self) -> str:
30
+ """Return the device provider identifier."""
31
+ return "IQM"
@@ -0,0 +1,31 @@
1
+ from typing import Literal
2
+
3
+ from pydantic import computed_field
4
+
5
+ from .aws_backend_base import AWSBackendBase
6
+
7
+
8
+ class Rigetti(AWSBackendBase):
9
+ """
10
+ Configuration parameters for Rigetti quantum backends, accessed via AWS.
11
+
12
+ Attributes
13
+ ----------
14
+ device: Literal["Ankaa3"], default="Ankaa3"
15
+ The specific Rigetti quantum device to use for computations. Currently only
16
+ "Ankaa-3" is available - Rigetti's latest superconducting quantum processor
17
+ featuring improved coherence times and gate fidelities.
18
+ aws_access_key: str | QpuToken | None
19
+ The AWS access key
20
+ aws_secret_access_key: str | QpuToken | None
21
+ The AWS secret access key
22
+ aws_session_token: str | QpuToken | None
23
+ The AWS session token
24
+ """
25
+
26
+ device: Literal["Ankaa3"] = "Ankaa3"
27
+
28
+ @computed_field
29
+ def device_provider(self) -> str:
30
+ """Return the device provider identifier."""
31
+ return "Rigetti"
@@ -0,0 +1,5 @@
1
+ from .cudaq_base import BaseCudaqBackend
2
+ from .cudaq_cpu import CudaqCpu
3
+ from .cudaq_gpu import CudaqGpu
4
+
5
+ __all__ = ["BaseCudaqBackend", "CudaqCpu", "CudaqGpu"]
@@ -0,0 +1,16 @@
1
+ from typing import Any
2
+
3
+ from pydantic import SerializationInfo, SerializerFunctionWrapHandler, model_serializer
4
+
5
+ from luna_quantum.solve.interfaces.backend_i import IBackend
6
+
7
+
8
+ class BaseCudaqBackend(IBackend):
9
+ """CudaQBackend."""
10
+
11
+ @model_serializer(mode="wrap")
12
+ def _serialize(
13
+ self, serializer: SerializerFunctionWrapHandler, _: SerializationInfo
14
+ ) -> dict[str, dict[str, Any]]:
15
+ data = serializer(self)
16
+ return {"backend": data}
@@ -0,0 +1,30 @@
1
+ from typing import Literal
2
+
3
+ from .cudaq_base import BaseCudaqBackend
4
+
5
+
6
+ class CudaqCpu(BaseCudaqBackend):
7
+ """CUDA-Q CPU Simulator.
8
+
9
+ Use a NVIDIA CUDA-Q CPU simulator for circuit execution on Aqarios servers.
10
+
11
+ You have the choice between the statevector simulator `"qpp-cpu"` and the density
12
+ matrix based simulator `"density-matrix-cpu"`.
13
+
14
+ For more information on the simulators pelase refer to the
15
+ [CUDA-Q documentation.](https://nvidia.github.io/cuda-quantum/latest/using/backends/simulators.html)
16
+ """
17
+
18
+ @property
19
+ def provider(self) -> str:
20
+ """
21
+ Retrieve the name of the provider.
22
+
23
+ Returns
24
+ -------
25
+ str
26
+ The name of the provider.
27
+ """
28
+ return "cudaq"
29
+
30
+ target: Literal["qpp-cpu", "density-matrix-cpu"] = "qpp-cpu"
@@ -0,0 +1,32 @@
1
+ from typing import Literal
2
+
3
+ from luna_quantum.solve.parameters.backends.cudaq.cudaq_base import BaseCudaqBackend
4
+
5
+
6
+ class CudaqGpu(BaseCudaqBackend):
7
+ """CUDA-Q GPU Simulator.
8
+
9
+ Use a NVIDIA CUDA-Q GPU simulator for circuit execution on Aqarios servers.
10
+
11
+ You have the choice between the statevector simulator `"nvidia"`, and two tensor
12
+ network based simulators `"tensornet"` and `"tensornet-mps"`.
13
+ The floating point precision can be increased by setting `option` to `"fp64"`.
14
+
15
+ For more information on the simulators pelase refer to the
16
+ [CUDA-Q documentation.](https://nvidia.github.io/cuda-quantum/latest/using/backends/simulators.html)
17
+ """
18
+
19
+ @property
20
+ def provider(self) -> str:
21
+ """
22
+ Retrieve the name of the provider.
23
+
24
+ Returns
25
+ -------
26
+ str
27
+ The name of the provider.
28
+ """
29
+ return "cudaq-gpu"
30
+
31
+ target: Literal["nvidia", "tensornet", "tensornet-mps"] = "nvidia"
32
+ option: Literal["fp64", "fp32"] = "fp32"
@@ -0,0 +1,17 @@
1
+ from luna_quantum.solve.interfaces.backend_i import IBackend
2
+
3
+
4
+ class DWave(IBackend):
5
+ """Configuration class for the DWave backend."""
6
+
7
+ @property
8
+ def provider(self) -> str:
9
+ """
10
+ Retrieve the name of the provider.
11
+
12
+ Returns
13
+ -------
14
+ str
15
+ The name of the provider.
16
+ """
17
+ return "dwave"
@@ -0,0 +1,166 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Annotated
4
+
5
+ from pydantic import BaseModel, Field, StringConstraints
6
+
7
+ from luna_quantum.client.schemas import QpuToken, QpuTokenSource, TokenProvider
8
+ from luna_quantum.solve.domain.abstract.qpu_token_backend import QpuTokenBackend
9
+ from luna_quantum.solve.parameters.backends.dwave import DWave
10
+
11
+
12
+ class DWaveQpu(DWave, QpuTokenBackend):
13
+ """
14
+ Configuration for D-Wave quantum processing backends.
15
+
16
+ This class provides settings for problem decomposition and embedding when using
17
+ D-Wave quantum processors. It can be configured to use either manual embedding
18
+ parameters or automatic embedding based on problem characteristics.
19
+
20
+ Attributes
21
+ ----------
22
+ embedding_parameters: Embedding | AutoEmbedding | None
23
+ Detailed configuration for manual embedding when not using auto-embedding.
24
+ If None and decomposer is also None, default embedding parameters will be used.
25
+ Ignored if decomposer is set to AutoEmbedding. Default is None.
26
+ qpu_backend: str
27
+ Specific D-Wave quantum processing unit (QPU) for your optimization
28
+ """
29
+
30
+ class Embedding(BaseModel):
31
+ """
32
+ Configuration parameters for embedding problems onto D-Wave QPUs.
33
+
34
+ Embedding maps logical variables from a problem to physical qubits on the QPU,
35
+ with chains of qubits representing individual variables.
36
+
37
+ Attributes
38
+ ----------
39
+ max_no_improvement: int, default=10
40
+ Maximum number of consecutive failed iterations to improve the current
41
+ solution before giving up. Each iteration attempts to find an embedding for
42
+ each variable such that it is adjacent to all its neighbors.
43
+
44
+ random_seed: Optional[int], default=None
45
+ Seed for the random number generator. If None, seed is set by
46
+ `os.urandom()`.
47
+
48
+ timeout: int, default=1000
49
+ Maximum time in seconds before the algorithm gives up.
50
+
51
+ max_beta: Optional[float], default=None
52
+ Controls qubit weight assignment using formula (beta^n) where n is the
53
+ number of chains containing that qubit. Must be greater than 1 if specified.
54
+ If None, `max_beta` is effectively infinite.
55
+
56
+ tries: int, default=10
57
+ Number of restart attempts before the algorithm stops. On D-Wave 2000Q, a
58
+ typical restart takes between 1 and 60 seconds.
59
+
60
+ inner_rounds: Optional[int], default=None
61
+ Maximum iterations between restart attempts. Restart attempts are typically
62
+ terminated due to `max_no_improvement`. If None, effectively infinite.
63
+
64
+ chainlength_patience: int, default=10
65
+ Maximum number of consecutive failed iterations to improve chain lengths
66
+ before moving on. Each iteration attempts to find more efficient embeddings.
67
+
68
+ max_fill: Optional[int], default=None
69
+ Restricts the number of chains that can simultaneously use the same qubit
70
+ during search. Values above 63 are treated as 63. If None, effectively
71
+ infinite.
72
+
73
+ threads: int, default=1
74
+ Maximum number of threads to use. Parallelization is only advantageous when
75
+ the expected variable degree significantly exceeds the thread count. Min: 1.
76
+
77
+ return_overlap: bool, default=False
78
+ Controls return value format:
79
+
80
+ - True: Returns (embedding, validity_flag) tuple
81
+ - False: Returns only the embedding
82
+
83
+ This function returns an embedding regardless of whether qubits are used by
84
+ multiple variables.
85
+
86
+ skip_initialization: bool, default=False
87
+ If True, skips the initialization pass. Only works with semi-valid
88
+ embeddings provided through `initial_chains` and `fixed_chains`.
89
+ A semi-valid embedding has chains where every adjacent variable pair (u,v)
90
+ has a coupler (p,q) in the hardware with p in chain(u) and q in chain(v).
91
+
92
+ initial_chains: Any, default=()
93
+ Initial chains inserted before `fixed_chains` and before initialization.
94
+ Can be used to restart algorithm from a previous state. Missing or empty
95
+ entries are ignored. Each value is a list of qubit labels.
96
+
97
+ fixed_chains: Any, default=()
98
+ Fixed chains that cannot change during the algorithm. Qubits in these chains
99
+ are not used by other chains. Missing or empty entries are ignored.
100
+ Each value is a list of qubit labels.
101
+
102
+ restrict_chains: Any, default=()
103
+ Restricts each chain[i] to be a subset of `restrict_chains[i]` throughout
104
+ the algorithm. Missing or empty entries are ignored. Each value is a list
105
+ of qubit labels.
106
+
107
+ suspend_chains: Any, default=()
108
+ A metafeature only implemented in the Python interface. For each suspended
109
+ variable i, `suspend_chains[i]` is an iterable of iterables (blobs).
110
+ For each blob in a suspension, at least one qubit from that blob must be
111
+ in the chain for variable i.
112
+ """
113
+
114
+ max_no_improvement: int = 10
115
+ random_seed: int | None = None
116
+ timeout: int = 1_000
117
+ max_beta: float | None = None
118
+ tries: int = 10
119
+ inner_rounds: int | None = None
120
+ chainlength_patience: int = 10
121
+ max_fill: int | None = None
122
+ threads: int = Field(default=1, ge=1)
123
+ return_overlap: bool = False
124
+ skip_initialization: bool = False
125
+ initial_chains: dict = Field(default_factory=dict) # type: ignore[type-arg]
126
+ fixed_chains: dict = Field(default_factory=dict) # type: ignore[type-arg]
127
+ restrict_chains: dict = Field(default_factory=dict) # type: ignore[type-arg]
128
+ suspend_chains: dict = Field(default_factory=dict) # type: ignore[type-arg]
129
+
130
+ class AutoEmbedding(BaseModel):
131
+ """
132
+ Configuration for automatic embedding of problems onto D-Wave hardware.
133
+
134
+ This class provides a simpler interface to configure the embedding process
135
+ when the details of the underlying hardware are not known or when optimal
136
+ embedding parameters should be determined automatically.
137
+
138
+ Attributes
139
+ ----------
140
+ embedding_parameters: EmbeddingParameters, default=EmbeddingParameters()
141
+ Detailed configuration parameters for the embedding algorithm.
142
+ See EmbeddingParameters documentation for details on specific settings.
143
+ """
144
+
145
+ embedding_parameters: DWaveQpu.Embedding = Field(
146
+ default_factory=lambda: DWaveQpu.Embedding()
147
+ )
148
+
149
+ embedding_parameters: Embedding | AutoEmbedding | None = None
150
+ qpu_backend: Annotated[
151
+ str, StringConstraints(strip_whitespace=True, min_length=1)
152
+ ] = "default"
153
+
154
+ token: str | QpuToken | None = Field(repr=False, exclude=True, default=None)
155
+
156
+ def _get_token(self) -> TokenProvider | None:
157
+ if self.token is None:
158
+ return None
159
+ if isinstance(self.token, QpuToken):
160
+ return TokenProvider(dwave=self.token)
161
+ return TokenProvider(
162
+ dwave=QpuToken(
163
+ source=QpuTokenSource.INLINE,
164
+ token=self.token,
165
+ )
166
+ )
@@ -0,0 +1,17 @@
1
+ from luna_quantum.solve.interfaces.backend_i import IBackend
2
+
3
+
4
+ class Fujitsu(IBackend):
5
+ """Configuration class for the Fujitsu backend."""
6
+
7
+ @property
8
+ def provider(self) -> str:
9
+ """
10
+ Retrieve the name of the provider.
11
+
12
+ Returns
13
+ -------
14
+ str
15
+ The name of the provider.
16
+ """
17
+ return "fda"