classiq 0.38.0__py3-none-any.whl → 0.65.4__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 (499) hide show
  1. classiq/__init__.py +47 -32
  2. classiq/_analyzer_extras/_ipywidgets_async_extension.py +2 -1
  3. classiq/_internals/api_wrapper.py +235 -97
  4. classiq/_internals/async_utils.py +1 -3
  5. classiq/_internals/authentication/auth0.py +26 -10
  6. classiq/_internals/authentication/authentication.py +11 -0
  7. classiq/_internals/authentication/device.py +10 -5
  8. classiq/_internals/authentication/password_manager.py +18 -6
  9. classiq/_internals/authentication/token_manager.py +10 -5
  10. classiq/_internals/client.py +94 -33
  11. classiq/_internals/config.py +3 -4
  12. classiq/_internals/host_checker.py +38 -15
  13. classiq/_internals/jobs.py +60 -57
  14. classiq/_internals/type_validation.py +9 -9
  15. classiq/analyzer/__init__.py +1 -3
  16. classiq/analyzer/analyzer.py +24 -19
  17. classiq/analyzer/analyzer_utilities.py +10 -10
  18. classiq/analyzer/rb.py +15 -15
  19. classiq/analyzer/show_interactive_hack.py +27 -4
  20. classiq/analyzer/url_utils.py +2 -3
  21. classiq/applications/__init__.py +3 -12
  22. classiq/applications/chemistry/__init__.py +14 -10
  23. classiq/applications/chemistry/ansatz_parameters.py +4 -4
  24. classiq/{applications_model_constructors → applications/chemistry}/chemistry_model_constructor.py +165 -158
  25. classiq/applications/chemistry/ground_state_problem.py +1 -1
  26. classiq/{applications_model_constructors → applications}/combinatorial_helpers/allowed_constraints.py +4 -1
  27. classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/arithmetic_expression.py +1 -1
  28. classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/isolation.py +1 -1
  29. classiq/{applications_model_constructors → applications}/combinatorial_helpers/combinatorial_problem_utils.py +51 -15
  30. classiq/{applications_model_constructors → applications}/combinatorial_helpers/encoding_mapping.py +12 -12
  31. classiq/{applications_model_constructors → applications}/combinatorial_helpers/encoding_utils.py +8 -6
  32. classiq/{applications_model_constructors → applications}/combinatorial_helpers/memory.py +7 -11
  33. classiq/{applications_model_constructors → applications}/combinatorial_helpers/optimization_model.py +67 -40
  34. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +46 -0
  35. classiq/applications/combinatorial_helpers/pyomo_utils.py +447 -0
  36. classiq/{applications_model_constructors → applications}/combinatorial_helpers/sympy_utils.py +2 -2
  37. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/encoding.py +15 -20
  38. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/fixed_variables.py +14 -15
  39. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/ising_converter.py +11 -15
  40. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/penalty.py +1 -2
  41. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/penalty_support.py +3 -7
  42. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/sign_seperation.py +2 -3
  43. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/slack_variables.py +5 -8
  44. classiq/applications/combinatorial_optimization/__init__.py +20 -6
  45. classiq/applications/combinatorial_optimization/combinatorial_optimization_config.py +2 -2
  46. classiq/{applications_model_constructors → applications/combinatorial_optimization}/combinatorial_optimization_model_constructor.py +35 -33
  47. classiq/applications/combinatorial_optimization/combinatorial_problem.py +229 -0
  48. classiq/applications/combinatorial_optimization/examples/__init__.py +1 -3
  49. classiq/applications/finance/__init__.py +4 -5
  50. classiq/{applications_model_constructors → applications/finance}/finance_model_constructor.py +48 -42
  51. classiq/applications/grover/__init__.py +9 -0
  52. classiq/{applications_model_constructors → applications/grover}/grover_model_constructor.py +52 -51
  53. classiq/applications/hamiltonian/pauli_decomposition.py +113 -0
  54. classiq/applications/libraries/qmci_library.py +22 -0
  55. classiq/applications/qnn/__init__.py +2 -4
  56. classiq/applications/qnn/circuit_utils.py +6 -6
  57. classiq/applications/qnn/datasets/__init__.py +9 -11
  58. classiq/applications/qnn/datasets/dataset_base_classes.py +7 -5
  59. classiq/applications/qnn/datasets/dataset_not.py +2 -1
  60. classiq/applications/qnn/datasets/dataset_parity.py +2 -2
  61. classiq/applications/qnn/gradients/quantum_gradient.py +1 -1
  62. classiq/applications/qnn/gradients/simple_quantum_gradient.py +2 -1
  63. classiq/applications/qnn/qlayer.py +30 -10
  64. classiq/applications/qnn/torch_utils.py +4 -3
  65. classiq/applications/qnn/types.py +5 -5
  66. classiq/applications/qsvm/__init__.py +6 -4
  67. classiq/applications/qsvm/qsvm.py +3 -6
  68. classiq/applications/qsvm/qsvm_data_generation.py +3 -3
  69. classiq/{applications_model_constructors → applications/qsvm}/qsvm_model_constructor.py +30 -28
  70. classiq/execution/__init__.py +8 -3
  71. classiq/execution/all_hardware_devices.py +11 -0
  72. classiq/execution/execution_session.py +400 -0
  73. classiq/execution/iqcc.py +63 -0
  74. classiq/execution/jobs.py +197 -25
  75. classiq/execution/qnn.py +79 -0
  76. classiq/executor.py +20 -115
  77. classiq/interface/_version.py +1 -1
  78. classiq/interface/analyzer/analysis_params.py +43 -13
  79. classiq/interface/analyzer/cytoscape_graph.py +15 -9
  80. classiq/interface/analyzer/result.py +28 -32
  81. classiq/interface/applications/qsvm.py +20 -29
  82. classiq/interface/ast_node.py +16 -0
  83. classiq/interface/backend/backend_preferences.py +390 -121
  84. classiq/interface/backend/ionq/ionq_quantum_program.py +15 -23
  85. classiq/interface/backend/pydantic_backend.py +25 -22
  86. classiq/interface/backend/quantum_backend_providers.py +69 -16
  87. classiq/interface/chemistry/fermionic_operator.py +30 -21
  88. classiq/interface/chemistry/ground_state_problem.py +28 -25
  89. classiq/interface/chemistry/molecule.py +14 -10
  90. classiq/interface/chemistry/operator.py +64 -231
  91. classiq/interface/combinatorial_optimization/encoding_types.py +1 -1
  92. classiq/interface/combinatorial_optimization/examples/ascending_sequence.py +1 -3
  93. classiq/interface/combinatorial_optimization/examples/integer_portfolio_optimization.py +2 -4
  94. classiq/interface/combinatorial_optimization/examples/knapsack.py +3 -3
  95. classiq/interface/combinatorial_optimization/examples/mht.py +10 -6
  96. classiq/interface/combinatorial_optimization/examples/portfolio_variations.py +2 -2
  97. classiq/interface/combinatorial_optimization/examples/set_cover.py +1 -2
  98. classiq/interface/combinatorial_optimization/mht_qaoa_input.py +8 -9
  99. classiq/interface/combinatorial_optimization/optimization_problem.py +2 -2
  100. classiq/interface/combinatorial_optimization/result.py +1 -3
  101. classiq/interface/combinatorial_optimization/solver_types.py +1 -1
  102. classiq/interface/debug_info/debug_info.py +86 -0
  103. classiq/{exceptions.py → interface/exceptions.py} +37 -9
  104. classiq/interface/execution/iqcc.py +19 -0
  105. classiq/interface/execution/jobs.py +15 -12
  106. classiq/interface/execution/primitives.py +18 -0
  107. classiq/interface/executor/constants.py +1 -0
  108. classiq/interface/executor/execution_preferences.py +26 -114
  109. classiq/interface/executor/execution_request.py +24 -46
  110. classiq/interface/executor/execution_result.py +30 -8
  111. classiq/interface/executor/iqae_result.py +4 -6
  112. classiq/interface/executor/optimizer_preferences.py +17 -14
  113. classiq/interface/executor/quantum_code.py +28 -24
  114. classiq/interface/executor/quantum_instruction_set.py +2 -2
  115. classiq/interface/executor/register_initialization.py +11 -14
  116. classiq/interface/executor/result.py +83 -56
  117. classiq/interface/executor/vqe_result.py +10 -10
  118. classiq/interface/finance/function_input.py +35 -25
  119. classiq/interface/finance/gaussian_model_input.py +5 -5
  120. classiq/interface/finance/log_normal_model_input.py +4 -4
  121. classiq/interface/finance/model_input.py +4 -4
  122. classiq/interface/generator/adjacency.py +1 -3
  123. classiq/interface/generator/amplitude_loading.py +22 -12
  124. classiq/interface/generator/ansatz_library.py +5 -5
  125. classiq/interface/generator/application_apis/arithmetic_declarations.py +8 -5
  126. classiq/interface/generator/application_apis/chemistry_declarations.py +27 -187
  127. classiq/interface/generator/application_apis/combinatorial_optimization_declarations.py +18 -21
  128. classiq/interface/generator/application_apis/entangler_declarations.py +11 -6
  129. classiq/interface/generator/application_apis/finance_declarations.py +48 -69
  130. classiq/interface/generator/application_apis/qsvm_declarations.py +0 -70
  131. classiq/interface/generator/arith/argument_utils.py +46 -5
  132. classiq/interface/generator/arith/arithmetic.py +35 -16
  133. classiq/interface/generator/arith/arithmetic_arg_type_validator.py +6 -7
  134. classiq/interface/generator/arith/arithmetic_expression_abc.py +66 -25
  135. classiq/interface/generator/arith/arithmetic_expression_parser.py +11 -11
  136. classiq/interface/generator/arith/arithmetic_expression_validator.py +47 -43
  137. classiq/interface/generator/arith/arithmetic_operations.py +14 -6
  138. classiq/interface/generator/arith/arithmetic_param_getters.py +7 -8
  139. classiq/interface/generator/arith/arithmetic_result_builder.py +21 -17
  140. classiq/interface/generator/arith/ast_node_rewrite.py +3 -2
  141. classiq/interface/generator/arith/binary_ops.py +218 -130
  142. classiq/interface/generator/arith/endianness.py +1 -1
  143. classiq/interface/generator/arith/extremum_operations.py +96 -25
  144. classiq/interface/generator/arith/logical_ops.py +14 -12
  145. classiq/interface/generator/arith/number_utils.py +12 -6
  146. classiq/interface/generator/arith/register_user_input.py +60 -37
  147. classiq/interface/generator/arith/unary_ops.py +49 -29
  148. classiq/interface/generator/arith/uncomputation_methods.py +1 -1
  149. classiq/interface/generator/builtin_api_builder.py +2 -9
  150. classiq/interface/generator/chemistry_function_params.py +3 -3
  151. classiq/interface/generator/circuit_code/circuit_code.py +7 -7
  152. classiq/interface/generator/circuit_code/types_and_constants.py +4 -7
  153. classiq/interface/generator/commuting_pauli_exponentiation.py +7 -7
  154. classiq/interface/generator/compiler_keywords.py +5 -1
  155. classiq/interface/generator/complex_type.py +13 -18
  156. classiq/interface/generator/constant.py +3 -4
  157. classiq/interface/generator/control_state.py +34 -29
  158. classiq/interface/generator/copy.py +47 -0
  159. classiq/interface/generator/custom_ansatz.py +2 -5
  160. classiq/interface/generator/distance.py +3 -5
  161. classiq/interface/generator/excitations.py +3 -2
  162. classiq/interface/generator/expressions/atomic_expression_functions.py +21 -5
  163. classiq/interface/generator/expressions/enums/__init__.py +0 -10
  164. classiq/interface/generator/expressions/enums/finance_functions.py +12 -22
  165. classiq/interface/generator/expressions/evaluated_expression.py +5 -5
  166. classiq/interface/generator/expressions/expression.py +26 -14
  167. classiq/interface/generator/expressions/expression_constants.py +9 -3
  168. classiq/interface/generator/expressions/non_symbolic_expr.py +119 -0
  169. classiq/interface/generator/expressions/qmod_qarray_proxy.py +99 -0
  170. classiq/interface/generator/expressions/qmod_qscalar_proxy.py +34 -8
  171. classiq/interface/generator/expressions/qmod_qstruct_proxy.py +36 -0
  172. classiq/interface/generator/expressions/qmod_sized_proxy.py +30 -2
  173. classiq/interface/generator/expressions/qmod_struct_instance.py +14 -2
  174. classiq/interface/generator/expressions/sympy_supported_expressions.py +19 -11
  175. classiq/interface/generator/finance.py +2 -2
  176. classiq/interface/generator/function_param_library.py +6 -6
  177. classiq/interface/generator/function_param_list_without_self_reference.py +2 -10
  178. classiq/interface/generator/function_params.py +36 -64
  179. classiq/interface/generator/functions/__init__.py +0 -22
  180. classiq/interface/generator/functions/builtins/internal_operators.py +16 -0
  181. classiq/interface/generator/functions/classical_function_declaration.py +18 -9
  182. classiq/interface/generator/functions/classical_type.py +47 -166
  183. classiq/interface/generator/functions/concrete_types.py +55 -0
  184. classiq/interface/generator/functions/function_declaration.py +13 -14
  185. classiq/interface/generator/functions/port_declaration.py +1 -13
  186. classiq/interface/generator/functions/qmod_python_interface.py +2 -1
  187. classiq/interface/generator/functions/type_name.py +90 -0
  188. classiq/interface/generator/generated_circuit_data.py +153 -20
  189. classiq/interface/generator/grover_diffuser.py +32 -25
  190. classiq/interface/generator/grover_operator.py +34 -25
  191. classiq/interface/generator/hamiltonian_evolution/exponentiation.py +4 -6
  192. classiq/interface/generator/hamiltonian_evolution/qdrift.py +4 -4
  193. classiq/interface/generator/hamiltonian_evolution/suzuki_trotter.py +9 -9
  194. classiq/interface/generator/hardware/hardware_data.py +72 -34
  195. classiq/interface/generator/hardware_efficient_ansatz.py +20 -16
  196. classiq/interface/generator/hartree_fock.py +13 -5
  197. classiq/interface/generator/identity.py +10 -6
  198. classiq/interface/generator/linear_pauli_rotations.py +32 -20
  199. classiq/interface/generator/mcmt_method.py +1 -1
  200. classiq/interface/generator/mcu.py +17 -15
  201. classiq/interface/generator/mcx.py +24 -17
  202. classiq/interface/generator/model/__init__.py +2 -5
  203. classiq/interface/generator/model/constraints.py +26 -8
  204. classiq/interface/generator/model/model.py +27 -190
  205. classiq/interface/generator/model/preferences/preferences.py +115 -41
  206. classiq/{quantum_register.py → interface/generator/model/quantum_register.py} +14 -17
  207. classiq/interface/generator/oracles/arithmetic_oracle.py +2 -4
  208. classiq/interface/generator/oracles/custom_oracle.py +15 -13
  209. classiq/interface/generator/oracles/oracle_abc.py +7 -7
  210. classiq/interface/generator/partitioned_register.py +7 -7
  211. classiq/interface/generator/piecewise_linear_amplitude_loading.py +45 -29
  212. classiq/interface/generator/preferences/optimization.py +1 -2
  213. classiq/interface/generator/qpe.py +41 -30
  214. classiq/interface/generator/qsvm.py +9 -10
  215. classiq/interface/generator/quantum_function_call.py +88 -73
  216. classiq/interface/generator/quantum_program.py +41 -24
  217. classiq/interface/generator/range_types.py +11 -12
  218. classiq/interface/generator/register_role.py +18 -6
  219. classiq/interface/generator/slice_parsing_utils.py +5 -5
  220. classiq/interface/generator/standard_gates/controlled_standard_gates.py +30 -39
  221. classiq/interface/generator/standard_gates/standard_angle_metaclass.py +2 -6
  222. classiq/interface/generator/standard_gates/standard_gates.py +3 -3
  223. classiq/interface/generator/standard_gates/u_gate.py +7 -10
  224. classiq/interface/generator/state_preparation/bell_state_preparation.py +3 -3
  225. classiq/interface/generator/state_preparation/computational_basis_state_preparation.py +2 -1
  226. classiq/interface/generator/state_preparation/distributions.py +16 -15
  227. classiq/interface/generator/state_preparation/metrics.py +4 -7
  228. classiq/interface/generator/state_preparation/state_preparation.py +25 -20
  229. classiq/interface/generator/synthesis_metadata/synthesis_duration.py +0 -4
  230. classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +20 -6
  231. classiq/interface/generator/transpiler_basis_gates.py +7 -3
  232. classiq/interface/generator/types/builtin_enum_declarations.py +178 -0
  233. classiq/interface/generator/types/compilation_metadata.py +6 -0
  234. classiq/interface/generator/types/enum_declaration.py +54 -0
  235. classiq/interface/generator/types/qstruct_declaration.py +18 -0
  236. classiq/interface/generator/types/struct_declaration.py +7 -11
  237. classiq/interface/generator/ucc.py +5 -4
  238. classiq/interface/generator/unitary_gate.py +5 -5
  239. classiq/interface/generator/user_defined_function_params.py +4 -1
  240. classiq/interface/generator/validations/flow_graph.py +7 -7
  241. classiq/interface/generator/validations/validator_functions.py +4 -4
  242. classiq/interface/generator/visitor.py +23 -16
  243. classiq/interface/hardware.py +29 -8
  244. classiq/interface/helpers/classproperty.py +8 -0
  245. classiq/interface/helpers/custom_encoders.py +2 -2
  246. classiq/interface/helpers/custom_pydantic_types.py +40 -50
  247. classiq/interface/helpers/datastructures.py +26 -0
  248. classiq/interface/helpers/hashable_mixin.py +3 -2
  249. classiq/interface/helpers/hashable_pydantic_base_model.py +2 -1
  250. classiq/interface/helpers/pydantic_model_helpers.py +7 -5
  251. classiq/interface/helpers/validation_helpers.py +3 -20
  252. classiq/interface/helpers/versioned_model.py +1 -4
  253. classiq/interface/ide/ide_data.py +16 -20
  254. classiq/interface/ide/visual_model.py +130 -0
  255. classiq/interface/interface_version.py +1 -0
  256. classiq/interface/jobs.py +29 -69
  257. classiq/interface/model/allocate.py +16 -0
  258. classiq/interface/model/bind_operation.py +32 -9
  259. classiq/interface/model/classical_if.py +15 -0
  260. classiq/interface/model/classical_parameter_declaration.py +33 -3
  261. classiq/interface/model/control.py +45 -0
  262. classiq/interface/model/handle_binding.py +298 -20
  263. classiq/interface/model/inplace_binary_operation.py +29 -24
  264. classiq/interface/model/invert.py +12 -0
  265. classiq/interface/model/model.py +69 -61
  266. classiq/interface/model/native_function_definition.py +17 -20
  267. classiq/interface/model/parameter.py +13 -0
  268. classiq/interface/model/phase_operation.py +11 -0
  269. classiq/interface/model/port_declaration.py +27 -9
  270. classiq/interface/model/power.py +14 -0
  271. classiq/interface/model/quantum_expressions/amplitude_loading_operation.py +30 -18
  272. classiq/interface/model/quantum_expressions/arithmetic_operation.py +51 -14
  273. classiq/interface/model/quantum_expressions/quantum_expression.py +12 -35
  274. classiq/interface/model/quantum_function_call.py +141 -343
  275. classiq/interface/model/quantum_function_declaration.py +190 -157
  276. classiq/interface/model/quantum_lambda_function.py +33 -32
  277. classiq/interface/model/quantum_statement.py +71 -12
  278. classiq/interface/model/quantum_type.py +177 -40
  279. classiq/interface/model/quantum_variable_declaration.py +3 -25
  280. classiq/interface/model/repeat.py +15 -0
  281. classiq/interface/model/statement_block.py +40 -14
  282. classiq/interface/model/validation_handle.py +13 -6
  283. classiq/interface/model/variable_declaration_statement.py +3 -1
  284. classiq/interface/model/within_apply_operation.py +7 -5
  285. classiq/interface/server/global_versions.py +6 -7
  286. classiq/interface/server/routes.py +17 -21
  287. classiq/interface/source_reference.py +59 -0
  288. classiq/model_expansions/atomic_expression_functions_defs.py +253 -0
  289. classiq/model_expansions/capturing/__init__.py +0 -0
  290. classiq/model_expansions/capturing/captured_vars.py +435 -0
  291. classiq/model_expansions/capturing/mangling_utils.py +56 -0
  292. classiq/model_expansions/closure.py +171 -0
  293. classiq/model_expansions/debug_flag.py +3 -0
  294. classiq/model_expansions/evaluators/__init__.py +0 -0
  295. classiq/model_expansions/evaluators/arg_type_match.py +158 -0
  296. classiq/model_expansions/evaluators/argument_types.py +42 -0
  297. classiq/model_expansions/evaluators/classical_expression.py +36 -0
  298. classiq/model_expansions/evaluators/control.py +144 -0
  299. classiq/model_expansions/evaluators/parameter_types.py +226 -0
  300. classiq/model_expansions/evaluators/quantum_type_utils.py +239 -0
  301. classiq/model_expansions/evaluators/type_type_match.py +90 -0
  302. classiq/model_expansions/expression_evaluator.py +135 -0
  303. classiq/model_expansions/expression_renamer.py +76 -0
  304. classiq/model_expansions/function_builder.py +247 -0
  305. classiq/model_expansions/generative_functions.py +158 -0
  306. classiq/model_expansions/interpreters/__init__.py +0 -0
  307. classiq/model_expansions/interpreters/base_interpreter.py +263 -0
  308. classiq/model_expansions/interpreters/frontend_generative_interpreter.py +28 -0
  309. classiq/model_expansions/interpreters/generative_interpreter.py +249 -0
  310. classiq/model_expansions/model_tables.py +18 -0
  311. classiq/model_expansions/quantum_operations/__init__.py +9 -0
  312. classiq/model_expansions/quantum_operations/bind.py +60 -0
  313. classiq/model_expansions/quantum_operations/call_emitter.py +266 -0
  314. classiq/model_expansions/quantum_operations/classicalif.py +53 -0
  315. classiq/model_expansions/quantum_operations/declarative_call_emitter.py +87 -0
  316. classiq/model_expansions/quantum_operations/emitter.py +181 -0
  317. classiq/model_expansions/quantum_operations/quantum_function_call.py +33 -0
  318. classiq/model_expansions/quantum_operations/repeat.py +56 -0
  319. classiq/model_expansions/quantum_operations/shallow_emitter.py +180 -0
  320. classiq/model_expansions/quantum_operations/variable_decleration.py +28 -0
  321. classiq/model_expansions/scope.py +240 -0
  322. classiq/model_expansions/scope_initialization.py +150 -0
  323. classiq/model_expansions/sympy_conversion/__init__.py +0 -0
  324. classiq/model_expansions/sympy_conversion/arithmetics.py +49 -0
  325. classiq/model_expansions/sympy_conversion/expression_to_sympy.py +179 -0
  326. classiq/model_expansions/sympy_conversion/sympy_to_python.py +123 -0
  327. classiq/model_expansions/transformers/__init__.py +0 -0
  328. classiq/model_expansions/transformers/ast_renamer.py +26 -0
  329. classiq/model_expansions/transformers/var_splitter.py +299 -0
  330. classiq/model_expansions/utils/__init__.py +0 -0
  331. classiq/model_expansions/utils/counted_name_allocator.py +11 -0
  332. classiq/model_expansions/utils/handles_collector.py +33 -0
  333. classiq/model_expansions/visitors/__init__.py +0 -0
  334. classiq/model_expansions/visitors/boolean_expression_transformers.py +214 -0
  335. classiq/model_expansions/visitors/variable_references.py +144 -0
  336. classiq/open_library/__init__.py +4 -0
  337. classiq/open_library/functions/__init__.py +130 -0
  338. classiq/open_library/functions/amplitude_estimation.py +30 -0
  339. classiq/open_library/functions/discrete_sine_cosine_transform.py +181 -0
  340. classiq/open_library/functions/grover.py +157 -0
  341. classiq/open_library/functions/hea.py +115 -0
  342. classiq/open_library/functions/linear_pauli_rotation.py +82 -0
  343. classiq/open_library/functions/modular_exponentiation.py +201 -0
  344. classiq/open_library/functions/qaoa_penalty.py +117 -0
  345. classiq/open_library/functions/qft_functions.py +54 -0
  346. classiq/open_library/functions/qpe.py +46 -0
  347. classiq/open_library/functions/qsvt.py +331 -0
  348. classiq/open_library/functions/state_preparation.py +301 -0
  349. classiq/open_library/functions/swap_test.py +27 -0
  350. classiq/open_library/functions/utility_functions.py +81 -0
  351. classiq/open_library/functions/variational.py +52 -0
  352. classiq/qmod/__init__.py +10 -10
  353. classiq/qmod/builtins/__init__.py +19 -2
  354. classiq/qmod/builtins/classical_execution_primitives.py +36 -14
  355. classiq/qmod/builtins/classical_functions.py +39 -43
  356. classiq/qmod/builtins/constants.py +10 -0
  357. classiq/qmod/builtins/enums.py +208 -0
  358. classiq/qmod/builtins/functions/__init__.py +137 -0
  359. classiq/qmod/builtins/functions/allocation.py +150 -0
  360. classiq/qmod/builtins/functions/arithmetic.py +55 -0
  361. classiq/qmod/builtins/functions/benchmarking.py +8 -0
  362. classiq/qmod/builtins/functions/chemistry.py +91 -0
  363. classiq/qmod/builtins/functions/exponentiation.py +105 -0
  364. classiq/qmod/builtins/functions/finance.py +34 -0
  365. classiq/qmod/builtins/functions/operators.py +16 -0
  366. classiq/qmod/builtins/functions/qsvm.py +24 -0
  367. classiq/qmod/builtins/functions/standard_gates.py +651 -0
  368. classiq/qmod/builtins/operations.py +373 -40
  369. classiq/qmod/builtins/structs.py +103 -80
  370. classiq/qmod/cfunc.py +2 -2
  371. classiq/qmod/classical_function.py +4 -8
  372. classiq/qmod/cparam.py +64 -0
  373. classiq/qmod/create_model_function.py +56 -0
  374. classiq/qmod/declaration_inferrer.py +143 -101
  375. classiq/qmod/expression_query.py +20 -4
  376. classiq/qmod/generative.py +42 -0
  377. classiq/qmod/model_state_container.py +18 -6
  378. classiq/qmod/native/__init__.py +7 -0
  379. classiq/qmod/native/expression_to_qmod.py +16 -11
  380. classiq/qmod/native/pretty_printer.py +187 -97
  381. classiq/qmod/pretty_print/__init__.py +7 -0
  382. classiq/qmod/pretty_print/expression_to_python.py +222 -0
  383. classiq/qmod/pretty_print/pretty_printer.py +572 -0
  384. classiq/qmod/python_classical_type.py +67 -0
  385. classiq/qmod/qfunc.py +60 -8
  386. classiq/qmod/qmod_constant.py +93 -26
  387. classiq/qmod/qmod_parameter.py +68 -59
  388. classiq/qmod/qmod_variable.py +468 -155
  389. classiq/qmod/quantum_callable.py +17 -7
  390. classiq/qmod/quantum_expandable.py +269 -96
  391. classiq/qmod/quantum_function.py +196 -41
  392. classiq/qmod/semantics/__init__.py +0 -0
  393. classiq/qmod/semantics/annotation/__init__.py +0 -0
  394. classiq/qmod/semantics/annotation/call_annotation.py +92 -0
  395. classiq/qmod/semantics/annotation/qstruct_annotator.py +23 -0
  396. classiq/qmod/semantics/error_manager.py +88 -0
  397. classiq/qmod/semantics/lambdas.py +25 -0
  398. classiq/qmod/semantics/static_semantics_visitor.py +384 -0
  399. classiq/qmod/semantics/validation/__init__.py +0 -0
  400. classiq/qmod/semantics/validation/constants_validation.py +16 -0
  401. classiq/qmod/semantics/validation/func_call_validation.py +99 -0
  402. classiq/qmod/semantics/validation/function_name_collisions_validation.py +23 -0
  403. classiq/qmod/semantics/validation/handle_validation.py +85 -0
  404. classiq/qmod/semantics/validation/main_validation.py +33 -0
  405. classiq/qmod/semantics/validation/types_validation.py +128 -0
  406. classiq/qmod/symbolic.py +147 -123
  407. classiq/qmod/symbolic_expr.py +27 -12
  408. classiq/qmod/symbolic_type.py +2 -5
  409. classiq/qmod/type_attribute_remover.py +32 -0
  410. classiq/qmod/utilities.py +98 -4
  411. classiq/qmod/write_qmod.py +17 -3
  412. classiq/synthesis.py +210 -22
  413. {classiq-0.38.0.dist-info → classiq-0.65.4.dist-info}/METADATA +16 -9
  414. classiq-0.65.4.dist-info/RECORD +521 -0
  415. classiq/_internals/_qfunc_ext.py +0 -6
  416. classiq/applications/benchmarking/__init__.py +0 -9
  417. classiq/applications/benchmarking/mirror_benchmarking.py +0 -70
  418. classiq/applications/numpy_utils.py +0 -37
  419. classiq/applications_model_constructors/__init__.py +0 -25
  420. classiq/applications_model_constructors/combinatorial_helpers/multiple_comp_basis_sp.py +0 -34
  421. classiq/applications_model_constructors/combinatorial_helpers/pauli_helpers/pauli_utils.py +0 -65
  422. classiq/applications_model_constructors/combinatorial_helpers/pyomo_utils.py +0 -243
  423. classiq/applications_model_constructors/libraries/ampltitude_estimation_library.py +0 -11
  424. classiq/applications_model_constructors/libraries/qmci_library.py +0 -107
  425. classiq/builtin_functions/__init__.py +0 -43
  426. classiq/builtin_functions/amplitude_loading.py +0 -3
  427. classiq/builtin_functions/binary_ops.py +0 -1
  428. classiq/builtin_functions/exponentiation.py +0 -5
  429. classiq/builtin_functions/qpe.py +0 -4
  430. classiq/builtin_functions/qsvm.py +0 -7
  431. classiq/builtin_functions/range_types.py +0 -5
  432. classiq/builtin_functions/standard_gates.py +0 -1
  433. classiq/builtin_functions/state_preparation.py +0 -6
  434. classiq/builtin_functions/suzuki_trotter.py +0 -3
  435. classiq/interface/executor/aws_execution_cost.py +0 -73
  436. classiq/interface/executor/error_mitigation.py +0 -6
  437. classiq/interface/generator/credit_risk_example/linear_gci.py +0 -122
  438. classiq/interface/generator/credit_risk_example/weighted_adder.py +0 -69
  439. classiq/interface/generator/expressions/enums/chemistry.py +0 -28
  440. classiq/interface/generator/expressions/enums/classical_enum.py +0 -5
  441. classiq/interface/generator/expressions/enums/ladder_operator.py +0 -16
  442. classiq/interface/generator/expressions/enums/optimizers.py +0 -9
  443. classiq/interface/generator/expressions/enums/pauli.py +0 -8
  444. classiq/interface/generator/expressions/enums/qsvm_feature_map_entanglement.py +0 -9
  445. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/__init__.py +0 -18
  446. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/atomic_quantum_functions.py +0 -641
  447. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/exponentiation_functions.py +0 -89
  448. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/std_lib_functions.py +0 -1229
  449. classiq/interface/generator/functions/core_lib_declarations/quantum_operators.py +0 -95
  450. classiq/interface/generator/functions/foreign_function_definition.py +0 -114
  451. classiq/interface/generator/functions/function_implementation.py +0 -107
  452. classiq/interface/generator/functions/native_function_definition.py +0 -155
  453. classiq/interface/generator/functions/quantum_function_declaration.py +0 -69
  454. classiq/interface/generator/functions/register.py +0 -44
  455. classiq/interface/generator/functions/register_mapping_data.py +0 -106
  456. classiq/interface/generator/inequality_mixer.py +0 -51
  457. classiq/interface/generator/model/classical_main_validator.py +0 -106
  458. classiq/interface/generator/range_mixer.py +0 -56
  459. classiq/interface/generator/state_propagator.py +0 -74
  460. classiq/interface/generator/types/builtin_struct_declarations/__init__.py +0 -1
  461. classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +0 -22
  462. classiq/interface/ide/show.py +0 -34
  463. classiq/interface/model/call_synthesis_data.py +0 -68
  464. classiq/interface/model/common_model_types.py +0 -23
  465. classiq/interface/model/quantum_expressions/control_state.py +0 -38
  466. classiq/interface/model/quantum_if_operation.py +0 -94
  467. classiq/interface/model/resolvers/function_call_resolver.py +0 -43
  468. classiq/interface/model/validations/handle_validation_base.py +0 -55
  469. classiq/interface/model/validations/handles_validator.py +0 -156
  470. classiq/interface/model/validations/port_to_wire_name_generator.py +0 -12
  471. classiq/model/__init__.py +0 -14
  472. classiq/model/composite_function_generator.py +0 -33
  473. classiq/model/function_handler.py +0 -462
  474. classiq/model/logic_flow.py +0 -149
  475. classiq/model/logic_flow_change_handler.py +0 -71
  476. classiq/model/model.py +0 -229
  477. classiq/qmod/builtins/functions.py +0 -913
  478. classiq/qmod/qmod_struct.py +0 -37
  479. classiq/quantum_functions/__init__.py +0 -17
  480. classiq/quantum_functions/annotation_parser.py +0 -205
  481. classiq/quantum_functions/decorators.py +0 -22
  482. classiq/quantum_functions/function_library.py +0 -181
  483. classiq/quantum_functions/function_parser.py +0 -74
  484. classiq/quantum_functions/quantum_function.py +0 -236
  485. classiq-0.38.0.dist-info/RECORD +0 -454
  486. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/__init__.py +0 -0
  487. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/__init__.py +0 -0
  488. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/pauli_helpers/__init__.py +0 -0
  489. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/pauli_helpers/pauli_sparsing.py +0 -0
  490. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/py.typed +0 -0
  491. /classiq/{applications_model_constructors/combinatorial_helpers/transformations → applications/combinatorial_helpers/solvers}/__init__.py +0 -0
  492. /classiq/{applications_model_constructors/libraries → applications/combinatorial_helpers/transformations}/__init__.py +0 -0
  493. /classiq/{interface/generator/credit_risk_example → applications/hamiltonian}/__init__.py +0 -0
  494. /classiq/{interface/generator/functions/core_lib_declarations → applications/libraries}/__init__.py +0 -0
  495. /classiq/interface/{model/resolvers → debug_info}/__init__.py +0 -0
  496. /classiq/{_internals → interface}/enum_utils.py +0 -0
  497. /classiq/interface/{model/validations → generator/functions/builtins}/__init__.py +0 -0
  498. /classiq/{interface/generator/functions/core_lib_declarations/quantum_functions/chemistry_functions.py → model_expansions/__init__.py} +0 -0
  499. {classiq-0.38.0.dist-info → classiq-0.65.4.dist-info}/WHEEL +0 -0
