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,5 +1,6 @@
1
1
  import itertools
2
- from typing import Any, Iterable
2
+ from collections.abc import Iterable
3
+ from typing import Any
3
4
 
4
5
  import torch
5
6
  from torch import Tensor
@@ -1,11 +1,13 @@
1
1
  import functools
2
- from typing import Any, Callable, Optional, Tuple, Union
2
+ from typing import Any, Callable, Optional, Union
3
3
 
4
4
  import torch
5
5
  import torch.nn as nn
6
6
  from torch import Tensor
7
7
  from torch.nn.parameter import Parameter
8
8
 
9
+ from classiq.interface.exceptions import ClassiqQNNError, ClassiqTorchError
10
+
9
11
  from classiq.applications.qnn.circuit_utils import (
10
12
  extract_parameters,
11
13
  is_single_layer_circuit,
@@ -13,6 +15,7 @@ from classiq.applications.qnn.circuit_utils import (
13
15
  validate_circuit,
14
16
  )
15
17
  from classiq.applications.qnn.gradients.simple_quantum_gradient import (
18
+ EPSILON,
16
19
  SimpleQuantumGradient,
17
20
  )
18
21
  from classiq.applications.qnn.torch_utils import (
@@ -26,7 +29,6 @@ from classiq.applications.qnn.types import (
26
29
  MultipleArguments,
27
30
  PostProcessFunction,
28
31
  )
29
- from classiq.exceptions import ClassiqQNNError, ClassiqTorchError
30
32
  from classiq.synthesis import SerializedQuantumProgram
31
33
 
32
34
 
@@ -39,6 +41,7 @@ class QLayerFunction(torch.autograd.Function):
39
41
  quantum_program: SerializedQuantumProgram,
40
42
  execute: ExecuteFunction,
41
43
  post_process: PostProcessFunction,
44
+ epsilon: Optional[float] = EPSILON,
42
45
  ) -> Tensor:
43
46
  """
44
47
  This function receives:
@@ -51,7 +54,9 @@ class QLayerFunction(torch.autograd.Function):
51
54
  and returning a `Tensor`
52
55
 
53
56
  """
54
- circuit = Circuit.parse_raw(quantum_program)
57
+ if epsilon is None:
58
+ epsilon = EPSILON
59
+ circuit = Circuit.model_validate_json(quantum_program)
55
60
  validate_circuit(circuit)
56
61
 
57
62
  # save for backward
@@ -60,7 +65,7 @@ class QLayerFunction(torch.autograd.Function):
60
65
  ctx.execute = execute
61
66
  ctx.post_process = post_process
62
67
  ctx.quantum_gradient = SimpleQuantumGradient(
63
- quantum_program, execute, post_process
68
+ quantum_program, execute, post_process, epsilon
64
69
  )
65
70
 
66
71
  ctx.batch_size, ctx.num_in_features = inputs.shape
@@ -94,7 +99,7 @@ class QLayerFunction(torch.autograd.Function):
94
99
  @staticmethod
95
100
  def backward( # type: ignore[override]
96
101
  ctx: Any, grad_output: Tensor
97
- ) -> Tuple[Optional[Tensor], Optional[Tensor], None, None, None]:
102
+ ) -> tuple[Optional[Tensor], Optional[Tensor], None, None, None, None]:
98
103
  """
99
104
  grad_output: Tensor
100
105
  is of shape (ctx.batch_size, ctx.num_out_features)
@@ -103,6 +108,7 @@ class QLayerFunction(torch.autograd.Function):
103
108
 
104
109
  grad_weights = grad_inputs = None
105
110
  grad_circuit = grad_execute = grad_post_process = None
111
+ grad_epsilon = None
106
112
  is_single_layer = is_single_layer_circuit(weights)
107
113
 
108
114
  if ctx.needs_input_grad[1]:
@@ -118,7 +124,14 @@ class QLayerFunction(torch.autograd.Function):
118
124
  f"Grad required for unknown type: {ctx.needs_input_grad}"
119
125
  )
120
126
 
121
- return grad_inputs, grad_weights, grad_circuit, grad_execute, grad_post_process
127
+ return (
128
+ grad_inputs,
129
+ grad_weights,
130
+ grad_circuit,
131
+ grad_execute,
132
+ grad_post_process,
133
+ grad_epsilon,
134
+ )
122
135
 
123
136
 
124
137
  CalcNumOutFeatures = Callable[[SerializedQuantumProgram], int]
@@ -142,8 +155,9 @@ class QLayer(nn.Module):
142
155
  head_start: Union[float, Tensor, None] = None,
143
156
  # Experimental parameters:
144
157
  calc_num_out_features: CalcNumOutFeatures = calc_num_out_features_single_output,
158
+ epsilon: float = EPSILON,
145
159
  ) -> None:
146
- circuit = Circuit.parse_raw(quantum_program)
160
+ circuit = Circuit.model_validate_json(quantum_program)
147
161
  validate_circuit(circuit)
148
162
 
149
163
  super().__init__()
@@ -151,6 +165,7 @@ class QLayer(nn.Module):
151
165
  self._execute = execute
152
166
  self._post_process = post_process
153
167
  self._head_start = head_start
168
+ self._epsilon = epsilon
154
169
 
155
170
  self.quantum_program = quantum_program
156
171
 
@@ -161,7 +176,7 @@ class QLayer(nn.Module):
161
176
  self._initialize_parameters()
162
177
 
163
178
  def _initialize_parameters(self) -> None:
164
- shape: Tuple[int, ...] = (
179
+ shape: tuple[int, ...] = (
165
180
  (self.out_features, self.in_features)
166
181
  if self.out_features > 1
167
182
  else (self.in_features,)
@@ -181,6 +196,11 @@ class QLayer(nn.Module):
181
196
  self.weight = Parameter(value)
182
197
 
183
198
  def forward(self, x: Tensor) -> Tensor:
184
- return QLayerFunction.apply( # type: ignore[no-untyped-call]
185
- x, self.weight, self.quantum_program, self._execute, self._post_process
199
+ return QLayerFunction.apply(
200
+ x,
201
+ self.weight,
202
+ self.quantum_program,
203
+ self._execute,
204
+ self._post_process,
205
+ self._epsilon,
186
206
  )
@@ -1,11 +1,13 @@
1
1
  from collections.abc import Sized
2
2
  from functools import reduce
3
- from typing import Optional, Tuple
3
+ from typing import Optional
4
4
 
5
5
  import torch
6
6
  import torch.nn as nn
7
7
  from torch import Tensor
8
8
 
9
+ from classiq.interface.exceptions import ClassiqValueError
10
+
9
11
  from classiq.applications.qnn.circuit_utils import is_single_layer_circuit
10
12
  from classiq.applications.qnn.types import (
11
13
  ExecuteFuncitonOnlyArguments,
@@ -13,7 +15,6 @@ from classiq.applications.qnn.types import (
13
15
  Shape,
14
16
  TensorToArgumentsCallable,
15
17
  )
16
- from classiq.exceptions import ClassiqValueError
17
18
 
18
19
 
19
20
  def get_shape_second_dimension(shape: torch.Size) -> int:
@@ -97,7 +98,7 @@ def iter_inputs_weights(
97
98
  ) -> Tensor:
98
99
  if is_single_layer_circuit(weights):
99
100
  iter_weights = torch.reshape(weights, (1, weights.shape[0]))
100
- inputs_weights_shape: Tuple[int, ...] = (inputs.shape[0],)
101
+ inputs_weights_shape: tuple[int, ...] = (inputs.shape[0],)
101
102
  else:
102
103
  iter_weights = weights
103
104
  inputs_weights_shape = (inputs.shape[0], weights.shape[0])
@@ -1,4 +1,4 @@
1
- from typing import Callable, Dict, List, Tuple, Union
1
+ from typing import Callable, Union
2
2
 
3
3
  import torch
4
4
  from torch import Tensor
@@ -8,8 +8,8 @@ from classiq.interface.executor.execution_result import ResultsCollection, Saved
8
8
  from classiq import QuantumProgram
9
9
  from classiq.synthesis import SerializedQuantumProgram
10
10
 
11
- Arguments = Dict[str, float]
12
- MultipleArguments = Tuple[Arguments, ...]
11
+ Arguments = dict[str, float]
12
+ MultipleArguments = tuple[Arguments, ...]
13
13
 
14
14
  Circuit = QuantumProgram
15
15
  ExecuteFunction = Callable[
@@ -19,10 +19,10 @@ ExecuteFuncitonOnlyArguments = Callable[[MultipleArguments], ResultsCollection]
19
19
  PostProcessFunction = Callable[[SavedResult], Tensor]
20
20
  TensorToArgumentsCallable = Callable[[Tensor, Tensor], MultipleArguments]
21
21
 
22
- Shape = Union[torch.Size, Tuple[int, ...]]
22
+ Shape = Union[torch.Size, tuple[int, ...]]
23
23
 
24
24
  GradientFunction = Callable[[Tensor, Tensor], Tensor]
25
25
  SimulateFunction = Callable[[Tensor, Tensor], Tensor]
26
26
 
27
- DataAndLabel = Tuple[List[int], Union[List[int], int]]
27
+ DataAndLabel = tuple[list[int], Union[list[int], int]]
28
28
  Transform = Callable[[Tensor], Tensor]
@@ -1,8 +1,10 @@
1
- from classiq.interface.generator.expressions.enums.qsvm_feature_map_entanglement import (
2
- QSVMFeatureMapEntanglement,
3
- )
1
+ from classiq.qmod.builtins.enums import QSVMFeatureMapEntanglement
4
2
 
5
3
  from ..qsvm import qsvm_data_generation
6
4
  from .qsvm import * # noqa: F403
5
+ from .qsvm_model_constructor import construct_qsvm_model
7
6
 
8
- __all__ = ["QSVMFeatureMapEntanglement"]
7
+ __all__ = [
8
+ "QSVMFeatureMapEntanglement",
9
+ "construct_qsvm_model",
10
+ ]
@@ -1,14 +1,11 @@
1
- from typing import List
2
-
3
- from classiq.interface.applications.qsvm import Data, Labels, QSVMData, QSVMPreferences
1
+ from classiq.interface.applications.qsvm import Data, Labels, QSVMData
4
2
 
5
3
  __all__ = [
6
- "QSVMData",
7
- "QSVMPreferences",
8
4
  "Data",
9
5
  "Labels",
6
+ "QSVMData",
10
7
  ]
11
8
 
12
9
 
13
- def __dir__() -> List[str]:
10
+ def __dir__() -> list[str]:
14
11
  return __all__
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  from collections import defaultdict
3
- from typing import Dict, Optional, Tuple
3
+ from typing import Optional
4
4
 
5
5
  import numpy as np
6
6
 
@@ -15,7 +15,7 @@ def generate_data(
15
15
  range_max: float = 2 * np.pi,
16
16
  std: float = 0.5,
17
17
  sources: Optional[np.ndarray] = None,
18
- ) -> Dict[int, np.ndarray]:
18
+ ) -> dict[int, np.ndarray]:
19
19
  if sources is None:
20
20
  sources = np.random.uniform(
21
21
  range_min, range_max, (amount_of_sources, dimension)
@@ -36,7 +36,7 @@ def generate_data(
36
36
  return results
37
37
 
38
38
 
39
- def data_dict_to_data_and_labels(data_dict: dict) -> Tuple[np.ndarray, np.ndarray]:
39
+ def data_dict_to_data_and_labels(data_dict: dict) -> tuple[np.ndarray, np.ndarray]:
40
40
  data = []
41
41
  labels = []
42
42
  for k, v in data_dict.items():
@@ -1,21 +1,21 @@
1
- from typing import Any, Dict, List, Tuple
1
+ from typing import Any
2
2
 
3
3
  from classiq.interface.applications.qsvm import DataList, LabelsInt
4
- from classiq.interface.generator.expressions.enums.pauli import Pauli
5
- from classiq.interface.generator.expressions.enums.qsvm_feature_map_entanglement import (
6
- QSVMFeatureMapEntanglement,
7
- )
4
+ from classiq.interface.exceptions import ClassiqValueError
8
5
  from classiq.interface.generator.expressions.expression import Expression
9
6
  from classiq.interface.generator.functions.port_declaration import (
10
7
  PortDeclarationDirection,
11
8
  )
9
+ from classiq.interface.model.allocate import Allocate
12
10
  from classiq.interface.model.handle_binding import HandleBinding
13
11
  from classiq.interface.model.model import Model, SerializedModel
14
12
  from classiq.interface.model.native_function_definition import NativeFunctionDefinition
15
13
  from classiq.interface.model.port_declaration import PortDeclaration
16
14
  from classiq.interface.model.quantum_function_call import QuantumFunctionCall
15
+ from classiq.interface.model.quantum_statement import QuantumStatement
17
16
 
18
- from classiq.exceptions import ClassiqValueError
17
+ from classiq.qmod.builtins.enums import Pauli, QSVMFeatureMapEntanglement
18
+ from classiq.qmod.utilities import qmod_val_to_expr_str
19
19
 
20
20
  INVALID_FEATURE_MAP_FUNC_NAME_MSG = "Invalid feature_map_function_name, it can be bloch_sphere_feature_map or pauli_feature_map"
21
21
 
@@ -24,43 +24,46 @@ _OUTPUT_VARIABLE_NAME = "qsvm_results"
24
24
 
25
25
  def _bloch_sphere_feature_map_function_params(
26
26
  bloch_feature_dimension: int,
27
- ) -> Tuple[Dict[str, Expression], str]:
28
- return {
29
- "feature_dimension": Expression(expr=f"{bloch_feature_dimension}")
30
- }, f"ceiling({bloch_feature_dimension}/2)"
27
+ ) -> tuple[list[Expression], str]:
28
+ return [
29
+ Expression(expr=f"{bloch_feature_dimension}")
30
+ ], f"ceiling({bloch_feature_dimension}/2)"
31
31
 
32
32
 
33
33
  def _pauli_feature_map_function_params(
34
- paulis: List[List[Pauli]],
34
+ paulis: list[list[Pauli]],
35
35
  entanglement: QSVMFeatureMapEntanglement,
36
36
  alpha: int,
37
37
  reps: int,
38
38
  feature_dimension: int,
39
- ) -> Tuple[Dict[str, Expression], str]:
39
+ ) -> tuple[list[Expression], str]:
40
40
  paulis_str = (
41
41
  "["
42
42
  + ",".join(
43
- ["[" + ",".join([str(p) for p in p_list]) + "]" for p_list in paulis]
43
+ [
44
+ "[" + ",".join([qmod_val_to_expr_str(p) for p in p_list]) + "]"
45
+ for p_list in paulis
46
+ ]
44
47
  )
45
48
  + "]"
46
49
  )
47
50
  pauli_feature_map_params = (
48
51
  f"paulis={paulis_str}, "
49
- f"entanglement={entanglement}, "
52
+ f"entanglement={qmod_val_to_expr_str(entanglement)}, "
50
53
  f"alpha={alpha}, "
51
54
  f"reps={reps}, "
52
55
  f"feature_dimension={feature_dimension}"
53
56
  )
54
- return {
55
- "feature_map": Expression(
57
+ return [
58
+ Expression(
56
59
  expr=f"struct_literal(QSVMFeatureMapPauli, {pauli_feature_map_params})"
57
60
  )
58
- }, f"{feature_dimension}"
61
+ ], f"{feature_dimension}"
59
62
 
60
63
 
61
64
  def get_qsvm_qmain_body(
62
65
  feature_map_function_name: str, **kwargs: Any
63
- ) -> List[QuantumFunctionCall]:
66
+ ) -> list[QuantumStatement]:
64
67
  if feature_map_function_name == "bloch_sphere_feature_map":
65
68
  params, size_expr = _bloch_sphere_feature_map_function_params(**kwargs)
66
69
  elif feature_map_function_name == "pauli_feature_map":
@@ -69,14 +72,13 @@ def get_qsvm_qmain_body(
69
72
  raise ClassiqValueError(INVALID_FEATURE_MAP_FUNC_NAME_MSG)
70
73
 
71
74
  return [
72
- QuantumFunctionCall(
73
- function="allocate",
74
- positional_args=[Expression(expr=size_expr), HandleBinding(name="qbv")],
75
+ Allocate(
76
+ size=Expression(expr=size_expr),
77
+ target=HandleBinding(name="qbv"),
75
78
  ),
76
79
  QuantumFunctionCall(
77
80
  function=feature_map_function_name,
78
- params=params,
79
- inouts={"qbv": HandleBinding(name="qbv")},
81
+ positional_args=[*params, HandleBinding(name="qbv")],
80
82
  ),
81
83
  ]
82
84
 
@@ -94,12 +96,12 @@ def construct_qsvm_model(
94
96
  functions=[
95
97
  NativeFunctionDefinition(
96
98
  name="main",
97
- port_declarations={
98
- "qbv": PortDeclaration(
99
+ positional_arg_declarations=[
100
+ PortDeclaration(
99
101
  name="qbv",
100
102
  direction=PortDeclarationDirection.Output,
101
- )
102
- },
103
+ ),
104
+ ],
103
105
  body=get_qsvm_qmain_body(
104
106
  feature_map_function_name=feature_map_function_name, **kwargs
105
107
  ),
@@ -114,7 +116,7 @@ def construct_qsvm_model(
114
116
  predict_data={predict_data}
115
117
  )
116
118
  save({{{_OUTPUT_VARIABLE_NAME!r}: {_OUTPUT_VARIABLE_NAME}}})
117
- """,
119
+ """.strip(),
118
120
  )
119
121
 
120
122
  return qsvm_qmod.get_model()
@@ -1,5 +1,3 @@
1
- from typing import List
2
-
3
1
  from ..executor import * # noqa: F403
4
2
  from ..executor import __all__ as _exec_all
5
3
  from ..interface.backend.backend_preferences import * # noqa: F403
@@ -9,7 +7,10 @@ from ..interface.executor.execution_preferences import __all__ as _ep_all
9
7
  from ..interface.executor.iqae_result import IQAEResult
10
8
  from ..interface.executor.result import ExecutionDetails
11
9
  from ..interface.executor.vqe_result import VQESolverResult
10
+ from .execution_session import ExecutionSession
11
+ from .iqcc import generate_iqcc_token, generate_iqcc_token_async
12
12
  from .jobs import ExecutionJob, get_execution_jobs, get_execution_jobs_async
13
+ from .qnn import execute_qnn
13
14
 
14
15
  __all__ = (
15
16
  _be_all
@@ -22,9 +23,13 @@ __all__ = (
22
23
  "ExecutionJob",
23
24
  "get_execution_jobs",
24
25
  "get_execution_jobs_async",
26
+ "ExecutionSession",
27
+ "execute_qnn",
28
+ "generate_iqcc_token",
29
+ "generate_iqcc_token_async",
25
30
  ]
26
31
  )
27
32
 
28
33
 
29
- def __dir__() -> List[str]:
34
+ def __dir__() -> list[str]:
30
35
  return __all__
@@ -0,0 +1,11 @@
1
+ from classiq.interface.hardware import HardwareInformation
2
+
3
+ from classiq._internals import async_utils
4
+ from classiq._internals.api_wrapper import ApiWrapper
5
+
6
+
7
+ def get_all_hardware_devices() -> list[HardwareInformation]:
8
+ """
9
+ Returns a list of all hardware devices known to Classiq.
10
+ """
11
+ return async_utils.run(ApiWrapper.call_get_all_hardware_devices())