classiq 0.38.0__py3-none-any.whl → 0.65.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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.3.dist-info}/METADATA +16 -9
  414. classiq-0.65.3.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.3.dist-info}/WHEEL +0 -0
@@ -0,0 +1,119 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any, NoReturn
4
+
5
+ from classiq.interface.exceptions import ClassiqArithmeticError
6
+
7
+
8
+ class NonSymbolicExpr:
9
+ @property
10
+ def type_name(self) -> str:
11
+ raise NotImplementedError
12
+
13
+ @staticmethod
14
+ def _raise_error(type_name: str, op: str) -> NoReturn:
15
+ raise ClassiqArithmeticError(
16
+ f"Unsupported operand type for {op!r}: {type_name}"
17
+ )
18
+
19
+ def __add__(self, other: Any) -> NoReturn:
20
+ NonSymbolicExpr._raise_error(self.type_name, "+")
21
+
22
+ def __sub__(self, other: Any) -> NoReturn:
23
+ NonSymbolicExpr._raise_error(self.type_name, "-")
24
+
25
+ def __mul__(self, other: Any) -> NoReturn:
26
+ NonSymbolicExpr._raise_error(self.type_name, "*")
27
+
28
+ def __truediv__(self, other: Any) -> NoReturn:
29
+ NonSymbolicExpr._raise_error(self.type_name, "/")
30
+
31
+ def __floordiv__(self, other: Any) -> NoReturn:
32
+ NonSymbolicExpr._raise_error(self.type_name, "//")
33
+
34
+ def __mod__(self, other: Any) -> NoReturn:
35
+ NonSymbolicExpr._raise_error(self.type_name, "%")
36
+
37
+ def __pow__(self, other: Any) -> NoReturn:
38
+ NonSymbolicExpr._raise_error(self.type_name, "**")
39
+
40
+ def __lshift__(self, other: Any) -> NoReturn:
41
+ NonSymbolicExpr._raise_error(self.type_name, "<<")
42
+
43
+ def __rshift__(self, other: Any) -> NoReturn:
44
+ NonSymbolicExpr._raise_error(self.type_name, ">>")
45
+
46
+ def __and__(self, other: Any) -> NoReturn:
47
+ NonSymbolicExpr._raise_error(self.type_name, "&")
48
+
49
+ def __xor__(self, other: Any) -> NoReturn:
50
+ NonSymbolicExpr._raise_error(self.type_name, "^")
51
+
52
+ def __or__(self, other: Any) -> NoReturn:
53
+ NonSymbolicExpr._raise_error(self.type_name, "|")
54
+
55
+ def __radd__(self, other: Any) -> NoReturn:
56
+ NonSymbolicExpr._raise_error(self.type_name, "+")
57
+
58
+ def __rsub__(self, other: Any) -> NoReturn:
59
+ NonSymbolicExpr._raise_error(self.type_name, "-")
60
+
61
+ def __rmul__(self, other: Any) -> NoReturn:
62
+ NonSymbolicExpr._raise_error(self.type_name, "*")
63
+
64
+ def __rtruediv__(self, other: Any) -> NoReturn:
65
+ NonSymbolicExpr._raise_error(self.type_name, "/")
66
+
67
+ def __rfloordiv__(self, other: Any) -> NoReturn:
68
+ NonSymbolicExpr._raise_error(self.type_name, "//")
69
+
70
+ def __rmod__(self, other: Any) -> NoReturn:
71
+ NonSymbolicExpr._raise_error(self.type_name, "%")
72
+
73
+ def __rpow__(self, other: Any) -> NoReturn:
74
+ NonSymbolicExpr._raise_error(self.type_name, "**")
75
+
76
+ def __rlshift__(self, other: Any) -> NoReturn:
77
+ NonSymbolicExpr._raise_error(self.type_name, "<<")
78
+
79
+ def __rrshift__(self, other: Any) -> NoReturn:
80
+ NonSymbolicExpr._raise_error(self.type_name, ">>")
81
+
82
+ def __rand__(self, other: Any) -> NoReturn:
83
+ NonSymbolicExpr._raise_error(self.type_name, "&")
84
+
85
+ def __rxor__(self, other: Any) -> NoReturn:
86
+ NonSymbolicExpr._raise_error(self.type_name, "^")
87
+
88
+ def __ror__(self, other: Any) -> NoReturn:
89
+ NonSymbolicExpr._raise_error(self.type_name, "|")
90
+
91
+ def __lt__(self, other: Any) -> NoReturn:
92
+ NonSymbolicExpr._raise_error(self.type_name, "<")
93
+
94
+ def __le__(self, other: Any) -> NoReturn:
95
+ NonSymbolicExpr._raise_error(self.type_name, "<=")
96
+
97
+ def __eq__(self, other: Any) -> NoReturn:
98
+ NonSymbolicExpr._raise_error(self.type_name, "==")
99
+
100
+ def __ne__(self, other: Any) -> NoReturn:
101
+ NonSymbolicExpr._raise_error(self.type_name, "!=")
102
+
103
+ def __gt__(self, other: Any) -> NoReturn:
104
+ NonSymbolicExpr._raise_error(self.type_name, ">")
105
+
106
+ def __ge__(self, other: Any) -> NoReturn:
107
+ NonSymbolicExpr._raise_error(self.type_name, ">=")
108
+
109
+ def __neg__(self) -> NoReturn:
110
+ NonSymbolicExpr._raise_error(self.type_name, "-")
111
+
112
+ def __pos__(self) -> NoReturn:
113
+ NonSymbolicExpr._raise_error(self.type_name, "+")
114
+
115
+ def __abs__(self) -> NoReturn:
116
+ NonSymbolicExpr._raise_error(self.type_name, "abs")
117
+
118
+ def __invert__(self) -> NoReturn:
119
+ NonSymbolicExpr._raise_error(self.type_name, "~")
@@ -0,0 +1,99 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING, Any, Union
3
+
4
+ from sympy import Integer
5
+
6
+ from classiq.interface.exceptions import (
7
+ ClassiqInternalExpansionError,
8
+ ClassiqValueError,
9
+ )
10
+ from classiq.interface.generator.expressions.expression import Expression
11
+ from classiq.interface.generator.expressions.non_symbolic_expr import NonSymbolicExpr
12
+ from classiq.interface.generator.expressions.qmod_sized_proxy import QmodSizedProxy
13
+ from classiq.interface.model.handle_binding import (
14
+ HandleBinding,
15
+ SlicedHandleBinding,
16
+ SubscriptHandleBinding,
17
+ )
18
+
19
+ if TYPE_CHECKING:
20
+ from classiq.interface.model.quantum_type import QuantumType
21
+
22
+
23
+ ILLEGAL_SLICING_STEP_MSG = "Slicing with a step of a quantum variable is not supported"
24
+ ILLEGAL_SLICE_MSG = "Quantum array slice must be of the form [<int-value>:<int-value>]."
25
+
26
+
27
+ class QmodQArrayProxy(NonSymbolicExpr, QmodSizedProxy):
28
+ def __init__(
29
+ self,
30
+ handle: HandleBinding,
31
+ element_type: "QuantumType",
32
+ element_size: int,
33
+ length: int,
34
+ ) -> None:
35
+ super().__init__(handle, element_size * length)
36
+ self._length = length
37
+ self._element_type = element_type
38
+ self._element_size = element_size
39
+
40
+ def __getitem__(self, key: Union[slice, int, Integer]) -> "QmodSizedProxy":
41
+ return (
42
+ self._get_slice(key) if isinstance(key, slice) else self._get_subscript(key)
43
+ )
44
+
45
+ def _get_subscript(self, index: Union[int, Integer]) -> "QmodSizedProxy":
46
+ if isinstance(index, Integer):
47
+ index = int(index)
48
+ if index < 0 or index >= self._length:
49
+ raise ClassiqInternalExpansionError
50
+
51
+ return self._element_type.get_proxy(
52
+ SubscriptHandleBinding(
53
+ base_handle=self.handle,
54
+ index=Expression(expr=str(index)),
55
+ )
56
+ )
57
+
58
+ def _get_slice(self, slice_: slice) -> "QmodSizedProxy":
59
+ if slice_.step is not None:
60
+ raise ClassiqValueError(ILLEGAL_SLICING_STEP_MSG)
61
+ if isinstance(slice_.start, Integer):
62
+ slice_ = slice(int(slice_.start), slice_.stop)
63
+ if isinstance(slice_.stop, Integer):
64
+ slice_ = slice(slice_.start, int(slice_.stop))
65
+ if not isinstance(slice_.start, int) or not isinstance(slice_.stop, int):
66
+ raise ClassiqValueError(ILLEGAL_SLICE_MSG)
67
+ if (
68
+ slice_.start >= slice_.stop
69
+ or slice_.start < 0
70
+ or slice_.stop > self._length
71
+ ):
72
+ raise ClassiqInternalExpansionError
73
+
74
+ return QmodQArrayProxy(
75
+ SlicedHandleBinding(
76
+ base_handle=self.handle,
77
+ start=Expression(expr=str(slice_.start)),
78
+ end=Expression(expr=str(slice_.stop)),
79
+ ),
80
+ self._element_type,
81
+ self._element_size,
82
+ slice_.stop - slice_.start,
83
+ )
84
+
85
+ @property
86
+ def type_name(self) -> str:
87
+ return "Quantum array"
88
+
89
+ @property
90
+ def len(self) -> int:
91
+ return self._length
92
+
93
+ @property
94
+ def fields(self) -> Mapping[str, Any]:
95
+ return {**super().fields, "len": self.len}
96
+
97
+ @property
98
+ def size(self) -> int:
99
+ return self.len * self._element_size
@@ -1,29 +1,47 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any
3
+
1
4
  from sympy import Symbol
