luna-quantum 1.0.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.

Potentially problematic release.


This version of luna-quantum might be problematic. Click here for more details.

Files changed (252) hide show
  1. luna_quantum/__init__.py +96 -0
  2. luna_quantum/__init__.pyi +68 -0
  3. luna_quantum/_core.cp312-win_amd64.pyd +0 -0
  4. luna_quantum/_core.pyi +3017 -0
  5. luna_quantum/aqm_overwrites/__init__.py +3 -0
  6. luna_quantum/aqm_overwrites/model.py +184 -0
  7. luna_quantum/client/__init__.py +0 -0
  8. luna_quantum/client/controllers/__init__.py +4 -0
  9. luna_quantum/client/controllers/luna_http_client.py +37 -0
  10. luna_quantum/client/controllers/luna_platform_client.py +153 -0
  11. luna_quantum/client/controllers/luna_q.py +62 -0
  12. luna_quantum/client/controllers/luna_solve.py +125 -0
  13. luna_quantum/client/error/__init__.py +0 -0
  14. luna_quantum/client/error/luna_api_key_invalid_error.py +10 -0
  15. luna_quantum/client/error/luna_api_key_missing_error.py +10 -0
  16. luna_quantum/client/error/luna_error.py +2 -0
  17. luna_quantum/client/error/luna_server_error.py +20 -0
  18. luna_quantum/client/error/timeout_error.py +12 -0
  19. luna_quantum/client/error/transformation_error.py +18 -0
  20. luna_quantum/client/error/utils/__init__.py +0 -0
  21. luna_quantum/client/error/utils/http_error_utils.py +112 -0
  22. luna_quantum/client/interfaces/__init__.py +4 -0
  23. luna_quantum/client/interfaces/clients/__init__.py +25 -0
  24. luna_quantum/client/interfaces/clients/circuit_rest_client_i.py +68 -0
  25. luna_quantum/client/interfaces/clients/info_rest_client_i.py +53 -0
  26. luna_quantum/client/interfaces/clients/model_rest_client_i.py +139 -0
  27. luna_quantum/client/interfaces/clients/qpu_token_rest_client_i.py +364 -0
  28. luna_quantum/client/interfaces/clients/rest_client_i.py +21 -0
  29. luna_quantum/client/interfaces/clients/solve_job_rest_client_i.py +201 -0
  30. luna_quantum/client/interfaces/clients/users_rest_client_i.py +29 -0
  31. luna_quantum/client/interfaces/services/__init__.py +0 -0
  32. luna_quantum/client/interfaces/services/luna_q_i.py +34 -0
  33. luna_quantum/client/interfaces/services/luna_solve_i.py +72 -0
  34. luna_quantum/client/interfaces/services/service_i.py +36 -0
  35. luna_quantum/client/rest_client/__init__.py +15 -0
  36. luna_quantum/client/rest_client/circuit_rest_client.py +107 -0
  37. luna_quantum/client/rest_client/info_rest_client.py +76 -0
  38. luna_quantum/client/rest_client/model_rest_client.py +216 -0
  39. luna_quantum/client/rest_client/qpu_token_rest_client.py +504 -0
  40. luna_quantum/client/rest_client/solve_job_rest_client.py +286 -0
  41. luna_quantum/client/rest_client/users_rest_client.py +35 -0
  42. luna_quantum/client/schemas/__init__.py +26 -0
  43. luna_quantum/client/schemas/circuit.py +49 -0
  44. luna_quantum/client/schemas/create/__init__.py +6 -0
  45. luna_quantum/client/schemas/create/circuit.py +31 -0
  46. luna_quantum/client/schemas/create/optimization.py +39 -0
  47. luna_quantum/client/schemas/create/qpu_token.py +25 -0
  48. luna_quantum/client/schemas/create/qpu_token_time_quota.py +29 -0
  49. luna_quantum/client/schemas/create/qubo.py +19 -0
  50. luna_quantum/client/schemas/create/solve_job_create.py +43 -0
  51. luna_quantum/client/schemas/enums/__init__.py +0 -0
  52. luna_quantum/client/schemas/enums/call_style.py +13 -0
  53. luna_quantum/client/schemas/enums/circuit.py +42 -0
  54. luna_quantum/client/schemas/enums/model_format.py +11 -0
  55. luna_quantum/client/schemas/enums/problem.py +50 -0
  56. luna_quantum/client/schemas/enums/qpu_token_type.py +20 -0
  57. luna_quantum/client/schemas/enums/sense.py +8 -0
  58. luna_quantum/client/schemas/enums/status.py +40 -0
  59. luna_quantum/client/schemas/enums/timeframe.py +11 -0
  60. luna_quantum/client/schemas/error_message.py +14 -0
  61. luna_quantum/client/schemas/model_metadata.py +35 -0
  62. luna_quantum/client/schemas/qpu_token/__init__.py +0 -0
  63. luna_quantum/client/schemas/qpu_token/qpu_token.py +161 -0
  64. luna_quantum/client/schemas/qpu_token/qpu_token_source.py +19 -0
  65. luna_quantum/client/schemas/qpu_token/qpu_token_time_quota.py +28 -0
  66. luna_quantum/client/schemas/qpu_token/token_provider.py +135 -0
  67. luna_quantum/client/schemas/representation.py +19 -0
  68. luna_quantum/client/schemas/solution.py +106 -0
  69. luna_quantum/client/schemas/solve_job.py +47 -0
  70. luna_quantum/client/schemas/solver_info.py +11 -0
  71. luna_quantum/client/schemas/user.py +11 -0
  72. luna_quantum/client/schemas/wrappers/__init__.py +5 -0
  73. luna_quantum/client/schemas/wrappers/datetime_wrapper.py +32 -0
  74. luna_quantum/client/utils/__init__.py +0 -0
  75. luna_quantum/client/utils/qpu_token_utils.py +147 -0
  76. luna_quantum/errors.py +1 -0
  77. luna_quantum/errors.pyi +202 -0
  78. luna_quantum/exceptions/__init__.py +0 -0
  79. luna_quantum/exceptions/base_luna_quantum_error.py +2 -0
  80. luna_quantum/exceptions/patch_class_field_exists_error.py +10 -0
  81. luna_quantum/factories/__init__.py +4 -0
  82. luna_quantum/factories/luna_solve_client_factory.py +75 -0
  83. luna_quantum/factories/usecase_factory.py +457 -0
  84. luna_quantum/py.typed +0 -0
  85. luna_quantum/solve/__init__.py +13 -0
  86. luna_quantum/solve/default_token.py +304 -0
  87. luna_quantum/solve/domain/__init__.py +0 -0
  88. luna_quantum/solve/domain/abstract/__init__.py +4 -0
  89. luna_quantum/solve/domain/abstract/luna_algorithm.py +203 -0
  90. luna_quantum/solve/domain/abstract/qpu_token_backend.py +34 -0
  91. luna_quantum/solve/domain/model_metadata.py +54 -0
  92. luna_quantum/solve/domain/solve_job.py +187 -0
  93. luna_quantum/solve/errors/__init__.py +0 -0
  94. luna_quantum/solve/errors/incompatible_backend_error.py +15 -0
  95. luna_quantum/solve/errors/model_metadata_missing_error.py +11 -0
  96. luna_quantum/solve/errors/solve_base_error.py +5 -0
  97. luna_quantum/solve/errors/token_missing_error.py +11 -0
  98. luna_quantum/solve/interfaces/__init__.py +0 -0
  99. luna_quantum/solve/interfaces/algorithm_i.py +47 -0
  100. luna_quantum/solve/interfaces/backend_i.py +28 -0
  101. luna_quantum/solve/interfaces/usecases/__init__.py +55 -0
  102. luna_quantum/solve/interfaces/usecases/model_delete_usecase_i.py +27 -0
  103. luna_quantum/solve/interfaces/usecases/model_fetch_metadata_usecase_i.py +33 -0
  104. luna_quantum/solve/interfaces/usecases/model_get_solutions_usecase_i.py +33 -0
  105. luna_quantum/solve/interfaces/usecases/model_get_solve_jobs_usecase_i.py +33 -0
  106. luna_quantum/solve/interfaces/usecases/model_load_by_id_usecase_i.py +32 -0
  107. luna_quantum/solve/interfaces/usecases/model_load_by_metadata_usecase_i.py +37 -0
  108. luna_quantum/solve/interfaces/usecases/model_load_metadata_by_hash_usecase_i.py +38 -0
  109. luna_quantum/solve/interfaces/usecases/model_save_usecase_i.py +36 -0
  110. luna_quantum/solve/interfaces/usecases/solve_job_cancel_usecase_i.py +33 -0
  111. luna_quantum/solve/interfaces/usecases/solve_job_create_usecase_i.py +44 -0
  112. luna_quantum/solve/interfaces/usecases/solve_job_delete_usecase_i.py +32 -0
  113. luna_quantum/solve/interfaces/usecases/solve_job_fetch_updates_usecase_i.py +38 -0
  114. luna_quantum/solve/interfaces/usecases/solve_job_get_result_usecase_i.py +63 -0
  115. luna_quantum/solve/parameters/__init__.py +0 -0
  116. luna_quantum/solve/parameters/algorithms/__init__.py +49 -0
  117. luna_quantum/solve/parameters/algorithms/base_params/__init__.py +24 -0
  118. luna_quantum/solve/parameters/algorithms/base_params/decomposer.py +57 -0
  119. luna_quantum/solve/parameters/algorithms/base_params/qaoa_circuit_params.py +95 -0
  120. luna_quantum/solve/parameters/algorithms/base_params/quantum_annealing_params.py +78 -0
  121. luna_quantum/solve/parameters/algorithms/base_params/scipy_optimizer.py +120 -0
  122. luna_quantum/solve/parameters/algorithms/base_params/simulated_annealing_params.py +106 -0
  123. luna_quantum/solve/parameters/algorithms/base_params/tabu_kerberos_params.py +39 -0
  124. luna_quantum/solve/parameters/algorithms/base_params/tabu_search_params.py +129 -0
  125. luna_quantum/solve/parameters/algorithms/flexible_parameter_algorithm.py +59 -0
  126. luna_quantum/solve/parameters/algorithms/genetic_algorithms/__init__.py +4 -0
  127. luna_quantum/solve/parameters/algorithms/genetic_algorithms/qaga.py +131 -0
  128. luna_quantum/solve/parameters/algorithms/genetic_algorithms/saga.py +139 -0
  129. luna_quantum/solve/parameters/algorithms/optimization_solvers/__init__.py +3 -0
  130. luna_quantum/solve/parameters/algorithms/optimization_solvers/scip.py +51 -0
  131. luna_quantum/solve/parameters/algorithms/quantum_annealing/__init__.py +19 -0
  132. luna_quantum/solve/parameters/algorithms/quantum_annealing/kerberos.py +149 -0
  133. luna_quantum/solve/parameters/algorithms/quantum_annealing/leap_hybrid_bqm.py +75 -0
  134. luna_quantum/solve/parameters/algorithms/quantum_annealing/leap_hybrid_cqm.py +75 -0
  135. luna_quantum/solve/parameters/algorithms/quantum_annealing/parallel_tempering_qpu.py +139 -0
  136. luna_quantum/solve/parameters/algorithms/quantum_annealing/population_annealing_qpu.py +109 -0
  137. luna_quantum/solve/parameters/algorithms/quantum_annealing/qbsolv_like_qpu.py +111 -0
  138. luna_quantum/solve/parameters/algorithms/quantum_annealing/quantum_annealing.py +105 -0
  139. luna_quantum/solve/parameters/algorithms/quantum_annealing/repeated_reverse_quantum_annealing.py +174 -0
  140. luna_quantum/solve/parameters/algorithms/quantum_gate/__init__.py +6 -0
  141. luna_quantum/solve/parameters/algorithms/quantum_gate/flex_qaoa/__init__.py +26 -0
  142. luna_quantum/solve/parameters/algorithms/quantum_gate/flex_qaoa/config.py +80 -0
  143. luna_quantum/solve/parameters/algorithms/quantum_gate/flex_qaoa/flex_qaoa.py +226 -0
  144. luna_quantum/solve/parameters/algorithms/quantum_gate/flex_qaoa/optimizers.py +97 -0
  145. luna_quantum/solve/parameters/algorithms/quantum_gate/flex_qaoa/pipeline.py +87 -0
  146. luna_quantum/solve/parameters/algorithms/quantum_gate/qaoa.py +104 -0
  147. luna_quantum/solve/parameters/algorithms/quantum_gate/qaoa_fo.py +69 -0
  148. luna_quantum/solve/parameters/algorithms/quantum_gate/vqe.py +109 -0
  149. luna_quantum/solve/parameters/algorithms/search_algorithms/__init__.py +5 -0
  150. luna_quantum/solve/parameters/algorithms/search_algorithms/dialectic_search.py +152 -0
  151. luna_quantum/solve/parameters/algorithms/search_algorithms/qbsolv_like_tabu_search.py +117 -0
  152. luna_quantum/solve/parameters/algorithms/search_algorithms/tabu_search.py +126 -0
  153. luna_quantum/solve/parameters/algorithms/simulated_annealing/__init__.py +13 -0
  154. luna_quantum/solve/parameters/algorithms/simulated_annealing/parallel_tempering.py +131 -0
  155. luna_quantum/solve/parameters/algorithms/simulated_annealing/population_annealing.py +95 -0
  156. luna_quantum/solve/parameters/algorithms/simulated_annealing/qbsolv_like_simulated_annealing.py +141 -0
  157. luna_quantum/solve/parameters/algorithms/simulated_annealing/repeated_reverse_simulated_annealing.py +172 -0
  158. luna_quantum/solve/parameters/algorithms/simulated_annealing/simulated_annealing.py +126 -0
  159. luna_quantum/solve/parameters/backends/__init__.py +20 -0
  160. luna_quantum/solve/parameters/backends/aqarios.py +17 -0
  161. luna_quantum/solve/parameters/backends/aws/__init__.py +11 -0
  162. luna_quantum/solve/parameters/backends/aws/aws.py +36 -0
  163. luna_quantum/solve/parameters/backends/aws/aws_backend_base.py +74 -0
  164. luna_quantum/solve/parameters/backends/aws/ionq.py +43 -0
  165. luna_quantum/solve/parameters/backends/aws/iqm.py +31 -0
  166. luna_quantum/solve/parameters/backends/aws/rigetti.py +31 -0
  167. luna_quantum/solve/parameters/backends/dwave.py +17 -0
  168. luna_quantum/solve/parameters/backends/dwave_qpu.py +164 -0
  169. luna_quantum/solve/parameters/backends/ibm.py +132 -0
  170. luna_quantum/solve/parameters/backends/qctrl.py +130 -0
  171. luna_quantum/solve/parameters/backends/zib.py +17 -0
  172. luna_quantum/solve/parameters/constants.py +11 -0
  173. luna_quantum/solve/parameters/mixins/__init__.py +0 -0
  174. luna_quantum/solve/parameters/mixins/fujitsu_common_params_mixin.py +239 -0
  175. luna_quantum/solve/parameters/mixins/fujitsu_v2_mixin.py +70 -0
  176. luna_quantum/solve/parameters/mixins/qbsolv_like_mixin.py +60 -0
  177. luna_quantum/solve/use_cases/__init__.py +119 -0
  178. luna_quantum/solve/use_cases/arbitrage_edge_based.py +50 -0
  179. luna_quantum/solve/use_cases/arbitrage_node_based.py +55 -0
  180. luna_quantum/solve/use_cases/base.py +7 -0
  181. luna_quantum/solve/use_cases/binary_integer_linear_programming.py +54 -0
  182. luna_quantum/solve/use_cases/binary_paint_shop_problem.py +37 -0
  183. luna_quantum/solve/use_cases/credit_scoring_feature_selection.py +40 -0
  184. luna_quantum/solve/use_cases/dynamic_portfolio_optimization.py +64 -0
  185. luna_quantum/solve/use_cases/exact_cover.py +51 -0
  186. luna_quantum/solve/use_cases/flight_gate_assignment.py +79 -0
  187. luna_quantum/solve/use_cases/graph_coloring.py +42 -0
  188. luna_quantum/solve/use_cases/graph_isomorphism.py +52 -0
  189. luna_quantum/solve/use_cases/graph_partitioning.py +46 -0
  190. luna_quantum/solve/use_cases/hamiltonian_cycle.py +49 -0
  191. luna_quantum/solve/use_cases/induced_subgraph_isomorphism.py +50 -0
  192. luna_quantum/solve/use_cases/job_shop_scheduling.py +44 -0
  193. luna_quantum/solve/use_cases/k_medoids_clustering.py +49 -0
  194. luna_quantum/solve/use_cases/knapsack_integer_weights.py +56 -0
  195. luna_quantum/solve/use_cases/linear_regression.py +60 -0
  196. luna_quantum/solve/use_cases/lmwcs.py +84 -0
  197. luna_quantum/solve/use_cases/longest_path.py +50 -0
  198. luna_quantum/solve/use_cases/market_graph_clustering.py +61 -0
  199. luna_quantum/solve/use_cases/max2sat.py +54 -0
  200. luna_quantum/solve/use_cases/max3sat.py +55 -0
  201. luna_quantum/solve/use_cases/max_clique.py +60 -0
  202. luna_quantum/solve/use_cases/max_cut.py +48 -0
  203. luna_quantum/solve/use_cases/max_independent_set.py +37 -0
  204. luna_quantum/solve/use_cases/minimal_maximal_matching.py +54 -0
  205. luna_quantum/solve/use_cases/minimal_spanning_tree.py +90 -0
  206. luna_quantum/solve/use_cases/minimum_vertex_cover.py +45 -0
  207. luna_quantum/solve/use_cases/number_partitioning.py +32 -0
  208. luna_quantum/solve/use_cases/portfolio_optimization.py +46 -0
  209. luna_quantum/solve/use_cases/portfolio_optimization_ib_tv.py +63 -0
  210. luna_quantum/solve/use_cases/quadratic_assignment.py +49 -0
  211. luna_quantum/solve/use_cases/quadratic_knapsack.py +48 -0
  212. luna_quantum/solve/use_cases/satellite_scheduling.py +73 -0
  213. luna_quantum/solve/use_cases/sensor_placement.py +58 -0
  214. luna_quantum/solve/use_cases/set_cover.py +56 -0
  215. luna_quantum/solve/use_cases/set_packing.py +54 -0
  216. luna_quantum/solve/use_cases/set_partitioning.py +52 -0
  217. luna_quantum/solve/use_cases/subgraph_isomorphism.py +55 -0
  218. luna_quantum/solve/use_cases/subset_sum.py +37 -0
  219. luna_quantum/solve/use_cases/support_vector_machine.py +64 -0
  220. luna_quantum/solve/use_cases/traffic_flow.py +35 -0
  221. luna_quantum/solve/use_cases/travelling_salesman_problem.py +53 -0
  222. luna_quantum/solve/use_cases/type_aliases.py +9 -0
  223. luna_quantum/solve/use_cases/weighted_max_cut.py +37 -0
  224. luna_quantum/solve/usecases/__init__.py +45 -0
  225. luna_quantum/solve/usecases/model_delete_usecase.py +49 -0
  226. luna_quantum/solve/usecases/model_fetch_metadata_usecase.py +50 -0
  227. luna_quantum/solve/usecases/model_get_solution_usecase.py +56 -0
  228. luna_quantum/solve/usecases/model_get_solve_jobs_usecase.py +62 -0
  229. luna_quantum/solve/usecases/model_load_by_id_usecase.py +47 -0
  230. luna_quantum/solve/usecases/model_load_by_metadata_usecase.py +52 -0
  231. luna_quantum/solve/usecases/model_load_metadata_by_hash_usecase.py +51 -0
  232. luna_quantum/solve/usecases/model_save_usecase.py +63 -0
  233. luna_quantum/solve/usecases/solve_job_cancel_usecase.py +51 -0
  234. luna_quantum/solve/usecases/solve_job_create_usecase.py +112 -0
  235. luna_quantum/solve/usecases/solve_job_delete_usecase.py +38 -0
  236. luna_quantum/solve/usecases/solve_job_fetch_updates_usecase.py +49 -0
  237. luna_quantum/solve/usecases/solve_job_get_result_usecase.py +97 -0
  238. luna_quantum/translator.py +1 -0
  239. luna_quantum/translator.pyi +833 -0
  240. luna_quantum/util/__init__.py +0 -0
  241. luna_quantum/util/active_waiting.py +79 -0
  242. luna_quantum/util/class_patcher.py +164 -0
  243. luna_quantum/util/log_utils.py +167 -0
  244. luna_quantum/util/pretty_base.py +67 -0
  245. luna_quantum/util/pydantic_utils.py +38 -0
  246. luna_quantum/utils.py +54 -0
  247. luna_quantum/utils.pyi +35 -0
  248. luna_quantum-1.0.0.dist-info/METADATA +37 -0
  249. luna_quantum-1.0.0.dist-info/RECORD +252 -0
  250. luna_quantum-1.0.0.dist-info/WHEEL +4 -0
  251. luna_quantum-1.0.0.dist-info/licenses/LICENSE +176 -0
  252. luna_quantum-1.0.0.dist-info/licenses/NOTICE +13 -0