@@ -1,8 +1,5 @@
1
- from typing import Tuple, Union
1
+ from typing import Union
2
2
 
3
- from classiq.qmod.qmod_parameter import QParam
4
3
  from classiq.qmod.symbolic_expr import SymbolicExpr
5
4
 
6
- SymbolicTypes = Union[
7
- QParam, SymbolicExpr, int, float, bool, Tuple["SymbolicTypes", ...]
8
- ]
5
+ SymbolicTypes = Union[SymbolicExpr, int, float, bool, tuple["SymbolicTypes", ...]]
@@ -0,0 +1,32 @@
1
+ from classiq.interface.generator.visitor import Transformer
2
+ from classiq.interface.model.port_declaration import PortDeclaration
3
+ from classiq.interface.model.quantum_function_declaration import (
4
+ AnonQuantumOperandDeclaration,
5
+ )
6
+ from classiq.interface.model.quantum_type import QuantumBitvector, QuantumNumeric
7
+
8
+
9
+ def decl_without_type_attributes(
10
+ operand_declaration: AnonQuantumOperandDeclaration,
11
+ ) -> AnonQuantumOperandDeclaration:
12
+ remover = AttributeRemover()
13
+ return operand_declaration.model_copy(
14
+ update=dict(
15
+ positional_arg_declarations=[
16
+ remover.visit(arg) if isinstance(arg, PortDeclaration) else arg
17
+ for arg in operand_declaration.positional_arg_declarations
18
+ ]
19
+ )
20
+ )
21
+
22
+
23
+ class AttributeRemover(Transformer):
24
+ """Remove attributes that could be expressions such as length, fraction places, etc."""
25
+
26
+ def visit_QuantumNumeric(self, node: QuantumNumeric) -> QuantumNumeric:
27
+ return QuantumNumeric(source_ref=node.source_ref)
28
+
29
+ def visit_QuantumBitvector(self, node: QuantumBitvector) -> QuantumBitvector:
30
+ return QuantumBitvector(
31
+ element_type=self.visit(node.element_type), source_ref=node.source_ref
32
+ )
classiq/qmod/utilities.py CHANGED
@@ -1,6 +1,13 @@
1
+ import dataclasses
2
+ import inspect
3
+ import itertools
1
4
  import keyword