2
5
 
6
+ from classiq.interface.exceptions import ClassiqValueError
3
7
  from classiq.interface.generator.expressions.qmod_sized_proxy import QmodSizedProxy
8
+ from classiq.interface.model.handle_binding import HandleBinding
4
9
 
5
10
 
6
11
  class QmodQScalarProxy(Symbol, QmodSizedProxy):
7
- def __new__(cls, name, **assumptions):
8
- return super().__new__(cls, name, **assumptions)
12
+ def __new__(cls, handle: HandleBinding, **assumptions: bool) -> "QmodQScalarProxy":
13
+ return super().__new__(cls, str(handle), **assumptions)
9
14
 
10
- def __init__(self, name: str, size: int) -> None:
11
- super().__init__(size)
15
+ def __init__(self, handle: HandleBinding, size: int) -> None:
16
+ super().__init__(handle, size)
12
17
 
13
18
 
14
19
  class QmodQBitProxy(QmodQScalarProxy):
15
- pass
20
+ def __init__(self, handle: HandleBinding) -> None:
21
+ super().__init__(handle, 1)
22
+
23
+ @property
24
+ def type_name(self) -> str:
25
+ return "Quantum bit"
16
26
 
17
27
 
18
28
  class QmodQNumProxy(QmodQScalarProxy):
