classiq 0.37.1__py3-none-any.whl → 0.39.0__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 (280) hide show
  1. classiq/__init__.py +23 -24
  2. classiq/_analyzer_extras/_ipywidgets_async_extension.py +1 -1
  3. classiq/_analyzer_extras/interactive_hardware.py +3 -3
  4. classiq/_internals/api_wrapper.py +37 -17
  5. classiq/_internals/async_utils.py +1 -74
  6. classiq/_internals/authentication/device.py +9 -4
  7. classiq/_internals/authentication/password_manager.py +25 -10
  8. classiq/_internals/authentication/token_manager.py +2 -2
  9. classiq/_internals/client.py +24 -6
  10. classiq/_internals/jobs.py +10 -7
  11. classiq/analyzer/analyzer.py +29 -29
  12. classiq/analyzer/analyzer_utilities.py +5 -5
  13. classiq/analyzer/rb.py +4 -5
  14. classiq/analyzer/show_interactive_hack.py +6 -6
  15. classiq/applications/__init__.py +1 -8
  16. classiq/applications/chemistry/__init__.py +6 -0
  17. classiq/{applications_model_constructors → applications/chemistry}/chemistry_model_constructor.py +9 -16
  18. classiq/applications/combinatorial_helpers/allowed_constraints.py +20 -0
  19. classiq/applications/combinatorial_helpers/arithmetic/arithmetic_expression.py +35 -0
  20. classiq/applications/combinatorial_helpers/arithmetic/isolation.py +42 -0
  21. classiq/applications/combinatorial_helpers/combinatorial_problem_utils.py +150 -0
  22. classiq/applications/combinatorial_helpers/encoding_mapping.py +107 -0
  23. classiq/applications/combinatorial_helpers/encoding_utils.py +122 -0
  24. classiq/applications/combinatorial_helpers/memory.py +77 -0
  25. classiq/applications/combinatorial_helpers/optimization_model.py +162 -0
  26. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_sparsing.py +31 -0
  27. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +75 -0
  28. classiq/applications/combinatorial_helpers/py.typed +0 -0
  29. classiq/applications/combinatorial_helpers/pyomo_utils.py +245 -0
  30. classiq/applications/combinatorial_helpers/solvers/__init__.py +0 -0
  31. classiq/applications/combinatorial_helpers/sympy_utils.py +22 -0
  32. classiq/applications/combinatorial_helpers/transformations/__init__.py +0 -0
  33. classiq/applications/combinatorial_helpers/transformations/encoding.py +187 -0
  34. classiq/applications/combinatorial_helpers/transformations/fixed_variables.py +142 -0
  35. classiq/applications/combinatorial_helpers/transformations/ising_converter.py +122 -0
  36. classiq/applications/combinatorial_helpers/transformations/penalty.py +32 -0
  37. classiq/applications/combinatorial_helpers/transformations/penalty_support.py +37 -0
  38. classiq/applications/combinatorial_helpers/transformations/sign_seperation.py +75 -0
  39. classiq/applications/combinatorial_helpers/transformations/slack_variables.py +88 -0
  40. classiq/applications/combinatorial_optimization/__init__.py +13 -2
  41. classiq/applications/combinatorial_optimization/combinatorial_optimization_model_constructor.py +134 -0
  42. classiq/applications/finance/__init__.py +3 -2
  43. classiq/{applications_model_constructors → applications/finance}/finance_model_constructor.py +27 -30
  44. classiq/applications/grover/__init__.py +11 -0
  45. classiq/{applications_model_constructors → applications/grover}/grover_model_constructor.py +20 -91
  46. classiq/applications/libraries/__init__.py +0 -0
  47. classiq/applications/libraries/qmci_library.py +35 -0
  48. classiq/applications/qnn/circuit_utils.py +2 -2
  49. classiq/applications/qnn/gradients/quantum_gradient.py +2 -2
  50. classiq/applications/qnn/types.py +2 -2
  51. classiq/applications/qsvm/__init__.py +5 -1
  52. classiq/applications/qsvm/qsvm.py +4 -7
  53. classiq/applications/qsvm/qsvm_data_generation.py +2 -5
  54. classiq/exceptions.py +43 -1
  55. classiq/execution/all_hardware_devices.py +13 -0
  56. classiq/executor.py +12 -10
  57. classiq/interface/_version.py +1 -1
  58. classiq/interface/analyzer/analysis_params.py +6 -3
  59. classiq/interface/analyzer/result.py +12 -8
  60. classiq/interface/applications/qsvm.py +17 -3
  61. classiq/interface/ast_node.py +23 -0
  62. classiq/interface/backend/backend_preferences.py +4 -2
  63. classiq/interface/backend/pydantic_backend.py +3 -1
  64. classiq/interface/backend/quantum_backend_providers.py +1 -0
  65. classiq/interface/chemistry/fermionic_operator.py +15 -13
  66. classiq/interface/chemistry/ground_state_problem.py +18 -3
  67. classiq/interface/chemistry/molecule.py +8 -6
  68. classiq/interface/chemistry/operator.py +20 -14
  69. classiq/interface/combinatorial_optimization/examples/ascending_sequence.py +1 -1
  70. classiq/interface/combinatorial_optimization/examples/greater_than_ilp.py +1 -1
  71. classiq/interface/combinatorial_optimization/examples/ilp.py +2 -1
  72. classiq/interface/combinatorial_optimization/examples/integer_portfolio_optimization.py +2 -2
  73. classiq/interface/combinatorial_optimization/examples/mds.py +2 -1
  74. classiq/interface/combinatorial_optimization/examples/mht.py +8 -3
  75. classiq/interface/combinatorial_optimization/examples/mis.py +4 -1
  76. classiq/interface/combinatorial_optimization/examples/mvc.py +2 -1
  77. classiq/interface/combinatorial_optimization/examples/set_cover.py +2 -1
  78. classiq/interface/combinatorial_optimization/examples/tsp.py +4 -3
  79. classiq/interface/combinatorial_optimization/examples/tsp_digraph.py +6 -2
  80. classiq/interface/combinatorial_optimization/mht_qaoa_input.py +9 -3
  81. classiq/interface/executor/aws_execution_cost.py +4 -3
  82. classiq/interface/executor/estimation.py +2 -2
  83. classiq/interface/executor/execution_preferences.py +5 -34
  84. classiq/interface/executor/execution_request.py +15 -48
  85. classiq/interface/executor/optimizer_preferences.py +22 -13
  86. classiq/interface/executor/{quantum_program.py → quantum_code.py} +21 -15
  87. classiq/interface/executor/quantum_instruction_set.py +2 -1
  88. classiq/interface/executor/register_initialization.py +1 -3
  89. classiq/interface/executor/result.py +41 -10
  90. classiq/interface/executor/vqe_result.py +2 -2
  91. classiq/interface/finance/function_input.py +17 -4
  92. classiq/interface/finance/gaussian_model_input.py +3 -1
  93. classiq/interface/finance/log_normal_model_input.py +3 -1
  94. classiq/interface/finance/model_input.py +2 -0
  95. classiq/interface/generator/amplitude_loading.py +6 -3
  96. classiq/interface/generator/application_apis/__init__.py +1 -0
  97. classiq/interface/generator/application_apis/arithmetic_declarations.py +14 -0
  98. classiq/interface/generator/arith/argument_utils.py +14 -4
  99. classiq/interface/generator/arith/arithmetic.py +3 -1
  100. classiq/interface/generator/arith/arithmetic_arg_type_validator.py +12 -13
  101. classiq/interface/generator/arith/arithmetic_expression_abc.py +4 -1
  102. classiq/interface/generator/arith/arithmetic_expression_parser.py +8 -2
  103. classiq/interface/generator/arith/arithmetic_expression_validator.py +16 -2
  104. classiq/interface/generator/arith/arithmetic_operations.py +5 -10
  105. classiq/interface/generator/arith/ast_node_rewrite.py +1 -1
  106. classiq/interface/generator/arith/binary_ops.py +202 -54
  107. classiq/interface/generator/arith/extremum_operations.py +5 -3
  108. classiq/interface/generator/arith/logical_ops.py +4 -2
  109. classiq/interface/generator/arith/machine_precision.py +3 -0
  110. classiq/interface/generator/arith/number_utils.py +34 -44
  111. classiq/interface/generator/arith/register_user_input.py +21 -1
  112. classiq/interface/generator/arith/unary_ops.py +16 -25
  113. classiq/interface/generator/builtin_api_builder.py +0 -5
  114. classiq/interface/generator/chemistry_function_params.py +4 -4
  115. classiq/interface/generator/commuting_pauli_exponentiation.py +3 -1
  116. classiq/interface/generator/compiler_keywords.py +4 -0
  117. classiq/interface/generator/complex_type.py +3 -10
  118. classiq/interface/generator/constant.py +2 -3
  119. classiq/interface/generator/control_state.py +5 -3
  120. classiq/interface/generator/credit_risk_example/linear_gci.py +10 -3
  121. classiq/interface/generator/credit_risk_example/weighted_adder.py +14 -4
  122. classiq/interface/generator/expressions/atomic_expression_functions.py +5 -3
  123. classiq/interface/generator/expressions/evaluated_expression.py +18 -4
  124. classiq/interface/generator/expressions/expression.py +3 -5
  125. classiq/interface/generator/expressions/qmod_qscalar_proxy.py +33 -0
  126. classiq/interface/generator/expressions/sympy_supported_expressions.py +2 -1
  127. classiq/interface/generator/finance.py +1 -1
  128. classiq/interface/generator/function_params.py +7 -6
  129. classiq/interface/generator/functions/__init__.py +2 -2
  130. classiq/interface/generator/functions/builtins/__init__.py +15 -0
  131. classiq/interface/generator/functions/builtins/core_library/__init__.py +14 -0
  132. classiq/interface/generator/functions/builtins/core_library/chemistry_functions.py +0 -0
  133. classiq/interface/generator/functions/builtins/internal_operators.py +62 -0
  134. classiq/interface/generator/functions/{core_lib_declarations/quantum_functions/std_lib_functions.py → builtins/open_lib_functions.py} +612 -219
  135. classiq/interface/generator/functions/builtins/quantum_operators.py +37 -0
  136. classiq/interface/generator/functions/classical_type.py +2 -4
  137. classiq/interface/generator/functions/foreign_function_definition.py +12 -4
  138. classiq/interface/generator/functions/function_declaration.py +2 -2
  139. classiq/interface/generator/functions/function_implementation.py +8 -4
  140. classiq/interface/generator/functions/native_function_definition.py +4 -2
  141. classiq/interface/generator/functions/register.py +4 -2
  142. classiq/interface/generator/functions/register_mapping_data.py +14 -10
  143. classiq/interface/generator/generated_circuit_data.py +2 -2
  144. classiq/interface/generator/grover_operator.py +5 -3
  145. classiq/interface/generator/hamiltonian_evolution/suzuki_trotter.py +5 -1
  146. classiq/interface/generator/hardware/hardware_data.py +6 -4
  147. classiq/interface/generator/hardware_efficient_ansatz.py +25 -8
  148. classiq/interface/generator/hartree_fock.py +13 -3
  149. classiq/interface/generator/linear_pauli_rotations.py +3 -1
  150. classiq/interface/generator/mcu.py +5 -3
  151. classiq/interface/generator/mcx.py +7 -5
  152. classiq/interface/generator/model/classical_main_validator.py +1 -1
  153. classiq/interface/generator/model/constraints.py +2 -1
  154. classiq/interface/generator/model/model.py +12 -20
  155. classiq/interface/generator/model/preferences/preferences.py +4 -3
  156. classiq/interface/generator/oracles/custom_oracle.py +4 -2
  157. classiq/interface/generator/oracles/oracle_abc.py +2 -2
  158. classiq/interface/generator/qpe.py +6 -4
  159. classiq/interface/generator/qsvm.py +5 -8
  160. classiq/interface/generator/quantum_function_call.py +21 -16
  161. classiq/interface/generator/{generated_circuit.py → quantum_program.py} +10 -14
  162. classiq/interface/generator/range_types.py +3 -1
  163. classiq/interface/generator/slice_parsing_utils.py +8 -3
  164. classiq/interface/generator/standard_gates/controlled_standard_gates.py +4 -2
  165. classiq/interface/generator/state_preparation/metrics.py +2 -1
  166. classiq/interface/generator/state_preparation/state_preparation.py +7 -5
  167. classiq/interface/generator/state_propagator.py +16 -5
  168. classiq/interface/generator/types/builtin_struct_declarations/__init__.py +0 -1
  169. classiq/interface/generator/types/struct_declaration.py +10 -7
  170. classiq/interface/generator/ucc.py +6 -4
  171. classiq/interface/generator/unitary_gate.py +7 -3
  172. classiq/interface/generator/validations/flow_graph.py +6 -4
  173. classiq/interface/generator/validations/validator_functions.py +6 -4
  174. classiq/interface/hardware.py +2 -2
  175. classiq/interface/helpers/custom_encoders.py +3 -0
  176. classiq/interface/helpers/pydantic_model_helpers.py +0 -6
  177. classiq/interface/helpers/validation_helpers.py +1 -1
  178. classiq/interface/helpers/versioned_model.py +4 -1
  179. classiq/interface/ide/show.py +2 -2
  180. classiq/interface/jobs.py +72 -3
  181. classiq/interface/model/bind_operation.py +18 -11
  182. classiq/interface/model/call_synthesis_data.py +68 -0
  183. classiq/interface/model/classical_if.py +13 -0
  184. classiq/interface/model/classical_parameter_declaration.py +2 -3
  185. classiq/interface/model/control.py +16 -0
  186. classiq/interface/model/handle_binding.py +3 -2
  187. classiq/interface/model/inplace_binary_operation.py +2 -2
  188. classiq/interface/model/invert.py +10 -0
  189. classiq/interface/model/model.py +29 -22
  190. classiq/interface/model/native_function_definition.py +3 -5
  191. classiq/interface/model/power.py +12 -0
  192. classiq/interface/model/quantum_expressions/amplitude_loading_operation.py +9 -4
  193. classiq/interface/model/quantum_expressions/control_state.py +2 -2
  194. classiq/interface/model/quantum_function_call.py +33 -142
  195. classiq/interface/model/quantum_function_declaration.py +8 -0
  196. classiq/interface/model/quantum_if_operation.py +4 -5
  197. classiq/interface/model/quantum_lambda_function.py +58 -0
  198. classiq/{quantum_register.py → interface/model/quantum_register.py} +17 -9
  199. classiq/interface/model/quantum_statement.py +3 -2
  200. classiq/interface/model/quantum_type.py +58 -59
  201. classiq/interface/model/quantum_variable_declaration.py +3 -3
  202. classiq/interface/model/repeat.py +13 -0
  203. classiq/interface/model/resolvers/function_call_resolver.py +26 -0
  204. classiq/interface/model/statement_block.py +49 -0
  205. classiq/interface/model/validations/handles_validator.py +16 -18
  206. classiq/interface/model/within_apply_operation.py +11 -0
  207. classiq/interface/pyomo_extension/pyomo_sympy_bimap.py +4 -1
  208. classiq/interface/server/routes.py +5 -4
  209. classiq/qmod/__init__.py +13 -6
  210. classiq/qmod/builtins/classical_execution_primitives.py +27 -36
  211. classiq/qmod/builtins/classical_functions.py +22 -12
  212. classiq/qmod/builtins/functions.py +272 -328
  213. classiq/qmod/builtins/operations.py +171 -35
  214. classiq/qmod/builtins/structs.py +15 -15
  215. classiq/qmod/cfunc.py +42 -0
  216. classiq/qmod/classical_function.py +6 -14
  217. classiq/qmod/declaration_inferrer.py +12 -21
  218. classiq/qmod/expression_query.py +23 -0
  219. classiq/qmod/model_state_container.py +2 -0
  220. classiq/qmod/native/__init__.py +0 -0
  221. classiq/qmod/native/expression_to_qmod.py +189 -0
  222. classiq/qmod/native/pretty_printer.py +340 -0
  223. classiq/qmod/qfunc.py +27 -0
  224. classiq/qmod/qmod_constant.py +100 -0
  225. classiq/qmod/qmod_parameter.py +36 -13
  226. classiq/qmod/qmod_struct.py +3 -3
  227. classiq/qmod/qmod_variable.py +148 -31
  228. classiq/qmod/quantum_callable.py +1 -0
  229. classiq/qmod/quantum_expandable.py +18 -19
  230. classiq/qmod/quantum_function.py +41 -8
  231. classiq/qmod/symbolic.py +48 -5
  232. classiq/qmod/symbolic_expr.py +9 -0
  233. classiq/qmod/utilities.py +13 -0
  234. classiq/qmod/write_qmod.py +39 -0
  235. {classiq-0.37.1.dist-info → classiq-0.39.0.dist-info}/METADATA +2 -1
  236. {classiq-0.37.1.dist-info → classiq-0.39.0.dist-info}/RECORD +244 -225
  237. {classiq-0.37.1.dist-info → classiq-0.39.0.dist-info}/WHEEL +1 -1
  238. classiq/applications/benchmarking/__init__.py +0 -9
  239. classiq/applications/benchmarking/mirror_benchmarking.py +0 -67
  240. classiq/applications/numpy_utils.py +0 -37
  241. classiq/applications_model_constructors/__init__.py +0 -17
  242. classiq/applications_model_constructors/combinatorial_optimization_model_constructor.py +0 -178
  243. classiq/applications_model_constructors/libraries/qmci_library.py +0 -109
  244. classiq/builtin_functions/__init__.py +0 -43
  245. classiq/builtin_functions/amplitude_loading.py +0 -3
  246. classiq/builtin_functions/binary_ops.py +0 -1
  247. classiq/builtin_functions/exponentiation.py +0 -5
  248. classiq/builtin_functions/qpe.py +0 -4
  249. classiq/builtin_functions/qsvm.py +0 -7
  250. classiq/builtin_functions/range_types.py +0 -5
  251. classiq/builtin_functions/standard_gates.py +0 -1
  252. classiq/builtin_functions/state_preparation.py +0 -6
  253. classiq/builtin_functions/suzuki_trotter.py +0 -3
  254. classiq/interface/generator/expressions/qmod_qnum_proxy.py +0 -22
  255. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/__init__.py +0 -18
  256. classiq/interface/generator/functions/core_lib_declarations/quantum_operators.py +0 -169
  257. classiq/interface/generator/types/builtin_struct_declarations/qaoa_declarations.py +0 -23
  258. classiq/interface/generator/types/combinatorial_problem.py +0 -26
  259. classiq/interface/model/numeric_reinterpretation.py +0 -25
  260. classiq/interface/model/operator_synthesis_data.py +0 -48
  261. classiq/model/__init__.py +0 -14
  262. classiq/model/composite_function_generator.py +0 -33
  263. classiq/model/function_handler.py +0 -466
  264. classiq/model/function_handler.pyi +0 -152
  265. classiq/model/logic_flow.py +0 -149
  266. classiq/model/logic_flow_change_handler.py +0 -71
  267. classiq/model/model.py +0 -246
  268. classiq/quantum_functions/__init__.py +0 -17
  269. classiq/quantum_functions/annotation_parser.py +0 -207
  270. classiq/quantum_functions/decorators.py +0 -22
  271. classiq/quantum_functions/function_library.py +0 -181
  272. classiq/quantum_functions/function_parser.py +0 -74
  273. classiq/quantum_functions/quantum_function.py +0 -236
  274. /classiq/{applications_model_constructors/libraries → applications/combinatorial_helpers}/__init__.py +0 -0
  275. /classiq/{interface/generator/functions/core_lib_declarations → applications/combinatorial_helpers/arithmetic}/__init__.py +0 -0
  276. /classiq/{interface/generator/functions/core_lib_declarations/quantum_functions/chemistry_functions.py → applications/combinatorial_helpers/pauli_helpers/__init__.py} +0 -0
  277. /classiq/{applications_model_constructors → applications}/libraries/ampltitude_estimation_library.py +0 -0
  278. /classiq/{applications_model_constructors → applications/qsvm}/qsvm_model_constructor.py +0 -0
  279. /classiq/interface/generator/functions/{core_lib_declarations/quantum_functions → builtins/core_library}/atomic_quantum_functions.py +0 -0
  280. /classiq/interface/generator/functions/{core_lib_declarations/quantum_functions → builtins/core_library}/exponentiation_functions.py +0 -0