2
5
  import sys
3
- from typing import get_args, get_origin
6
+ from enum import Enum as PythonEnum
7
+ from types import FrameType
8
+ from typing import Any, ForwardRef, Literal, Optional, get_args, get_origin, overload
9
+
10
+ from classiq.interface.source_reference import SourceReference
4
11
 
5
12
  DEFAULT_DECIMAL_PRECISION = 4
6
13
 
@@ -11,8 +18,19 @@ def mangle_keyword(name: str) -> str:
11
18
  return name
12
19
 
13
20
 
21
+ @overload
14
22
  def unmangle_keyword(name: str) -> str:
15
- assert name
23
+ pass
24
+
25
+
26
+ @overload
27
+ def unmangle_keyword(name: None) -> None:
28
+ pass
29
+
30
+
31
+ def unmangle_keyword(name: Optional[str]) -> Optional[str]:
32
+ if name is None:
33
+ return None
16
34
  if name[-1] == "_" and keyword.iskeyword(name[:-1]):
17
35
  name = name[:-1]
18
36
  return name
@@ -22,6 +40,82 @@ def version_portable_get_args(py_type: type) -> tuple:
22
40
  if get_origin(py_type) is None:
23
41
  return tuple()
24
42
  if sys.version_info[0:2] < (3, 10):
