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,17 +1,20 @@
1
- from typing import Any, Dict, Optional, Union
1
+ from typing import Any, Optional, Union
2
2
 
3
3
  import pydantic
4
+ from pydantic import ConfigDict
5
+ from pydantic_core.core_schema import ValidationInfo
4
6
 
7
+ from classiq.interface.exceptions import ClassiqValueError
5
8
  from classiq.interface.generator.expressions.enums.finance_functions import (
6
- FINANCE_FUNCTION_STRING,
9
+ get_finance_function_dict,
10
+ )
11
+ from classiq.interface.generator.types.builtin_enum_declarations import (
7
12
  FinanceFunctionType,
8
13
  )
9
14
  from classiq.interface.helpers.custom_pydantic_types import (
10
15
  PydanticNonZeroProbabilityFloat,
11
16
  )
12
17
 
13
- from classiq.exceptions import ClassiqValueError
14
-
15
18
 
16
19
  class FunctionCondition(pydantic.BaseModel):
17
20
  threshold: float
@@ -19,13 +22,11 @@ class FunctionCondition(pydantic.BaseModel):
19
22
  default=False,
20
23
  description="When true, function is set when input is larger to threshold and otherwise 0. Default is False.",
21
24
  )
22
-
23
- class Config:
24
- frozen = True
25
+ model_config = ConfigDict(frozen=True)
25
26
 
26
27
 
27
28
  class FinanceFunctionInput(pydantic.BaseModel):
28
- f: FinanceFunctionType = pydantic.Field(
29
+ f: "FinanceFunctionType" = pydantic.Field(
29
30
  description="An enumeration of the wanted financial function: VaR, expected "
30
31
  "shortfall, European call options or x^2"
31
32
  )
@@ -49,44 +50,53 @@ class FinanceFunctionInput(pydantic.BaseModel):
49
50
  description="The required probability on the tail of the distribution (1 - percentile)",
50
51
  )
51
52
 
52
- @pydantic.validator("f", pre=True)
53
- def _convert_f_if_str(cls, f: Any) -> FinanceFunctionType:
54
- # Keep this for backwards-compatible string support
55
- if f in FINANCE_FUNCTION_STRING:
56
- return FINANCE_FUNCTION_STRING[f]
57
- return f
53
+ @pydantic.model_validator(mode="before")
54
+ @classmethod
55
+ def _convert_f_if_str(cls, values: Any, info: ValidationInfo) -> dict[str, Any]:
56
+ if isinstance(values, dict):
57
+ f = values.get("f")
58
+ elif isinstance(values, FinanceFunctionInput):
59
+ f = values.f
60
+ values = values.model_dump()
61
+ else:
62
+ f = info.data.get("f")
63
+ if isinstance(f, str) and f in get_finance_function_dict():
64
+ values["f"] = get_finance_function_dict()[f]
65
+ return values
58
66
 
59
- @pydantic.validator("use_chebyshev_polynomial_approximation")
67
+ @pydantic.field_validator("use_chebyshev_polynomial_approximation", mode="before")
68
+ @classmethod
60
69
  def _validate_polynomial_flag(
61
- cls, use_chebyshev_flag: bool, values: Dict[str, Any]
70
+ cls, use_chebyshev_flag: bool, info: ValidationInfo
62
71
  ) -> bool:
63
- if use_chebyshev_flag ^ (values.get("polynomial_degree") is None):
72
+ if use_chebyshev_flag ^ (info.data.get("polynomial_degree") is None):
64
73
  return use_chebyshev_flag
65
74
  raise ClassiqValueError(
66
75
  "Degree must be positive and use_chebyshev_polynomial_approximation set to True"
67
76
  )
68
77
 
69
- @pydantic.validator("f")
78
+ @pydantic.field_validator("f", mode="before")
79
+ @classmethod
70
80
  def _validate_finance_function(
71
- cls, f: Union[int, str, FinanceFunctionType]
81
+ cls, f: Union[int, str, "FinanceFunctionType"]
72
82
  ) -> FinanceFunctionType:
73
83
  if isinstance(f, FinanceFunctionType):
74
84
  return f
75
85
  if isinstance(f, int):
76
86
  return FinanceFunctionType(f)
77
- return FinanceFunctionType.from_string(f)
87
+ return get_finance_function_dict()[f]
78
88
 
