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,78 +1,74 @@
1
1
  # This file was generated automatically - do not edit manually
2
2
 
3
- from typing import List
4
3
 
5
- from classiq.qmod.qmod_parameter import QParam
4
+ from classiq.qmod.qmod_parameter import CArray, CBool, CInt, CReal
6
5
  from classiq.qmod.symbolic import symbolic_function
7
6
 
8
7
  from .structs import *
9
8
 
10
9
 
11
- def molecule_problem_to_hamiltonian(
12
- problem: QParam[MoleculeProblem],
13
- ) -> QParam[List[PauliTerm]]:
14
- return symbolic_function(problem, return_type=QParam[List[PauliTerm]])
10
+ def qft_const_adder_phase(
11
+ bit_index: CInt,
12
+ value: CInt,
13
+ reg_len: CInt,
14
+ ) -> CReal:
15
+ return symbolic_function(bit_index, value, reg_len, return_type=CReal)
15
16
 
16
17
 
17
18
  def fock_hamiltonian_problem_to_hamiltonian(
18
- problem: QParam[FockHamiltonianProblem],
19
- ) -> QParam[List[PauliTerm]]:
20
- return symbolic_function(problem, return_type=QParam[List[PauliTerm]])
19
+ problem: FockHamiltonianProblem,
20
+ ) -> CArray[PauliTerm]:
21
+ return symbolic_function(problem, return_type=CArray[PauliTerm])
22
+
23
+
24
+ def molecule_problem_to_hamiltonian(
25
+ problem: MoleculeProblem,
26
+ ) -> CArray[PauliTerm]:
27
+ return symbolic_function(problem, return_type=CArray[PauliTerm])
21
28
 
22
29
 
23
30
  def grid_entangler_graph(
24
- num_qubits: QParam[int],
25
- schmidt_rank: QParam[int],
26
- grid_randomization: QParam[bool],
27
- ) -> QParam[List[List[int]]]:
31
+ num_qubits: CInt,
32
+ schmidt_rank: CInt,
33
+ grid_randomization: CBool,
34
+ ) -> CArray[CArray[CInt]]:
28
35
  return symbolic_function(
29
- num_qubits,
30
- schmidt_rank,
31
- grid_randomization,
32
- return_type=QParam[List[List[int]]],
36
+ num_qubits, schmidt_rank, grid_randomization, return_type=CArray[CArray[CInt]]
33
37
  )
34
38
 
35
39
 
36
40
  def hypercube_entangler_graph(
37
- num_qubits: QParam[int],
38
- ) -> QParam[List[List[int]]]:
39
- return symbolic_function(num_qubits, return_type=QParam[List[List[int]]])
41
+ num_qubits: CInt,
42
+ ) -> CArray[CArray[CInt]]:
43
+ return symbolic_function(num_qubits, return_type=CArray[CArray[CInt]])
40
44
 
41
45
 
42
- def log_normal_finance_post_process(
43
- finance_model: QParam[LogNormalModel],
44
- estimation_method: QParam[FinanceFunction],
45
- probability: QParam[float],
46
- ) -> QParam[float]:
46
+ def gaussian_finance_post_process(
47
+ finance_model: GaussianModel,
48
+ estimation_method: FinanceFunction,
49
+ probability: CReal,
50
+ ) -> CReal:
47
51
  return symbolic_function(
48
- finance_model, estimation_method, probability, return_type=QParam[float]
52
+ finance_model, estimation_method, probability, return_type=CReal
49
53
  )
50
54
 
51
55
 
52
- def gaussian_finance_post_process(
53
- finance_model: QParam[GaussianModel],
54
- estimation_method: QParam[FinanceFunction],
55
- probability: QParam[float],
56
- ) -> QParam[float]:
56
+ def log_normal_finance_post_process(
57
+ finance_model: LogNormalModel,
58
+ estimation_method: FinanceFunction,
59
+ probability: CReal,
60
+ ) -> CReal:
57
61
  return symbolic_function(
58
- finance_model, estimation_method, probability, return_type=QParam[float]
62
+ finance_model, estimation_method, probability, return_type=CReal
59
63
  )
60
64
 
61
65
 
