classiq 0.37.1__py3-none-any.whl → 0.65.3__py3-none-any.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 (516) hide show
  1. classiq/__init__.py +49 -34
  2. classiq/_analyzer_extras/_ipywidgets_async_extension.py +3 -2
  3. classiq/_analyzer_extras/interactive_hardware.py +3 -3
  4. classiq/_internals/api_wrapper.py +241 -95
  5. classiq/_internals/async_utils.py +2 -77
  6. classiq/_internals/authentication/auth0.py +26 -10
  7. classiq/_internals/authentication/authentication.py +11 -0
  8. classiq/_internals/authentication/device.py +18 -8
  9. classiq/_internals/authentication/password_manager.py +40 -13
  10. classiq/_internals/authentication/token_manager.py +11 -6
  11. classiq/_internals/client.py +106 -37
  12. classiq/_internals/config.py +3 -4
  13. classiq/_internals/host_checker.py +38 -15
  14. classiq/_internals/jobs.py +56 -50
  15. classiq/_internals/type_validation.py +9 -9
  16. classiq/analyzer/__init__.py +1 -3
  17. classiq/analyzer/analyzer.py +50 -47
  18. classiq/analyzer/analyzer_utilities.py +15 -15
  19. classiq/analyzer/rb.py +19 -20
  20. classiq/analyzer/show_interactive_hack.py +30 -7
  21. classiq/analyzer/url_utils.py +2 -3
  22. classiq/applications/__init__.py +3 -12
  23. classiq/applications/chemistry/__init__.py +14 -10
  24. classiq/applications/chemistry/ansatz_parameters.py +4 -4
  25. classiq/{applications_model_constructors → applications/chemistry}/chemistry_model_constructor.py +170 -170
  26. classiq/applications/chemistry/ground_state_problem.py +1 -1
  27. classiq/applications/combinatorial_helpers/allowed_constraints.py +23 -0
  28. classiq/applications/combinatorial_helpers/arithmetic/arithmetic_expression.py +35 -0
  29. classiq/applications/combinatorial_helpers/arithmetic/isolation.py +42 -0
  30. classiq/applications/combinatorial_helpers/combinatorial_problem_utils.py +166 -0
  31. classiq/applications/combinatorial_helpers/encoding_mapping.py +107 -0
  32. classiq/applications/combinatorial_helpers/encoding_utils.py +124 -0
  33. classiq/applications/combinatorial_helpers/memory.py +75 -0
  34. classiq/applications/combinatorial_helpers/optimization_model.py +193 -0
  35. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_sparsing.py +31 -0
  36. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +46 -0
  37. classiq/applications/combinatorial_helpers/pyomo_utils.py +447 -0
  38. classiq/applications/combinatorial_helpers/sympy_utils.py +22 -0
  39. classiq/applications/combinatorial_helpers/transformations/encoding.py +189 -0
  40. classiq/applications/combinatorial_helpers/transformations/fixed_variables.py +143 -0
  41. classiq/applications/combinatorial_helpers/transformations/ising_converter.py +120 -0
  42. classiq/applications/combinatorial_helpers/transformations/penalty.py +31 -0
  43. classiq/applications/combinatorial_helpers/transformations/penalty_support.py +37 -0
  44. classiq/applications/combinatorial_helpers/transformations/sign_seperation.py +74 -0
  45. classiq/applications/combinatorial_helpers/transformations/slack_variables.py +87 -0
  46. classiq/applications/combinatorial_optimization/__init__.py +24 -5
  47. classiq/applications/combinatorial_optimization/combinatorial_optimization_config.py +2 -2
  48. classiq/applications/combinatorial_optimization/combinatorial_optimization_model_constructor.py +137 -0
  49. classiq/applications/combinatorial_optimization/combinatorial_problem.py +229 -0
  50. classiq/applications/combinatorial_optimization/examples/__init__.py +1 -3
  51. classiq/applications/finance/__init__.py +4 -5
  52. classiq/{applications_model_constructors → applications/finance}/finance_model_constructor.py +50 -57
  53. classiq/applications/grover/__init__.py +9 -0
  54. classiq/applications/grover/grover_model_constructor.py +157 -0
  55. classiq/applications/hamiltonian/__init__.py +0 -0
  56. classiq/applications/hamiltonian/pauli_decomposition.py +113 -0
  57. classiq/applications/libraries/__init__.py +0 -0
  58. classiq/applications/libraries/qmci_library.py +22 -0
  59. classiq/applications/qnn/__init__.py +2 -4
  60. classiq/applications/qnn/circuit_utils.py +8 -8
  61. classiq/applications/qnn/datasets/__init__.py +9 -11
  62. classiq/applications/qnn/datasets/dataset_base_classes.py +7 -5
  63. classiq/applications/qnn/datasets/dataset_not.py +2 -1
  64. classiq/applications/qnn/datasets/dataset_parity.py +2 -2
  65. classiq/applications/qnn/gradients/quantum_gradient.py +2 -2
  66. classiq/applications/qnn/gradients/simple_quantum_gradient.py +2 -1
  67. classiq/applications/qnn/qlayer.py +30 -10
  68. classiq/applications/qnn/torch_utils.py +4 -3
  69. classiq/applications/qnn/types.py +7 -7
  70. classiq/applications/qsvm/__init__.py +6 -4
  71. classiq/applications/qsvm/qsvm.py +4 -10
  72. classiq/applications/qsvm/qsvm_data_generation.py +5 -8
  73. classiq/{applications_model_constructors → applications/qsvm}/qsvm_model_constructor.py +30 -28
  74. classiq/execution/__init__.py +8 -3
  75. classiq/execution/all_hardware_devices.py +11 -0
  76. classiq/execution/execution_session.py +400 -0
  77. classiq/execution/iqcc.py +63 -0
  78. classiq/execution/jobs.py +197 -25
  79. classiq/execution/qnn.py +79 -0
  80. classiq/executor.py +23 -117
  81. classiq/interface/_version.py +1 -1
  82. classiq/interface/analyzer/analysis_params.py +49 -16
  83. classiq/interface/analyzer/cytoscape_graph.py +15 -9
  84. classiq/interface/analyzer/result.py +36 -32
  85. classiq/interface/applications/qsvm.py +28 -25
  86. classiq/interface/ast_node.py +16 -0
  87. classiq/interface/backend/backend_preferences.py +390 -119
  88. classiq/interface/backend/ionq/ionq_quantum_program.py +15 -23
  89. classiq/interface/backend/pydantic_backend.py +27 -22
  90. classiq/interface/backend/quantum_backend_providers.py +70 -16
  91. classiq/interface/chemistry/fermionic_operator.py +43 -32
  92. classiq/interface/chemistry/ground_state_problem.py +42 -24
  93. classiq/interface/chemistry/molecule.py +20 -14
  94. classiq/interface/chemistry/operator.py +75 -236
  95. classiq/interface/combinatorial_optimization/encoding_types.py +1 -1
  96. classiq/interface/combinatorial_optimization/examples/ascending_sequence.py +2 -4
  97. classiq/interface/combinatorial_optimization/examples/greater_than_ilp.py +1 -1
  98. classiq/interface/combinatorial_optimization/examples/ilp.py +2 -1
  99. classiq/interface/combinatorial_optimization/examples/integer_portfolio_optimization.py +2 -4
  100. classiq/interface/combinatorial_optimization/examples/knapsack.py +3 -3
  101. classiq/interface/combinatorial_optimization/examples/mds.py +2 -1
  102. classiq/interface/combinatorial_optimization/examples/mht.py +10 -6
  103. classiq/interface/combinatorial_optimization/examples/mis.py +4 -1
  104. classiq/interface/combinatorial_optimization/examples/mvc.py +2 -1
  105. classiq/interface/combinatorial_optimization/examples/portfolio_variations.py +2 -2
  106. classiq/interface/combinatorial_optimization/examples/set_cover.py +3 -3
  107. classiq/interface/combinatorial_optimization/examples/tsp.py +4 -3
  108. classiq/interface/combinatorial_optimization/examples/tsp_digraph.py +6 -2
  109. classiq/interface/combinatorial_optimization/mht_qaoa_input.py +14 -9
  110. classiq/interface/combinatorial_optimization/optimization_problem.py +2 -2
  111. classiq/interface/combinatorial_optimization/result.py +1 -3
  112. classiq/interface/combinatorial_optimization/solver_types.py +1 -1
  113. classiq/interface/debug_info/__init__.py +0 -0
  114. classiq/interface/debug_info/debug_info.py +86 -0
  115. classiq/interface/exceptions.py +201 -0
  116. classiq/interface/execution/iqcc.py +19 -0
  117. classiq/interface/execution/jobs.py +15 -12
  118. classiq/interface/execution/primitives.py +18 -0
  119. classiq/interface/executor/constants.py +1 -0
  120. classiq/interface/executor/estimation.py +2 -2
  121. classiq/interface/executor/execution_preferences.py +26 -143
  122. classiq/interface/executor/execution_request.py +36 -56
  123. classiq/interface/executor/execution_result.py +30 -8
  124. classiq/interface/executor/iqae_result.py +4 -6
  125. classiq/interface/executor/optimizer_preferences.py +34 -22
  126. classiq/interface/executor/{quantum_program.py → quantum_code.py} +44 -34
  127. classiq/interface/executor/quantum_instruction_set.py +3 -2
  128. classiq/interface/executor/register_initialization.py +12 -17
  129. classiq/interface/executor/result.py +122 -64
  130. classiq/interface/executor/vqe_result.py +11 -11
  131. classiq/interface/finance/function_input.py +42 -19
  132. classiq/interface/finance/gaussian_model_input.py +7 -5
  133. classiq/interface/finance/log_normal_model_input.py +6 -4
  134. classiq/interface/finance/model_input.py +6 -4
  135. classiq/interface/generator/adjacency.py +1 -3
  136. classiq/interface/generator/amplitude_loading.py +27 -14
  137. classiq/interface/generator/ansatz_library.py +5 -5
  138. classiq/interface/generator/application_apis/__init__.py +1 -0
  139. classiq/interface/generator/application_apis/arithmetic_declarations.py +17 -0
  140. classiq/interface/generator/application_apis/chemistry_declarations.py +27 -187
  141. classiq/interface/generator/application_apis/combinatorial_optimization_declarations.py +18 -21
  142. classiq/interface/generator/application_apis/entangler_declarations.py +11 -6
  143. classiq/interface/generator/application_apis/finance_declarations.py +48 -69
  144. classiq/interface/generator/application_apis/qsvm_declarations.py +0 -70
  145. classiq/interface/generator/arith/argument_utils.py +57 -6
  146. classiq/interface/generator/arith/arithmetic.py +37 -16
  147. classiq/interface/generator/arith/arithmetic_arg_type_validator.py +15 -17
  148. classiq/interface/generator/arith/arithmetic_expression_abc.py +70 -26
  149. classiq/interface/generator/arith/arithmetic_expression_parser.py +18 -12
  150. classiq/interface/generator/arith/arithmetic_expression_validator.py +61 -43
  151. classiq/interface/generator/arith/arithmetic_operations.py +19 -16
  152. classiq/interface/generator/arith/arithmetic_param_getters.py +7 -8
  153. classiq/interface/generator/arith/arithmetic_result_builder.py +21 -17
  154. classiq/interface/generator/arith/ast_node_rewrite.py +4 -3
  155. classiq/interface/generator/arith/binary_ops.py +375 -139
  156. classiq/interface/generator/arith/endianness.py +1 -1
  157. classiq/interface/generator/arith/extremum_operations.py +96 -23
  158. classiq/interface/generator/arith/logical_ops.py +16 -12
  159. classiq/interface/generator/arith/machine_precision.py +3 -0
  160. classiq/interface/generator/arith/number_utils.py +44 -48
  161. classiq/interface/generator/arith/register_user_input.py +70 -27
  162. classiq/interface/generator/arith/unary_ops.py +57 -46
  163. classiq/interface/generator/arith/uncomputation_methods.py +1 -1
  164. classiq/interface/generator/builtin_api_builder.py +2 -9
  165. classiq/interface/generator/chemistry_function_params.py +5 -5
  166. classiq/interface/generator/circuit_code/circuit_code.py +7 -7
  167. classiq/interface/generator/circuit_code/types_and_constants.py +4 -7
  168. classiq/interface/generator/commuting_pauli_exponentiation.py +8 -6
  169. classiq/interface/generator/compiler_keywords.py +8 -0
  170. classiq/interface/generator/complex_type.py +13 -25
  171. classiq/interface/generator/constant.py +3 -4
  172. classiq/interface/generator/control_state.py +35 -28
  173. classiq/interface/generator/copy.py +47 -0
  174. classiq/interface/generator/custom_ansatz.py +2 -5
  175. classiq/interface/generator/distance.py +3 -5
  176. classiq/interface/generator/excitations.py +3 -2
  177. classiq/interface/generator/expressions/atomic_expression_functions.py +26 -8
  178. classiq/interface/generator/expressions/enums/__init__.py +0 -10
  179. classiq/interface/generator/expressions/enums/finance_functions.py +12 -22
  180. classiq/interface/generator/expressions/evaluated_expression.py +21 -7
  181. classiq/interface/generator/expressions/expression.py +27 -15
  182. classiq/interface/generator/expressions/expression_constants.py +9 -3
  183. classiq/interface/generator/expressions/non_symbolic_expr.py +119 -0
  184. classiq/interface/generator/expressions/qmod_qarray_proxy.py +99 -0
  185. classiq/interface/generator/expressions/qmod_qscalar_proxy.py +59 -0
  186. classiq/interface/generator/expressions/qmod_qstruct_proxy.py +36 -0
  187. classiq/interface/generator/expressions/qmod_sized_proxy.py +30 -2
  188. classiq/interface/generator/expressions/qmod_struct_instance.py +14 -2
  189. classiq/interface/generator/expressions/sympy_supported_expressions.py +20 -11
  190. classiq/interface/generator/finance.py +3 -3
  191. classiq/interface/generator/function_param_library.py +6 -6
  192. classiq/interface/generator/function_param_list_without_self_reference.py +2 -10
  193. classiq/interface/generator/function_params.py +42 -69
  194. classiq/interface/generator/functions/__init__.py +0 -22
  195. classiq/interface/generator/functions/builtins/__init__.py +0 -0
  196. classiq/interface/generator/functions/builtins/internal_operators.py +16 -0
  197. classiq/interface/generator/functions/classical_function_declaration.py +18 -9
  198. classiq/interface/generator/functions/classical_type.py +47 -166
  199. classiq/interface/generator/functions/concrete_types.py +55 -0
  200. classiq/interface/generator/functions/function_declaration.py +13 -14
  201. classiq/interface/generator/functions/port_declaration.py +1 -13
  202. classiq/interface/generator/functions/qmod_python_interface.py +2 -1
  203. classiq/interface/generator/functions/type_name.py +90 -0
  204. classiq/interface/generator/generated_circuit_data.py +155 -22
  205. classiq/interface/generator/grover_diffuser.py +32 -25
  206. classiq/interface/generator/grover_operator.py +34 -23
  207. classiq/interface/generator/hamiltonian_evolution/exponentiation.py +4 -6
  208. classiq/interface/generator/hamiltonian_evolution/qdrift.py +4 -4
  209. classiq/interface/generator/hamiltonian_evolution/suzuki_trotter.py +12 -8
  210. classiq/interface/generator/hardware/hardware_data.py +76 -36
  211. classiq/interface/generator/hardware_efficient_ansatz.py +38 -17
  212. classiq/interface/generator/hartree_fock.py +14 -4
  213. classiq/interface/generator/identity.py +10 -6
  214. classiq/interface/generator/linear_pauli_rotations.py +33 -19
  215. classiq/interface/generator/mcmt_method.py +1 -1
  216. classiq/interface/generator/mcu.py +20 -16
  217. classiq/interface/generator/mcx.py +29 -20
  218. classiq/interface/generator/model/__init__.py +2 -5
  219. classiq/interface/generator/model/constraints.py +27 -8
  220. classiq/interface/generator/model/model.py +32 -203
  221. classiq/interface/generator/model/preferences/preferences.py +118 -43
  222. classiq/{quantum_register.py → interface/generator/model/quantum_register.py} +27 -22
  223. classiq/interface/generator/oracles/arithmetic_oracle.py +2 -4
  224. classiq/interface/generator/oracles/custom_oracle.py +17 -13
  225. classiq/interface/generator/oracles/oracle_abc.py +9 -9
  226. classiq/interface/generator/partitioned_register.py +7 -7
  227. classiq/interface/generator/piecewise_linear_amplitude_loading.py +45 -29
  228. classiq/interface/generator/preferences/optimization.py +1 -2
  229. classiq/interface/generator/qpe.py +47 -34
  230. classiq/interface/generator/qsvm.py +13 -17
  231. classiq/interface/generator/quantum_function_call.py +107 -87
  232. classiq/interface/generator/{generated_circuit.py → quantum_program.py} +50 -37
  233. classiq/interface/generator/range_types.py +13 -12
  234. classiq/interface/generator/register_role.py +18 -6
  235. classiq/interface/generator/slice_parsing_utils.py +11 -6
  236. classiq/interface/generator/standard_gates/controlled_standard_gates.py +32 -39
  237. classiq/interface/generator/standard_gates/standard_angle_metaclass.py +2 -6
  238. classiq/interface/generator/standard_gates/standard_gates.py +3 -3
  239. classiq/interface/generator/standard_gates/u_gate.py +7 -10
  240. classiq/interface/generator/state_preparation/bell_state_preparation.py +3 -3
  241. classiq/interface/generator/state_preparation/computational_basis_state_preparation.py +2 -1
  242. classiq/interface/generator/state_preparation/distributions.py +16 -15
  243. classiq/interface/generator/state_preparation/metrics.py +5 -7
  244. classiq/interface/generator/state_preparation/state_preparation.py +30 -23
  245. classiq/interface/generator/synthesis_metadata/synthesis_duration.py +0 -4
  246. classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +20 -6
  247. classiq/interface/generator/transpiler_basis_gates.py +7 -3
  248. classiq/interface/generator/types/builtin_enum_declarations.py +178 -0
  249. classiq/interface/generator/types/compilation_metadata.py +6 -0
  250. classiq/interface/generator/types/enum_declaration.py +54 -0
  251. classiq/interface/generator/types/qstruct_declaration.py +18 -0
  252. classiq/interface/generator/types/struct_declaration.py +15 -14
  253. classiq/interface/generator/ucc.py +9 -6
  254. classiq/interface/generator/unitary_gate.py +10 -6
  255. classiq/interface/generator/user_defined_function_params.py +4 -1
  256. classiq/interface/generator/validations/flow_graph.py +11 -9
  257. classiq/interface/generator/validations/validator_functions.py +8 -6
  258. classiq/interface/generator/visitor.py +23 -16
  259. classiq/interface/hardware.py +31 -10
  260. classiq/interface/helpers/classproperty.py +8 -0
  261. classiq/interface/helpers/custom_encoders.py +3 -0
  262. classiq/interface/helpers/custom_pydantic_types.py +40 -50
  263. classiq/interface/helpers/datastructures.py +26 -0
  264. classiq/interface/helpers/hashable_mixin.py +3 -2
  265. classiq/interface/helpers/hashable_pydantic_base_model.py +2 -1
  266. classiq/interface/helpers/pydantic_model_helpers.py +7 -11
  267. classiq/interface/helpers/validation_helpers.py +4 -21
  268. classiq/interface/helpers/versioned_model.py +1 -1
  269. classiq/interface/ide/ide_data.py +16 -20
  270. classiq/interface/ide/visual_model.py +130 -0
  271. classiq/interface/interface_version.py +1 -0
  272. classiq/interface/jobs.py +35 -6
  273. classiq/interface/model/allocate.py +16 -0
  274. classiq/interface/model/bind_operation.py +44 -14
  275. classiq/interface/model/classical_if.py +15 -0
  276. classiq/interface/model/classical_parameter_declaration.py +33 -3
  277. classiq/interface/model/control.py +45 -0
  278. classiq/interface/model/handle_binding.py +298 -20
  279. classiq/interface/model/inplace_binary_operation.py +31 -26
  280. classiq/interface/model/invert.py +12 -0
  281. classiq/interface/model/model.py +87 -73
  282. classiq/interface/model/native_function_definition.py +16 -21
  283. classiq/interface/model/parameter.py +13 -0
  284. classiq/interface/model/phase_operation.py +11 -0
  285. classiq/interface/model/port_declaration.py +27 -9
  286. classiq/interface/model/power.py +14 -0
  287. classiq/interface/model/quantum_expressions/amplitude_loading_operation.py +38 -21
  288. classiq/interface/model/quantum_expressions/arithmetic_operation.py +51 -14
  289. classiq/interface/model/quantum_expressions/quantum_expression.py +12 -35
  290. classiq/interface/model/quantum_function_call.py +146 -462
  291. classiq/interface/model/quantum_function_declaration.py +193 -152
  292. classiq/interface/model/quantum_lambda_function.py +65 -0
  293. classiq/interface/model/quantum_statement.py +71 -12
  294. classiq/interface/model/quantum_type.py +205 -67
  295. classiq/interface/model/quantum_variable_declaration.py +4 -26
  296. classiq/interface/model/repeat.py +15 -0
  297. classiq/interface/model/statement_block.py +58 -0
  298. classiq/interface/model/validation_handle.py +13 -6
  299. classiq/interface/model/variable_declaration_statement.py +3 -1
  300. classiq/interface/model/within_apply_operation.py +13 -0
  301. classiq/interface/pyomo_extension/pyomo_sympy_bimap.py +4 -1
  302. classiq/interface/server/global_versions.py +6 -7
  303. classiq/interface/server/routes.py +22 -21
  304. classiq/interface/source_reference.py +59 -0
  305. classiq/model_expansions/__init__.py +0 -0
  306. classiq/model_expansions/atomic_expression_functions_defs.py +253 -0
  307. classiq/model_expansions/capturing/__init__.py +0 -0
  308. classiq/model_expansions/capturing/captured_vars.py +435 -0
  309. classiq/model_expansions/capturing/mangling_utils.py +56 -0
  310. classiq/model_expansions/closure.py +171 -0
  311. classiq/model_expansions/debug_flag.py +3 -0
  312. classiq/model_expansions/evaluators/__init__.py +0 -0
  313. classiq/model_expansions/evaluators/arg_type_match.py +158 -0
  314. classiq/model_expansions/evaluators/argument_types.py +42 -0
  315. classiq/model_expansions/evaluators/classical_expression.py +36 -0
  316. classiq/model_expansions/evaluators/control.py +144 -0
  317. classiq/model_expansions/evaluators/parameter_types.py +226 -0
  318. classiq/model_expansions/evaluators/quantum_type_utils.py +239 -0
  319. classiq/model_expansions/evaluators/type_type_match.py +90 -0
  320. classiq/model_expansions/expression_evaluator.py +135 -0
  321. classiq/model_expansions/expression_renamer.py +76 -0
  322. classiq/model_expansions/function_builder.py +247 -0
  323. classiq/model_expansions/generative_functions.py +158 -0
  324. classiq/model_expansions/interpreters/__init__.py +0 -0
  325. classiq/model_expansions/interpreters/base_interpreter.py +263 -0
  326. classiq/model_expansions/interpreters/frontend_generative_interpreter.py +28 -0
  327. classiq/model_expansions/interpreters/generative_interpreter.py +249 -0
  328. classiq/model_expansions/model_tables.py +18 -0
  329. classiq/model_expansions/quantum_operations/__init__.py +9 -0
  330. classiq/model_expansions/quantum_operations/bind.py +60 -0
  331. classiq/model_expansions/quantum_operations/call_emitter.py +266 -0
  332. classiq/model_expansions/quantum_operations/classicalif.py +53 -0
  333. classiq/model_expansions/quantum_operations/declarative_call_emitter.py +87 -0
  334. classiq/model_expansions/quantum_operations/emitter.py +181 -0
  335. classiq/model_expansions/quantum_operations/quantum_function_call.py +33 -0
  336. classiq/model_expansions/quantum_operations/repeat.py +56 -0
  337. classiq/model_expansions/quantum_operations/shallow_emitter.py +180 -0
  338. classiq/model_expansions/quantum_operations/variable_decleration.py +28 -0
  339. classiq/model_expansions/scope.py +240 -0
  340. classiq/model_expansions/scope_initialization.py +150 -0
  341. classiq/model_expansions/sympy_conversion/__init__.py +0 -0
  342. classiq/model_expansions/sympy_conversion/arithmetics.py +49 -0
  343. classiq/model_expansions/sympy_conversion/expression_to_sympy.py +179 -0
  344. classiq/model_expansions/sympy_conversion/sympy_to_python.py +123 -0
  345. classiq/model_expansions/transformers/__init__.py +0 -0
  346. classiq/model_expansions/transformers/ast_renamer.py +26 -0
  347. classiq/model_expansions/transformers/var_splitter.py +299 -0
  348. classiq/model_expansions/utils/__init__.py +0 -0
  349. classiq/model_expansions/utils/counted_name_allocator.py +11 -0
  350. classiq/model_expansions/utils/handles_collector.py +33 -0
  351. classiq/model_expansions/visitors/__init__.py +0 -0
  352. classiq/model_expansions/visitors/boolean_expression_transformers.py +214 -0
  353. classiq/model_expansions/visitors/variable_references.py +144 -0
  354. classiq/open_library/__init__.py +4 -0
  355. classiq/open_library/functions/__init__.py +130 -0
  356. classiq/open_library/functions/amplitude_estimation.py +30 -0
  357. classiq/open_library/functions/discrete_sine_cosine_transform.py +181 -0
  358. classiq/open_library/functions/grover.py +157 -0
  359. classiq/open_library/functions/hea.py +115 -0
  360. classiq/open_library/functions/linear_pauli_rotation.py +82 -0
  361. classiq/open_library/functions/modular_exponentiation.py +201 -0
  362. classiq/open_library/functions/qaoa_penalty.py +117 -0
  363. classiq/open_library/functions/qft_functions.py +54 -0
  364. classiq/open_library/functions/qpe.py +46 -0
  365. classiq/open_library/functions/qsvt.py +331 -0
  366. classiq/open_library/functions/state_preparation.py +301 -0
  367. classiq/open_library/functions/swap_test.py +27 -0
  368. classiq/open_library/functions/utility_functions.py +81 -0
  369. classiq/open_library/functions/variational.py +52 -0
  370. classiq/qmod/__init__.py +17 -10
  371. classiq/qmod/builtins/__init__.py +19 -2
  372. classiq/qmod/builtins/classical_execution_primitives.py +60 -47
  373. classiq/qmod/builtins/classical_functions.py +44 -38
  374. classiq/qmod/builtins/constants.py +10 -0
  375. classiq/qmod/builtins/enums.py +208 -0
  376. classiq/qmod/builtins/functions/__init__.py +137 -0
  377. classiq/qmod/builtins/functions/allocation.py +150 -0
  378. classiq/qmod/builtins/functions/arithmetic.py +55 -0
  379. classiq/qmod/builtins/functions/benchmarking.py +8 -0
  380. classiq/qmod/builtins/functions/chemistry.py +91 -0
  381. classiq/qmod/builtins/functions/exponentiation.py +105 -0
  382. classiq/qmod/builtins/functions/finance.py +34 -0
  383. classiq/qmod/builtins/functions/operators.py +16 -0
  384. classiq/qmod/builtins/functions/qsvm.py +24 -0
  385. classiq/qmod/builtins/functions/standard_gates.py +651 -0
  386. classiq/qmod/builtins/operations.py +379 -57
  387. classiq/qmod/builtins/structs.py +103 -80
  388. classiq/qmod/cfunc.py +42 -0
  389. classiq/qmod/classical_function.py +8 -20
  390. classiq/qmod/cparam.py +64 -0
  391. classiq/qmod/create_model_function.py +56 -0
  392. classiq/qmod/declaration_inferrer.py +145 -112
  393. classiq/qmod/expression_query.py +39 -0
  394. classiq/qmod/generative.py +42 -0
  395. classiq/qmod/model_state_container.py +19 -5
  396. classiq/qmod/native/__init__.py +7 -0
  397. classiq/qmod/native/expression_to_qmod.py +194 -0
  398. classiq/qmod/native/pretty_printer.py +401 -0
  399. classiq/qmod/pretty_print/__init__.py +7 -0
  400. classiq/qmod/pretty_print/expression_to_python.py +222 -0
  401. classiq/qmod/pretty_print/pretty_printer.py +572 -0
  402. classiq/qmod/python_classical_type.py +67 -0
  403. classiq/qmod/qfunc.py +79 -0
  404. classiq/qmod/qmod_constant.py +143 -0
  405. classiq/qmod/qmod_parameter.py +84 -53
  406. classiq/qmod/qmod_variable.py +497 -100
  407. classiq/qmod/quantum_callable.py +17 -7
  408. classiq/qmod/quantum_expandable.py +278 -105
  409. classiq/qmod/quantum_function.py +232 -48
  410. classiq/qmod/semantics/__init__.py +0 -0
  411. classiq/qmod/semantics/annotation/__init__.py +0 -0
  412. classiq/qmod/semantics/annotation/call_annotation.py +92 -0
  413. classiq/qmod/semantics/annotation/qstruct_annotator.py +23 -0
  414. classiq/qmod/semantics/error_manager.py +88 -0
  415. classiq/qmod/semantics/lambdas.py +25 -0
  416. classiq/qmod/semantics/static_semantics_visitor.py +384 -0
  417. classiq/qmod/semantics/validation/__init__.py +0 -0
  418. classiq/qmod/semantics/validation/constants_validation.py +16 -0
  419. classiq/qmod/semantics/validation/func_call_validation.py +99 -0
  420. classiq/qmod/semantics/validation/function_name_collisions_validation.py +23 -0
  421. classiq/qmod/semantics/validation/handle_validation.py +85 -0
  422. classiq/qmod/semantics/validation/main_validation.py +33 -0
  423. classiq/qmod/semantics/validation/types_validation.py +128 -0
  424. classiq/qmod/symbolic.py +178 -111
  425. classiq/qmod/symbolic_expr.py +36 -12
  426. classiq/qmod/symbolic_type.py +2 -5
  427. classiq/qmod/type_attribute_remover.py +32 -0
  428. classiq/qmod/utilities.py +108 -1
  429. classiq/qmod/write_qmod.py +53 -0
  430. classiq/synthesis.py +210 -22
  431. {classiq-0.37.1.dist-info → classiq-0.65.3.dist-info}/METADATA +16 -8
  432. classiq-0.65.3.dist-info/RECORD +521 -0
  433. {classiq-0.37.1.dist-info → classiq-0.65.3.dist-info}/WHEEL +1 -1
  434. classiq/_internals/_qfunc_ext.py +0 -6
  435. classiq/applications/benchmarking/__init__.py +0 -9
  436. classiq/applications/benchmarking/mirror_benchmarking.py +0 -67
  437. classiq/applications/numpy_utils.py +0 -37
  438. classiq/applications_model_constructors/__init__.py +0 -17
  439. classiq/applications_model_constructors/combinatorial_optimization_model_constructor.py +0 -178
  440. classiq/applications_model_constructors/grover_model_constructor.py +0 -227
  441. classiq/applications_model_constructors/libraries/ampltitude_estimation_library.py +0 -11
  442. classiq/applications_model_constructors/libraries/qmci_library.py +0 -109
  443. classiq/builtin_functions/__init__.py +0 -43
  444. classiq/builtin_functions/amplitude_loading.py +0 -3
  445. classiq/builtin_functions/binary_ops.py +0 -1
  446. classiq/builtin_functions/exponentiation.py +0 -5
  447. classiq/builtin_functions/qpe.py +0 -4
  448. classiq/builtin_functions/qsvm.py +0 -7
  449. classiq/builtin_functions/range_types.py +0 -5
  450. classiq/builtin_functions/standard_gates.py +0 -1
  451. classiq/builtin_functions/state_preparation.py +0 -6
  452. classiq/builtin_functions/suzuki_trotter.py +0 -3
  453. classiq/exceptions.py +0 -131
  454. classiq/interface/executor/aws_execution_cost.py +0 -72
  455. classiq/interface/executor/error_mitigation.py +0 -6
  456. classiq/interface/generator/credit_risk_example/linear_gci.py +0 -115
  457. classiq/interface/generator/credit_risk_example/weighted_adder.py +0 -59
  458. classiq/interface/generator/expressions/enums/chemistry.py +0 -28
  459. classiq/interface/generator/expressions/enums/classical_enum.py +0 -5
  460. classiq/interface/generator/expressions/enums/ladder_operator.py +0 -16
  461. classiq/interface/generator/expressions/enums/optimizers.py +0 -9
  462. classiq/interface/generator/expressions/enums/pauli.py +0 -8
  463. classiq/interface/generator/expressions/enums/qsvm_feature_map_entanglement.py +0 -9
  464. classiq/interface/generator/expressions/qmod_qnum_proxy.py +0 -22
  465. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/__init__.py +0 -18
  466. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/atomic_quantum_functions.py +0 -641
  467. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/exponentiation_functions.py +0 -89
  468. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/std_lib_functions.py +0 -862
  469. classiq/interface/generator/functions/core_lib_declarations/quantum_operators.py +0 -169
  470. classiq/interface/generator/functions/foreign_function_definition.py +0 -106
  471. classiq/interface/generator/functions/function_implementation.py +0 -103
  472. classiq/interface/generator/functions/native_function_definition.py +0 -153
  473. classiq/interface/generator/functions/quantum_function_declaration.py +0 -69
  474. classiq/interface/generator/functions/register.py +0 -42
  475. classiq/interface/generator/functions/register_mapping_data.py +0 -102
  476. classiq/interface/generator/inequality_mixer.py +0 -51
  477. classiq/interface/generator/model/classical_main_validator.py +0 -106
  478. classiq/interface/generator/range_mixer.py +0 -56
  479. classiq/interface/generator/state_propagator.py +0 -63
  480. classiq/interface/generator/types/builtin_struct_declarations/__init__.py +0 -2
  481. classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +0 -22
  482. classiq/interface/generator/types/builtin_struct_declarations/qaoa_declarations.py +0 -23
  483. classiq/interface/generator/types/combinatorial_problem.py +0 -26
  484. classiq/interface/ide/show.py +0 -34
  485. classiq/interface/model/common_model_types.py +0 -23
  486. classiq/interface/model/numeric_reinterpretation.py +0 -25
  487. classiq/interface/model/operator_synthesis_data.py +0 -48
  488. classiq/interface/model/quantum_expressions/control_state.py +0 -38
  489. classiq/interface/model/quantum_if_operation.py +0 -95
  490. classiq/interface/model/resolvers/function_call_resolver.py +0 -43
  491. classiq/interface/model/validations/handle_validation_base.py +0 -55
  492. classiq/interface/model/validations/handles_validator.py +0 -154
  493. classiq/interface/model/validations/port_to_wire_name_generator.py +0 -12
  494. classiq/model/__init__.py +0 -14
  495. classiq/model/composite_function_generator.py +0 -33
  496. classiq/model/function_handler.py +0 -466
  497. classiq/model/function_handler.pyi +0 -152
  498. classiq/model/logic_flow.py +0 -149
  499. classiq/model/logic_flow_change_handler.py +0 -71
  500. classiq/model/model.py +0 -246
  501. classiq/qmod/builtins/functions.py +0 -896
  502. classiq/qmod/qmod_struct.py +0 -37
  503. classiq/quantum_functions/__init__.py +0 -17
  504. classiq/quantum_functions/annotation_parser.py +0 -207
  505. classiq/quantum_functions/decorators.py +0 -22
  506. classiq/quantum_functions/function_library.py +0 -181
  507. classiq/quantum_functions/function_parser.py +0 -74
  508. classiq/quantum_functions/quantum_function.py +0 -236
  509. classiq-0.37.1.dist-info/RECORD +0 -418
  510. /classiq/{applications_model_constructors/libraries → applications/combinatorial_helpers}/__init__.py +0 -0
  511. /classiq/{interface/generator/credit_risk_example → applications/combinatorial_helpers/arithmetic}/__init__.py +0 -0
  512. /classiq/{interface/generator/functions/core_lib_declarations → applications/combinatorial_helpers/pauli_helpers}/__init__.py +0 -0
  513. /classiq/{interface/generator/functions/core_lib_declarations/quantum_functions/chemistry_functions.py → applications/combinatorial_helpers/py.typed} +0 -0
  514. /classiq/{interface/model/resolvers → applications/combinatorial_helpers/solvers}/__init__.py +0 -0
  515. /classiq/{interface/model/validations → applications/combinatorial_helpers/transformations}/__init__.py +0 -0
  516. /classiq/{_internals → interface}/enum_utils.py +0 -0