@@ -0,0 +1,164 @@
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 | None, default=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.
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
+ - True: Returns (embedding, validity_flag) tuple
80
+ - False: Returns only the embedding
81
+ This function returns an embedding regardless of whether qubits are used by
82
+ multiple variables.
83
+
84
+ skip_initialization: bool, default=False
85
+ If True, skips the initialization pass. Only works with semi-valid
86
+ embeddings provided through `initial_chains` and `fixed_chains`.
87
+ A semi-valid embedding has chains where every adjacent variable pair (u,v)
88
+ has a coupler (p,q) in the hardware with p in chain(u) and q in chain(v).
89
+
90
+ initial_chains: Any, default=()
91
+ Initial chains inserted before `fixed_chains` and before initialization.
92
+ Can be used to restart algorithm from a previous state. Missing or empty
93
+ entries are ignored. Each value is a list of qubit labels.
94
+
95
+ fixed_chains: Any, default=()
96
+ Fixed chains that cannot change during the algorithm. Qubits in these chains
97
+ are not used by other chains. Missing or empty entries are ignored.
98
+ Each value is a list of qubit labels.
99
+
100
+ restrict_chains: Any, default=()
101
+ Restricts each chain[i] to be a subset of `restrict_chains[i]` throughout
102
+ the algorithm. Missing or empty entries are ignored. Each value is a list
103
+ of qubit labels.
104
+
105
+ suspend_chains: Any, default=()
106
+ A metafeature only implemented in the Python interface. For each suspended
107
+ variable i, `suspend_chains[i]` is an iterable of iterables (blobs).
108
+ For each blob in a suspension, at least one qubit from that blob must be
109
+ in the chain for variable i.
110
+ """
111
+
112
+ max_no_improvement: int = 10
113
+ random_seed: int | None = None
114
+ timeout: int = 1_000
115
+ max_beta: float | None = None
116
+ tries: int = 10
117
+ inner_rounds: int | None = None
118
+ chainlength_patience: int = 10
119
+ max_fill: int | None = None
120
+ threads: int = Field(default=1, ge=1)
121
+ return_overlap: bool = False
122
+ skip_initialization: bool = False
123
+ initial_chains: dict = Field(default_factory=dict) # type: ignore[type-arg]
124
+ fixed_chains: dict = Field(default_factory=dict) # type: ignore[type-arg]
125
+ restrict_chains: dict = Field(default_factory=dict) # type: ignore[type-arg]
126
+ suspend_chains: dict = Field(default_factory=dict) # type: ignore[type-arg]
127
+
128
+ class AutoEmbedding(BaseModel):
129
+ """
130
+ Configuration for automatic embedding of problems onto D-Wave hardware.
131
+
132
+ This class provides a simpler interface to configure the embedding process
133
+ when the details of the underlying hardware are not known or when optimal
134
+ embedding parameters should be determined automatically.
135
+
136
+ Attributes
137
+ ----------
138
+ embedding_parameters: EmbeddingParameters, default=EmbeddingParameters()
139
+ Detailed configuration parameters for the embedding algorithm.
140
+ See EmbeddingParameters documentation for details on specific settings.
141
+ """
142
+
143
+ embedding_parameters: DWaveQpu.Embedding = Field(
144
+ default_factory=lambda: DWaveQpu.Embedding()
145
+ )
146
+
147
+ embedding_parameters: Embedding | AutoEmbedding | None = None
148
+ qpu_backend: Annotated[
149
+ str, StringConstraints(strip_whitespace=True, min_length=1)
150
+ ] = "default"
151
+
152
+ token: str | QpuToken | None = Field(repr=False, exclude=True, default=None)
153
+
154
+ def _get_token(self) -> TokenProvider | None:
155
+ if self.token is None:
156
+ return None
157
+ if isinstance(self.token, QpuToken):
158
+ return TokenProvider(dwave=self.token)
159
+ return TokenProvider(
160
+ dwave=QpuToken(
161
+ source=QpuTokenSource.INLINE,
162
+ token=self.token,
163
+ )
164
+ )
@@ -0,0 +1,132 @@
1
+ from typing import Literal
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from luna_quantum.solve.interfaces.backend_i import IBackend
6
+
7
+
8
+ class IBM(IBackend):
9
+ """IBM quantum backend configuration.
10
+
11
+ This class provides configuration options for IBM quantum backends, supporting
12
+ both local simulators and fake provider backends for quantum algorithm execution.
13
+ The configuration allows users to specify which type of backend to use without
14
+ requiring an IBM token for simulator-based execution.
15
+
16
+ The class supports two main backend types:
17
+
18
+ - Simulator backends: Execute quantum algorithms locally using simulators
19
+ - Fake provider backends: Use IBM's fake backends for testing and development
20
+
21
+ Attributes
22
+ ----------
23
+ backend : SimulatorBackend | FakeProviderBackend
24
+ The backend configuration, defaults to AER simulator.
25
+ """
26
+
27
+ class SimulatorBackend(BaseModel):
28
+ """Simulator.
29
+
30
+ Use a simulator as backend. The QAOA is executed completely on our server, and
31
+ no IBM token is required.
32
+
33
+ Attributes
34
+ ----------
35
+ backend_name: Literal['aer', 'statevector']
36
+ Which simulator to use. Currently, `AerSimulator` from `qiskit_aer`
37
+ and the statevector simulator from `qiskit.primitives` are available.
38
+ """
39
+
40
+ backend_type: Literal["simulator"] = "simulator"
41
+ backend_name: Literal["aer", "statevector"] = "aer"
42
+
43
+ class FakeProviderBackend(BaseModel):
44
+ """FaleProvider.
45
+
46
+ Use a V2 fake backend from `qiskit_ibm_runtime.fake_provider`. The QAOA is
47
+ executed entirely on our server, and no IBM token is required.
48
+
49
+ Attributes
50
+ ----------
51
+ backend_name: str
52
+ Which backend to use
53
+ """
54
+
55
+ backend_type: Literal["fake_provider"] = "fake_provider"
56
+ backend_name: Literal[
57
+ "FakeAlgiers",
58
+ "FakeAlmadenV2",
59
+ "FakeArmonkV2",
60
+ "FakeAthensV2",
61
+ "FakeAuckland",
62
+ "FakeBelemV2",
63
+ "FakeBoeblingenV2",
64
+ "FakeBogotaV2",
65
+ "FakeBrisbane",
66
+ "FakeBrooklynV2",
67
+ "FakeBurlingtonV2",
68
+ "FakeCairoV2",
69
+ "FakeCambridgeV2",
70
+ "FakeCasablancaV2",
71
+ "FakeCusco",
72
+ "FakeEssexV2",
73
+ "FakeFez",
74
+ "FakeFractionalBackend",
75
+ "FakeGeneva",
76
+ "FakeGuadalupeV2",
77
+ "FakeHanoiV2",
78
+ "FakeJakartaV2",
79
+ "FakeJohannesburgV2",
80
+ "FakeKawasaki",
81
+ "FakeKolkataV2",
82
+ "FakeKyiv",
83
+ "FakeKyoto",
84
+ "FakeLagosV2",
85
+ "FakeLimaV2",
86
+ "FakeLondonV2",
87
+ "FakeManhattanV2",
88
+ "FakeManilaV2",
89
+ "FakeMarrakesh",
90
+ "FakeMelbourneV2",
91
+ "FakeMontrealV2",
92
+ "FakeMumbaiV2",
93
+ "FakeNairobiV2",
94
+ "FakeOsaka",
95
+ "FakeOslo",
96
+ "FakeOurenseV2",
97
+ "FakeParisV2",
98
+ "FakePeekskill",
99
+ "FakePerth",
100
+ "FakePrague",
101
+ "FakePoughkeepsieV2",
102
+ "FakeQuebec",
103
+ "FakeQuitoV2",
104
+ "FakeRochesterV2",
105
+ "FakeRomeV2",
106
+ "FakeSantiagoV2",
107
+ "FakeSherbrooke",
108
+ "FakeSingaporeV2",
109
+ "FakeSydneyV2",
110
+ "FakeTorino",
111
+ "FakeTorontoV2",
112
+ "FakeValenciaV2",
113
+ "FakeVigoV2",
114
+ "FakeWashingtonV2",
115
+ "FakeYorktownV2",
116
+ ]
117
+
118
+ backend: SimulatorBackend | FakeProviderBackend = Field(
119
+ default=SimulatorBackend(), discriminator="backend_type"
120
+ )
121
+
122
+ @property
123
+ def provider(self) -> str:
124
+ """
125
+ Retrieve the name of the provider.
126
+
127
+ Returns
128
+ -------
129
+ str
130
+ The name of the provider.
131
+ """
132
+ return "ibm"
@@ -0,0 +1,130 @@
1
+ from typing import Any
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from luna_quantum.client.schemas import QpuToken, QpuTokenSource, TokenProvider
6
+ from luna_quantum.solve.domain.abstract import QpuTokenBackend
7
+
8
+
9
+ class Qctrl(QpuTokenBackend):
10
+ """
11
+ Configuration parameters for Q-CTRL`s Fire Opal Backend.
12
+
13
+ QAOA (Quantum Approximate Optimization Algorithm) is a quantum algorithm designed
14
+ for combinatorial optimization problems. This implementation leverages Q-CTRL's
15
+ Fire Opal framework, which optimizes QAOA execution on quantum hardware to reduce
16
+ errors and improve solution quality.
17
+
18
+ Fire Opal's hardware-tailored optimizations enable solving larger problems with
19
+ better convergence in fewer iterations, reducing overall execution time on real
20
+ quantum devices.
21
+
22
+ Attributes
23
+ ----------
24
+ organization_slug: str | None, default=None
25
+ Organization identifier from your Q-CTRL account. Required only if you belong
26
+ to multiple organizations. This can be retrieved from your Q-CTRL account
27
+ settings or dashboard.
28
+
29
+ backend_name: str | None, default=None
30
+ The IBM Quantum backend to use for computations:
31
+ - Specific backend: e.g., 'ibm_fez', 'ibm_marrakesh'
32
+ - 'least_busy': Automatically selects the least busy available backend
33
+ - 'basic_simulator': Uses the basic simulator (default if None)
34
+ Check your IBM Quantum account for available backends.
35
+
36
+ ibm_credentials: QCtrl.IBMQ | QCtrl.IBMCloud, default=Qctrl.IBMQ()
37
+ The IBM backend credentials, i.e. how to access the IBM service. Q-Ctrl
38
+ currently supports two mehtods, via the old IBMQ pattern or the new IBMCloud
39
+ pattern.
40
+
41
+ token: QpuToken | str | None, default=None
42
+ The Q-Ctrl API token.
43
+
44
+
45
+ Notes
46
+ -----
47
+ For detailed information about Fire Opal's QAOA solver and its capabilities,
48
+ see Q-CTRL's documentation: https://docs.q-ctrl.com/fire-opal/topics/fire-opals-qaoa-solver
49
+ """
50
+
51
+ class IBMQ(BaseModel):
52
+ """
53
+ Configuration parameters for the IBM Quantum backend.
54
+
55
+ Attributes
56
+ ----------
57
+ hub: str, default="ibm-q"
58
+ The IBM Quantum hub to use for accessing quantum resources.
59
+ This defines your access level and available systems.
60
+
61
+ group: str, default="open"
62
+ The IBM Quantum group within your hub.
63
+ Groups help organize users and projects within a hub.
64
+
65
+ project: str, default="main"
66
+ The IBM Quantum project within your group.
67
+ Projects help organize work and resource allocation.
68
+
69
+ token: Union[str, None, QpuToken], default=None
70
+ The IBM API token.
71
+ """
72
+
73
+ hub: str = "ibm-q"
74
+ group: str = "open"
75
+ project: str = "main"
76
+
77
+ token: str | QpuToken | None = Field(repr=False, exclude=True, default=None)
78
+
79
+ class IBMCloud(BaseModel):
80
+ """
81
+ Configuration parameters for the IBM Cloud backend.
82
+
83
+ Attributes
84
+ ----------
85
+ instance: str
86
+ The Qiskit runtime instance CRN (Cloud Resource Name).
87
+
88
+ token: Union[str, None, QpuToken], default=None
89
+ The IBM API token.
90
+ """
91
+
92
+ instance: str
93
+
94
+ token: str | QpuToken | None = Field(repr=False, exclude=True, default=None)
95
+
96
+ organization_slug: Any = None
97
+ backend_name: str | None = None
98
+
99
+ ibm_credentials: IBMQ | IBMCloud = Field(default=IBMQ())
100
+
101
+ token: str | QpuToken | None = Field(repr=False, exclude=True, default=None)
102
+
103
+ def _get_token(self) -> TokenProvider | None:
104
+ if self.token is None or self.ibm_credentials.token is None:
105
+ return None
106
+ qctrl_token = (
107
+ self.token
108
+ if isinstance(self.token, QpuToken)
109
+ else QpuToken(source=QpuTokenSource.INLINE, token=self.token)
110
+ )
111
+ ibm_token = (
112
+ self.ibm_credentials.token
113
+ if isinstance(self.ibm_credentials.token, QpuToken)
114
+ else QpuToken(
115
+ source=QpuTokenSource.INLINE, token=self.ibm_credentials.token
116
+ )
117
+ )
118
+ return TokenProvider(qctrl=qctrl_token, ibm=ibm_token)
119
+
120
+ @property
121
+ def provider(self) -> str:
122
+ """
123
+ Retrieve the name of the provider.
124
+
125
+ Returns
126
+ -------
127
+ str
128
+ The name of the provider.
129
+ """
130
+ return "qctrl"
@@ -0,0 +1,17 @@
1
+ from luna_quantum.solve.interfaces.backend_i import IBackend
2
+
3
+
4
+ class ZIB(IBackend):
5
+ """Configuration class for the ZIB 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 "zib"
@@ -0,0 +1,11 @@
1
+ # The default absolute tolerance that should be used for `numpy.isclose(...)`
2
+ # calls. Equal to the default used in `numpy.isclose(..)`.
3
+ DEFAULT_ATOL: float = 1.0e-8
4
+
5
+ # The default relative tolerance that should be used for ``numpy.isclose(...)``
6
+ # calls. Equal to the default used in ``numpy.isclose(..)``.
7
+ DEFAULT_RTOL: float = 1.0e-5
8
+
9
+ # The default timeout used for solver run with a specified target.
10
+ # Number of seconds before routine halts. Default is 2592000 for dimod.qbsolv.
11
+ DEFAULT_TIMEOUT: int = 10
File without changes