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,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Tuple, Union
3
+ from typing import Union
4
4
 
5
5
  import pydantic
6
6
 
@@ -20,7 +20,7 @@ DEFAULT_POST_INPUT_NAME = "post_function_input"
20
20
 
21
21
  class Finance(function_params.FunctionParams):
22
22
  model: Union[GaussianModelInput, LogNormalModelInput] = pydantic.Field(
23
- description="Load a financial model"
23
+ description="Load a financial model", discriminator="kind"
24
24
  )
25
25
  finance_function: FinanceFunctionInput = pydantic.Field(
26
26
  description="The finance function to solve the model"
@@ -90,7 +90,7 @@ class FinancePayoff(function_params.FunctionParams):
90
90
  description="The finance function to solve the model"
91
91
  )
92
92
  num_qubits: pydantic.PositiveInt
93
- distribution_range: Tuple[float, float]
93
+ distribution_range: tuple[float, float]
94
94
 
95
95
  def _create_ios(self) -> None:
96
96
  self._inputs = {
@@ -1,19 +1,19 @@
1
- from typing import Iterable, Set, Type
1
+ from collections.abc import Iterable
2
2
 
3
3
  from classiq.interface.generator.function_params import FunctionParams
4
4
 
5
5
 
6
6
  class FunctionParamLibrary:
7
- def __init__(self, param_list: Iterable[Type[FunctionParams]]) -> None:
8
- self._param_list: Set[Type[FunctionParams]] = set(param_list)
7
+ def __init__(self, param_list: Iterable[type[FunctionParams]]) -> None:
8
+ self._param_list: set[type[FunctionParams]] = set(param_list)
9
9
 
10
10
  @property
11
- def param_list(self) -> Set[Type[FunctionParams]]:
11
+ def param_list(self) -> set[type[FunctionParams]]:
12
12
  return self._param_list.copy()
13
13
 
14
14
  # Private methods are for tests only
15
- def _add(self, param: Type[FunctionParams]) -> None:
15
+ def _add(self, param: type[FunctionParams]) -> None:
16
16
  self._param_list.add(param)
17
17
 
18
- def _remove(self, param: Type[FunctionParams]) -> None:
18
+ def _remove(self, param: type[FunctionParams]) -> None:
19
19
  self._param_list.discard(param)
@@ -28,8 +28,7 @@ from classiq.interface.generator.arith.unary_ops import BitwiseInvert, Negation,
28
28
  from classiq.interface.generator.commuting_pauli_exponentiation import (
29
29
  CommutingPauliExponentiation,
30
30
  )
31
- from classiq.interface.generator.credit_risk_example.linear_gci import LinearGCI
32
- from classiq.interface.generator.credit_risk_example.weighted_adder import WeightedAdder
31
+ from classiq.interface.generator.copy import Copy
33
32
  from classiq.interface.generator.entangler_params import (
34
33
  GridEntangler,
35
34
  HypercubeEntangler,
@@ -53,7 +52,6 @@ from classiq.interface.generator.hardware_efficient_ansatz import (
53
52
  from classiq.interface.generator.hartree_fock import HartreeFock
54
53
  from classiq.interface.generator.hva import HVA
55
54
  from classiq.interface.generator.identity import Identity
56
- from classiq.interface.generator.inequality_mixer import InequalityMixer
57
55
  from classiq.interface.generator.linear_pauli_rotations import LinearPauliRotations
58
56
  from classiq.interface.generator.mcu import Mcu
59
57
  from classiq.interface.generator.mcx import Mcx
@@ -67,7 +65,6 @@ from classiq.interface.generator.piecewise_linear_amplitude_loading import (
67
65
  from classiq.interface.generator.qft import QFT
68
66
  from classiq.interface.generator.qsvm import QSVMFeatureMap
69
67
  from classiq.interface.generator.randomized_benchmarking import RandomizedBenchmarking
70
- from classiq.interface.generator.range_mixer import RangeMixer
71
68
  from classiq.interface.generator.standard_gates.standard_gates_param_list import (
72
69
  standard_gate_function_param_library,
73
70
  )
@@ -81,7 +78,6 @@ from classiq.interface.generator.state_preparation import (
81
78
  UniformDistributionStatePreparation,
82
79
  WStatePreparation,
83
80
  )
84
- from classiq.interface.generator.state_propagator import StatePropagator
85
81
  from classiq.interface.generator.ucc import UCC
86
82
  from classiq.interface.generator.unitary_gate import UnitaryGate
87
83
  from classiq.interface.generator.user_defined_function_params import CustomFunction
@@ -97,7 +93,6 @@ function_param_library_without_self_reference: FunctionParamLibrary = (
97
93
  GHZStatePreparation,
98
94
  WStatePreparation,
99
95
  ExponentialStatePreparation,
100
- StatePropagator,
101
96
  QFT,
102
97
  BitwiseAnd,
103
98
  BitwiseOr,
@@ -134,11 +129,9 @@ function_param_library_without_self_reference: FunctionParamLibrary = (
134
129
  CustomFunction,
135
130
  HardwareEfficientAnsatz,
136
131
  UnitaryGate,
137
- WeightedAdder,
138
132
  LinearPauliRotations,
139
133
  Multiplier,
140
134
  Power,
141
- LinearGCI,
142
135
  HartreeFock,
143
136
  UCC,
144
137
  Min,
@@ -150,14 +143,13 @@ function_param_library_without_self_reference: FunctionParamLibrary = (
150
143
  Identity,
151
144
  RandomizedBenchmarking,
152
145
  HVA,
153
- InequalityMixer,
154
- RangeMixer,
155
146
  UGate,
156
147
  AmplitudeLoading,
157
148
  QSVMFeatureMap,
158
149
  PiecewiseLinearAmplitudeLoading,
159
150
  PiecewiseLinearRotationAmplitudeLoading,
160
151
  HadamardTransform,
152
+ Copy,
161
153
  },
162
154
  standard_gate_function_param_library.param_list,
163
155
  oracle_function_param_library.param_list,
@@ -1,40 +1,35 @@
1
1
  import ast
2
2
  import itertools
3
3
  import re
4
+ from collections.abc import Collection, Iterable, Mapping
4
5
  from typing import (
6
+ Annotated,
5
7
  Any,
6
- Collection,
7
- Dict,
8
- Iterable,
9
- List,
10
- Mapping,
11
8
  Optional,
12
- Set,
13
- Type,
14
9
  Union,
15
10
  get_args,
16
11
  )
17
12
 
18
13
  import pydantic
19
14
  import sympy
20
- from pydantic.fields import ModelField
15
+ from pydantic import BeforeValidator, ConfigDict
21
16
 
17
+ from classiq.interface.enum_utils import StrEnum
18
+ from classiq.interface.exceptions import ClassiqValueError
22
19
  from classiq.interface.generator.arith.arithmetic_expression_validator import (
23
20
  validate_expression,
24
21
  )
25
22
  from classiq.interface.generator.arith.register_user_input import RegisterArithmeticInfo
26
- from classiq.interface.generator.expressions.enums import BUILTIN_ENUMS
23
+ from classiq.interface.generator.parameters import ParameterFloatType
27
24
  from classiq.interface.helpers.custom_pydantic_types import PydanticNonEmptyString
28
25
  from classiq.interface.helpers.hashable_pydantic_base_model import (
29
26
  HashablePydanticBaseModel,
30
27
  )
31
28
 
32
- from classiq._internals.enum_utils import StrEnum
33
-
34
29
  FunctionParamsDiscriminator = str
35
30
 
36
31
  IOName = PydanticNonEmptyString
37
- ArithmeticIODict = Dict[IOName, RegisterArithmeticInfo]
32
+ ArithmeticIODict = dict[IOName, RegisterArithmeticInfo]
38
33
 
39
34
  DEFAULT_ZERO_NAME = "zero"
40
35
  DEFAULT_OUTPUT_NAME = "OUT"
@@ -84,7 +79,6 @@ ExecutionExpressionSupportedNodeTypes = Union[
84
79
  ]
85
80
 
86
81
  GenerationOnlyExpressionSupportedNodeTypes = Union[
87
- ast.FloorDiv,
88
82
  ast.Pow,
89
83
  ast.List,
90
84
  ast.Subscript,
@@ -96,6 +90,7 @@ GenerationOnlyExpressionSupportedNodeTypes = Union[
96
90
  ast.Lt,
97
91
  ast.LtE,
98
92
  ast.Eq,
93
+ ast.NotEq,
99
94
  ast.Call,
100
95
  ast.Dict,
101
96
  ast.Slice,
@@ -111,11 +106,9 @@ GenerationExpressionSupportedNodeTypes = Union[
111
106
  ExecutionExpressionSupportedNodeTypes, GenerationOnlyExpressionSupportedNodeTypes
112
107
  ]
113
108
 
114
- GenerationExpressionSupportedAttrSymbols = set(BUILTIN_ENUMS.keys())
115
-
116
109
 
117
110
  def validate_expression_str(
118
- expr_str: str, supported_functions: Optional[Set[str]] = None
111
+ expr_str: str, supported_functions: Optional[set[str]] = None
119
112
  ) -> None:
120
113
  # By default, no functions are allowed.
121
114
  supported_functions = supported_functions or set()
@@ -126,10 +119,25 @@ def validate_expression_str(
126
119
  supported_nodes=get_args(GenerationExpressionSupportedNodeTypes),
127
120
  expression_type="parameter",
128
121
  supported_functions=supported_functions,
129
- supported_attr_values=GenerationExpressionSupportedAttrSymbols,
130
122
  )
131
123
 
132
124
 
125
+ def validate_parameters(value: Any) -> Any:
126
+ if isinstance(value, str):
127
+ validate_expression_str(value)
128
+ elif isinstance(value, sympy.Expr):
129
+ return str(value)
130
+ try:
131
+ return float(value)
132
+ except ValueError:
133
+ return value
134
+
135
+
136
+ FunctionParamsNumericParameter = Annotated[
137
+ ParameterFloatType, BeforeValidator(validate_parameters)
138
+ ]
139
+
140
+
133
141
  class PortDirection(StrEnum):
134
142
  Input = "input"
135
143
  Output = "output"
@@ -175,11 +183,11 @@ class FunctionParams(HashablePydanticBaseModel):
175
183
  return sum(reg.size for reg in self.outputs.values())
176
184
 
177
185
  @property
178
- def _input_names(self) -> List[IOName]:
186
+ def _input_names(self) -> list[IOName]:
179
187
  return list(self._inputs.keys())
180
188
 
181
189
  @property
182
- def _output_names(self) -> List[IOName]:
190
+ def _output_names(self) -> list[IOName]:
183
191
  return list(self._outputs.keys())
184
192
 
185
193
  def _create_zero_input_registers(self, names_and_sizes: Mapping[str, int]) -> None:
@@ -201,20 +209,6 @@ class FunctionParams(HashablePydanticBaseModel):
201
209
  if self.discriminator() not in _UNVALIDATED_FUNCTIONS:
202
210
  self._validate_total_io_sizes()
203
211
 
204
- def is_field_param_type(self, name: str, param_type_signature: str) -> bool:
205
- f = type(self).__fields__[name]
206
- return isinstance(f, ModelField) and (
207
- param_type_signature in f.field_info.extra
208
- )
209
-
210
- def is_field_gen_param(self, name: str) -> bool:
211
- return self.is_field_param_type(
212
- name, "is_gen_param"
213
- ) or self.is_field_exec_param(name)
214
-
215
- def is_field_exec_param(self, name: str) -> bool:
216
- return self.is_field_param_type(name, "is_exec_param")
217
-
218
212
  def is_powerable(self, strict_zero_ios: bool = True) -> bool:
219
213
  input_names = set(self.inputs_full(strict_zero_ios))
220
214
  output_names = set(self._output_names)
@@ -238,12 +232,12 @@ class FunctionParams(HashablePydanticBaseModel):
238
232
  return sum(reg.size if reg is not None else 0 for reg in registers)
239
233
 
240
234
  def _validate_io_names(self) -> None:
241
- error_msg: List[str] = []
235
+ error_msg: list[str] = []
242
236
  error_msg += self._get_error_msg(self._inputs, BAD_INPUT_REGISTER_ERROR_MSG)
243
237
  error_msg += self._get_error_msg(self._outputs, BAD_OUTPUT_REGISTER_ERROR_MSG)
244
238
  if error_msg:
245
239
  error_msg += [END_BAD_REGISTER_ERROR_MSG]
246
- raise ValueError("\n".join(error_msg))
240
+ raise ClassiqValueError("\n".join(error_msg))
247
241
 
248
242
  @staticmethod
249
243
  def _sum_registers_sizes(registers: Iterable[RegisterArithmeticInfo]) -> int:
@@ -255,9 +249,9 @@ class FunctionParams(HashablePydanticBaseModel):
255
249
  )
256
250
  total_outputs_size = self._sum_registers_sizes(self._outputs.values())
257
251
  if total_inputs_size != total_outputs_size:
258
- raise ValueError(REGISTER_SIZES_MISMATCH_ERROR_MSG)
252
+ raise ClassiqValueError(REGISTER_SIZES_MISMATCH_ERROR_MSG)
259
253
 
260
- def _get_error_msg(self, names: Iterable[IOName], msg: str) -> List[str]:
254
+ def _get_error_msg(self, names: Iterable[IOName], msg: str) -> list[str]:
261
255
  bad_names = [name for name in names if re.fullmatch(NAME_REGEX, name) is None]
262
256
  return [f"{msg}: {bad_names}"] if bad_names else []
263
257
 
@@ -265,38 +259,17 @@ class FunctionParams(HashablePydanticBaseModel):
265
259
  def discriminator(cls) -> FunctionParamsDiscriminator:
266
260
  return cls.__name__
267
261
 
268
- @property
269
- def _params(self) -> List[str]:
270
- return [
271
- name
272
- for name, field in self.__fields__.items()
273
- if field.field_info.extra.get("is_exec_param", False)
274
- ]
275
-
276
- @pydantic.validator("*", pre=True)
277
- def validate_parameters(cls, value: Any, field: pydantic.fields.ModelField) -> Any:
278
- if (
279
- "is_exec_param" in field.field_info.extra
280
- or "is_gen_param" in field.field_info.extra
281
- ):
282
- if isinstance(value, str):
283
- validate_expression_str(value)
284
- elif isinstance(value, sympy.Expr):
285
- return str(value)
286
- return value
287
-
288
- class Config:
289
- frozen = True
262
+ model_config = ConfigDict(frozen=True, extra="forbid")
290
263
 
291
264
 
292
265
  def parse_function_params(
293
266
  *,
294
267
  params: Any,
295
268
  discriminator: Optional[Any],
296
- param_classes: Collection[Type[FunctionParams]],
269
+ param_classes: Collection[type[FunctionParams]],
297
270
  no_discriminator_error: Exception,
298
271
  bad_function_error: Exception,
299
- default_parser_class: Optional[Type[FunctionParams]] = None,
272
+ default_parser_class: Optional[type[FunctionParams]] = None,
300
273
  ) -> FunctionParams: # Any is for use in pydantic validators.
301
274
  if not discriminator:
302
275
  raise no_discriminator_error
@@ -310,21 +283,21 @@ def parse_function_params(
310
283
  if len(matching_classes) != 1:
311
284
  if default_parser_class is not None:
312
285
  try:
313
- return default_parser_class.parse_obj(params)
286
+ return default_parser_class.model_validate(params)
314
287
  except Exception:
315
- raise bad_function_error
288
+ raise bad_function_error from None
316
289
  raise bad_function_error
317
290
 
318
- return matching_classes[0].parse_obj(params)
291
+ return matching_classes[0].model_validate(params)
319
292
 
320
293
 
321
294
  def parse_function_params_values(
322
295
  *,
323
- values: Dict[str, Any],
296
+ values: dict[str, Any],
324
297
  params_key: str,
325
298
  discriminator_key: str,
326
- param_classes: Collection[Type[FunctionParams]],
327
- default_parser_class: Type[FunctionParams],
299
+ param_classes: Collection[type[FunctionParams]],
300
+ default_parser_class: type[FunctionParams],
328
301
  ) -> None:
329
302
  params = values.get(params_key, dict())
330
303
  if isinstance(params, FunctionParams):
@@ -335,10 +308,10 @@ def parse_function_params_values(
335
308
  params=params,
336
309
  discriminator=discriminator,
337
310
  param_classes=param_classes,
338
- no_discriminator_error=ValueError(
311
+ no_discriminator_error=ClassiqValueError(
339
312
  f"The {discriminator_key} {NO_DISCRIMINATOR_ERROR_MSG} {params_key} type."
340
313
  ),
341
- bad_function_error=ValueError(
314
+ bad_function_error=ClassiqValueError(
342
315
  f"{BAD_FUNCTION_ERROR_MSG} {discriminator_key}: {discriminator}"
343
316
  ),
344
317
  default_parser_class=default_parser_class,
@@ -1,23 +1 @@
1
- from typing import List
2
-
3
- import classiq.interface.generator.functions.core_lib_declarations.quantum_functions
4
- import classiq.interface.generator.functions.core_lib_declarations.quantum_operators # noqa: F401
5
- from classiq.interface.generator.functions.foreign_function_definition import *
6
- from classiq.interface.generator.functions.foreign_function_definition import (
7
- SynthesisForeignFunctionDefinition as ForeignFunctionDefinition,
8
- )
9
1
  from classiq.interface.generator.functions.function_declaration import *
10
- from classiq.interface.generator.functions.function_implementation import *
11
- from classiq.interface.generator.functions.native_function_definition import *
12
- from classiq.interface.generator.functions.register import *
13
-
14
- __all__ = [ # noqa: F405
15
- "ForeignFunctionDefinition",
16
- "FunctionImplementation",
17
- "Register",
18
- "RegisterMappingData",
19
- ]
20
-
21
-
22
- def __dir__() -> List[str]:
23
- return __all__
@@ -0,0 +1,16 @@
1
+ CTRL_VAR_PREFIX = "ctrl__"
2
+ CONTROL_OPERATOR_NAME = "control"
3
+ INVERT_OPERATOR_NAME = "invert"
4
+ REPEAT_OPERATOR_NAME = "iteration"
5
+ POWER_OPERATOR_NAME = "power"
6
+ UNCOMPUTE_OPERATOR_NAME = "uncompute"
7
+ WITHIN_APPLY_NAME = "within_apply"
8
+
9
+ All_BUILTINS_OPERATORS = {
10
+ CONTROL_OPERATOR_NAME,
11
+ INVERT_OPERATOR_NAME,
12
+ REPEAT_OPERATOR_NAME,
13
+ POWER_OPERATOR_NAME,
14
+ UNCOMPUTE_OPERATOR_NAME,
15
+ WITHIN_APPLY_NAME,
16
+ }
@@ -1,11 +1,15 @@
1
- from typing import ClassVar, Dict, Mapping, Optional
1
+ from collections.abc import Sequence
2
+ from typing import ClassVar, Optional
2
3
 
3
4
  import pydantic
4
5
 
5
- from classiq.interface.generator.functions.classical_type import ConcreteClassicalType
6
+ from classiq.interface.generator.functions.concrete_types import ConcreteClassicalType
6
7
  from classiq.interface.generator.functions.function_declaration import (
7
8
  FunctionDeclaration,
8
9
  )
10
+ from classiq.interface.model.classical_parameter_declaration import (
11
+ ClassicalParameterDeclaration,
12
+ )
9
13
 
10
14
 
11
15
  class ClassicalFunctionDeclaration(FunctionDeclaration):
@@ -13,23 +17,28 @@ class ClassicalFunctionDeclaration(FunctionDeclaration):
13
17
  Facilitates the creation of a common classical function interface object.
14
18
  """
15
19
 
20
+ name: str
21
+
22
+ positional_parameters: Sequence[ClassicalParameterDeclaration] = pydantic.Field(
23
+ default_factory=list,
24
+ )
25
+
16
26
  return_type: Optional[ConcreteClassicalType] = pydantic.Field(
17
27
  description="The type of the classical value that is returned by the function (for classical functions)",
18
28
  default=None,
19
29
  )
20
30
 
21
31
  BUILTIN_FUNCTION_DECLARATIONS: ClassVar[
22
- Dict[str, "ClassicalFunctionDeclaration"]
32
+ dict[str, "ClassicalFunctionDeclaration"]
23
33
  ] = {}
24
34
 
25
35
  FOREIGN_FUNCTION_DECLARATIONS: ClassVar[
26
- Dict[str, "ClassicalFunctionDeclaration"]
36
+ dict[str, "ClassicalFunctionDeclaration"]
27
37
  ] = {}
28
38
 
29
- def update_logic_flow(
30
- self, function_dict: Mapping[str, "ClassicalFunctionDeclaration"]
31
- ) -> None:
32
- pass
39
+ @property
40
+ def param_decls(self) -> Sequence[ClassicalParameterDeclaration]:
41
+ return self.positional_parameters
33
42
 
34
43
 
35
- ClassicalFunctionDeclaration.update_forward_refs()
44
+ ClassicalFunctionDeclaration.model_rebuild()