25
- return get_args(py_type) # The result of __class_getitem__
43
+ type_args = get_args(py_type) # The result of __class_getitem__
26
44
  else:
27
- return get_args(py_type)[0]
45
+ type_args = get_args(py_type)[0]
46
+ if not isinstance(type_args, tuple):
47
+ return (type_args,)
48
+ return tuple(
49
+ (
50
+ version_portable_get_args(type_arg)[0]
51
+ if get_origin(type_arg) == Literal
52
+ else type_arg
53
+ )
54
+ for type_arg in type_args
55
+ )
56
+
57
+
58
+ def get_source_ref(frame: FrameType) -> SourceReference:
59
+ filename = inspect.getfile(frame)
60
+ lineno = frame.f_lineno
61
+ if sys.version_info[0:2] < (3, 11) or frame.f_lasti < 0:
62
+ source_ref = SourceReference(
63
+ file_name=filename,
64
+ start_line=lineno - 1,
65
+ start_column=-1,
66
+ end_line=-1,
67
+ end_column=-1,
68
+ )
69
+ else:
70
+ positions_gen = frame.f_code.co_positions()
71
+ positions = next(itertools.islice(positions_gen, frame.f_lasti // 2, None))
72
+ source_ref = SourceReference(
73
+ file_name=filename,
74
+ start_line=(positions[0] or 0) - 1,
75
+ start_column=(positions[2] or 0) - 1,
76
+ end_line=(positions[1] or 0) - 1,
77
+ end_column=(positions[3] or 0) - 1,
78
+ )
79
+ return source_ref
80
+
81
+
82
+ def qmod_val_to_expr_str(val: Any) -> str:
83
+ if dataclasses.is_dataclass(type(val)):
84
+ kwargs_str = ", ".join(
85
+ [
86
+ f"{field.name}={qmod_val_to_expr_str(vars(val)[field.name])}"
87
+ for field in dataclasses.fields(val)
88
+ ]
89
+ )
90
+ return f"struct_literal({type(val).__name__}, {kwargs_str})"
91
+
92
+ if isinstance(val, list):
93
+ elements_str = ", ".join([qmod_val_to_expr_str(elem) for elem in val])
94
+ return f"[{elements_str}]"
95
+
96
+ if isinstance(val, PythonEnum):
97
+ return f"{type(val).__name__}.{val.name}"
98
+
99
+ return str(val)
100
+
101
+
102
+ def unwrap_forward_ref(x: Any) -> Any:
103
+ if isinstance(x, ForwardRef):
104
+ return x.__forward_arg__
105
+ return x
106
+
107
+
108
+ def varname(depth: int) -> Optional[str]:
109
+ frame = sys._getframe(depth)
110
+ codes = inspect.getframeinfo(frame).code_context
111
+ if codes is None or len(codes) != 1:
112
+ return None
113
+ code = codes[0]
114
+ if "=" not in code:
115
+ return None
116
+ var_name = code.split("=")[0].strip()
117
+ if ":" in var_name:
118
+ var_name = var_name.split(":")[0].strip()
119
+ if not var_name.isidentifier():
120
+ return None
121
+ return var_name
@@ -17,13 +17,27 @@ def write_qmod(
17
17
  directory: Optional[Path] = None,
18
18
  decimal_precision: int = DEFAULT_DECIMAL_PRECISION,
19
19
  ) -> None:
20
- model = Model.parse_raw(serialized_model)
20
+ """
21
+ Creates a native Qmod file from a serialized model and outputs the synthesis options (Preferences and Constraints) to a file.
22
+ The native Qmod file may be uploaded to the Classiq IDE.
23
+
24
+ Args:
25
+ serialized_model: The serialized model to write as a native Qmod file and synthesis options file.
26
+ name: The name to save the file by.
27
+ directory: The directory to save the files in. If None, the current working directory is used.
28
+ decimal_precision: The number of decimal places to use for numbers, set to 4 by default.
29
+
30
+ Returns:
31
+ None
32
+ """
33
+
34
+ model = Model.model_validate_json(serialized_model)
21
35
  pretty_printed_model = DSLPrettyPrinter(decimal_precision=decimal_precision).visit(
22
36
  model
23
37
  )
24
38
 
25
- synthesis_options = model.dict(
26
- include={"constraints", "preferences"}, exclude_unset=True
39
+ synthesis_options = model.model_dump(
40
+ include={"constraints", "preferences"}, exclude_none=True
27
41
  )
28
42
 
29
43
  synthesis_options_path = Path(f"{name}.{_SYNTHESIS_OPTIONS_SUFFIX}")
classiq/synthesis.py CHANGED
@@ -1,59 +1,247 @@
1
- from typing import NewType
1
+ from typing import Any, NewType, Optional
2
2
 
3
3
  import pydantic
4
4
 
5
+ from classiq.interface.analyzer.result import QasmCode
6
+ from classiq.interface.exceptions import ClassiqValueError
5
7
  from classiq.interface.executor.execution_preferences import ExecutionPreferences
6
8
  from classiq.interface.generator.model.constraints import Constraints
7
9
  from classiq.interface.generator.model.preferences.preferences import Preferences
8
- from classiq.interface.model.common_model_types import ModelInput, SerializedModelInput
9
- from classiq.interface.model.model import SerializedModel
10
+ from classiq.interface.model.model import Model, SerializedModel
10
11
 
12
+ from classiq import QuantumProgram
13
+ from classiq._internals import async_utils
11
14
  from classiq._internals.api_wrapper import ApiWrapper
12
- from classiq._internals.async_utils import syncify_function
13
15
 
14
16
  SerializedQuantumProgram = NewType("SerializedQuantumProgram", str)
15
17
 
18
+ CANT_PARSE_QUANTUM_PROGRAM_MSG = (
19
+ "Can not parse quantum_program into GeneratedCircuit, \n"
20
+ )
21
+
22
+
23
+ def show(quantum_program: SerializedQuantumProgram, display_url: bool = True) -> None:
24
+ """
25
+ Displays the interactive representation of the quantum program in the Classiq IDE.
26
+
27
+ Args:
28
+ quantum_program:
29
+ The serialized quantum program to be displayed.
30
+ display_url:
31
+ Whether to print the url
32
+
33
+ Links:
34
+ [Visualization tool](https://docs.classiq.io/latest/reference-manual/analyzer/quantum-program-visualization-tool/)
35
+ """
36
+ try:
37
+ circuit = QuantumProgram.model_validate_json(quantum_program)
38
+ except pydantic.ValidationError as exc:
39
+ raise ClassiqValueError(CANT_PARSE_QUANTUM_PROGRAM_MSG) from exc
40
+ circuit.show() # type: ignore[attr-defined]
41
+
42
+
43
+ async def quantum_program_from_qasm_async(qasm: str) -> SerializedQuantumProgram:
44
+ quantum_program = await ApiWrapper.get_generated_circuit_from_qasm(
45
+ QasmCode(code=qasm)
46
+ )
47
+ return SerializedQuantumProgram(quantum_program.model_dump_json())
48
+
49
+
50
+ def quantum_program_from_qasm(qasm: str) -> SerializedQuantumProgram:
51
+ """
52
+ generate a quantum program from a QASM file.
53
+
54
+ Args:
55
+ qasm: A QASM2/3 string.
56
+
57
+ Returns:
58
+ SerializedQuantumProgram: Quantum program serialized as a string. (See: QuantumProgram)
59
+ """
60
+ return async_utils.run(quantum_program_from_qasm_async(qasm))
61
+
16
62
 
17
63
  async def synthesize_async(
18
- serialized_model: SerializedModelInput,
64
+ serialized_model: SerializedModel,
19
65
  ) -> SerializedQuantumProgram:
20
- model: ModelInput = pydantic.parse_raw_as(ModelInput, serialized_model) # type: ignore[arg-type]
66
+ model = Model.model_validate_json(serialized_model)
21
67
  quantum_program = await ApiWrapper.call_generation_task(model)
22
- return SerializedQuantumProgram(quantum_program.json(indent=2))
68
+ return SerializedQuantumProgram(quantum_program.model_dump_json(indent=2))
69
+
70
+
71
+ def synthesize(
72
+ serialized_model: SerializedModel, auto_show: bool = False
73
+ ) -> SerializedQuantumProgram:
74
+ """
75
+ Synthesize a model with the Classiq engine to receive a quantum program.
76
+ [More details](https://docs.classiq.io/latest/reference-manual/synthesis/)
23
77
 
78
+ Args:
79
+ serialized_model: A model object serialized as a string.
80
+ auto_show: boolean. whether to call `show` on the output
24
81
 
25
- synthesize = syncify_function(synthesize_async)
82
+ Returns:
83
+ SerializedQuantumProgram: Quantum program serialized as a string. (See: QuantumProgram)
84
+ """
85
+ result = async_utils.run(synthesize_async(serialized_model))
86
+ if auto_show:
87
+ show(result)
88
+ return result
26
89
 
27
90
 
28
91
  def set_preferences(
29
- serialized_model: SerializedModelInput, preferences: Preferences
30
- ) -> SerializedModelInput:
31
- model: ModelInput = pydantic.parse_raw_as(ModelInput, serialized_model) # type: ignore[arg-type]
92
+ serialized_model: SerializedModel,
93
+ preferences: Optional[Preferences] = None,
94
+ **kwargs: Any
95
+ ) -> SerializedModel:
96
+ """
97
+ Overrides the preferences of a (serialized) model and returns the updated model.
98
+
99
+ Args:
100
+ serialized_model: The model in serialized form.
101
+ preferences: The new preferences to be set for the model. Can be passed as keyword arguments.
102
+
103
+ Returns:
104
+ SerializedModel: The updated model with the new preferences applied.
105
+ """
106
+ if preferences is None:
107
+ if kwargs:
108
+ preferences = Preferences(**kwargs)
109
+ else:
110
+ raise ClassiqValueError(
111
+ "Missing preferences. Either pass `Preferences` object or pass keywords"
112
+ )
113
+
114
+ model = Model.model_validate_json(serialized_model)
32
115
  model.preferences = preferences
33
- return model.get_model() # type: ignore[return-value]
116
+ return model.get_model()
117
+
118
+
119
+ def update_preferences(
120
+ serialized_model: SerializedModel, **kwargs: Any
121
+ ) -> SerializedModel:
122
+ """
123
+ Updates the preferences of a (serialized) model and returns the updated model.
124
+
125
+ Args:
126
+ serialized_model: The model in serialized form.
127
+ kwargs: key-value combination of preferences fields to update
128
+
129
+ Returns:
130
+ SerializedModel: The updated model with the new preferences applied.
131
+ """
132
+ model = Model.model_validate_json(serialized_model)
133
+
134
+ for key, value in kwargs.items():
135
+ setattr(model.preferences, key, value)
136
+ return model.get_model()
34
137
 
35
138
 
36
139
  def set_constraints(
37
- serialized_model: SerializedModelInput, constraints: Constraints
38
- ) -> SerializedModelInput:
39
- model: ModelInput = pydantic.parse_raw_as(ModelInput, serialized_model) # type: ignore[arg-type]
140
+ serialized_model: SerializedModel,
141
+ constraints: Optional[Constraints] = None,
142
+ **kwargs: Any
143
+ ) -> SerializedModel:
144
+ """
145
+ Overrides the constraints of a (serialized) model and returns the updated model.
146
+
147
+ Args:
148
+ serialized_model: The model in serialized form.
149
+ constraints: The new constraints to be set for the model. Can be passed as keyword arguments.
150
+
151
+ Returns:
152
+ SerializedModel: The updated model with the new constraints applied.
153
+ """
154
+ if constraints is None:
155
+ if kwargs:
156
+ constraints = Constraints(**kwargs)
157
+ else:
158
+ raise ClassiqValueError(
159
+ "Missing constraints. Either pass `Constraints` object or pass keywords"
160
+ )
161
+
162
+ model = Model.model_validate_json(serialized_model)
40
163
  model.constraints = constraints
41
- return model.get_model() # type: ignore[return-value]
164
+ return model.get_model()
165
+
166
+
167
+ def update_constraints(
168
+ serialized_model: SerializedModel, **kwargs: Any
169
+ ) -> SerializedModel:
170
+ """
171
+ Updates the constraints of a (serialized) model and returns the updated model.
172
+
173
+ Args:
174
+ serialized_model: The model in serialized form.
175
+ kwargs: key-value combination of constraints fields to update
176
+
177
+ Returns:
178
+ SerializedModel: The updated model with the new constraints applied.
179
+ """
180
+ model = Model.model_validate_json(serialized_model)
181
+
182
+ for key, value in kwargs.items():
183
+ setattr(model.constraints, key, value)
184
+ return model.get_model()
42
185
 
43
186
 
44
187
  def set_execution_preferences(
45
- serialized_model: SerializedModelInput, execution_preferences: ExecutionPreferences
46
- ) -> SerializedModelInput:
47
- model: ModelInput = pydantic.parse_raw_as(ModelInput, serialized_model) # type: ignore[arg-type]
188
+ serialized_model: SerializedModel,
189
+ execution_preferences: Optional[ExecutionPreferences] = None,
190
+ **kwargs: Any
191
+ ) -> SerializedModel:
192
+ """
193
+ Overrides the execution preferences of a (serialized) model and returns the updated model.
194
+
195
+ Args:
196
+ serialized_model: A serialization of the defined model.
197
+ execution_preferences: The new execution preferences to be set for the model. Can be passed as keyword arguments.
198
+ Returns:
199
+ SerializedModel: The model with the attached execution preferences.
200
+
201
+ For more examples please see: [set_execution_preferences](https://docs.classiq.io/latest/reference-manual/executor/?h=set_execution_preferences#usage)
202
+ """
203
+ if execution_preferences is None:
204
+ if kwargs:
205
+ execution_preferences = ExecutionPreferences(**kwargs)
206
+ else:
207
+ raise ClassiqValueError(
208
+ "Missing execution_preferences. Either pass `ExecutionPreferences` object or pass keywords"
209
+ )
210
+
211
+ model = Model.model_validate_json(serialized_model)
48
212
  model.execution_preferences = execution_preferences