@@ -1,169 +0,0 @@
1
- from classiq.interface.generator.expressions.expression import Expression
2
- from classiq.interface.generator.functions.classical_type import Bool, Integer
3
- from classiq.interface.generator.functions.port_declaration import (
4
- PortDeclarationDirection,
5
- )
6
- from classiq.interface.helpers.pydantic_model_helpers import nameables_to_dict
7
- from classiq.interface.model.port_declaration import PortDeclaration
8
- from classiq.interface.model.quantum_function_declaration import (
9
- QuantumFunctionDeclaration,
10
- QuantumOperandDeclaration,
11
- )
12
-
13
- REPEAT_OPERATOR = QuantumFunctionDeclaration(
14
- name="repeat",
15
- param_decls={"count": Integer()},
16
- operand_declarations={
17
- "iteration": QuantumOperandDeclaration(
18
- name="iteration", param_decls={"index": Integer()}
19
- )
20
- },
21
- )
22
-
23
- OPERAND_FIELD_NAME = "operand"
24
- CTRL_FIELD_NAME = "ctrl"
25
-
26
-
27
- INVERT_OPERATOR = QuantumFunctionDeclaration(
28
- name="invert",
29
- operand_declarations={
30
- OPERAND_FIELD_NAME: QuantumOperandDeclaration(name=OPERAND_FIELD_NAME)
31
- },
32
- )
33
-
34
-
35
- CONTROL_OPERATOR = QuantumFunctionDeclaration(
36
- name="control",
37
- port_declarations={
38
- CTRL_FIELD_NAME: PortDeclaration(
39
- name=CTRL_FIELD_NAME,
40
- direction=PortDeclarationDirection.Inout,
41
- )
42
- },
43
- operand_declarations={
44
- OPERAND_FIELD_NAME: QuantumOperandDeclaration(name=OPERAND_FIELD_NAME)
45
- },
46
- )
47
-
48
- IF_OPERATOR = QuantumFunctionDeclaration(
49
- name="if",
50
- param_decls={"condition": Bool()},
51
- operand_declarations={
52
- "then": QuantumOperandDeclaration(name="then"),
53
- "else": QuantumOperandDeclaration(name="else"),
54
- },
55
- )
56
-
57
- SWITCH_OPERATOR = QuantumFunctionDeclaration(
58
- name="switch",
59
- param_decls={"selector": Integer()},
60
- operand_declarations={
61
- "cases": QuantumOperandDeclaration(
62
- name="cases",
63
- is_list=True,
64
- )
65
- },
66
- )
67
-
68
-
69
- JOIN_OPERATOR = QuantumFunctionDeclaration(
70
- name="join",
71
- port_declarations={
72
- "in1": PortDeclaration(name="in1", direction="input"),
73
- "in2": PortDeclaration(name="in2", direction="input"),
74
- "out": PortDeclaration(
75
- name="out",
76
- direction="output",
77
- size=Expression(expr="len(in1)+len(in2)"),
78
- ),
79
- },
80
- )
81
-
82
-
83
- SPLIT_OPERATOR = QuantumFunctionDeclaration(
84
- name="split",
85
- param_decls={"out1_size": Integer(), "out2_size": Integer()},
86
- port_declarations={
87
- "in": PortDeclaration(
88
- name="in",
89
- direction="input",
90
- size=Expression(expr="out1_size+out2_size"),
91
- ),
92
- "out1": PortDeclaration(
93
- name="out1", direction="output", size=Expression(expr="out1_size")
94
- ),
95
- "out2": PortDeclaration(
96
- name="out2", direction="output", size=Expression(expr="out2_size")
97
- ),
98
- },
99
- )
100
-
101
-
102
- PERMUTE_OPERATOR = QuantumFunctionDeclaration(
103
- name="permute",
104
- operand_declarations={
105
- "functions": QuantumOperandDeclaration(
106
- name="functions",
107
- is_list=True,
108
- )
109
- },
110
- )
111
-
112
-
113
- POWER_OPERATOR = QuantumFunctionDeclaration(
114
- name="power",
115
- param_decls={"power": Integer()},
116
- operand_declarations={
117
- OPERAND_FIELD_NAME: QuantumOperandDeclaration(name=OPERAND_FIELD_NAME)
118
- },
119
- )
120
-
121
- APPLY = QuantumFunctionDeclaration(
122
- name="apply",
123
- operand_declarations={
124
- OPERAND_FIELD_NAME: QuantumOperandDeclaration(
125
- name=OPERAND_FIELD_NAME,
126
- )
127
- },
128
- )
129
-
130
-
131
- COMPUTE = QuantumFunctionDeclaration(
132
- name="compute",
133
- operand_declarations={
134
- OPERAND_FIELD_NAME: QuantumOperandDeclaration(
135
- name=OPERAND_FIELD_NAME,
136
- )
137
- },
138
- )
139
-
140
-
141
- UNCOMPUTE = QuantumFunctionDeclaration(
142
- name="uncompute",
143
- operand_declarations={
144
- OPERAND_FIELD_NAME: QuantumOperandDeclaration(
145
- name=OPERAND_FIELD_NAME,
146
- )
147
- },
148
- )
149
-
150
-
151
- BUILTIN_QUANTUM_OPERATOR_LIST = [
152
- REPEAT_OPERATOR,
153
- INVERT_OPERATOR,
154
- CONTROL_OPERATOR,
155
- IF_OPERATOR,
156
- SWITCH_OPERATOR,
157
- JOIN_OPERATOR,
158
- SPLIT_OPERATOR,
159
- PERMUTE_OPERATOR,
160
- POWER_OPERATOR,
161
- APPLY,
162
- COMPUTE,
163
- UNCOMPUTE,
164
- ]
165
-
166
-
167
- QuantumFunctionDeclaration.BUILTIN_FUNCTION_DECLARATIONS.update(
168
- nameables_to_dict(BUILTIN_QUANTUM_OPERATOR_LIST)
169
- )
@@ -1,23 +0,0 @@
1
- from classiq.interface.generator.functions.classical_function_declaration import (
2
- ClassicalFunctionDeclaration,
3
- )
4
- from classiq.interface.generator.functions.classical_type import (
5
- ClassicalList,
6
- Integer,
7
- Real,
8
- Struct,
9
- )
10
- from classiq.interface.helpers.pydantic_model_helpers import nameables_to_dict
11
-
12
- COMPUTE_QAOA_INITIAL_POINT = ClassicalFunctionDeclaration(
13
- name="compute_qaoa_initial_point",
14
- param_decls={
15
- "hamiltonian": ClassicalList(element_type=Struct(name="PauliTerm")),
16
- "repetitions": Integer(),
17
- },
18
- return_type=ClassicalList(element_type=Real()),
19
- )
20
-
21
- ClassicalFunctionDeclaration.FOREIGN_FUNCTION_DECLARATIONS.update(
22
- nameables_to_dict([COMPUTE_QAOA_INITIAL_POINT])
23
- )
@@ -1,26 +0,0 @@
1
- from enum import Enum
2
- from typing import List
3
-
4
- import pydantic
5
-
6
- from classiq.interface.generator.expressions.expression import Expression
7
- from classiq.interface.generator.types.struct_declaration import StructDeclaration
8
-
9
-
10
- class ObjectiveType(Enum):
11
- Min = "Min"
12
- Max = "Max"
13
-
14
-
15
- class CombinatorialOptimizationStructDeclaration(StructDeclaration):
16
- variable_lower_bound: int = pydantic.Field(default=0)
17
- variable_upper_bound: int = pydantic.Field(default=1)
18
- constraints: List[Expression] = pydantic.Field(
19
- default_factory=list, description="List of constraint expressions"
20
- )
21
- objective_type: ObjectiveType = pydantic.Field(
22
- description="Specify whether the optimization problem is Min or Max"
23
- )
24
- objective_function: Expression = pydantic.Field(
25
- description="The expression to optimize, according to the objective type"
26
- )
@@ -1,25 +0,0 @@
1
- from typing import Mapping
2
-
3
- import pydantic
4
-
5
- from classiq.interface.generator.expressions.expression import Expression
6
- from classiq.interface.model.handle_binding import HandleBinding
7
- from classiq.interface.model.quantum_statement import QuantumOperation
8
-
9
- from classiq.exceptions import ClassiqValueError
10
-
11
-
12
- class NumericReinterpretationOperation(QuantumOperation):
13
- target: HandleBinding
14
- fraction_digits: Expression
15
- is_signed: Expression
16
-
17
- @property
18
- def wiring_inouts(self) -> Mapping[str, HandleBinding]:
19
- return {"target": self.target}
20
-
21
- @pydantic.validator("target")
22
- def validate_handle(cls, handle: HandleBinding) -> HandleBinding:
23
- if not handle.is_bindable():
24
- raise ClassiqValueError(f"Cannot bind '{handle}'") # noqa: B907
25
- return handle
@@ -1,48 +0,0 @@
1
- from typing import Any, Dict, Optional
2
-
3
- from classiq.interface.generator.control_state import ControlState
4
-
5
-
6
- class OperatorSynthesisData:
7
- @property
8
- def call_kwargs(self) -> Dict[str, Any]:
9
- return dict()
10
-
11
-
12
- class PowerOperatorSynthesisData(OperatorSynthesisData):
13
- def __init__(self, power: int) -> None:
14
- self._power = power
15
-
16
- @property
17
- def call_kwargs(self) -> Dict[str, Any]:
18
- return {"power": self._power}
19
-
20
-
21
- class InvertOperatorSynthesisData(OperatorSynthesisData):
22
- @property
23
- def call_kwargs(self) -> Dict[str, Any]:
24
- return {"is_inverse": True}
25
-
26
-
27
- class ControlOperatorSynthesisData(OperatorSynthesisData):
28
- _CTRL_VAR_NAME = "ctrl"
29
-
30
- def __init__(self, ctrl_size: int, ctrl_state: Optional[str] = None) -> None:
31
- ctrl_state_kwargs = dict()
32
- if ctrl_state is not None:
33
- ctrl_state_kwargs["ctrl_state"] = ctrl_state
34
- self._ctrl_state = ControlState(
35
- name=self._CTRL_VAR_NAME, num_ctrl_qubits=ctrl_size, **ctrl_state_kwargs
36
- )
37
-
38
- @property
39
- def call_kwargs(self) -> Dict[str, Any]:
40
- return {
41
- "control_states": [self._ctrl_state],
42
- }
43
-
44
-
45
- class ComputeOperatorSynthesisData(OperatorSynthesisData):
46
- @property
47
- def call_kwargs(self) -> Dict[str, Any]:
48
- return {"should_control": False}
classiq/model/__init__.py DELETED
@@ -1,14 +0,0 @@
1
- from typing import List
2
-
3
- from classiq.interface.generator.model import * # noqa: F403
4
- from classiq.interface.generator.model import __all__ as _model_all
5
-
6
- from classiq.model.composite_function_generator import FunctionGenerator
7
- from classiq.model.model import Model
8
-
9
- __all__ = ["FunctionGenerator", "Model"]
10
- __all__.extend(_model_all)
11
-
12
-
13
- def __dir__() -> List[str]:
14
- return __all__
@@ -1,33 +0,0 @@
1
- from typing import List
2
-
3
- from classiq.interface.generator.function_params import PortDirection
4
- from classiq.interface.generator.functions import SynthesisNativeFunctionDefinition
5
- from classiq.interface.generator.quantum_function_call import (
6
- SynthesisQuantumFunctionCall,
7
- )
8
-
9
- from classiq.model import function_handler
10
- from classiq.quantum_functions.function_library import FunctionLibrary
11
-
12
-
13
- class FunctionGenerator(function_handler.FunctionHandler):
14
- def __init__(self, function_name: str) -> None:
15
- super().__init__()
16
- self._name = function_name
17
- self._logic_flow_list: List[SynthesisQuantumFunctionCall] = list()
18
-
19
- @property
20
- def _body(self) -> List[SynthesisQuantumFunctionCall]:
21
- return self._logic_flow_list
22
-
23
- def to_function_definition(self) -> SynthesisNativeFunctionDefinition:
24
- return SynthesisNativeFunctionDefinition(
25
- name=self._name,
26
- body=self._body,
27
- port_declarations=self._port_declarations,
28
- input_ports_wiring=self._external_port_wiring[PortDirection.Input],
29
- output_ports_wiring=self._external_port_wiring[PortDirection.Output],
30
- )
31
-
32
- def create_library(self) -> None:
33
- self.include_library(FunctionLibrary())