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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (516) hide show
  1. classiq/__init__.py +49 -34
  2. classiq/_analyzer_extras/_ipywidgets_async_extension.py +3 -2
  3. classiq/_analyzer_extras/interactive_hardware.py +3 -3
  4. classiq/_internals/api_wrapper.py +241 -95
  5. classiq/_internals/async_utils.py +2 -77
  6. classiq/_internals/authentication/auth0.py +26 -10
  7. classiq/_internals/authentication/authentication.py +11 -0
  8. classiq/_internals/authentication/device.py +18 -8
  9. classiq/_internals/authentication/password_manager.py +40 -13
  10. classiq/_internals/authentication/token_manager.py +11 -6
  11. classiq/_internals/client.py +106 -37
  12. classiq/_internals/config.py +3 -4
  13. classiq/_internals/host_checker.py +38 -15
  14. classiq/_internals/jobs.py +56 -50
  15. classiq/_internals/type_validation.py +9 -9
  16. classiq/analyzer/__init__.py +1 -3
  17. classiq/analyzer/analyzer.py +50 -47
  18. classiq/analyzer/analyzer_utilities.py +15 -15
  19. classiq/analyzer/rb.py +19 -20
  20. classiq/analyzer/show_interactive_hack.py +30 -7
  21. classiq/analyzer/url_utils.py +2 -3
  22. classiq/applications/__init__.py +3 -12
  23. classiq/applications/chemistry/__init__.py +14 -10
  24. classiq/applications/chemistry/ansatz_parameters.py +4 -4
  25. classiq/{applications_model_constructors → applications/chemistry}/chemistry_model_constructor.py +170 -170
  26. classiq/applications/chemistry/ground_state_problem.py +1 -1
  27. classiq/applications/combinatorial_helpers/allowed_constraints.py +23 -0
  28. classiq/applications/combinatorial_helpers/arithmetic/arithmetic_expression.py +35 -0
  29. classiq/applications/combinatorial_helpers/arithmetic/isolation.py +42 -0
  30. classiq/applications/combinatorial_helpers/combinatorial_problem_utils.py +166 -0
  31. classiq/applications/combinatorial_helpers/encoding_mapping.py +107 -0
  32. classiq/applications/combinatorial_helpers/encoding_utils.py +124 -0
  33. classiq/applications/combinatorial_helpers/memory.py +75 -0
  34. classiq/applications/combinatorial_helpers/optimization_model.py +193 -0
  35. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_sparsing.py +31 -0
  36. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +46 -0
  37. classiq/applications/combinatorial_helpers/pyomo_utils.py +447 -0
  38. classiq/applications/combinatorial_helpers/sympy_utils.py +22 -0
  39. classiq/applications/combinatorial_helpers/transformations/encoding.py +189 -0
  40. classiq/applications/combinatorial_helpers/transformations/fixed_variables.py +143 -0
  41. classiq/applications/combinatorial_helpers/transformations/ising_converter.py +120 -0
  42. classiq/applications/combinatorial_helpers/transformations/penalty.py +31 -0
  43. classiq/applications/combinatorial_helpers/transformations/penalty_support.py +37 -0
  44. classiq/applications/combinatorial_helpers/transformations/sign_seperation.py +74 -0
  45. classiq/applications/combinatorial_helpers/transformations/slack_variables.py +87 -0
  46. classiq/applications/combinatorial_optimization/__init__.py +24 -5
  47. classiq/applications/combinatorial_optimization/combinatorial_optimization_config.py +2 -2
  48. classiq/applications/combinatorial_optimization/combinatorial_optimization_model_constructor.py +137 -0
  49. classiq/applications/combinatorial_optimization/combinatorial_problem.py +229 -0
  50. classiq/applications/combinatorial_optimization/examples/__init__.py +1 -3
  51. classiq/applications/finance/__init__.py +4 -5
  52. classiq/{applications_model_constructors → applications/finance}/finance_model_constructor.py +50 -57
  53. classiq/applications/grover/__init__.py +9 -0
  54. classiq/applications/grover/grover_model_constructor.py +157 -0
  55. classiq/applications/hamiltonian/__init__.py +0 -0
  56. classiq/applications/hamiltonian/pauli_decomposition.py +113 -0
  57. classiq/applications/libraries/__init__.py +0 -0
  58. classiq/applications/libraries/qmci_library.py +22 -0
  59. classiq/applications/qnn/__init__.py +2 -4
  60. classiq/applications/qnn/circuit_utils.py +8 -8
  61. classiq/applications/qnn/datasets/__init__.py +9 -11
  62. classiq/applications/qnn/datasets/dataset_base_classes.py +7 -5
  63. classiq/applications/qnn/datasets/dataset_not.py +2 -1
  64. classiq/applications/qnn/datasets/dataset_parity.py +2 -2
  65. classiq/applications/qnn/gradients/quantum_gradient.py +2 -2
  66. classiq/applications/qnn/gradients/simple_quantum_gradient.py +2 -1
  67. classiq/applications/qnn/qlayer.py +30 -10
  68. classiq/applications/qnn/torch_utils.py +4 -3
  69. classiq/applications/qnn/types.py +7 -7
  70. classiq/applications/qsvm/__init__.py +6 -4
  71. classiq/applications/qsvm/qsvm.py +4 -10
  72. classiq/applications/qsvm/qsvm_data_generation.py +5 -8
  73. classiq/{applications_model_constructors → applications/qsvm}/qsvm_model_constructor.py +30 -28
  74. classiq/execution/__init__.py +8 -3
  75. classiq/execution/all_hardware_devices.py +11 -0
  76. classiq/execution/execution_session.py +400 -0
  77. classiq/execution/iqcc.py +63 -0
  78. classiq/execution/jobs.py +197 -25
  79. classiq/execution/qnn.py +79 -0
  80. classiq/executor.py +23 -117
  81. classiq/interface/_version.py +1 -1
  82. classiq/interface/analyzer/analysis_params.py +49 -16
  83. classiq/interface/analyzer/cytoscape_graph.py +15 -9
  84. classiq/interface/analyzer/result.py +36 -32
  85. classiq/interface/applications/qsvm.py +28 -25
  86. classiq/interface/ast_node.py +16 -0
  87. classiq/interface/backend/backend_preferences.py +390 -119
  88. classiq/interface/backend/ionq/ionq_quantum_program.py +15 -23
  89. classiq/interface/backend/pydantic_backend.py +27 -22
  90. classiq/interface/backend/quantum_backend_providers.py +70 -16
  91. classiq/interface/chemistry/fermionic_operator.py +43 -32
  92. classiq/interface/chemistry/ground_state_problem.py +42 -24
  93. classiq/interface/chemistry/molecule.py +20 -14
  94. classiq/interface/chemistry/operator.py +75 -236
  95. classiq/interface/combinatorial_optimization/encoding_types.py +1 -1
  96. classiq/interface/combinatorial_optimization/examples/ascending_sequence.py +2 -4
  97. classiq/interface/combinatorial_optimization/examples/greater_than_ilp.py +1 -1
  98. classiq/interface/combinatorial_optimization/examples/ilp.py +2 -1
  99. classiq/interface/combinatorial_optimization/examples/integer_portfolio_optimization.py +2 -4
  100. classiq/interface/combinatorial_optimization/examples/knapsack.py +3 -3
  101. classiq/interface/combinatorial_optimization/examples/mds.py +2 -1
  102. classiq/interface/combinatorial_optimization/examples/mht.py +10 -6
  103. classiq/interface/combinatorial_optimization/examples/mis.py +4 -1
  104. classiq/interface/combinatorial_optimization/examples/mvc.py +2 -1
  105. classiq/interface/combinatorial_optimization/examples/portfolio_variations.py +2 -2
  106. classiq/interface/combinatorial_optimization/examples/set_cover.py +3 -3
  107. classiq/interface/combinatorial_optimization/examples/tsp.py +4 -3
  108. classiq/interface/combinatorial_optimization/examples/tsp_digraph.py +6 -2
  109. classiq/interface/combinatorial_optimization/mht_qaoa_input.py +14 -9
  110. classiq/interface/combinatorial_optimization/optimization_problem.py +2 -2
  111. classiq/interface/combinatorial_optimization/result.py +1 -3
  112. classiq/interface/combinatorial_optimization/solver_types.py +1 -1
  113. classiq/interface/debug_info/__init__.py +0 -0
  114. classiq/interface/debug_info/debug_info.py +86 -0
  115. classiq/interface/exceptions.py +201 -0
  116. classiq/interface/execution/iqcc.py +19 -0
  117. classiq/interface/execution/jobs.py +15 -12
  118. classiq/interface/execution/primitives.py +18 -0
  119. classiq/interface/executor/constants.py +1 -0
  120. classiq/interface/executor/estimation.py +2 -2
  121. classiq/interface/executor/execution_preferences.py +26 -143
  122. classiq/interface/executor/execution_request.py +36 -56
  123. classiq/interface/executor/execution_result.py +30 -8
  124. classiq/interface/executor/iqae_result.py +4 -6
  125. classiq/interface/executor/optimizer_preferences.py +34 -22
  126. classiq/interface/executor/{quantum_program.py → quantum_code.py} +44 -34
  127. classiq/interface/executor/quantum_instruction_set.py +3 -2
  128. classiq/interface/executor/register_initialization.py +12 -17
  129. classiq/interface/executor/result.py +122 -64
  130. classiq/interface/executor/vqe_result.py +11 -11
  131. classiq/interface/finance/function_input.py +42 -19
  132. classiq/interface/finance/gaussian_model_input.py +7 -5
  133. classiq/interface/finance/log_normal_model_input.py +6 -4
  134. classiq/interface/finance/model_input.py +6 -4
  135. classiq/interface/generator/adjacency.py +1 -3
  136. classiq/interface/generator/amplitude_loading.py +27 -14
  137. classiq/interface/generator/ansatz_library.py +5 -5
  138. classiq/interface/generator/application_apis/__init__.py +1 -0
  139. classiq/interface/generator/application_apis/arithmetic_declarations.py +17 -0
  140. classiq/interface/generator/application_apis/chemistry_declarations.py +27 -187
  141. classiq/interface/generator/application_apis/combinatorial_optimization_declarations.py +18 -21
  142. classiq/interface/generator/application_apis/entangler_declarations.py +11 -6
  143. classiq/interface/generator/application_apis/finance_declarations.py +48 -69
  144. classiq/interface/generator/application_apis/qsvm_declarations.py +0 -70
  145. classiq/interface/generator/arith/argument_utils.py +57 -6
  146. classiq/interface/generator/arith/arithmetic.py +37 -16
  147. classiq/interface/generator/arith/arithmetic_arg_type_validator.py +15 -17
  148. classiq/interface/generator/arith/arithmetic_expression_abc.py +70 -26
  149. classiq/interface/generator/arith/arithmetic_expression_parser.py +18 -12
  150. classiq/interface/generator/arith/arithmetic_expression_validator.py +61 -43
  151. classiq/interface/generator/arith/arithmetic_operations.py +19 -16
  152. classiq/interface/generator/arith/arithmetic_param_getters.py +7 -8
  153. classiq/interface/generator/arith/arithmetic_result_builder.py +21 -17
  154. classiq/interface/generator/arith/ast_node_rewrite.py +4 -3
  155. classiq/interface/generator/arith/binary_ops.py +375 -139
  156. classiq/interface/generator/arith/endianness.py +1 -1
  157. classiq/interface/generator/arith/extremum_operations.py +96 -23
  158. classiq/interface/generator/arith/logical_ops.py +16 -12
  159. classiq/interface/generator/arith/machine_precision.py +3 -0
  160. classiq/interface/generator/arith/number_utils.py +44 -48
  161. classiq/interface/generator/arith/register_user_input.py +70 -27
  162. classiq/interface/generator/arith/unary_ops.py +57 -46
  163. classiq/interface/generator/arith/uncomputation_methods.py +1 -1
  164. classiq/interface/generator/builtin_api_builder.py +2 -9
  165. classiq/interface/generator/chemistry_function_params.py +5 -5
  166. classiq/interface/generator/circuit_code/circuit_code.py +7 -7
  167. classiq/interface/generator/circuit_code/types_and_constants.py +4 -7
  168. classiq/interface/generator/commuting_pauli_exponentiation.py +8 -6
  169. classiq/interface/generator/compiler_keywords.py +8 -0
  170. classiq/interface/generator/complex_type.py +13 -25
  171. classiq/interface/generator/constant.py +3 -4
  172. classiq/interface/generator/control_state.py +35 -28
  173. classiq/interface/generator/copy.py +47 -0
  174. classiq/interface/generator/custom_ansatz.py +2 -5
  175. classiq/interface/generator/distance.py +3 -5
  176. classiq/interface/generator/excitations.py +3 -2
  177. classiq/interface/generator/expressions/atomic_expression_functions.py +26 -8
  178. classiq/interface/generator/expressions/enums/__init__.py +0 -10
  179. classiq/interface/generator/expressions/enums/finance_functions.py +12 -22
  180. classiq/interface/generator/expressions/evaluated_expression.py +21 -7
  181. classiq/interface/generator/expressions/expression.py +27 -15
  182. classiq/interface/generator/expressions/expression_constants.py +9 -3
  183. classiq/interface/generator/expressions/non_symbolic_expr.py +119 -0
  184. classiq/interface/generator/expressions/qmod_qarray_proxy.py +99 -0
  185. classiq/interface/generator/expressions/qmod_qscalar_proxy.py +59 -0
  186. classiq/interface/generator/expressions/qmod_qstruct_proxy.py +36 -0
  187. classiq/interface/generator/expressions/qmod_sized_proxy.py +30 -2
  188. classiq/interface/generator/expressions/qmod_struct_instance.py +14 -2
  189. classiq/interface/generator/expressions/sympy_supported_expressions.py +20 -11
  190. classiq/interface/generator/finance.py +3 -3
  191. classiq/interface/generator/function_param_library.py +6 -6
  192. classiq/interface/generator/function_param_list_without_self_reference.py +2 -10
  193. classiq/interface/generator/function_params.py +42 -69
  194. classiq/interface/generator/functions/__init__.py +0 -22
  195. classiq/interface/generator/functions/builtins/__init__.py +0 -0
  196. classiq/interface/generator/functions/builtins/internal_operators.py +16 -0
  197. classiq/interface/generator/functions/classical_function_declaration.py +18 -9
  198. classiq/interface/generator/functions/classical_type.py +47 -166
  199. classiq/interface/generator/functions/concrete_types.py +55 -0
  200. classiq/interface/generator/functions/function_declaration.py +13 -14
  201. classiq/interface/generator/functions/port_declaration.py +1 -13
  202. classiq/interface/generator/functions/qmod_python_interface.py +2 -1
  203. classiq/interface/generator/functions/type_name.py +90 -0
  204. classiq/interface/generator/generated_circuit_data.py +155 -22
  205. classiq/interface/generator/grover_diffuser.py +32 -25
  206. classiq/interface/generator/grover_operator.py +34 -23
  207. classiq/interface/generator/hamiltonian_evolution/exponentiation.py +4 -6
  208. classiq/interface/generator/hamiltonian_evolution/qdrift.py +4 -4
  209. classiq/interface/generator/hamiltonian_evolution/suzuki_trotter.py +12 -8
  210. classiq/interface/generator/hardware/hardware_data.py +76 -36
  211. classiq/interface/generator/hardware_efficient_ansatz.py +38 -17
  212. classiq/interface/generator/hartree_fock.py +14 -4
  213. classiq/interface/generator/identity.py +10 -6
  214. classiq/interface/generator/linear_pauli_rotations.py +33 -19
  215. classiq/interface/generator/mcmt_method.py +1 -1
  216. classiq/interface/generator/mcu.py +20 -16
  217. classiq/interface/generator/mcx.py +29 -20
  218. classiq/interface/generator/model/__init__.py +2 -5
  219. classiq/interface/generator/model/constraints.py +27 -8
  220. classiq/interface/generator/model/model.py +32 -203
  221. classiq/interface/generator/model/preferences/preferences.py +118 -43
  222. classiq/{quantum_register.py → interface/generator/model/quantum_register.py} +27 -22
  223. classiq/interface/generator/oracles/arithmetic_oracle.py +2 -4
  224. classiq/interface/generator/oracles/custom_oracle.py +17 -13
  225. classiq/interface/generator/oracles/oracle_abc.py +9 -9
  226. classiq/interface/generator/partitioned_register.py +7 -7
  227. classiq/interface/generator/piecewise_linear_amplitude_loading.py +45 -29
  228. classiq/interface/generator/preferences/optimization.py +1 -2
  229. classiq/interface/generator/qpe.py +47 -34
  230. classiq/interface/generator/qsvm.py +13 -17
  231. classiq/interface/generator/quantum_function_call.py +107 -87
  232. classiq/interface/generator/{generated_circuit.py → quantum_program.py} +50 -37
  233. classiq/interface/generator/range_types.py +13 -12
  234. classiq/interface/generator/register_role.py +18 -6
  235. classiq/interface/generator/slice_parsing_utils.py +11 -6
  236. classiq/interface/generator/standard_gates/controlled_standard_gates.py +32 -39
  237. classiq/interface/generator/standard_gates/standard_angle_metaclass.py +2 -6
  238. classiq/interface/generator/standard_gates/standard_gates.py +3 -3
  239. classiq/interface/generator/standard_gates/u_gate.py +7 -10
  240. classiq/interface/generator/state_preparation/bell_state_preparation.py +3 -3
  241. classiq/interface/generator/state_preparation/computational_basis_state_preparation.py +2 -1
  242. classiq/interface/generator/state_preparation/distributions.py +16 -15
  243. classiq/interface/generator/state_preparation/metrics.py +5 -7
  244. classiq/interface/generator/state_preparation/state_preparation.py +30 -23
  245. classiq/interface/generator/synthesis_metadata/synthesis_duration.py +0 -4
  246. classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +20 -6
  247. classiq/interface/generator/transpiler_basis_gates.py +7 -3
  248. classiq/interface/generator/types/builtin_enum_declarations.py +178 -0
  249. classiq/interface/generator/types/compilation_metadata.py +6 -0
  250. classiq/interface/generator/types/enum_declaration.py +54 -0
  251. classiq/interface/generator/types/qstruct_declaration.py +18 -0
  252. classiq/interface/generator/types/struct_declaration.py +15 -14
  253. classiq/interface/generator/ucc.py +9 -6
  254. classiq/interface/generator/unitary_gate.py +10 -6
  255. classiq/interface/generator/user_defined_function_params.py +4 -1
  256. classiq/interface/generator/validations/flow_graph.py +11 -9
  257. classiq/interface/generator/validations/validator_functions.py +8 -6
  258. classiq/interface/generator/visitor.py +23 -16
  259. classiq/interface/hardware.py +31 -10
  260. classiq/interface/helpers/classproperty.py +8 -0
  261. classiq/interface/helpers/custom_encoders.py +3 -0
  262. classiq/interface/helpers/custom_pydantic_types.py +40 -50
  263. classiq/interface/helpers/datastructures.py +26 -0
  264. classiq/interface/helpers/hashable_mixin.py +3 -2
  265. classiq/interface/helpers/hashable_pydantic_base_model.py +2 -1
  266. classiq/interface/helpers/pydantic_model_helpers.py +7 -11
  267. classiq/interface/helpers/validation_helpers.py +4 -21
  268. classiq/interface/helpers/versioned_model.py +1 -1
  269. classiq/interface/ide/ide_data.py +16 -20
  270. classiq/interface/ide/visual_model.py +130 -0
  271. classiq/interface/interface_version.py +1 -0
  272. classiq/interface/jobs.py +35 -6
  273. classiq/interface/model/allocate.py +16 -0
  274. classiq/interface/model/bind_operation.py +44 -14
  275. classiq/interface/model/classical_if.py +15 -0
  276. classiq/interface/model/classical_parameter_declaration.py +33 -3
  277. classiq/interface/model/control.py +45 -0
  278. classiq/interface/model/handle_binding.py +298 -20
  279. classiq/interface/model/inplace_binary_operation.py +31 -26
  280. classiq/interface/model/invert.py +12 -0
  281. classiq/interface/model/model.py +87 -73
  282. classiq/interface/model/native_function_definition.py +16 -21
  283. classiq/interface/model/parameter.py +13 -0
  284. classiq/interface/model/phase_operation.py +11 -0
  285. classiq/interface/model/port_declaration.py +27 -9
  286. classiq/interface/model/power.py +14 -0
  287. classiq/interface/model/quantum_expressions/amplitude_loading_operation.py +38 -21
  288. classiq/interface/model/quantum_expressions/arithmetic_operation.py +51 -14
  289. classiq/interface/model/quantum_expressions/quantum_expression.py +12 -35
  290. classiq/interface/model/quantum_function_call.py +146 -462
  291. classiq/interface/model/quantum_function_declaration.py +193 -152
  292. classiq/interface/model/quantum_lambda_function.py +65 -0
  293. classiq/interface/model/quantum_statement.py +71 -12
  294. classiq/interface/model/quantum_type.py +205 -67
  295. classiq/interface/model/quantum_variable_declaration.py +4 -26
  296. classiq/interface/model/repeat.py +15 -0
  297. classiq/interface/model/statement_block.py +58 -0
  298. classiq/interface/model/validation_handle.py +13 -6
  299. classiq/interface/model/variable_declaration_statement.py +3 -1
  300. classiq/interface/model/within_apply_operation.py +13 -0
  301. classiq/interface/pyomo_extension/pyomo_sympy_bimap.py +4 -1
  302. classiq/interface/server/global_versions.py +6 -7
  303. classiq/interface/server/routes.py +22 -21
  304. classiq/interface/source_reference.py +59 -0
  305. classiq/model_expansions/__init__.py +0 -0
  306. classiq/model_expansions/atomic_expression_functions_defs.py +253 -0
  307. classiq/model_expansions/capturing/__init__.py +0 -0
  308. classiq/model_expansions/capturing/captured_vars.py +435 -0
  309. classiq/model_expansions/capturing/mangling_utils.py +56 -0
  310. classiq/model_expansions/closure.py +171 -0
  311. classiq/model_expansions/debug_flag.py +3 -0
  312. classiq/model_expansions/evaluators/__init__.py +0 -0
  313. classiq/model_expansions/evaluators/arg_type_match.py +158 -0
  314. classiq/model_expansions/evaluators/argument_types.py +42 -0
  315. classiq/model_expansions/evaluators/classical_expression.py +36 -0
  316. classiq/model_expansions/evaluators/control.py +144 -0
  317. classiq/model_expansions/evaluators/parameter_types.py +226 -0
  318. classiq/model_expansions/evaluators/quantum_type_utils.py +239 -0
  319. classiq/model_expansions/evaluators/type_type_match.py +90 -0
  320. classiq/model_expansions/expression_evaluator.py +135 -0
  321. classiq/model_expansions/expression_renamer.py +76 -0
  322. classiq/model_expansions/function_builder.py +247 -0
  323. classiq/model_expansions/generative_functions.py +158 -0
  324. classiq/model_expansions/interpreters/__init__.py +0 -0
  325. classiq/model_expansions/interpreters/base_interpreter.py +263 -0
  326. classiq/model_expansions/interpreters/frontend_generative_interpreter.py +28 -0
  327. classiq/model_expansions/interpreters/generative_interpreter.py +249 -0
  328. classiq/model_expansions/model_tables.py +18 -0
  329. classiq/model_expansions/quantum_operations/__init__.py +9 -0
  330. classiq/model_expansions/quantum_operations/bind.py +60 -0
  331. classiq/model_expansions/quantum_operations/call_emitter.py +266 -0
  332. classiq/model_expansions/quantum_operations/classicalif.py +53 -0
  333. classiq/model_expansions/quantum_operations/declarative_call_emitter.py +87 -0
  334. classiq/model_expansions/quantum_operations/emitter.py +181 -0
  335. classiq/model_expansions/quantum_operations/quantum_function_call.py +33 -0
  336. classiq/model_expansions/quantum_operations/repeat.py +56 -0
  337. classiq/model_expansions/quantum_operations/shallow_emitter.py +180 -0
  338. classiq/model_expansions/quantum_operations/variable_decleration.py +28 -0
  339. classiq/model_expansions/scope.py +240 -0
  340. classiq/model_expansions/scope_initialization.py +150 -0
  341. classiq/model_expansions/sympy_conversion/__init__.py +0 -0
  342. classiq/model_expansions/sympy_conversion/arithmetics.py +49 -0
  343. classiq/model_expansions/sympy_conversion/expression_to_sympy.py +179 -0
  344. classiq/model_expansions/sympy_conversion/sympy_to_python.py +123 -0
  345. classiq/model_expansions/transformers/__init__.py +0 -0
  346. classiq/model_expansions/transformers/ast_renamer.py +26 -0
  347. classiq/model_expansions/transformers/var_splitter.py +299 -0
  348. classiq/model_expansions/utils/__init__.py +0 -0
  349. classiq/model_expansions/utils/counted_name_allocator.py +11 -0
  350. classiq/model_expansions/utils/handles_collector.py +33 -0
  351. classiq/model_expansions/visitors/__init__.py +0 -0
  352. classiq/model_expansions/visitors/boolean_expression_transformers.py +214 -0
  353. classiq/model_expansions/visitors/variable_references.py +144 -0
  354. classiq/open_library/__init__.py +4 -0
  355. classiq/open_library/functions/__init__.py +130 -0
  356. classiq/open_library/functions/amplitude_estimation.py +30 -0
  357. classiq/open_library/functions/discrete_sine_cosine_transform.py +181 -0
  358. classiq/open_library/functions/grover.py +157 -0
  359. classiq/open_library/functions/hea.py +115 -0
  360. classiq/open_library/functions/linear_pauli_rotation.py +82 -0
  361. classiq/open_library/functions/modular_exponentiation.py +201 -0
  362. classiq/open_library/functions/qaoa_penalty.py +117 -0
  363. classiq/open_library/functions/qft_functions.py +54 -0
  364. classiq/open_library/functions/qpe.py +46 -0
  365. classiq/open_library/functions/qsvt.py +331 -0
  366. classiq/open_library/functions/state_preparation.py +301 -0
  367. classiq/open_library/functions/swap_test.py +27 -0
  368. classiq/open_library/functions/utility_functions.py +81 -0
  369. classiq/open_library/functions/variational.py +52 -0
  370. classiq/qmod/__init__.py +17 -10
  371. classiq/qmod/builtins/__init__.py +19 -2
  372. classiq/qmod/builtins/classical_execution_primitives.py +60 -47
  373. classiq/qmod/builtins/classical_functions.py +44 -38
  374. classiq/qmod/builtins/constants.py +10 -0
  375. classiq/qmod/builtins/enums.py +208 -0
  376. classiq/qmod/builtins/functions/__init__.py +137 -0
  377. classiq/qmod/builtins/functions/allocation.py +150 -0
  378. classiq/qmod/builtins/functions/arithmetic.py +55 -0
  379. classiq/qmod/builtins/functions/benchmarking.py +8 -0
  380. classiq/qmod/builtins/functions/chemistry.py +91 -0
  381. classiq/qmod/builtins/functions/exponentiation.py +105 -0
  382. classiq/qmod/builtins/functions/finance.py +34 -0
  383. classiq/qmod/builtins/functions/operators.py +16 -0
  384. classiq/qmod/builtins/functions/qsvm.py +24 -0
  385. classiq/qmod/builtins/functions/standard_gates.py +651 -0
  386. classiq/qmod/builtins/operations.py +379 -57
  387. classiq/qmod/builtins/structs.py +103 -80
  388. classiq/qmod/cfunc.py +42 -0
  389. classiq/qmod/classical_function.py +8 -20
  390. classiq/qmod/cparam.py +64 -0
  391. classiq/qmod/create_model_function.py +56 -0
  392. classiq/qmod/declaration_inferrer.py +145 -112
  393. classiq/qmod/expression_query.py +39 -0
  394. classiq/qmod/generative.py +42 -0
  395. classiq/qmod/model_state_container.py +19 -5
  396. classiq/qmod/native/__init__.py +7 -0
  397. classiq/qmod/native/expression_to_qmod.py +194 -0
  398. classiq/qmod/native/pretty_printer.py +401 -0
  399. classiq/qmod/pretty_print/__init__.py +7 -0
  400. classiq/qmod/pretty_print/expression_to_python.py +222 -0
  401. classiq/qmod/pretty_print/pretty_printer.py +572 -0
  402. classiq/qmod/python_classical_type.py +67 -0
  403. classiq/qmod/qfunc.py +79 -0
  404. classiq/qmod/qmod_constant.py +143 -0
  405. classiq/qmod/qmod_parameter.py +84 -53
  406. classiq/qmod/qmod_variable.py +497 -100
  407. classiq/qmod/quantum_callable.py +17 -7
  408. classiq/qmod/quantum_expandable.py +278 -105
  409. classiq/qmod/quantum_function.py +232 -48
  410. classiq/qmod/semantics/__init__.py +0 -0
  411. classiq/qmod/semantics/annotation/__init__.py +0 -0
  412. classiq/qmod/semantics/annotation/call_annotation.py +92 -0
  413. classiq/qmod/semantics/annotation/qstruct_annotator.py +23 -0
  414. classiq/qmod/semantics/error_manager.py +88 -0
  415. classiq/qmod/semantics/lambdas.py +25 -0
  416. classiq/qmod/semantics/static_semantics_visitor.py +384 -0
  417. classiq/qmod/semantics/validation/__init__.py +0 -0
  418. classiq/qmod/semantics/validation/constants_validation.py +16 -0
  419. classiq/qmod/semantics/validation/func_call_validation.py +99 -0
  420. classiq/qmod/semantics/validation/function_name_collisions_validation.py +23 -0
  421. classiq/qmod/semantics/validation/handle_validation.py +85 -0
  422. classiq/qmod/semantics/validation/main_validation.py +33 -0
  423. classiq/qmod/semantics/validation/types_validation.py +128 -0
  424. classiq/qmod/symbolic.py +178 -111
  425. classiq/qmod/symbolic_expr.py +36 -12
  426. classiq/qmod/symbolic_type.py +2 -5
  427. classiq/qmod/type_attribute_remover.py +32 -0
  428. classiq/qmod/utilities.py +108 -1
  429. classiq/qmod/write_qmod.py +53 -0
  430. classiq/synthesis.py +210 -22
  431. {classiq-0.37.1.dist-info → classiq-0.65.3.dist-info}/METADATA +16 -8
  432. classiq-0.65.3.dist-info/RECORD +521 -0
  433. {classiq-0.37.1.dist-info → classiq-0.65.3.dist-info}/WHEEL +1 -1
  434. classiq/_internals/_qfunc_ext.py +0 -6
  435. classiq/applications/benchmarking/__init__.py +0 -9
  436. classiq/applications/benchmarking/mirror_benchmarking.py +0 -67
  437. classiq/applications/numpy_utils.py +0 -37
  438. classiq/applications_model_constructors/__init__.py +0 -17
  439. classiq/applications_model_constructors/combinatorial_optimization_model_constructor.py +0 -178
  440. classiq/applications_model_constructors/grover_model_constructor.py +0 -227
  441. classiq/applications_model_constructors/libraries/ampltitude_estimation_library.py +0 -11
  442. classiq/applications_model_constructors/libraries/qmci_library.py +0 -109
  443. classiq/builtin_functions/__init__.py +0 -43
  444. classiq/builtin_functions/amplitude_loading.py +0 -3
  445. classiq/builtin_functions/binary_ops.py +0 -1
  446. classiq/builtin_functions/exponentiation.py +0 -5
  447. classiq/builtin_functions/qpe.py +0 -4
  448. classiq/builtin_functions/qsvm.py +0 -7
  449. classiq/builtin_functions/range_types.py +0 -5
  450. classiq/builtin_functions/standard_gates.py +0 -1
  451. classiq/builtin_functions/state_preparation.py +0 -6
  452. classiq/builtin_functions/suzuki_trotter.py +0 -3
  453. classiq/exceptions.py +0 -131
  454. classiq/interface/executor/aws_execution_cost.py +0 -72
  455. classiq/interface/executor/error_mitigation.py +0 -6
  456. classiq/interface/generator/credit_risk_example/linear_gci.py +0 -115
  457. classiq/interface/generator/credit_risk_example/weighted_adder.py +0 -59
  458. classiq/interface/generator/expressions/enums/chemistry.py +0 -28
  459. classiq/interface/generator/expressions/enums/classical_enum.py +0 -5
  460. classiq/interface/generator/expressions/enums/ladder_operator.py +0 -16
  461. classiq/interface/generator/expressions/enums/optimizers.py +0 -9
  462. classiq/interface/generator/expressions/enums/pauli.py +0 -8
  463. classiq/interface/generator/expressions/enums/qsvm_feature_map_entanglement.py +0 -9
  464. classiq/interface/generator/expressions/qmod_qnum_proxy.py +0 -22
  465. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/__init__.py +0 -18
  466. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/atomic_quantum_functions.py +0 -641
  467. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/exponentiation_functions.py +0 -89
  468. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/std_lib_functions.py +0 -862
  469. classiq/interface/generator/functions/core_lib_declarations/quantum_operators.py +0 -169
  470. classiq/interface/generator/functions/foreign_function_definition.py +0 -106
  471. classiq/interface/generator/functions/function_implementation.py +0 -103
  472. classiq/interface/generator/functions/native_function_definition.py +0 -153
  473. classiq/interface/generator/functions/quantum_function_declaration.py +0 -69
  474. classiq/interface/generator/functions/register.py +0 -42
  475. classiq/interface/generator/functions/register_mapping_data.py +0 -102
  476. classiq/interface/generator/inequality_mixer.py +0 -51
  477. classiq/interface/generator/model/classical_main_validator.py +0 -106
  478. classiq/interface/generator/range_mixer.py +0 -56
  479. classiq/interface/generator/state_propagator.py +0 -63
  480. classiq/interface/generator/types/builtin_struct_declarations/__init__.py +0 -2
  481. classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +0 -22
  482. classiq/interface/generator/types/builtin_struct_declarations/qaoa_declarations.py +0 -23
  483. classiq/interface/generator/types/combinatorial_problem.py +0 -26
  484. classiq/interface/ide/show.py +0 -34
  485. classiq/interface/model/common_model_types.py +0 -23
  486. classiq/interface/model/numeric_reinterpretation.py +0 -25
  487. classiq/interface/model/operator_synthesis_data.py +0 -48
  488. classiq/interface/model/quantum_expressions/control_state.py +0 -38
  489. classiq/interface/model/quantum_if_operation.py +0 -95
  490. classiq/interface/model/resolvers/function_call_resolver.py +0 -43
  491. classiq/interface/model/validations/handle_validation_base.py +0 -55
  492. classiq/interface/model/validations/handles_validator.py +0 -154
  493. classiq/interface/model/validations/port_to_wire_name_generator.py +0 -12
  494. classiq/model/__init__.py +0 -14
  495. classiq/model/composite_function_generator.py +0 -33
  496. classiq/model/function_handler.py +0 -466
  497. classiq/model/function_handler.pyi +0 -152
  498. classiq/model/logic_flow.py +0 -149
  499. classiq/model/logic_flow_change_handler.py +0 -71
  500. classiq/model/model.py +0 -246
  501. classiq/qmod/builtins/functions.py +0 -896
  502. classiq/qmod/qmod_struct.py +0 -37
  503. classiq/quantum_functions/__init__.py +0 -17
  504. classiq/quantum_functions/annotation_parser.py +0 -207
  505. classiq/quantum_functions/decorators.py +0 -22
  506. classiq/quantum_functions/function_library.py +0 -181
  507. classiq/quantum_functions/function_parser.py +0 -74
  508. classiq/quantum_functions/quantum_function.py +0 -236
  509. classiq-0.37.1.dist-info/RECORD +0 -418
  510. /classiq/{applications_model_constructors/libraries → applications/combinatorial_helpers}/__init__.py +0 -0
  511. /classiq/{interface/generator/credit_risk_example → applications/combinatorial_helpers/arithmetic}/__init__.py +0 -0
  512. /classiq/{interface/generator/functions/core_lib_declarations → applications/combinatorial_helpers/pauli_helpers}/__init__.py +0 -0
  513. /classiq/{interface/generator/functions/core_lib_declarations/quantum_functions/chemistry_functions.py → applications/combinatorial_helpers/py.typed} +0 -0
  514. /classiq/{interface/model/resolvers → applications/combinatorial_helpers/solvers}/__init__.py +0 -0
  515. /classiq/{interface/model/validations → applications/combinatorial_helpers/transformations}/__init__.py +0 -0
  516. /classiq/{_internals → interface}/enum_utils.py +0 -0