49
- return model.get_model() # type: ignore[return-value]
213
+ return model.get_model()
214
+
215
+
216
+ def update_execution_preferences(
217
+ serialized_model: SerializedModel, **kwargs: Any
218
+ ) -> SerializedModel:
219
+ """
220
+ Updates the execution_preferences of a (serialized) model and returns the updated model.
221
+
222
+ Args:
223
+ serialized_model: The model in serialized form.
224
+ kwargs: key-value combination of execution_preferences fields to update
225
+
226
+ Returns:
227
+ SerializedModel: The updated model with the new execution_preferences applied.
228
+ """
229
+ model = Model.model_validate_json(serialized_model)
230
+
231
+ for key, value in kwargs.items():
232
+ setattr(model.execution_preferences, key, value)
233
+
234
+ return model.get_model()
50
235
 
51
236
 
52
237
  __all__ = [
53
238
  "SerializedModel",
54
239
  "SerializedQuantumProgram",
55
- "synthesize",
56
- "set_preferences",
57
240
  "set_constraints",
58
241
  "set_execution_preferences",
242
+ "set_preferences",
243
+ "synthesize",
244
+ "update_constraints",
245
+ "update_execution_preferences",
246
+ "update_preferences",
59
247
  ]
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: classiq
3
- Version: 0.38.0
3
+ Version: 0.65.4
4
4
  Summary: Classiq's Python SDK for quantum computing