62
- def qft_const_adder_phase(
63
- bit_index: QParam[int],
64
- value: QParam[int],
65
- reg_len: QParam[int],
66
- ) -> QParam[float]:
67
- return symbolic_function(bit_index, value, reg_len, return_type=QParam[float])
68
-
69
-
70
66
  __all__ = [
71
- "molecule_problem_to_hamiltonian",
67
+ "qft_const_adder_phase",
72
68
  "fock_hamiltonian_problem_to_hamiltonian",
69
+ "molecule_problem_to_hamiltonian",
73
70
  "grid_entangler_graph",
74
71
  "hypercube_entangler_graph",
75
- "log_normal_finance_post_process",
76
72
  "gaussian_finance_post_process",
77
- "qft_const_adder_phase",
73
+ "log_normal_finance_post_process",
78
74
  ]
@@ -0,0 +1,10 @@
1
+ from classiq.qmod.cparam import CBool
2
+ from classiq.qmod.qmod_constant import QConstant
3
+
4
+ SIGNED = QConstant("SIGNED", CBool, True)
5
+ UNSIGNED = QConstant("UNSIGNED", CBool, False)
6
+
7
+ __all__ = [
8
+ "SIGNED",
9
+ "UNSIGNED",
10
+ ]
@@ -0,0 +1,208 @@
1
+ from enum import IntEnum
2
+
3
+ from classiq.interface.generator.types.enum_declaration import EnumDeclaration
4
+
5
+
6
+ class Element(IntEnum):
7
+ H = 0
8
+ He = 1
9
+ Li = 2
10
+ Be = 3
11
+ B = 4
12
+ C = 5
13
+ N = 6
14
+ O = 7 # noqa: E741
15
+ F = 8
16
+ Ne = 9
17
+ Na = 10
18
+ Mg = 11
19
+ Al = 12
20
+ Si = 13
21
+ P = 14
22
+ S = 15
23
+ Cl = 16
24
+ Ar = 17
25
+ K = 18
26
+ Ca = 19
27
+ Sc = 20
28
+ Ti = 21
29
+ V = 22
30
+ Cr = 23
31
+ Mn = 24
32
+ Fe = 25
33
+ Co = 26
34
+ Ni = 27
35
+ Cu = 28
36
+ Zn = 29
37
+ Ga = 30
38
+ Ge = 31
39
+ As = 32
40
+ Se = 33
41
+ Br = 34
42
+ Kr = 35
43
+ Rb = 36
44
+ Sr = 37
45
+ Y = 38
46
+ Zr = 39
47
+ Nb = 40
48
+ Mo = 41
49
+ Tc = 42
50
+ Ru = 43
51
+ Rh = 44
52
+ Pd = 45
53
+ Ag = 46
54
+ Cd = 47
55
+ In = 48
56
+ Sn = 49
57
+ Sb = 50
58
+ Te = 51
59
+ I = 52 # noqa: E741
60
+ Xe = 53
61
+ Cs = 54
62
+ Ba = 55
63
+ La = 56
64
+ Ce = 57
65
+ Pr = 58
66
+ Nd = 59
67
+ Pm = 60
68
+ Sm = 61
69
+ Eu = 62
70
+ Gd = 63
71
+ Tb = 64
72
+ Dy = 65
73
+ Ho = 66
74
+ Er = 67
75
+ Tm = 68
76
+ Yb = 69
77
+ Lu = 70
78
+ Hf = 71
79
+ Ta = 72
80
+ W = 73
81
+ Re = 74
82
+ Os = 75
83
+ Ir = 76
84
+ Pt = 77
85
+ Au = 78
86
+ Hg = 79
87
+ Tl = 80
88
+ Pb = 81
89
+ Bi = 82
90
+ Po = 83
91
+ At = 84
92
+ Rn = 85
93
+ Fr = 86
94
+ Ra = 87
95
+ Ac = 88
96
+ Th = 89
97
+ Pa = 90
98
+ U = 91
99
+ Np = 92
100
+ Pu = 93
101
+ Am = 94
102
+ Cm = 95
103
+ Bk = 96
104
+ Cf = 97
105
+ Es = 98
106
+ Fm = 99
107
+ Md = 100
108
+ No = 101
109
+ Lr = 102
110
+ Rf = 103
111
+ Db = 104
112
+ Sg = 105
113
+ Bh = 106
114
+ Hs = 107
115
+ Mt = 108
116
+ Ds = 109
117
+ Rg = 110
118
+ Cn = 111
119
+ Nh = 112
120
+ Fl = 113
121
+ Mc = 114
122
+ Lv = 115
123
+ Ts = 116
124
+ Og = 117
125
+
126
+
127
+ class FermionMapping(IntEnum):
128
+ JORDAN_WIGNER = 0
129
+ PARITY = 1
130
+ BRAVYI_KITAEV = 2
131
+ FAST_BRAVYI_KITAEV = 3
132
+
133
+
134
+ class FinanceFunctionType(IntEnum):
135
+ VAR = 0
136
+ SHORTFALL = 1
137
+ X_SQUARE = 2
138
+ EUROPEAN_CALL_OPTION = 3
139
+
140
+
141
+ class LadderOperator(IntEnum):
142
+ PLUS = 0
143
+ MINUS = 1
144
+
145
+
146
+ class Optimizer(IntEnum):
147
+ COBYLA = 1
148
+ SPSA = 2
149
+ L_BFGS_B = 3
150
+ NELDER_MEAD = 4
151
+ ADAM = 5
152
+
153
+
154
+ class Pauli(IntEnum):
155
+ """
156
+ Enumeration for the Pauli matrices used in quantum computing.
157
+
158
+ The Pauli matrices are fundamental operations in quantum computing, and this
159
+ enum assigns integer values to represent each matrix.
160
+ """
161
+
162
+ I = 0 # noqa: E741
163
+ """I (int): Identity matrix, represented by the integer 0. \n
164
+ $I = \\begin{bmatrix} 1 & 0 \\\\ 0 & 1 \\end{bmatrix}$"""
165
+
166
+ X = 1
167
+ """X (int): Pauli-X matrix, represented by the integer 1. \n
168
+ $X = \\begin{bmatrix} 0 & 1 \\\\ 1 & 0 \\end{bmatrix}$"""
169
+
170
+ Y = 2
171
+ """Y (int): Pauli-Y matrix, represented by the integer 2. \n
172
+ $Y = \\begin{bmatrix} 0 & -i \\\\ i & 0 \\end{bmatrix}$"""
173
+
174
+ Z = 3
175
+ """Z (int): Pauli-Z matrix, represented by the integer 3. \n
176
+ $Z = \\begin{bmatrix} 1 & 0 \\\\ 0 & -1 \\end{bmatrix}$"""
177
+
178
+
179
+ class QSVMFeatureMapEntanglement(IntEnum):
180
+ FULL = 0
181
+ LINEAR = 1
182
+ CIRCULAR = 2
183
+ SCA = 3
184
+ PAIRWISE = 4
185
+
186
+
187
+ BUILTIN_ENUM_DECLARATIONS = {
188
+ enum_def.__name__: EnumDeclaration(
189
+ name=enum_def.__name__,
190
+ members={enum_val.name: enum_val.value for enum_val in enum_def},
191
+ )
192
+ for enum_def in vars().values()
193
+ if (
194
+ isinstance(enum_def, type)
195
+ and issubclass(enum_def, IntEnum)
196
+ and enum_def is not IntEnum
197
+ )
198
+ }
199
+
200
+ __all__ = [
201
+ "Element",
202
+ "FermionMapping",
203
+ "FinanceFunctionType",
204
+ "LadderOperator",
205
+ "Optimizer",
206
+ "Pauli",
207
+ "QSVMFeatureMapEntanglement",
208
+ ]
@@ -0,0 +1,137 @@
1
+ from .allocation import *
2
+ from .arithmetic import *
3
+ from .benchmarking import *
4
+ from .chemistry import *
5
+ from .exponentiation import *
6
+ from .finance import *
7
+ from .operators import *
8
+ from .qsvm import *
9
+ from .standard_gates import *
10
+
11
+ CORE_LIB_DECLS = [
12
+ func.func_decl
13
+ for func in (
14
+ molecule_ucc,
15
+ molecule_hva,
16
+ molecule_hartree_fock,
17
+ fock_hamiltonian_ucc,
18
+ fock_hamiltonian_hva,
19
+ fock_hamiltonian_hartree_fock,
20
+ log_normal_finance,
21
+ gaussian_finance,
22
+ pauli_feature_map,
23
+ bloch_sphere_feature_map,
24
+ H,
25
+ X,
26
+ Y,
27
+ Z,
28
+ I,
29
+ S,
30
+ T,
31
+ SDG,
32
+ TDG,
33
+ PHASE,
34
+ RX,
35
+ RY,
36
+ RZ,
37
+ R,
38
+ RXX,
39
+ RYY,
40
+ RZZ,
41
+ CH,
42
+ CX,
43
+ CY,
44
+ CZ,
45
+ CRX,
46
+ CRY,
47
+ CRZ,
48
+ CPHASE,
49
+ SWAP,
50
+ IDENTITY,
51
+ prepare_state,
52
+ prepare_amplitudes,
53
+ unitary,
54
+ add,
55
+ modular_add,
56
+ integer_xor,
57
+ modular_add_constant,
58
+ real_xor_constant,
59
+ U,
60
+ CCX,
61
+ allocate,
62
+ free,
63
+ randomized_benchmarking,
64
+ inplace_prepare_state,
65
+ inplace_prepare_amplitudes,
66
+ single_pauli_exponent,
67
+ suzuki_trotter,
68
+ qdrift,
69
+ exponentiation_with_depth_constraint,
70
+ )
71
+ ]
72
+
73
+ STD_QMOD_OPERATORS = [func.func_decl for func in (apply, permute)]
74
+
75
+ __all__ = [ # noqa: RUF022
76
+ "CCX",
77
+ "CH",
78
+ "CPHASE",
79
+ "CRX",
80
+ "CRY",
81
+ "CRZ",
82
+ "CX",
83
+ "CY",
84
+ "CZ",
85
+ "H",
86
+ "I",
87
+ "IDENTITY",
88
+ "PHASE",
89
+ "R",
90
+ "RX",
91
+ "RXX",
92
+ "RY",
93
+ "RYY",
94
+ "RZ",
95
+ "RZZ",
96
+ "SDG",
97
+ "S",
98
+ "SWAP",
99
+ "T",
100
+ "TDG",
101
+ "U",
102
+ "X",
103
+ "Y",
104
+ "Z",
105
+ "add",
106
+ "allocate",
107
+ "apply",
108
+ "bloch_sphere_feature_map",
109
+ "exponentiation_with_depth_constraint",
110
+ "fock_hamiltonian_hartree_fock",
111
+ "fock_hamiltonian_hva",
112
+ "fock_hamiltonian_ucc",
113
+ "free",
114
+ "gaussian_finance",
115
+ "inplace_prepare_amplitudes",
116
+ "inplace_prepare_state",
117
+ "integer_xor",
118
+ "log_normal_finance",
119
+ "modular_add",
120
+ "modular_add_constant",
121
+ "molecule_hartree_fock",
122
+ "molecule_hva",
123
+ "molecule_ucc",
124
+ "pauli_feature_map",
125
+ "permute",
126
+ "prepare_amplitudes",
127
+ "prepare_state",
128
+ "qdrift",
129
+ "randomized_benchmarking",
130
+ "real_xor_constant",
131
+ "single_pauli_exponent",
132
+ "suzuki_trotter",
133
+ "unitary",
134
+ ]
135
+ BUILTIN_FUNCTION_DECLARATIONS = {
136
+ func_decl.name: func_decl for func_decl in STD_QMOD_OPERATORS + CORE_LIB_DECLS
137
+ }
@@ -0,0 +1,150 @@
1
+ from typing import Literal
2
+
3
+ from classiq.qmod.qfunc import qfunc
4
+ from classiq.qmod.qmod_parameter import CArray, CInt, CReal
5
+ from classiq.qmod.qmod_variable import Input, Output, QArray, QBit
6
+
7
+
8
+ @qfunc(external=True)
9
+ def allocate(
10
+ num_qubits: CInt, out: Output[QArray[QBit, Literal["num_qubits"]]]
11
+ ) -> None:
12
+ """
13
+ [Qmod core-library function]
14
+
15
+ Allocates the specified number of qubits to a given quantum variable and initializes
16
+ them in the zero state:
17
+
18
+ $$
19
+ \\left|\\text{out}\\right\\rangle = \\left|0\\right\\rangle^{\\otimes \\text{num_qubits}}
20
+ $$
21
+
22
+ Args:
23
+ num_qubits: The number of qubits to allocate. Must be a positive integer.
24
+ out: The quantum variable that will receive the allocated qubits. Must be uninitialized before allocation.
25
+
26
+ Notes:
27
+ 1. If the output variable has been declared with a specific number of qubits, the number of qubits allocated must match the declared number.
28
+ 2. The synthesis engine automatically handles the allocation, either by drawing new qubits from the available pool or by reusing existing ones.
29
+ """
30
+ pass
31
+
32
+
33
+ @qfunc(external=True)
34
+ def free(in_: Input[QArray[QBit]]) -> None:
35
+ """
36
+ [Qmod core-library function]
37
+
38
+ Releases the qubits allocated to a quantum variable, allowing them to be reused.
39
+
40
+ Args:
41
+ in_: The quantum variable that will be freed. Must be initialized before.
42
+
43
+ Note:
44
+ This operation does not uncompute the qubits. It is the responsibility of the user to ensure that the qubits are at the zero state before freeing them.
45
+ """
46
+ pass
47
+
48
+
49
+ @qfunc(external=True)
50
+ def prepare_state(
51
+ probabilities: CArray[CReal],
52
+ bound: CReal,
53
+ out: Output[QArray[QBit, Literal["log(get_field(probabilities, 'len'), 2)"]]],
54
+ ) -> None:
55
+ """
56
+ [Qmod core-library function]
57
+
58
+ Initializes a quantum variable in a state corresponding to a given probability distribution:
59
+
60
+ $$
61
+ \\left|\\text{out}\\right\\rangle = \\sum_{i=0}^{\\text{len(probabilities)}-1} \\sqrt{\\text{probabilities}[i]} \\left|i\\right\\rangle
62
+ $$
63
+
64
+ with $i = 0, 1, 2, ..., \\text{len(amplitudes)}-1$ corresponding to computational basis states.
65
+
66
+ Args:
67
+ probabilities: The probability distribution to initialize the quantum variable. Must be a valid probability distribution, i.e., a list of non-negative real numbers that sum to 1. Must have a valid length (a power of 2).
68
+ bound: An error bound, expressed as the $L^{2}$ norm between the expected and actual distributions. A larger bound can reduce the circuit size at the expense of accuracy. Must be a positive real number.
69
+ out: The quantum variable that will receive the initialized state. Must be uninitialized.
70
+
71
+ Notes:
72
+ 1. If the output variable has been declared with a specific number of qubits, the number of qubits formed by the distribution must match the declared number.
73
+ 2. The synthesis engine automatically handles the allocation, either by drawing new qubits from the available pool or by reusing existing ones.
74
+ """
75
+ pass
76
+
77
+
78
+ @qfunc(external=True)
79
+ def prepare_amplitudes(
80
+ amplitudes: CArray[CReal],
81
+ bound: CReal,
82
+ out: Output[QArray[QBit, Literal["log(get_field(amplitudes, 'len'), 2)"]]],
83
+ ) -> None:
84
+ """
85
+ [Qmod core-library function]
86
+
87
+ Initializes a quantum variable in a state corresponding to the given amplitudes:
88
+
89
+ $$
90
+ \\left|\\text{out}\\right\\rangle = \\sum_{i=0}^{\\text{len(amplitudes)}-1} \\text{amplitudes}[i] \\left|i\\right\\rangle
91
+ $$
92
+
93
+ with $i = 0, 1, 2, ..., \\text{len(amplitudes)}-1$ corresponding to computational basis states.
94
+
95
+ Args:
96
+ amplitudes: The amplitudes to initialize the quantum variable. Must be a valid real quantum state vector, i.e., the sum of squares should be 1. Must have a valid length (a power of 2).
97
+ bound: An error bound, expressed as the $L^{2}$ norm between the expected and actual distributions. A larger bound can reduce the circuit size at the expense of accuracy. Must be a positive real number.
98
+ out: The quantum variable that will receive the initialized state. Must be uninitialized.
99
+
100
+ Notes:
101
+ 1. If the output variable has been declared with a specific number of qubits, the number of qubits formed by the distribution must match the declared number.
102
+ 2. The synthesis engine automatically handles the allocation, either by drawing new qubits from the available pool or by reusing existing ones.
103
+ """
104
+ pass
105
+
106
+
107
+ @qfunc(external=True)
108
+ def inplace_prepare_state(
109
+ probabilities: CArray[CReal],
110
+ bound: CReal,
111
+ target: QArray[QBit, Literal["log(get_field(probabilities, 'len'), 2)"]],
112
+ ) -> None:
113
+ """
114
+ [Qmod core-library function]
115
+
116
+ Transforms a given quantum variable in the state |0> to the state per the specified probability distribution
117
+ (similar to `prepare_state` but preformed on an initialized variable).
118
+
119
+ Args:
120
+ probabilities: The probability distribution corresponding to the quantum variable state. Must be a valid probability distribution, i.e., a list of non-negative real numbers that sum to 1. Must have a valid length (a power of 2).
121
+ bound: An error bound, expressed as the $L^{2}$ norm between the expected and actual distributions. A larger bound can reduce the circuit size at the expense of accuracy. Must be a positive real number.
122
+ target: The quantum variable to act upon.
123
+
124
+ This is useful as part of quantum building blocks like the Grover diffuser operator, $\\left|\\psi\\right\\rangle\\left\\langle\\psi\\right| \\left( 2\\left|0\\right\\rangle\\left\\langle0\\right| - \\mathcal{I} \\right)$, where the output state of the oracle is reflected about this state.
125
+
126
+ """
127
+ pass
128
+
129
+
130
+ @qfunc(external=True)
131
+ def inplace_prepare_amplitudes(
132
+ amplitudes: CArray[CReal],
133
+ bound: CReal,
134
+ target: QArray[QBit, Literal["log(get_field(amplitudes, 'len'), 2)"]],
135
+ ) -> None:
136
+ """
137
+ [Qmod core-library function]
138
+
139
+ Transforms a given quantum variable in the state |0> to the state per the specified amplitudes
140
+ (similar to `prepare_amplitudes` but preformed on an initialized variable).
141
+
142
+ Args:
143
+ amplitudes: The amplitudes to initialize the quantum variable. Must be a valid real quantum state vector, i.e., the sum of squares should be 1. Must have a valid length (a power of 2).
144
+ bound: An error bound, expressed as the $L^{2}$ norm between the expected and actual distributions. A larger bound can reduce the circuit size at the expense of accuracy. Must be a positive real number.
145
+ target: The quantum variable to act upon.
146
+
147
+ This is useful as part of quantum building blocks like the Grover diffuser operator, $\\left|\\psi\\right\\rangle\\left\\langle\\psi\\right| \\left( 2\\left|0\\right\\rangle\\left\\langle0\\right| - \\mathcal{I} \\right)$, where the output state of the oracle is reflected about this state.
148
+
149
+ """
150
+ pass
@@ -0,0 +1,55 @@
1
+ from typing import Literal
2
+
3
+ from classiq.qmod.qfunc import qfunc
4
+ from classiq.qmod.qmod_parameter import CArray, CReal
5
+ from classiq.qmod.qmod_variable import Output, QArray, QBit, QNum
6
+
7
+
8
+ @qfunc(external=True)
9
+ def unitary(
10
+ elements: CArray[CArray[CReal]],
11
+ target: QArray[QBit, Literal["log(get_field(elements[0], 'len'), 2)"]],
12
+ ) -> None:
13
+ """
14
+ [Qmod core-library function]
15
+
16
+ Applies a unitary matrix on a quantum state.
17
+
18
+ Args:
19
+ elements: A 2d array of complex numbers representing the unitary matrix. This matrix must be unitary.
20
+ target: The quantum state to apply the unitary on. Should be of corresponding size.
21
+ """
22
+ pass
23
+
24
+
25
+ @qfunc(external=True)
26
+ def add(
27
+ left: QArray[QBit],
28
+ right: QArray[QBit],
29
+ result: Output[
30
+ QArray[
31
+ QBit, Literal["Max(get_field(left, 'len'), get_field(right, 'len')) + 1"]
32
+ ]
33
+ ],
34
+ ) -> None:
35
+ pass
36
+
37
+
38
+ @qfunc(external=True)
39
+ def modular_add(left: QArray[QBit], right: QArray[QBit]) -> None:
40
+ pass
41
+
42
+
43
+ @qfunc(external=True)
44
+ def modular_add_constant(left: CReal, right: QNum) -> None:
45
+ pass
46
+
47
+
48
+ @qfunc(external=True)
49
+ def integer_xor(left: QArray[QBit], right: QArray[QBit]) -> None:
50
+ pass
51
+
52
+
53
+ @qfunc(external=True)
54
+ def real_xor_constant(left: CReal, right: QNum) -> None:
55
+ pass
@@ -0,0 +1,8 @@
1
+ from classiq.qmod.qfunc import qfunc
2
+ from classiq.qmod.qmod_parameter import CInt
3
+ from classiq.qmod.qmod_variable import QArray, QBit
4
+
5
+
6
+ @qfunc(external=True)
7
+ def randomized_benchmarking(num_of_cliffords: CInt, target: QArray[QBit]) -> None:
8
+ pass