79
- @pydantic.validator("tail_probability", always=True)
89
+ @pydantic.field_validator("tail_probability", mode="before")
90
+ @classmethod
80
91
  def _validate_tail_probability_assignment_for_shortfall(
81
92
  cls,
82
93
  tail_probability: Optional[PydanticNonZeroProbabilityFloat],
83
- values: Dict[str, Any],
94
+ info: ValidationInfo,
84
95
  ) -> Optional[PydanticNonZeroProbabilityFloat]:
85
- if values.get("f") == FinanceFunctionType.SHORTFALL and not tail_probability:
96
+ if info.data.get("f") == FinanceFunctionType.SHORTFALL and not tail_probability:
86
97
  raise ClassiqValueError(
87
98
  "Tail probability must be set for expected shortfall"
88
99
  )
89
100
  return tail_probability
90
101
 
91
- class Config:
92
- frozen = True
102
+ model_config = ConfigDict(frozen=True)
@@ -1,5 +1,5 @@
1
1
  import math
2
- from typing import List, Literal, Optional, Tuple
2
+ from typing import Literal, Optional
3
3
 
4
4
  import pydantic
5
5
 
@@ -18,15 +18,15 @@ class GaussianModelInput(FinanceModelInput):
18
18
  normal_max_value: float = pydantic.Field(
19
19
  description="Min/max value to truncate the " "latent normal random variable Z"
20
20
  )