19
-
20
29
  def __init__(
21
- self, name: str, size: int, fraction_digits: int, is_signed: bool
30
+ self, handle: HandleBinding, size: int, fraction_digits: int, is_signed: bool
22
31
  ) -> None:
23
- super().__init__(name, size)
32
+ super().__init__(handle, size)
33
+ if fraction_digits > size:
34
+ raise ClassiqValueError(
35
+ f"Quantum numeric of size {size} cannot have {fraction_digits} "
36
+ f"fraction digits"
37
+ )
24
38
  self._fraction_digits = fraction_digits
25
39
  self._is_signed = is_signed
26
40
 
41
+ @property
42
+ def type_name(self) -> str:
43
+ return "Quantum numeric"
44
+
27
45
  @property
28
46
  def fraction_digits(self) -> int:
29
47
  return self._fraction_digits
@@ -31,3 +49,11 @@ class QmodQNumProxy(QmodQScalarProxy):
31
49
  @property
32
50
  def is_signed(self) -> bool:
33
51
  return self._is_signed
52
+
53
+ @property
54
+ def fields(self) -> Mapping[str, Any]:
55
+ return {
56
+ **super().fields,
57
+ "is_signed": self.is_signed,
58
+ "fraction_digits": self.fraction_digits,
59
+ }
@@ -0,0 +1,36 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING
3
+
4
+ from classiq.interface.generator.expressions.non_symbolic_expr import NonSymbolicExpr
5
+ from classiq.interface.generator.expressions.qmod_sized_proxy import QmodSizedProxy
6
+ from classiq.interface.model.handle_binding import (
7
+ FieldHandleBinding,
8
+ HandleBinding,
9
+ )
10
+
11
+ if TYPE_CHECKING:
12
+ from classiq.interface.model.quantum_type import QuantumType
13
+
14
+
15
+ class QmodQStructProxy(NonSymbolicExpr, QmodSizedProxy):
16
+ def __init__(
17
+ self,
18
+ handle: HandleBinding,
19
+ struct_name: str,
20
+ fields: Mapping[str, "QuantumType"],
21
+ ) -> None:
22
+ self._fields = {
23
+ name: type_.get_proxy(FieldHandleBinding(base_handle=handle, field=name))
24
+ for name, type_ in fields.items()
25
+ }
26
+ size = sum(proxy.size for proxy in self._fields.values())
27
+ super().__init__(handle, size)
28
+ self._struct_name = struct_name
29
+
30
+ @property
31
+ def type_name(self) -> str:
32
+ return self._struct_name
33
+
34
+ @property
35
+ def fields(self) -> Mapping[str, QmodSizedProxy]:
36
+ return {**super().fields, **self._fields}
@@ -1,6 +1,34 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING, Any
3
+
4
+ if TYPE_CHECKING:
5
+ from classiq.interface.model.handle_binding import HandleBinding
6
+
7
+
1
8
  class QmodSizedProxy:
2
- def __init__(self, size: int) -> None:
9
+ def __init__(self, handle: "HandleBinding", size: int) -> None:
10
+ self._handle = handle
3
11
  self._size = size
4
12
 
5
- def __len__(self) -> int:
13
+ @property
14
+ def size(self) -> int:
6
15
  return self._size
16
+
17
+ def __str__(self) -> str:
18
+ return str(self.handle)
19
+
20
+ @property
21
+ def type_name(self) -> str:
22
+ raise NotImplementedError
23
+
24
+ @property
25
+ def handle(self) -> "HandleBinding":
26
+ return self._handle
27
+
28
+ @property
29
+ def len(self) -> int:
30
+ return self._size
31
+
32
+ @property
33
+ def fields(self) -> Mapping[str, Any]:
34
+ return {"size": self._size}
@@ -1,5 +1,6 @@
1
1
  import types
2
- from typing import TYPE_CHECKING, Any, Mapping
2
+ from collections.abc import Mapping
3
+ from typing import TYPE_CHECKING, Any
3
4
 
4
5
  if TYPE_CHECKING:
5
6
  from classiq.interface.generator.expressions.expression_types import ExpressionValue
@@ -16,9 +17,20 @@ class QmodStructInstance:
16
17
  self.struct_declaration = struct_declaration
17
18
  self._fields = fields
18
19
 
20
+ @property
21
+ def type_name(self) -> str:
22
+ return f"Struct {self.struct_declaration.name}"
23
+
19
24
  @property
20
25
  def fields(self) -> Mapping[str, Any]:
21
26
  return types.MappingProxyType(self._fields)
22
27
 
28
+ def __str__(self) -> str:
29
+ return repr(self)
30
+
23
31
  def __repr__(self) -> str:
24
- return repr(self._fields)
32
+ fields = ", ".join(
33
+ f"{field_name}={field_value}"
34
+ for field_name, field_value in self._fields.items()
35
+ )
36
+ return f"{self.struct_declaration.name}({fields})"
@@ -1,7 +1,5 @@
1
- from typing import List
2
-
3
- BASIC_ARITHMETIC_OPERATORS: List[str] = ["+", "-", "*", "/", "%"]
4
- MATHEMATICAL_FUNCTIONS: List[str] = [
1
+ BASIC_ARITHMETIC_OPERATORS: list[str] = ["+", "-", "*", "/", "%"]
2
+ MATHEMATICAL_FUNCTIONS: list[str] = [
5
3
  "sin",
6
4
  "cos",
7
5
  "tan",
@@ -36,7 +34,7 @@ MATHEMATICAL_FUNCTIONS: List[str] = [
36
34
  "Min",
37
35
  "mod_inverse",
38
36
  ]
39
- SPECIAL_FUNCTIONS: List[str] = [
37
+ SPECIAL_FUNCTIONS: list[str] = [
40
38
  "erf",
41
39
  "erfc",
42
40
  "gamma",
@@ -57,10 +55,20 @@ SPECIAL_FUNCTIONS: List[str] = [
57
55
  "euler",
58
56
  "catalan",
59
57
  ]
60
- PIECEWISE_FUNCTIONS: List[str] = ["Piecewise", "Heaviside"]
61
- CONSTANTS: List[str] = ["pi", "E", "I", "GoldenRatio", "EulerGamma", "Catalan"]
62
- DATA_TYPES: List[str] = ["Matrix"]
63
- LOGIC_OPERATORS: List[str] = [
58
+ PIECEWISE_FUNCTIONS: list[str] = ["Piecewise", "Heaviside"]
59
+ NUMERIC_CONSTANTS: list[str] = [
60
+ "pi",
61
+ "E",
62
+ "I",
63
+ "GoldenRatio",
64
+ "EulerGamma",
65
+ "Catalan",
66
+ ]
67
+ BOOLEAN_CONSTANTS: list[str] = ["true", "false"]
68
+ CONSTANTS: list[str] = NUMERIC_CONSTANTS + BOOLEAN_CONSTANTS
69
+
70
+ DATA_TYPES: list[str] = ["Matrix"]
71
+ LOGIC_OPERATORS: list[str] = [
64
72
  "And",
65
73
  "Or",
66
74
  "Not",
@@ -70,9 +78,9 @@ LOGIC_OPERATORS: List[str] = [
70
78
  "Nand",
71
79
  "Nor",
72
80
  ]
73
- RELATIONAL_OPERATORS: List[str] = ["<", "<=", ">", ">=", "!=", "<>", "Eq", "Ne"]
81
+ RELATIONAL_OPERATORS: list[str] = ["<", "<=", ">", ">=", "!=", "<>", "Eq", "Ne"]
74
82
 
75
- SYMPY_SUPPORTED_EXPRESSIONS: List[str] = (
83
+ SYMPY_SUPPORTED_EXPRESSIONS: list[str] = (
76
84
  BASIC_ARITHMETIC_OPERATORS
77
85
  + MATHEMATICAL_FUNCTIONS
78
86
  + SPECIAL_FUNCTIONS
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Tuple, Union
3
+ from typing import Union
4
4
 
5
5
  import pydantic
6
6
 
@@ -90,7 +90,7 @@ class FinancePayoff(function_params.FunctionParams):
90
90
  description="The finance function to solve the model"
91
91
  )
92
92
  num_qubits: pydantic.PositiveInt
93
- distribution_range: Tuple[float, float]
93
+ distribution_range: tuple[float, float]
94
94
 
95
95
  def _create_ios(self) -> None:
96
96
  self._inputs = {
@@ -1,19 +1,19 @@
1
- from typing import Iterable, Set, Type
1
+ from collections.abc import Iterable
2
2
 
3
3
  from classiq.interface.generator.function_params import FunctionParams
4
4
 
5
5
 
6
6
  class FunctionParamLibrary:
7
- def __init__(self, param_list: Iterable[Type[FunctionParams]]) -> None:
8
- self._param_list: Set[Type[FunctionParams]] = set(param_list)
7
+ def __init__(self, param_list: Iterable[type[FunctionParams]]) -> None:
8
+ self._param_list: set[type[FunctionParams]] = set(param_list)
9
9
 
10
10
  @property
11
- def param_list(self) -> Set[Type[FunctionParams]]:
11
+ def param_list(self) -> set[type[FunctionParams]]:
12
12
  return self._param_list.copy()
13
13
 
14
14
  # Private methods are for tests only
15
- def _add(self, param: Type[FunctionParams]) -> None:
15
+ def _add(self, param: type[FunctionParams]) -> None:
16
16
  self._param_list.add(param)
17
17
 
18
- def _remove(self, param: Type[FunctionParams]) -> None:
18
+ def _remove(self, param: type[FunctionParams]) -> None:
19
19
  self._param_list.discard(param)
@@ -28,8 +28,7 @@ from classiq.interface.generator.arith.unary_ops import BitwiseInvert, Negation,
28
28
  from classiq.interface.generator.commuting_pauli_exponentiation import (
29
29
  CommutingPauliExponentiation,
30
30
  )
31
- from classiq.interface.generator.credit_risk_example.linear_gci import LinearGCI
32
- from classiq.interface.generator.credit_risk_example.weighted_adder import WeightedAdder
31
+ from classiq.interface.generator.copy import Copy
33
32
  from classiq.interface.generator.entangler_params import (
34
33
  GridEntangler,
35
34
  HypercubeEntangler,
@@ -53,7 +52,6 @@ from classiq.interface.generator.hardware_efficient_ansatz import (
53
52
  from classiq.interface.generator.hartree_fock import HartreeFock
54
53
  from classiq.interface.generator.hva import HVA
55
54
  from classiq.interface.generator.identity import Identity
56
- from classiq.interface.generator.inequality_mixer import InequalityMixer
57
55
  from classiq.interface.generator.linear_pauli_rotations import LinearPauliRotations
58
56
  from classiq.interface.generator.mcu import Mcu
59
57
  from classiq.interface.generator.mcx import Mcx
@@ -67,7 +65,6 @@ from classiq.interface.generator.piecewise_linear_amplitude_loading import (
67
65
  from classiq.interface.generator.qft import QFT
68
66
  from classiq.interface.generator.qsvm import QSVMFeatureMap
69
67
  from classiq.interface.generator.randomized_benchmarking import RandomizedBenchmarking
70
- from classiq.interface.generator.range_mixer import RangeMixer
71
68
  from classiq.interface.generator.standard_gates.standard_gates_param_list import (
72
69
  standard_gate_function_param_library,
73
70
  )
@@ -81,7 +78,6 @@ from classiq.interface.generator.state_preparation import (
81
78
  UniformDistributionStatePreparation,
82
79
  WStatePreparation,
83
80
  )
84
- from classiq.interface.generator.state_propagator import StatePropagator
85
81
  from classiq.interface.generator.ucc import UCC
86
82
  from classiq.interface.generator.unitary_gate import UnitaryGate
87
83
  from classiq.interface.generator.user_defined_function_params import CustomFunction
@@ -97,7 +93,6 @@ function_param_library_without_self_reference: FunctionParamLibrary = (
97
93
  GHZStatePreparation,
98
94
  WStatePreparation,
99
95
  ExponentialStatePreparation,
100
- StatePropagator,
101
96
  QFT,
102
97
  BitwiseAnd,
103
98
  BitwiseOr,
@@ -134,11 +129,9 @@ function_param_library_without_self_reference: FunctionParamLibrary = (
134
129
  CustomFunction,
135
130
  HardwareEfficientAnsatz,
136
131
  UnitaryGate,
137
- WeightedAdder,
138
132
  LinearPauliRotations,
139
133
  Multiplier,
140
134
  Power,
141
- LinearGCI,
142
135
  HartreeFock,
143
136
  UCC,
144
137
  Min,
@@ -150,14 +143,13 @@ function_param_library_without_self_reference: FunctionParamLibrary = (
150
143
  Identity,
151
144
  RandomizedBenchmarking,
152
145
  HVA,
153
- InequalityMixer,
154
- RangeMixer,
155
146
  UGate,
156
147
  AmplitudeLoading,
157
148
  QSVMFeatureMap,
158
149
  PiecewiseLinearAmplitudeLoading,
159
150
  PiecewiseLinearRotationAmplitudeLoading,
160
151
  HadamardTransform,
152
+ Copy,
161
153
  },
162
154
  standard_gate_function_param_library.param_list,
163
155
  oracle_function_param_library.param_list,