@@ -1,5 +1,6 @@
1
1
  import networkx as nx
2
2
  import pyomo.core as pyo
3
+ import pyomo.core.expr.numeric_expr as pyo_expr
3
4
 
4
5
 
5
6
  def mis(graph: nx.Graph) -> pyo.ConcreteModel:
@@ -7,7 +8,9 @@ def mis(graph: nx.Graph) -> pyo.ConcreteModel:
7
8
  model.x = pyo.Var(graph.nodes, domain=pyo.Binary)
8
9
 
9
10
  @model.Constraint(graph.edges)
10
- def independent_rule(model, node1, node2):
11
+ def independent_rule(
12
+ model: pyo.ConcreteModel, node1: int, node2: int
13
+ ) -> pyo_expr.ExpressionBase:
11
14
  return model.x[node1] + model.x[node2] <= 1
12
15
 
13
16
  model.cost = pyo.Objective(expr=sum(model.x.values()), sense=pyo.maximize)
@@ -1,5 +1,6 @@
1
1
  import networkx as nx
2
2
  import pyomo.core as pyo
3
+ import pyomo.core.expr.numeric_expr as pyo_expr
3
4
 
4
5
 
5
6
  def mvc(graph: nx.Graph, k: int) -> pyo.ConcreteModel:
@@ -7,7 +8,7 @@ def mvc(graph: nx.Graph, k: int) -> pyo.ConcreteModel:
7
8
  model.x = pyo.Var(graph.nodes, domain=pyo.Binary)