5
5
  Home-page: https://classiq.io
6
6
  License: Proprietary
7
7
  Keywords: quantum computing,quantum circuits,quantum algorithms,QAD,QDL
8
8
  Author: Classiq Technologies
9
9
  Author-email: support@classiq.io
10
- Requires-Python: >=3.8,<3.12
10
+ Requires-Python: >=3.9,<3.13
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: Intended Audience :: Education
@@ -16,10 +16,10 @@ Classifier: License :: Other/Proprietary License
16
16
  Classifier: Natural Language :: English
17
17
  Classifier: Operating System :: OS Independent
18
18
  Classifier: Programming Language :: Python :: 3
19
- Classifier: Programming Language :: Python :: 3.8
20
19
  Classifier: Programming Language :: Python :: 3.9
21
20
  Classifier: Programming Language :: Python :: 3.10
22
21
  Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
23
  Classifier: Programming Language :: Python :: 3 :: Only
24
24
  Classifier: Topic :: Scientific/Engineering
25
25
  Classifier: Topic :: Software Development
@@ -31,22 +31,29 @@ Provides-Extra: analyzer-sdk
31
31
  Provides-Extra: qml
32
32
  Requires-Dist: ConfigArgParse (>=1.5.3,<2.0.0)
33
33
  Requires-Dist: Pyomo (>=6.5,<6.6)