21
- default_probabilities: List[PydanticProbabilityFloat] = pydantic.Field(
21
+ default_probabilities: list[PydanticProbabilityFloat] = pydantic.Field(
22
22
  description="default probabilities for each asset"
23
23
  )
24
24
 
25
- rhos: List[pydantic.PositiveFloat] = pydantic.Field(
25
+ rhos: list[pydantic.PositiveFloat] = pydantic.Field(
26
26
  description="Sensitivities of default probability of assets "
27
27
  "with respect to Z (1/sigma(Z))"
28
28
  )
29
- loss: List[int] = pydantic.Field(
29
+ loss: list[int] = pydantic.Field(
30
30
  description="List of ints signifying loss per asset"
31
31
  )
32
32
  min_loss: Optional[int] = pydantic.Field(
@@ -38,7 +38,7 @@ class GaussianModelInput(FinanceModelInput):
38
38
  return len(self.rhos)
39
39
 
40
40
  @property
41
- def distribution_range(self) -> Tuple[float, float]:
41
+ def distribution_range(self) -> tuple[float, float]:
42
42
  return 0, sum(self.loss)
43
43
 
44
44
  @property
@@ -1,7 +1,8 @@
1
- from typing import Literal, Tuple
1
+ from typing import Literal
2
2
 
3
3
  import numpy as np
4
4
  import pydantic
5
+ from pydantic import ConfigDict
5
6
 
6
7
  from classiq.interface.finance.model_input import FinanceModelInput
7
8
 
@@ -20,7 +21,7 @@ class LogNormalModelInput(FinanceModelInput):
20
21
  )
21
22
 
22
23
  @property
23
- def distribution_range(self) -> Tuple[float, float]:
24
+ def distribution_range(self) -> tuple[float, float]:
24
25
  mean = np.exp(self.mu + self.sigma**2 / 2)
25
26
  variance = (np.exp(self.sigma**2) - 1) * np.exp(2 * self.mu + self.sigma**2)
26
27
  stddev = np.sqrt(variance)
@@ -36,5 +37,4 @@ class LogNormalModelInput(FinanceModelInput):
36
37
  def num_output_qubits(self) -> int:
37
38
  return self.num_qubits
38
39
 
39
- class Config:
40
- frozen = True
40
+ model_config = ConfigDict(frozen=True)
@@ -1,5 +1,6 @@
1
1
  import abc
2
- from typing import Tuple
2
+
3
+ from pydantic import ConfigDict
3
4
 
4
5
  from classiq.interface.helpers.hashable_pydantic_base_model import (
5
6
  HashablePydanticBaseModel,
@@ -13,10 +14,9 @@ class FinanceModelInput(HashablePydanticBaseModel):
13
14
  def num_output_qubits(self) -> int:
14
15
  return 0
15
16
 
16
- class Config:
17
- frozen = True
17
+ model_config = ConfigDict(frozen=True)
18
18
 
19
19
  @property
20
20
  @abc.abstractmethod
21
- def distribution_range(self) -> Tuple[float, float]:
21
+ def distribution_range(self) -> tuple[float, float]:
22
22
  pass
@@ -1,9 +1,7 @@
1
- from typing import List
2
-
3
1
  import numpy as np
4
2
 
5
3
 
6
- def get_rand_adjacency_matrix(num_vertices: int) -> List[List[bool]]:
4
+ def get_rand_adjacency_matrix(num_vertices: int) -> list[list[bool]]:
7
5
  adjacency_matrix = np.random.choice([0, 1], size=(num_vertices, num_vertices))
8
6
  for i in range(num_vertices):
9
7
  for j in range(num_vertices):
@@ -1,14 +1,18 @@
1
1
  import re
2
- from typing import Any, Dict, get_args
2
+ from typing import get_args
3
3
 
4
4
  import pydantic
5
5
  import sympy
6
+ from typing_extensions import Self
6
7
 
8
+ from classiq.interface.enum_utils import StrEnum
9
+ from classiq.interface.exceptions import ClassiqValueError
7
10
  from classiq.interface.generator.arith.arithmetic_expression_validator import (
8
11
  validate_expression,
9
12
  )
10
13
  from classiq.interface.generator.arith.register_user_input import RegisterUserInput
11
14
  from classiq.interface.generator.expressions.expression_constants import (
15
+ BOOLEAN_LITERALS,
12
16
  FORBIDDEN_LITERALS,
13
17
  SUPPORTED_FUNC_NAMES,
14
18
  SUPPORTED_VAR_NAMES_REG,
@@ -19,9 +23,6 @@ from classiq.interface.generator.function_params import (
19
23
  )
20
24
  from classiq.interface.helpers.custom_pydantic_types import PydanticExpressionStr
21
25
 
22
- from classiq._internals.enum_utils import StrEnum
23
- from classiq.exceptions import ClassiqValueError
24
-
25
26
  AMPLITUDE_IO_NAME = "AMPLITUDE"
26
27
  TARGET_OUTPUT_NAME = "TARGET"
27
28
 
@@ -36,6 +37,12 @@ class AmplitudeLoading(FunctionParams):
36
37
  size: pydantic.PositiveInt = pydantic.Field(
37
38
  description="The number of qubits of the amplitude input."
38
39
  )
40
+ fraction_digits: pydantic.NonNegativeInt = pydantic.Field(
41
+ description="The number of fraction digits of the amplitude input."
42
+ )
43
+ is_signed: bool = pydantic.Field(
44
+ description="Whether the amplitude input has a sign qubit."
45
+ )
39
46
  expression: PydanticExpressionStr = pydantic.Field(
40
47
  description="The mathematical expression of the amplitude loading function."
41
48
  )
@@ -44,7 +51,8 @@ class AmplitudeLoading(FunctionParams):
44
51
  description="Implementation options.",
45
52
  )
46
53
 
47
- @pydantic.validator("expression", pre=True)
54
+ @pydantic.field_validator("expression", mode="before")
55
+ @classmethod
48
56
  def validate_coefficient(cls, expression: str) -> str:
49
57
  if isinstance(expression, str):
50
58
  # We validate the given value is legal and does not contain code that will be executed in our BE.
@@ -59,13 +67,13 @@ class AmplitudeLoading(FunctionParams):
59
67
  return str(expression)
60
68
  return expression
61
69
 
62
- @pydantic.root_validator()
63
- def check_all_variable_are_defined(cls, values: Dict[str, Any]) -> Dict[str, Any]:
64
- expression = values.get("expression", "")
70
+ @pydantic.model_validator(mode="after")
71
+ def check_all_variable_are_defined(self) -> Self:
72
+ expression = self.expression or ""
65
73
  literals = set(re.findall(SUPPORTED_VAR_NAMES_REG, expression))
66
74
 
67
- not_allowed = literals.intersection(FORBIDDEN_LITERALS)
68
- variables = literals.difference(SUPPORTED_FUNC_NAMES)
75
+ not_allowed = literals.intersection(FORBIDDEN_LITERALS) - BOOLEAN_LITERALS
76
+ variables = literals.difference(SUPPORTED_FUNC_NAMES) - BOOLEAN_LITERALS
69
77
  if not_allowed:
70
78
  raise ClassiqValueError(
71
79
  f"The following names: {not_allowed} are not allowed"
@@ -73,7 +81,7 @@ class AmplitudeLoading(FunctionParams):
73
81
 
74
82
  if len(variables) != 1:
75
83
  raise ClassiqValueError(f"{variables} must contain exactly single variable")
76
- return values
84
+ return self
77
85
 
78
86
  def _create_ios(self) -> None:
79
87
  self._inputs = {
@@ -89,5 +97,7 @@ class AmplitudeLoading(FunctionParams):
89
97
 
90
98
  @property
91
99
  def variable(self) -> str:
92
- literals = set(re.findall(SUPPORTED_VAR_NAMES_REG, self.expression))
100
+ literals = (
101
+ set(re.findall(SUPPORTED_VAR_NAMES_REG, self.expression)) - BOOLEAN_LITERALS
102
+ )
93
103
  return list(literals.difference(SUPPORTED_FUNC_NAMES))[0]
@@ -1,8 +1,8 @@
1
- from typing import Dict, List, Optional, Union
1
+ from typing import Optional, Union
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
5
- from classiq._internals.enum_utils import StrEnum
5
+ from classiq.interface.enum_utils import StrEnum
6
6
 
7
7
 
8
8
  class RotationBlocksType(StrEnum):
@@ -42,7 +42,7 @@ class EntanglingLayersArgs(CustomAnsatzArgs):
42
42
 
43
43
  class RandomArgs(CustomAnsatzArgs):
44
44
  gate_count: int = 100
45
- gate_probabilities: Dict[str, float] = {"cx": 0.5, "u": 0.5}
45
+ gate_probabilities: dict[str, float] = {"cx": 0.5, "u": 0.5}
46
46
  random_seed: Optional[int] = None
47
47
 
48
48
 
@@ -52,11 +52,11 @@ class RandomTwoQubitGatesArgs(CustomAnsatzArgs):
52
52
 
53
53
 
54
54
  class TwoLocalArgs(CustomAnsatzArgs):
55
- rotation_blocks: Optional[Union[RotationBlocksType, List[RotationBlocksType]]] = (
55
+ rotation_blocks: Optional[Union[RotationBlocksType, list[RotationBlocksType]]] = (
56
56
  RotationBlocksType.ry
57
57
  )
58
58
  entanglement_blocks: Optional[
59
- Union[EntanglementBlocksType, List[EntanglementBlocksType]]
59
+ Union[EntanglementBlocksType, list[EntanglementBlocksType]]
60
60
  ] = EntanglementBlocksType.cx
61
61
  entanglement: EntanglementStructureType = EntanglementStructureType.full
62
62
  reps: int = 3
@@ -2,13 +2,16 @@ from classiq.interface.generator.functions.classical_function_declaration import
2
2
  ClassicalFunctionDeclaration,
3
3
  )
4
4
  from classiq.interface.generator.functions.classical_type import Integer, Real
5
+ from classiq.interface.model.classical_parameter_declaration import (
6
+ ClassicalParameterDeclaration,
7
+ )
5
8
 
6
9
  qft_const_adder_phase = ClassicalFunctionDeclaration(
7
10
  name="qft_const_adder_phase",
8
- param_decls={
9
- "bit_index": Integer(),
10
- "value": Integer(),
11
- "reg_len": Integer(),
12
- },
11
+ positional_parameters=[
12
+ ClassicalParameterDeclaration(name="bit_index", classical_type=Integer()),
13
+ ClassicalParameterDeclaration(name="value", classical_type=Integer()),
14
+ ClassicalParameterDeclaration(name="reg_len", classical_type=Integer()),
15
+ ],
13
16
  return_type=Real(),
14
17
  )
@@ -1,54 +1,26 @@
1
- import functools
2
1
  from enum import Enum
3
2
 
4
- from classiq.interface.generator.expressions.expression import Expression
5
3
  from classiq.interface.generator.functions.classical_function_declaration import (
6
4
  ClassicalFunctionDeclaration,
7
5
  )
8
6
  from classiq.interface.generator.functions.classical_type import (
9
- Bool,
10
7
  ClassicalList,
11
- Integer,
12
- LadderOperator,
13
- Real,
14
- Struct,
15
8
  VQEResult,
16
9
  )
17
- from classiq.interface.generator.functions.port_declaration import (
18
- PortDeclarationDirection,
19
- )
20
- from classiq.interface.generator.types.struct_declaration import StructDeclaration
21
- from classiq.interface.model.port_declaration import PortDeclaration
22
- from classiq.interface.model.quantum_function_declaration import (
23
- QuantumFunctionDeclaration,
10
+ from classiq.interface.generator.functions.type_name import Struct
11
+ from classiq.interface.model.classical_parameter_declaration import (
12
+ ClassicalParameterDeclaration,
24
13
  )
25
14
 
26
- MOLECULE_PROBLEM_PARAM = {"molecule_problem": Struct(name="MoleculeProblem")}
27
- MOLECULE_PROBLEM_SIZE = (
28
- "len(get_field(molecule_problem_to_hamiltonian(molecule_problem)[0], 'pauli'))"
15
+ MOLECULE_PROBLEM_PARAM = ClassicalParameterDeclaration(
16
+ name="molecule_problem", classical_type=Struct(name="MoleculeProblem")
29
17
  )
30
- MOLECULE_PROBLEM_PORT = {
31
- "qbv": PortDeclaration(
32
- name="qbv",
33
- direction=PortDeclarationDirection.Inout,
34
- size=Expression(
35
- expr=MOLECULE_PROBLEM_SIZE,
36
- ),
37
- )
38
- }
39
-
40
- FOCK_HAMILTONIAN_PROBLEM_PARAM = {
41
- "fock_hamiltonian_problem": Struct(name="FockHamiltonianProblem")
42
- }
43
- FOCK_HAMILTONIAN_SIZE = "len(get_field(fock_hamiltonian_problem_to_hamiltonian(fock_hamiltonian_problem)[0], 'pauli'))"
44
18
 
45
- FOCK_HAMILTONIAN_PROBLEM_PORT = {
46
- "qbv": PortDeclaration(
47
- name="qbv",
48
- direction=PortDeclarationDirection.Inout,
49
- size=Expression(expr=FOCK_HAMILTONIAN_SIZE),
50
- )
51
- }
19
+ FOCK_HAMILTONIAN_PROBLEM_PARAM = ClassicalParameterDeclaration(
20
+ name="fock_hamiltonian_problem",
21
+ classical_type=Struct(name="FockHamiltonianProblem"),
22
+ )
23
+ FOCK_HAMILTONIAN_SIZE = "get_field(get_field(fock_hamiltonian_problem_to_hamiltonian(fock_hamiltonian_problem)[0], 'pauli'), 'len')"
52
24
 
53
25
 
54
26
  class ChemistryProblemType(Enum):
@@ -56,172 +28,40 @@ class ChemistryProblemType(Enum):
56
28
  FockHamiltonianProblem = "fock_hamiltonian_problem"
57
29
 
58
30
 
59
- MOLECULE_UCC_ANSATZ = QuantumFunctionDeclaration(
60
- name="molecule_ucc",
61
- param_decls={
62
- **MOLECULE_PROBLEM_PARAM,
63
- "excitations": ClassicalList(element_type=Integer()),
64
- },
65
- port_declarations=MOLECULE_PROBLEM_PORT,
66
- )
67
-
68
-
69
- MOLECULE_HVA_ANSATZ = QuantumFunctionDeclaration(
70
- name="molecule_hva",
71
- param_decls={
72
- **MOLECULE_PROBLEM_PARAM,
73
- "reps": Integer(),
74
- },
75
- port_declarations=MOLECULE_PROBLEM_PORT,
76
- )
77
-
78
-
79
- MOLECULE_HARTREE_FOCK = QuantumFunctionDeclaration(
80
- name="molecule_hartree_fock",
81
- param_decls={
82
- **MOLECULE_PROBLEM_PARAM,
83
- },
84
- port_declarations=MOLECULE_PROBLEM_PORT,
85
- )
86
-
87
-
88
- FOCK_HAMILTONIAN_UCC_ANSATZ = QuantumFunctionDeclaration(
89
- name="fock_hamiltonian_ucc",
90
- param_decls={
91
- **FOCK_HAMILTONIAN_PROBLEM_PARAM,
92
- "excitations": ClassicalList(element_type=Integer()),
93
- },
94
- port_declarations=FOCK_HAMILTONIAN_PROBLEM_PORT,
95
- )
96
-
97
- FOCK_HAMILTONIAN_HVA_ANSATZ = QuantumFunctionDeclaration(
98
- name="fock_hamiltonian_hva",
99
- param_decls={
100
- **FOCK_HAMILTONIAN_PROBLEM_PARAM,
101
- "reps": Integer(),
102
- },
103
- port_declarations=FOCK_HAMILTONIAN_PROBLEM_PORT,
104
- )
105
-
106
- FOCK_HAMILTONIAN_HARTREE_FOCK = QuantumFunctionDeclaration(
107
- name="fock_hamiltonian_hartree_fock",
108
- param_decls={
109
- **FOCK_HAMILTONIAN_PROBLEM_PARAM,
110
- },
111
- port_declarations=FOCK_HAMILTONIAN_PROBLEM_PORT,
112
- )
113
-
114
-
115
- MOLECULE_PROBLEM = StructDeclaration(
116
- name="MoleculeProblem",
117
- variables={
118
- "mapping": Integer(),
119
- "z2_symmetries": Bool(),
120
- # A negative number of qubits is considered None
121
- # basis: str = pydantic.Field(default="sto3g", description="Molecular basis set")
122
- "molecule": Struct(name="Molecule"),
123
- "freeze_core": Bool(),
124
- "remove_orbitals": ClassicalList(element_type=Integer()),
125
- },
126
- )
127
-
128
- MOLECULE = StructDeclaration(
129
- name="Molecule",
130
- variables={
131
- "atoms": ClassicalList(element_type=Struct(name="ChemistryAtom")),
132
- "spin": Integer(),
133
- "charge": Integer(),
134
- },
135
- )
136
-
137
- CHEMISTRY_ATOM = StructDeclaration(
138
- name="ChemistryAtom",
139
- variables={
140
- "element": Integer(),
141
- "position": Struct(name="Position"),
142
- },
143
- )
144
-
145
- POSITION = StructDeclaration(
146
- name="Position", variables={"x": Real(), "y": Real(), "z": Real()}
147
- )
148
-
149
- FockHamiltonian = functools.partial(
150
- ClassicalList, element_type=Struct(name="LadderTerm")
151
- )
152
-
153
- FOCK_HAMILTONIAN_PROBLEM = StructDeclaration(
154
- name="FockHamiltonianProblem",
155
- variables={
156
- "mapping": Integer(),
157
- "z2_symmetries": Bool(),
158
- "terms": FockHamiltonian(),
159
- "num_particles": ClassicalList(element_type=Integer()),
160
- },
161
- )
162
-
163
- LADDER_TERM = StructDeclaration(
164
- name="LadderTerm",
165
- variables={
166
- "coefficient": Real(),
167
- "ops": ClassicalList(element_type=Struct(name="LadderOp")),
168
- },
169
- )
170
-
171
- LADDER_OP = StructDeclaration(
172
- name="LadderOp",
173
- variables={
174
- "op": LadderOperator(),
175
- "index": Integer(),
176
- },
177
- )
178
-
179
- MOLECULE_RESULT = StructDeclaration(
180
- name="MoleculeResult",
181
- variables={
182
- "energy": Real(),
183
- "nuclear_repulsion_energy": Real(),
184
- "total_energy": Real(),
185
- "hartree_fock_energy": Real(),
186
- "vqe_result": VQEResult(),
187
- },
188
- )
189
-
190
31
  MOLECULE_PROBLEM_TO_HAMILTONIAN = ClassicalFunctionDeclaration(
191
32
  name="molecule_problem_to_hamiltonian",
192
- param_decls={"problem": Struct(name="MoleculeProblem")},
33
+ positional_parameters=[
34
+ ClassicalParameterDeclaration(
35
+ name="problem", classical_type=Struct(name="MoleculeProblem")
36
+ ),
37
+ ],
193
38
  return_type=ClassicalList(element_type=Struct(name="PauliTerm")),
194
39
  )
195
40
 
196
41
  FOCK_HAMILTONIAN_PROBLEM_TO_HAMILTONIAN = ClassicalFunctionDeclaration(
197
42
  name="fock_hamiltonian_problem_to_hamiltonian",
198
- param_decls={"problem": Struct(name="FockHamiltonianProblem")},
43
+ positional_parameters=[
44
+ ClassicalParameterDeclaration(
45
+ name="problem", classical_type=Struct(name="FockHamiltonianProblem")
46
+ ),
47
+ ],
199
48
  return_type=ClassicalList(element_type=Struct(name="PauliTerm")),
200
49
  )
201
50
 
202
51
 
203
52
  MOLECULE_GROUND_STATE_SOLUTION_POST_PROCESS = ClassicalFunctionDeclaration(
204
53
  name="molecule_ground_state_solution_post_process",
205
- param_decls={"problem": Struct(name="MoleculeProblem"), "vqe_result": VQEResult()},
54
+ positional_parameters=[
55
+ ClassicalParameterDeclaration(
56
+ name="problem", classical_type=Struct(name="MoleculeProblem")
57
+ ),
58
+ ClassicalParameterDeclaration(name="vqe_result", classical_type=VQEResult()),
59
+ ],
206
60
  return_type=Struct(name="MoleculeResult"),
207
61
  )
208
62
 
209
63
  __all__ = [
210
- "MOLECULE_UCC_ANSATZ",
211
- "MOLECULE_HVA_ANSATZ",
212
- "MOLECULE_HARTREE_FOCK",
213
- "FOCK_HAMILTONIAN_UCC_ANSATZ",
214
- "FOCK_HAMILTONIAN_HVA_ANSATZ",
215
- "FOCK_HAMILTONIAN_HARTREE_FOCK",
216
- "MOLECULE_PROBLEM",
217
- "MOLECULE",
218
- "CHEMISTRY_ATOM",
219
- "POSITION",
220
- "FOCK_HAMILTONIAN_PROBLEM",
221
- "LADDER_TERM",
222
- "LADDER_OP",
223
- "MOLECULE_PROBLEM_TO_HAMILTONIAN",
224
64
  "FOCK_HAMILTONIAN_PROBLEM_TO_HAMILTONIAN",
225
65
  "MOLECULE_GROUND_STATE_SOLUTION_POST_PROCESS",
226
- "MOLECULE_RESULT",
66
+ "MOLECULE_PROBLEM_TO_HAMILTONIAN",
227
67
  ]
@@ -3,40 +3,37 @@ from classiq.interface.generator.functions.classical_function_declaration import
3
3
  )
4
4
  from classiq.interface.generator.functions.classical_type import (
5
5
  ClassicalList,
6
- Integer,
7
6
  Real,
8
- Struct,
9
7
  StructMetaType,
10
8
  VQEResult,
11
9
  )
12
- from classiq.interface.generator.types.struct_declaration import StructDeclaration
13
-
14
- COMBINATORIAL_OPTIMIZATION_SOLUTION = StructDeclaration(
15
- name="CombinatorialOptimizationSolution",
16
- variables={
17
- "probability": Real(),
18
- "cost": Real(),
19
- "solution": ClassicalList(element_type=Integer()),
20
- "count": Integer(),
21
- },
10
+ from classiq.interface.generator.functions.type_name import Struct
11
+ from classiq.interface.model.classical_parameter_declaration import (
12
+ ClassicalParameterDeclaration,
22
13
  )
23
14
 
24
15
  OPTIMIZATION_PROBLEM_TO_HAMILTONIAN = ClassicalFunctionDeclaration(
25
16
  name="optimization_problem_to_hamiltonian",
26
- param_decls={
27
- "problem_type": StructMetaType(),
28
- "penalty_energy": Real(),
29
- },
17
+ positional_parameters=[
18
+ ClassicalParameterDeclaration(
19
+ name="problem_type", classical_type=StructMetaType()
20
+ ),
21
+ ClassicalParameterDeclaration(name="penalty_energy", classical_type=Real()),
22
+ ],
30
23
  return_type=ClassicalList(element_type=Struct(name="PauliTerm")),
31
24
  )
32
25
 
33
26
  GET_OPTIMIZATION_SOLUTION = ClassicalFunctionDeclaration(
34
27
  name="get_optimization_solution",
35
- param_decls={
36
- "problem_type": StructMetaType(),
37
- "vqe_result_handle": VQEResult(),
38
- "penalty_energy": Real(),
39
- },
28
+ positional_parameters=[
29
+ ClassicalParameterDeclaration(
30
+ name="problem_type", classical_type=StructMetaType()
31
+ ),
32
+ ClassicalParameterDeclaration(
33
+ name="vqe_result_handle", classical_type=VQEResult()
34
+ ),
35
+ ClassicalParameterDeclaration(name="penalty_energy", classical_type=Real()),
36
+ ],
40
37
  return_type=ClassicalList(
41
38
  element_type=Struct(name="CombinatorialOptimizationSolution")
42
39
  ),