8
9
  model.amount_constraint = pyo.Constraint(expr=sum(model.x.values()) == k)
9
10
 
10
- def obj_expression(model):
11
+ def obj_expression(model: pyo.ConcreteModel) -> pyo_expr.ExpressionBase:
11
12
  # number of edges not covered
12
13
  return sum((1 - model.x[i]) * (1 - model.x[j]) for i, j in graph.edges)
13
14
 
@@ -1,9 +1,9 @@
1
- from typing import List, Tuple, Union
1
+ from typing import Union
2
2
 
3
3
  import numpy as np
4
4
  import pyomo.core as pyo
5
5
 
6
- BoundsList = List[Union[Tuple[int, int], int]]
6
+ BoundsList = list[Union[tuple[int, int], int]]
7
7
 
8
8
 
9
9
  def portfolio_optimization_binary(
@@ -1,10 +1,10 @@
1
1
  import itertools
2
- from typing import List
3
2
 
4
3
  import pyomo.core as pyo
4
+ import pyomo.core.expr.numeric_expr as pyo_expr
5
5
 
6
6
 
7
- def set_cover(sub_sets: List[List[int]]) -> pyo.ConcreteModel:
7
+ def set_cover(sub_sets: list[list[int]]) -> pyo.ConcreteModel:
8
8
  entire_set = set(itertools.chain(*sub_sets))
9
9
  n = max(entire_set)
10
10
  num_sets = len(sub_sets)
@@ -16,7 +16,7 @@ def set_cover(sub_sets: List[List[int]]) -> pyo.ConcreteModel:
16
16
  model.x = pyo.Var(range(num_sets), domain=pyo.Binary)
17
17
 
18
18
  @model.Constraint(entire_set)
19
- def independent_rule(model, num):
19
+ def independent_rule(model: pyo.ConcreteModel, num: int) -> pyo_expr.ExpressionBase:
20
20
  return sum(model.x[idx] for idx in range(num_sets) if num in sub_sets[idx]) >= 1
21
21
 
22
22
  model.cost = pyo.Objective(expr=sum(model.x.values()), sense=pyo.minimize)
@@ -2,6 +2,7 @@ import itertools
2
2
 
3
3
  import numpy as np
4
4
  import pyomo.core as pyo
5
+ import pyomo.core.expr.numeric_expr as pyo_expr
5
6
 
6
7
 
7
8
  def tsp(distance_matrix: np.ndarray) -> pyo.ConcreteModel:
@@ -22,16 +23,16 @@ def tsp(distance_matrix: np.ndarray) -> pyo.ConcreteModel:
22
23
  @model.Constraint(points)
23
24
  def each_step_visits_one_point_rule(
24
25
  model: pyo.ConcreteModel, ii: int
25
- ) -> pyo.ExpressionBase:
26
+ ) -> pyo_expr.ExpressionBase:
26
27
  return sum(model.x[ii, jj] for jj in range(num_points)) == 1