34
+ Requires-Dist: black (>=24.0,<25.0)
34
35
  Requires-Dist: httpx (>=0.23.0,<1)
35
36
  Requires-Dist: ipywidgets (>=7.7.1,<8.0.0) ; extra == "analyzer-sdk"
37
+ Requires-Dist: jupyterlab (>=4.2.5,<5.0.0) ; extra == "analyzer-sdk"
36
38
  Requires-Dist: keyring (>=23.5.0,<24.0.0)
37
39
  Requires-Dist: matplotlib (>=3.4.3,<4.0.0)
38
40
  Requires-Dist: networkx (>=2.5.1,<3.0.0)
41
+ Requires-Dist: notebook (>=7.2.2,<8.0.0) ; extra == "analyzer-sdk"
39
42
  Requires-Dist: numexpr (>=2.7.3,<3.0.0)
40
- Requires-Dist: numpy (>=1.20.1,<2.0.0)
41
- Requires-Dist: packaging (>=21.3,<22.0)
42
- Requires-Dist: pandas (>=1.4.0,<2.0.0)
43
+ Requires-Dist: numpy (>=1.20.1,<2.0.0) ; python_version < "3.12"
44
+ Requires-Dist: numpy (>=1.26.0,<2.0.0) ; python_version >= "3.12"
45
+ Requires-Dist: packaging (>=23.2,<24.0)
46
+ Requires-Dist: pandas (>=1.4.0,<3.0.0)
43
47
  Requires-Dist: plotly (>=5.7.0,<6.0.0)
44
- Requires-Dist: pydantic (>=1.9.1,<2.0.0)
45
- Requires-Dist: scipy (==1.10.1)
46
- Requires-Dist: sympy (>=1.9.0,<1.11.0)
48
+ Requires-Dist: pydantic (>=2.9.0,<2.10.0)
49
+ Requires-Dist: pydantic-settings (>=2.4.0,<3.0.0)
50
+ Requires-Dist: scipy (>=1.10.0,<2.0.0) ; python_version < "3.12"
51
+ Requires-Dist: scipy (>=1.11.0,<2.0.0) ; python_version >= "3.12"
52
+ Requires-Dist: sympy (>=1.13.0,<2.0.0)
47
53
  Requires-Dist: tabulate (>=0.8.9,<1)
48
54
  Requires-Dist: torch (>=2.0,<3.0) ; extra == "qml"
49
55
  Requires-Dist: torchvision (>=0.15,<1.0) ; extra == "qml"
56
+ Requires-Dist: tqdm (>=4.67.1,<5.0.0)
50
57
  Project-URL: Documentation, https://docs.classiq.io/
51
58
  Description-Content-Type: text/markdown
52
59