@@ -0,0 +1,651 @@
1
+ from typing import Literal
2
+
3
+ from classiq.qmod.qfunc import qfunc
4
+ from classiq.qmod.qmod_parameter import CReal
5
+ from classiq.qmod.qmod_variable import QArray, QBit
6
+
7
+
8
+ @qfunc(external=True)
9
+ def H(target: QBit) -> None:
10
+ """
11
+ [Qmod core-library function]
12
+
13
+ Performs the Hadamard gate on a qubit.
14
+
15
+ This operation is represented by the following matrix:
16
+
17
+ $$
18
+ H = \\frac{1}{\\sqrt{2}} \\begin{bmatrix} 1 & 1 \\\\ 1 & -1 \\end{bmatrix}
19
+ $$
20
+
21
+ Args:
22
+ target: The qubit to apply the Hadamard gate to.
23
+ """
24
+ pass
25
+
26
+
27
+ @qfunc(external=True)
28
+ def X(target: QBit) -> None:
29
+ """
30
+ [Qmod core-library function]
31
+
32
+ Performs the Pauli-X gate on a qubit.
33
+
34
+ This operation is represented by the following matrix:
35
+
36
+ $$
37
+ X = \\begin{bmatrix} 0 & 1 \\\\ 1 & 0 \\end{bmatrix}
38
+ $$
39
+
40
+ Args:
41
+ target: The qubit to apply the Pauli-X gate to.
42
+ """
43
+ pass
44
+
45
+
46
+ @qfunc(external=True)
47
+ def Y(target: QBit) -> None:
48
+ """
49
+ [Qmod core-library function]
50
+
51
+ Performs the Pauli-Y gate on a qubit.
52
+
53
+ This operation is represented by the following matrix:
54
+
55
+ $$
56
+ Y = \\begin{bmatrix} 0 & -i \\\\ i & 0 \\end{bmatrix}
57
+ $$
58
+
59
+ Args:
60
+ target: The qubit to apply the Pauli-Y gate to.
61
+ """
62
+ pass
63
+
64
+
65
+ @qfunc(external=True)
66
+ def Z(target: QBit) -> None:
67
+ """
68
+ [Qmod core-library function]
69
+
70
+ Performs the Pauli-Z gate on a qubit.
71
+
72
+ This operation is represented by the following matrix:
73
+
74
+ $$
75
+ Z = \\begin{bmatrix} 1 & 0 \\\\ 0 & -1 \\end{bmatrix}
76
+ $$
77
+
78
+ Args:
79
+ target: The qubit to apply the Pauli-Z gate to.
80
+ """
81
+ pass
82
+
83
+
84
+ @qfunc(external=True)
85
+ def I(target: QBit) -> None:
86
+ """
87
+ [Qmod core-library function]
88
+
89
+ Performs the identity gate on a qubit.
90
+
91
+ This operation is represented by the following matrix:
92
+
93
+ $$
94
+ I = \\begin{bmatrix} 1 & 0 \\\\ 0 & 1 \\end{bmatrix}
95
+ $$
96
+
97
+ Args:
98
+ target: The qubit to apply the identity gate to.
99
+ """
100
+ pass
101
+
102
+
103
+ @qfunc(external=True)
104
+ def S(target: QBit) -> None:
105
+ """
106
+ [Qmod core-library function]
107
+
108
+ Performs the S gate on a qubit.
109
+
110
+ This operation is represented by the following matrix:
111
+
112
+ $$
113
+ S = \\begin{bmatrix} 1 & 0 \\\\ 0 & i \\end{bmatrix}
114
+ $$
115
+
116
+ Args:
117
+ target: The qubit to apply the S gate to.
118
+ """
119
+ pass
120
+
121
+
122
+ @qfunc(external=True)
123
+ def T(target: QBit) -> None:
124
+ """
125
+ [Qmod core-library function]
126
+
127
+ Performs the T gate on a qubit.
128
+
129
+ This operation is represented by the following matrix:
130
+
131
+ $$
132
+ T = \\begin{bmatrix} 1 & 0 \\\\ 0 & e^{i\\frac{\\pi}{4}} \\end{bmatrix}
133
+ $$
134
+
135
+ Args:
136
+ target: The qubit to apply the T gate to.
137
+ """
138
+ pass
139
+
140
+
141
+ @qfunc(external=True)
142
+ def SDG(target: QBit) -> None:
143
+ """
144
+ [Qmod core-library function]
145
+
146
+ Performs the S-dagger gate on a qubit.
147
+
148
+ This operation is represented by the following matrix:
149
+
150
+ $$
151
+ S^\\dagger = \\begin{bmatrix} 1 & 0 \\\\ 0 & -i \\end{bmatrix}
152
+ $$
153
+
154
+ Args:
155
+ target: The qubit to apply the S-dagger gate to.
156
+ """
157
+ pass
158
+
159
+
160
+ @qfunc(external=True)
161
+ def TDG(target: QBit) -> None:
162
+ """
163
+ [Qmod core-library function]
164
+
165
+ Performs the T-dagger gate on a qubit.
166
+
167
+ This operation is represented by the following matrix:
168
+
169
+ $$
170
+ T^\\dagger = \\begin{bmatrix} 1 & 0 \\\\ 0 & e^{-i\\frac{\\pi}{4}} \\end{bmatrix}
171
+ $$
172
+
173
+ Args:
174
+ target: The qubit to apply the T-dagger gate to.
175
+ """
176
+ pass
177
+
178
+
179
+ @qfunc(external=True)
180
+ def PHASE(theta: CReal, target: QBit) -> None:
181
+ """
182
+ [Qmod core-library function]
183
+
184
+ Performs the phase gate on a qubit.
185
+
186
+ This operation is represented by the following matrix:
187
+
188
+ $$
189
+ PHASE(\\theta) = \\begin{bmatrix} 1 & 0 \\\\ 0 & e^{i\\theta} \\end{bmatrix}
190
+ $$
191
+
192
+ Args:
193
+ theta: The phase angle in radians.
194
+ target: The qubit to apply the phase gate to.
195
+ """
196
+ pass
197
+
198
+
199
+ @qfunc(external=True)
200
+ def RX(theta: CReal, target: QBit) -> None:
201
+ """
202
+ [Qmod core-library function]
203
+
204
+ Performs the Pauli-X rotation gate on a qubit.
205
+
206
+ This operation is represented by the following matrix:
207
+
208
+ $$
209
+ R_X(\\theta) = e^{-i\\frac{\\theta}{2}X}
210
+ = \\begin{bmatrix} cos(\\frac{\\theta}{2}) & -i sin(\\frac{\\theta}{2}) \\\\ -i sin(\\frac{\\theta}{2}) & cos(\\frac{\\theta}{2}) \\end{bmatrix}
211
+ $$
212
+
213
+ Args:
214
+ theta: The rotation angle in radians.
215
+ target: The qubit to apply the Pauli-X rotation gate to.
216
+ """
217
+ pass
218
+
219
+
220
+ @qfunc(external=True)
221
+ def RY(theta: CReal, target: QBit) -> None:
222
+ """
223
+ [Qmod core-library function]
224
+
225
+ Performs the Pauli-Y rotation gate on a qubit.
226
+
227
+ This operation is represented by the following matrix:
228
+
229
+ $$
230
+ R_Y(\\theta) = e^{-i\\frac{\\theta}{2}Y}
231
+ = \\begin{bmatrix} cos(\\frac{\\theta}{2}) & -sin(\\frac{\\theta}{2}) \\\\ -sin(\\frac{\\theta}{2}) & cos(\\frac{\\theta}{2}) \\end{bmatrix}
232
+ $$
233
+
234
+ Args:
235
+ theta: The rotation angle in radians.
236
+ target: The qubit to apply the Pauli-Y rotation gate to.
237
+ """
238
+ pass
239
+
240
+
241
+ @qfunc(external=True)
242
+ def RZ(theta: CReal, target: QBit) -> None:
243
+ """
244
+ [Qmod core-library function]
245
+
246
+ Performs the Pauli-Z rotation gate on a qubit.
247
+
248
+ This operation is represented by the following matrix:
249
+
250
+ $$
251
+ R_Z(\\theta) = e^{-i\\frac{\\theta}{2}Z}
252
+ = \\begin{bmatrix} e^{-i\\frac{\\theta}{2}} & 0 \\\\ 0 & e^{i\\frac{\\theta}{2}} \\end{bmatrix}
253
+ $$
254
+
255
+ Args:
256
+ theta: The rotation angle in radians.
257
+ target: The qubit to apply the Pauli-Z rotation gate to.
258
+ """
259
+ pass
260
+
261
+
262
+ @qfunc(external=True)
263
+ def R(theta: CReal, phi: CReal, target: QBit) -> None:
264
+ """
265
+ [Qmod core-library function]
266
+
267
+ Performs a rotation of $\\theta$ around the $cos(\\phi)\\hat{x} + sin(\\phi)\\hat{y}$ axis on a qubit.
268
+
269
+ This operation is represented by the following matrix:
270
+
271
+ $$
272
+ R(\\theta, \\phi) = e^{-i \\frac{\\theta}{2} (cos(\\phi)X + sin(\\phi)Y)}
273
+ = \\begin{bmatrix} cos(\\frac{\\theta}{2}) & -i e^{-i\\phi} sin(\\frac{\\theta}{2}) \\\\ -i e^{i\\phi} sin(\\frac{\\theta}{2}) & cos(\\frac{\\theta}{2}) \\end{bmatrix}
274
+ $$
275
+
276
+ Args:
277
+ theta: The rotation angle in radians.
278
+ phi: The phase angle in radians.
279
+ target: The qubit to apply the general single-qubit rotation gate to.
280
+ """
281
+ pass
282
+
283
+
284
+ @qfunc(external=True)
285
+ def RXX(theta: CReal, target: QArray[QBit, Literal[2]]) -> None:
286
+ """
287
+ [Qmod core-library function]
288
+
289
+ Performs the XX rotation gate on a pair of qubits.
290
+
291
+ This operation is represented by the following matrix:
292
+
293
+ $$
294
+ R_{XX}(\\theta) = e^{-i\\frac{\\theta}{2}X \\otimes X}
295
+ = \\begin{bmatrix} cos(\\frac{\\theta}{2}) & 0 & 0 & -i sin(\\frac{\\theta}{2}) \\\\ 0 & cos(\\frac{\\theta}{2}) & -i sin(\\frac{\\theta}{2}) & 0 \\\\ 0 & -i sin(\\frac{\\theta}{2}) & cos(\\frac{\\theta}{2}) & 0 \\\\ -i sin(\\frac{\\theta}{2}) & 0 & 0 & cos(\\frac{\\theta}{2}) \\end{bmatrix}
296
+ $$
297
+
298
+ Args:
299
+ theta: The rotation angle in radians.
300
+ target: The pair of qubits to apply the XX rotation gate to.
301
+ """
302
+ pass
303
+
304
+
305
+ @qfunc(external=True)
306
+ def RYY(theta: CReal, target: QArray[QBit, Literal[2]]) -> None:
307
+ """
308
+ [Qmod core-library function]
309
+
310
+ Performs the YY rotation gate on a pair of qubits.
311
+
312
+ This operation is represented by the following matrix:
313
+
314
+ $$
315
+ R_{YY}(\\theta) = e^{-i\\frac{\\theta}{2}Y \\otimes Y}
316
+ = \\begin{bmatrix} cos(\\frac{\\theta}{2}) & 0 & 0 & -sin(\\frac{\\theta}{2}) \\\\ 0 & cos(\\frac{\\theta}{2}) & sin(\\frac{\\theta}{2}) & 0 \\\\ 0 & sin(\\frac{\\theta}{2}) & cos(\\frac{\\theta}{2}) & 0 \\\\ -sin(\\frac{\\theta}{2}) & 0 & 0 & cos(\\frac{\\theta}{2}) \\end{bmatrix}
317
+ $$
318
+
319
+ Args:
320
+ theta: The rotation angle in radians.
321
+ target: The pair of qubits to apply the YY rotation gate to.
322
+ """
323
+ pass
324
+
325
+
326
+ @qfunc(external=True)
327
+ def RZZ(theta: CReal, target: QArray[QBit, Literal[2]]) -> None:
328
+ """
329
+ [Qmod core-library function]
330
+
331
+ Performs the ZZ rotation gate on a pair of qubits.
332
+
333
+ This operation is represented by the following matrix:
334
+
335
+ $$
336
+ R_{ZZ}(\\theta) = e^{-i\\frac{\\theta}{2}Z \\otimes Z}
337
+ = \\begin{bmatrix} e^{-i\\frac{\\theta}{2}} & 0 & 0 & 0 \\\\ 0 & e^{i\\frac{\\theta}{2}} & 0 & 0 \\\\ 0 & 0 & e^{i\\frac{\\theta}{2}} & 0 \\\\ 0 & 0 & 0 & e^{-i\\frac{\\theta}{2}} \\end{bmatrix}
338
+ $$
339
+
340
+ Args:
341
+ theta: The rotation angle in radians.
342
+ target: The pair of qubits to apply the ZZ rotation gate to.
343
+ """
344
+ pass
345
+
346
+
347
+ @qfunc(external=True)
348
+ def CH(ctrl: QBit, target: QBit) -> None:
349
+ """
350
+ [Qmod core-library function]
351
+
352
+ Applies the Hadamard gate to the target qubit, conditioned on the control qubit.
353
+
354
+ This operation is represented by the following matrix:
355
+
356
+ $$
357
+ CH = \\frac{1}{\\sqrt{2}} \\begin{bmatrix}
358
+ 1 & 0 & 0 & 0 \\\\
359
+ 0 & 1 & 0 & 0 \\\\
360
+ 0 & 0 & 1 & 1 \\\\
361
+ 0 & 0 & 1 & -1
362
+ \\end{bmatrix}
363
+ $$
364
+
365
+ Args:
366
+ ctrl: The control qubit.
367
+ target: The qubit to apply the Hadamard gate on.
368
+ """
369
+ pass
370
+
371
+
372
+ @qfunc(external=True)
373
+ def CX(ctrl: QBit, target: QBit) -> None:
374
+ """
375
+ [Qmod core-library function]
376
+
377
+ Applies the Pauli-X gate to the target qubit, conditioned on the control qubit.
378
+
379
+ This operation is represented by the following matrix:
380
+
381
+ $$
382
+ CX = \\begin{bmatrix}
383
+ 1 & 0 & 0 & 0 \\\\
384
+ 0 & 1 & 0 & 0 \\\\
385
+ 0 & 0 & 0 & 1 \\\\
386
+ 0 & 0 & 1 & 0
387
+ \\end{bmatrix}
388
+ $$
389
+
390
+ Args:
391
+ ctrl: The control qubit.
392
+ target: The qubit to apply the Pauli-X gate on.
393
+ """
394
+ pass
395
+
396
+
397
+ @qfunc(external=True)
398
+ def CY(ctrl: QBit, target: QBit) -> None:
399
+ """
400
+ [Qmod core-library function]
401
+
402
+ Applies the Pauli-Y gate to the target qubit, conditioned on the control qubit.
403
+
404
+ This operation is represented by the following matrix:
405
+
406
+ $$
407
+ CY = \\begin{bmatrix}
408
+ 1 & 0 & 0 & 0 \\\\
409
+ 0 & 1 & 0 & 0 \\\\
410
+ 0 & 0 & 0 & -i \\\\
411
+ 0 & 0 & i & 0
412
+ \\end{bmatrix}
413
+ $$
414
+
415
+ Args:
416
+ ctrl: The control qubit.
417
+ target: The qubit to apply the Pauli-Y gate on.
418
+ """
419
+ pass
420
+
421
+
422
+ @qfunc(external=True)
423
+ def CZ(ctrl: QBit, target: QBit) -> None:
424
+ """
425
+ [Qmod core-library function]
426
+
427
+ Applies the Pauli-Z gate to the target qubit, conditioned on the control qubit.
428
+
429
+ This operation is represented by the following matrix:
430
+
431
+ $$
432
+ CZ = \\begin{bmatrix}
433
+ 1 & 0 & 0 & 0 \\\\
434
+ 0 & 1 & 0 & 0 \\\\
435
+ 0 & 0 & 1 & 0 \\\\
436
+ 0 & 0 & 0 & -1
437
+ \\end{bmatrix}
438
+ $$
439
+
440
+ Args:
441
+ ctrl: The control qubit.
442
+ target: The qubit to apply the Pauli-Z gate on.
443
+ """
444
+ pass
445
+
446
+
447
+ @qfunc(external=True)
448
+ def CRX(theta: CReal, ctrl: QBit, target: QBit) -> None:
449
+ """
450
+ [Qmod core-library function]
451
+
452
+ Applies the RX gate to the target qubit, conditioned on the control qubit.
453
+
454
+ This operation is represented by the following matrix:
455
+
456
+ $$
457
+ CRX = \\begin{bmatrix}
458
+ 1 & 0 & 0 & 0 \\\\
459
+ 0 & 1 & 0 & 0 \\\\
460
+ 0 & 0 & cos(\\frac{\\theta}{2}) & -i*sin(\\frac{\\theta}{2}) \\\\
461
+ 0 & 0 & -i*sin(\\frac{\\theta}{2}) & cos(\\frac{\\theta}{2})
462
+ \\end{bmatrix}
463
+ $$
464
+
465
+ Args:
466
+ theta: The rotation angle in radians.
467
+ ctrl: The control qubit.
468
+ target: The qubit to apply the RX gate on.
469
+ """
470
+ pass
471
+
472
+
473
+ @qfunc(external=True)
474
+ def CRY(theta: CReal, ctrl: QBit, target: QBit) -> None:
475
+ """
476
+ [Qmod core-library function]
477
+
478
+ Applies the RY gate to the target qubit, conditioned on the control qubit.
479
+
480
+ This operation is represented by the following matrix:
481
+
482
+ $$
483
+ CRY = \\begin{bmatrix}
484
+ 1 & 0 & 0 & 0 \\\\
485
+ 0 & 1 & 0 & 0 \\\\
486
+ 0 & 0 & cos(\\frac{\\theta}{2}) & -sin(\\frac{\\theta}{2}) \\\\
487
+ 0 & 0 & sin(\\frac{\\theta}{2}) & cos(\\frac{\\theta}{2})
488
+ \\end{bmatrix}
489
+ $$
490
+
491
+ Args:
492
+ theta (CReal): The rotation angle in radians.
493
+ ctrl (QBit): The control qubit.
494
+ target (QBit): The qubit to apply the RY gate on.
495
+ """
496
+ pass
497
+
498
+
499
+ @qfunc(external=True)
500
+ def CRZ(theta: CReal, ctrl: QBit, target: QBit) -> None:
501
+ """
502
+ [Qmod core-library function]
503
+
504
+ Applies the RZ gate to the target qubit, conditioned on the control qubit.
505
+
506
+ This operation is represented by the following matrix:
507
+
508
+ $$
509
+ CRZ = \\begin{bmatrix}
510
+ 1 & 0 & 0 & 0 \\\\
511
+ 0 & 1 & 0 & 0 \\\\
512
+ 0 & 0 & e^{-i\\frac{\\theta}{2}} & 0 \\\\
513
+ 0 & 0 & 0 & e^{i\\frac{\\theta}{2}}
514
+ \\end{bmatrix}
515
+ $$
516
+
517
+ Args:
518
+ theta (CReal): The rotation angle in radians.
519
+ ctrl (QBit): The control qubit.
520
+ target (QBit): The qubit to apply the RZ gate on.
521
+ """
522
+ pass
523
+
524
+
525
+ @qfunc(external=True)
526
+ def CPHASE(theta: CReal, ctrl: QBit, target: QBit) -> None:
527
+ """
528
+ [Qmod core-library function]
529
+
530
+ Applies the PHASE gate to the target qubit, conditioned on the control qubit.
531
+
532
+ This operation is represented by the following matrix:
533
+
534
+ $$
535
+ CPHASE = \\begin{bmatrix}
536
+ 1 & 0 & 0 & 0 \\\\
537
+ 0 & 1 & 0 & 0 \\\\
538
+ 0 & 0 & 1 & 0 \\\\
539
+ 0 & 0 & 0 & e^{i\\theta}
540
+ \\end{bmatrix}
541
+ $$
542
+
543
+ Args:
544
+ theta (CReal): The rotation angle in radians.
545
+ ctrl (QBit): The control qubit.
546
+ target (QBit): The qubit to apply the PHASE gate on.
547
+ """
548
+ pass
549
+
550
+
551
+ @qfunc(external=True)
552
+ def SWAP(qbit0: QBit, qbit1: QBit) -> None:
553
+ """
554
+ [Qmod core-library function]
555
+
556
+ Swaps the states of two qubits.
557
+
558
+ This operation is represented by the following matrix:
559
+
560
+ $$
561
+ SWAP = \\begin{bmatrix}
562
+ 1 & 0 & 0 & 0 \\\\
563
+ 0 & 0 & 1 & 0 \\\\
564
+ 0 & 1 & 0 & 0 \\\\
565
+ 0 & 0 & 0 & 1
566
+ \\end{bmatrix}
567
+ $$
568
+
569
+ Args:
570
+ qbit0 (QBit): The first qubit.
571
+ qbit1 (QBit): The second qubit.
572
+ """
573
+ pass
574
+
575
+
576
+ @qfunc(external=True)
577
+ def IDENTITY(target: QArray[QBit]) -> None:
578
+ """
579
+ [Qmod core-library function]
580
+
581
+ Does nothing.
582
+
583
+ This operation is represented by the following matrix:
584
+
585
+ $$
586
+ IDENTITY = {\\begin{bmatrix}
587
+ 1 & 0 \\\\
588
+ 0 & 1
589
+ \\end{bmatrix}} ^{\\otimes n}
590
+ $$
591
+
592
+ Args:
593
+ target (QArray[QBit]): The qubits to apply the IDENTITY gate on.
594
+ """
595
+ pass
596
+
597
+
598
+ @qfunc(external=True)
599
+ def U(theta: CReal, phi: CReal, lam: CReal, gam: CReal, target: QBit) -> None:
600
+ """
601
+ [Qmod core-library function]
602
+
603
+ Performs a general single-qubit unitary gate that applies phase and rotation with three Euler angles on a qubit.
604
+
605
+ This operation is represented by the following matrix:
606
+
607
+ $$
608
+ U(\\theta, \\phi, \\lambda, \\gamma) = e^{i \\gamma}
609
+ \\begin{bmatrix}
610
+ cos(\\theta/2) & -e^{i(\\lambda)} sin(\\theta/2) \\\\
611
+ e^{i\\phi} sin(\\theta/2) & e^{i(\\phi + \\lambda)} cos(\\theta/2)
612
+ \\end{bmatrix}
613
+ $$
614
+
615
+ Args:
616
+ theta (CReal): The first Euler angle in radians.
617
+ phi (CReal): The second Euler angle in radians.
618
+ lam (CReal): The third Euler angle in radians.
619
+ gam (CReal): The global phase angle in radians.
620
+ target (QBit): The qubit to apply the general single-qubit unitary gate to.
621
+ """
622
+ pass
623
+
624
+
625
+ @qfunc(external=True)
626
+ def CCX(ctrl: QArray[QBit, Literal[2]], target: QBit) -> None:
627
+ """
628
+ [Qmod core-library function]
629
+
630
+ Applies the Pauli-X gate to the target qubit, conditioned on the two control qubits (Toffoli).
631
+
632
+ This operation is represented by the following matrix:
633
+
634
+ $$
635
+ CCX = \\begin{bmatrix}
636
+ 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\\\
637
+ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\\\
638
+ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\\\
639
+ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\\\
640
+ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\\\
641
+ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\\\
642
+ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\\\
643
+ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0
644
+ \\end{bmatrix}
645
+ $$
646
+
647
+ Args:
648
+ ctrl (QArray[QBit, Literal[2]]): The control qubits.
649
+ target (QBit): The qubit to apply the conditioned Pauli-X gate on.
650
+ """
651
+ pass