27
28
 
28
29
  @model.Constraint(points)
29
30
  def each_point_visited_once_rule(
30
31
  model: pyo.ConcreteModel, jj: int
31
- ) -> pyo.ExpressionBase:
32
+ ) -> pyo_expr.ExpressionBase:
32
33
  return sum(model.x[ii, jj] for ii in range(num_points)) == 1
33
34
 
34
- def is_travel_between_2_points(point1: int, point2: int) -> pyo.ExpressionBase:
35
+ def is_travel_between_2_points(point1: int, point2: int) -> pyo_expr.ExpressionBase:
35
36
  return sum(model.x[point1, kk] * model.x[point2, kk + 1] for kk in points[:-1])
36
37
 
37
38
  model.cost = pyo.Objective(
@@ -21,11 +21,15 @@ def tsp_digraph(
21
21
  ) # x[i, j] = 1 indicates that point i is visited at step j
22
22
 
23
23
  @model.Constraint(points)
24
- def each_step_visits_one_point_rule(model, ii):
24
+ def each_step_visits_one_point_rule(
25
+ model: pyo.ConcreteModel, ii: int
26
+ ) -> pyo.ExpressionBase:
25
27
  return sum(model.x[ii, jj] for jj in steps) == 1
26
28
 
27
29
  @model.Constraint(steps)
28
- def each_point_visited_once_rule(model, jj):
30
+ def each_point_visited_once_rule(
31
+ model: pyo.ConcreteModel, jj: int
32
+ ) -> pyo.ExpressionBase:
29
33
  return sum(model.x[ii, jj] for ii in points) == 1
30
34
 
31
35
  def is_travel_between_2_points(point1: int, point2: int) -> pyo.ExpressionBase:
@@ -1,10 +1,10 @@
1
- from typing import List
2
-
3
1
  import more_itertools
4
2
  import numpy as np
5
3
  import pydantic
6
4
  from pydantic import BaseModel
7
5
 
6
+ from classiq.interface.exceptions import ClassiqValueError
7
+
8
8
  _TOLERANCE_DECIMALS = 6
9
9
 
10
10
 
@@ -22,7 +22,7 @@ class MhtQaoaInput(BaseModel):
22
22
  reps: pydantic.PositiveInt = pydantic.Field(
23
23
  default=3, description="Number of QAOA layers."
24
24
  )
25
- plot_list: List[PlotData] = pydantic.Field(
25
+ plot_list: list[PlotData] = pydantic.Field(
26
26
  description="The list of (x,y,t) plots of the MHT problem."
27
27
  )
28
28
  misdetection_maximum_time_steps: pydantic.NonNegativeInt = pydantic.Field(
@@ -51,8 +51,11 @@ class MhtQaoaInput(BaseModel):
51
51
  def is_valid_cost(self, cost: float) -> bool:
52
52
  return True
53
53
 
54
- @pydantic.validator("plot_list")
55
- def round_plot_list_times_and_validate(cls, plot_list):
54
+ @pydantic.field_validator("plot_list")
55
+ @classmethod
56
+ def round_plot_list_times_and_validate(
57
+ cls, plot_list: list[PlotData]
58
+ ) -> list[PlotData]:
56
59
  MhtQaoaInput._check_all_ids_are_distinct(plot_list)
57
60
  MhtQaoaInput._round_to_tolerance_decimals(plot_list)
58
61
 
@@ -63,16 +66,18 @@ class MhtQaoaInput(BaseModel):
63
66
  }
64
67
 
65
68
  if len(time_diff_set) != 1:
66
- raise ValueError("The time difference between each time stamp is not equal")
69
+ raise ClassiqValueError(
70
+ "The time difference between each time stamp is not equal"
71
+ )
67
72
 
68
73
  return plot_list
69
74
 
70
75
  @staticmethod
71
- def _round_to_tolerance_decimals(plot_list: List[PlotData]) -> None:
76
+ def _round_to_tolerance_decimals(plot_list: list[PlotData]) -> None:
72
77
  for plot in plot_list:
73
78
  plot.t = np.round(plot.t, decimals=_TOLERANCE_DECIMALS)
74
79
 
75
80
  @staticmethod
76
- def _check_all_ids_are_distinct(plot_list: List[PlotData]) -> None:
81
+ def _check_all_ids_are_distinct(plot_list: list[PlotData]) -> None:
77
82
  if not more_itertools.all_unique(plot.plot_id for plot in plot_list):
78
- raise ValueError("Plot IDs should be unique.")
83
+ raise ClassiqValueError("Plot IDs should be unique.")
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict
1
+ from typing import Any
2
2
 
3
3
  import pydantic
4
4
  from pydantic import BaseModel
@@ -14,4 +14,4 @@ class MaxCutProblem(BaseModel):
14
14
  default_factory=CombinatorialOptimizer,
15
15
  description="preferences for the VQE execution",
16
16
  )
17
- serialized_graph: Dict[str, Any]
17
+ serialized_graph: dict[str, Any]
@@ -1,10 +1,8 @@
1
- from typing import List
2
-
3
1
  from classiq.interface.helpers.versioned_model import VersionedModel
4
2
 
5
3
 
6
4
  class AnglesResult(VersionedModel):
7
- initial_point: List[float]
5
+ initial_point: list[float]
8
6
 
9
7
 
10
8
  class PyomoObjectResult(VersionedModel):
@@ -1,4 +1,4 @@
1
- from classiq._internals.enum_utils import StrEnum
1
+ from classiq.interface.enum_utils import StrEnum
2
2
 
3
3
 
4
4
  class QSolver(StrEnum):
File without changes
@@ -0,0 +1,86 @@
1
+ import json
2
+ from collections.abc import Mapping
3
+ from typing import Any, Optional, Union
4
+ from uuid import UUID
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from classiq.interface.enum_utils import StrEnum
9
+ from classiq.interface.generator.generated_circuit_data import (
10
+ FunctionDebugInfoInterface,
11
+ OperationLevel,
12
+ )
13
+
14
+ ParameterValue = Union[float, int, str, None]
15
+
16
+
17
+ class StatementType(StrEnum):
18
+ CONTROL = "control"
19
+ POWER = "power"
20
+ INVERT = "invert"
21
+ WITHIN_APPLY = "within_apply"
22
+ ASSIGNMENT = "assignment"
23
+ REPEAT = "repeat"
24
+
25
+
26
+ class FunctionDebugInfo(BaseModel):
27
+ name: str
28
+ # Parameters describe classical parameters passed to function
29
+ parameters: dict[str, str]
30
+ level: OperationLevel
31
+ statement_type: Union[StatementType, None] = None
32
+ is_allocate_or_free: bool = Field(default=False)
33
+ is_inverse: bool = Field(default=False)
34
+ port_to_passed_variable_map: dict[str, str] = Field(default_factory=dict)
35
+
36
+ @staticmethod
37
+ def param_controller(value: Any) -> str:
38
+ try:
39
+ return json.dumps(value)
40
+ except TypeError:
41
+ return repr(value)
42
+
43
+ def update_map_from_port_mapping(self, port_mapping: Mapping[str, str]) -> None:
44
+ new_port_to_passed_variable_map = self.port_to_passed_variable_map.copy()
45
+ for old_key, new_key in port_mapping.items():
46
+ if old_key in new_port_to_passed_variable_map:
47
+ new_port_to_passed_variable_map[new_key] = (
48
+ new_port_to_passed_variable_map.pop(old_key)
49
+ )
50
+ self.port_to_passed_variable_map = new_port_to_passed_variable_map
51
+
52
+ def update_map_from_inout_port_mapping(
53
+ self, port_mapping: Mapping[str, tuple[str, str]]
54
+ ) -> None:
55
+ new_port_to_passed_variable_map = self.port_to_passed_variable_map.copy()
56
+ for old_key, (new_key1, new_key2) in port_mapping.items():
57
+ if old_key in new_port_to_passed_variable_map:
58
+ value = new_port_to_passed_variable_map.pop(old_key)
59
+ new_port_to_passed_variable_map[new_key1] = value
60
+ new_port_to_passed_variable_map[new_key2] = value
61
+ self.port_to_passed_variable_map = new_port_to_passed_variable_map
62
+
63
+
64
+ class DebugInfoCollection(BaseModel):
65
+ # Pydantic only started supporting UUID as keys in Pydantic V2
66
+ # See https://github.com/pydantic/pydantic/issues/2096#issuecomment-814860206
67
+ # For now, we use strings as keys in the raw data and use UUID in the wrapper logic
68
+ data: dict[str, FunctionDebugInfo] = Field(default={})
69
+ blackbox_data: dict[str, FunctionDebugInfoInterface] = Field(default={})
70
+
71
+ def __setitem__(self, key: UUID, value: FunctionDebugInfo) -> None:
72
+ self.data[str(key)] = value
73
+
74
+ def get(self, key: UUID) -> Optional[FunctionDebugInfo]:
75
+ return self.data.get(str(key))
76
+
77
+ def __getitem__(self, key: UUID) -> FunctionDebugInfo:
78
+ return self.data[str(key)]
79
+
80
+ def __contains__(self, key: UUID) -> bool:
81
+ return str(key) in self.data
82
+
83
+ def get_blackbox_data(self, key: UUID) -> Optional[FunctionDebugInfoInterface]:
84
+ if (debug_info := self.get(key)) is None:
85
+ return None
86
+ return self.blackbox_data.get(debug_info.name)
@@ -0,0 +1,201 @@
1
+ import logging
2
+ from collections.abc import Iterable
3
+ from typing import Optional
4
+
5
+ _logger = logging.getLogger(__name__)
6
+
7
+ CLASSIQ_SLACK_COMMUNITY_LINK = (
8
+ "\nIf you need further assistance, please reach out on our Community Slack channel "
9
+ "at: https://short.classiq.io/join-slack"
10
+ )
11
+
12
+
13
+ class ClassiqError(Exception):
14
+ def __init__(self, message: str) -> None:
15
+ self._raw_message = message
16
+ if CLASSIQ_SLACK_COMMUNITY_LINK not in message:
17
+ message = message + CLASSIQ_SLACK_COMMUNITY_LINK
18
+ super().__init__(message)
19
+
20
+ @property
21
+ def raw_message(self) -> str:
22
+ return self._raw_message
23
+
24
+
25
+ class ClassiqExecutionError(ClassiqError):
26
+ pass
27
+
28
+
29
+ class ClassiqMissingOutputFormatError(ClassiqError):
30
+ def __init__(self, missing_formats: list[str]) -> None:
31
+ msg = (
32
+ f"Cannot create program because output format is missing. "
33
+ f"Expected one of the following formats: {missing_formats}"
34
+ )
35
+ super().__init__(message=msg)
36
+
37
+
38
+ class ClassiqCombinatorialOptimizationError(ClassiqError):
39
+ pass
40
+
41
+
42
+ class ClassiqOracleError(ClassiqError):
43
+ pass
44
+
45
+
46
+ class ClassiqAnalyzerError(ClassiqError):
47
+ pass
48
+
49
+
50
+ class ClassiqAnalyzerVisualizationError(ClassiqError):
51
+ pass
52
+
53
+
54
+ class ClassiqAPIError(ClassiqError):
55
+ def __init__(self, message: str, status_code: Optional[int] = None) -> None:
56
+ self.status_code = status_code
57
+ super().__init__(message)
58
+
59
+
60
+ class ClassiqVersionError(ClassiqError):
61
+ pass
62
+
63
+
64
+ class ClassiqValueError(ClassiqError, ValueError):
65
+ pass
66
+
67
+
68
+ class ClassiqArithmeticError(ClassiqValueError):
69
+ pass
70
+
71
+
72
+ class ClassiqIndexError(ClassiqError, IndexError):
73
+ pass
74
+
75
+
76
+ class ClassiqWiringError(ClassiqValueError):
77
+ pass
78
+
79
+
80
+ class ClassiqControlError(ClassiqError):
81
+ def __init__(self) -> None:
82
+ message = "Repeated control names, please rename the control states"
83
+ super().__init__(message=message)
84
+
85
+
86
+ class ClassiqQRegError(ClassiqValueError):
87
+ pass
88
+
89
+
90
+ class ClassiqQFuncError(ClassiqValueError):
91
+ pass
92
+
93
+
94
+ class ClassiqQSVMError(ClassiqValueError):
95
+ pass
96
+
97
+
98
+ class ClassiqQNNError(ClassiqValueError):
99
+ pass
100
+
101
+
102
+ class ClassiqTorchError(ClassiqQNNError):
103
+ pass
104
+
105
+
106
+ class ClassiqChemistryError(ClassiqError):
107
+ pass
108
+
109
+
110
+ class ClassiqAuthenticationError(ClassiqError):
111
+ pass
112
+
113
+
114
+ class ClassiqExpiredTokenError(ClassiqAuthenticationError):
115
+ pass
116
+
117
+
118
+ class ClassiqFileNotFoundError(FileNotFoundError):
119
+ pass
120
+
121
+
122
+ class ClassiqStateInitializationError(ClassiqError):
123
+ pass
124
+
125
+
126
+ class ClassiqPasswordManagerSelectionError(ClassiqError):
127
+ pass
128
+
129
+
130
+ class ClassiqMismatchIOsError(ClassiqError):
131
+ pass
132
+
133
+
134
+ class ClassiqNotImplementedError(ClassiqError, NotImplementedError):
135
+ pass
136
+
137
+
138
+ class ClassiqCombOptError(ClassiqError):
139
+ pass
140
+
141
+
142
+ class ClassiqCombOptNoSolutionError(ClassiqError):
143
+
144
+ def __init__(self) -> None:
145
+ super().__init__("There is no valid solution for this optimization problem.")
146
+
147
+
148
+ class ClassiqCombOptTrivialProblemError(ClassiqError):
149
+
150
+ def __init__(self, solution: list[int]) -> None:
151
+ super().__init__(
152
+ message=f"The problem doesn't have free decision variables. "
153
+ f"The trivial solution is {solution}."
154
+ )
155
+
156
+
157
+ class ClassiqCombOptInvalidEncodingTypeError(ClassiqError):
158
+
159
+ def __init__(self, encoding_type: str, valid_types: Iterable[str]) -> None:
160
+ super().__init__(
161
+ f"Invalid variable encoding type {encoding_type}. "
162
+ f"The available encoding types are {list(valid_types)}"
163
+ )
164
+
165
+
166
+ class ClassiqNonNumericCoefficientInPauliError(ClassiqError):
167
+ pass
168
+
169
+
170
+ class ClassiqCombOptNotSupportedProblemError(ClassiqCombOptError):
171
+ pass
172
+
173
+
174
+ class ClassiqExecutorInvalidHamiltonianError(ClassiqCombOptError):
175
+
176
+ def __init__(self) -> None:
177
+ super().__init__("Invalid hamiltonian")
178
+
179
+
180
+ class ClassiqSemanticError(ClassiqError):
181
+ pass
182
+
183
+
184
+ class ClassiqDeprecationWarning(FutureWarning):
185
+ pass
186
+
187
+
188
+ class ClassiqExpansionError(ClassiqError):
189
+ pass
190
+
191
+
192
+ class ClassiqInternalError(ClassiqError):
193
+ def __init__(self, message: Optional[str] = None) -> None:
194
+ final_message = "Internal error occurred. Please contact Classiq support."
195
+ if message is not None:
196
+ final_message += f"\nError: {message}"
197
+ super().__init__(final_message)
198
+
199
+
200
+ class ClassiqInternalExpansionError(ClassiqInternalError):
201
+ pass
@@ -0,0 +1,19 @@
1
+ from classiq.interface.helpers.versioned_model import VersionedModel
2
+
3
+
4
+ class IQCCInitAuthData(VersionedModel):
5
+ auth_scope_id: str
6
+ auth_method_id: str
7
+
8
+
9
+ class IQCCInitAuthResponse(VersionedModel):
10
+ auth_url: str
11
+ token_id: str
12
+
13
+
14
+ class IQCCProbeAuthData(IQCCInitAuthData):
15
+ token_id: str
16
+
17
+
18
+ class IQCCProbeAuthResponse(VersionedModel):
19
+ auth_token: str
@@ -1,28 +1,31 @@
1
1
  from datetime import datetime
2
- from typing import List, Optional
2
+ from typing import Optional
3
3
 
4
- from pydantic import BaseModel, Extra
4
+ from pydantic import BaseModel, Field
5
5
 
6
+ from classiq.interface.executor.execution_request import JobCost
6
7
  from classiq.interface.jobs import JobStatus
7
8
 
8
9
 
9
- class ExecutionJobDetailsV1(BaseModel, extra=Extra.ignore):
10
+ class ExecutionJobDetailsV1(BaseModel, extra="ignore"):
10
11
  id: str
11
12
 
12
- name: Optional[str]
13
+ name: Optional[str] = None
13
14
  start_time: datetime
14
- end_time: Optional[datetime]
15
+ end_time: Optional[datetime] = None
15
16
 
16
- provider: Optional[str]
17
- backend_name: Optional[str]
17
+ provider: Optional[str] = None
18
+ backend_name: Optional[str] = None
18
19
 
19
20
  status: JobStatus
20
21
 
21
- num_shots: Optional[int]
22
- program_id: Optional[str]
22
+ num_shots: Optional[int] = None
23
+ program_id: Optional[str] = None
23
24
 
24
- error: Optional[str]
25
+ error: Optional[str] = None
25
26
 
27
+ cost: Optional[JobCost] = Field(default=None)
26
28
 
27
- class ExecutionJobsQueryResultsV1(BaseModel, extra=Extra.ignore):
28
- results: List[ExecutionJobDetailsV1]
29
+
30
+ class ExecutionJobsQueryResultsV1(BaseModel, extra="ignore"):
31
+ results: list[ExecutionJobDetailsV1]
@@ -0,0 +1,18 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from classiq.interface.chemistry.operator import PauliOperator
6
+ from classiq.interface.executor.quantum_code import Arguments
7
+ from classiq.interface.helpers.custom_encoders import CUSTOM_ENCODERS
8
+
9
+
10
+ class EstimateInput(BaseModel, json_encoders=CUSTOM_ENCODERS):
11
+ hamiltonian: PauliOperator
12
+ parameters: list[Arguments]
13
+
14
+
15
+ class PrimitivesInput(BaseModel, json_encoders=CUSTOM_ENCODERS):
16
+ sample: Optional[list[Arguments]] = Field(default=None)
17
+ estimate: Optional[EstimateInput] = Field(default=None)
18
+ random_seed: Optional[int] = Field(default=None)
@@ -0,0 +1 @@
1
+ DEFAULT_RESULT_NAME = "result"
@@ -1,7 +1,7 @@
1
1
  import pydantic
2
2
 
3
3
  from classiq.interface.chemistry.operator import PauliOperators
4
- from classiq.interface.executor.quantum_program import QuantumProgram
4
+ from classiq.interface.executor.quantum_code import QuantumCode
5
5
 
6
6
 
7
7
  class OperatorsEstimation(pydantic.BaseModel):
@@ -10,5 +10,5 @@ class OperatorsEstimation(pydantic.BaseModel):
10
10
  by a quantum program.
11
11
  """
12
12
 
13
- quantum_program: QuantumProgram
13
+ quantum_program: QuantumCode
14
14
  operators: PauliOperators