classiq 0.53.0__py3-none-any.whl → 0.55.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 (301) hide show
  1. classiq/__init__.py +1 -3
  2. classiq/_analyzer_extras/_ipywidgets_async_extension.py +2 -1
  3. classiq/_internals/__init__.py +0 -20
  4. classiq/_internals/api_wrapper.py +8 -8
  5. classiq/_internals/async_utils.py +1 -3
  6. classiq/_internals/authentication/auth0.py +5 -5
  7. classiq/_internals/authentication/device.py +5 -4
  8. classiq/_internals/authentication/password_manager.py +3 -3
  9. classiq/_internals/authentication/token_manager.py +3 -2
  10. classiq/_internals/client.py +10 -12
  11. classiq/_internals/config.py +2 -2
  12. classiq/_internals/jobs.py +7 -6
  13. classiq/_internals/type_validation.py +9 -9
  14. classiq/analyzer/__init__.py +1 -3
  15. classiq/analyzer/analyzer.py +8 -7
  16. classiq/analyzer/analyzer_utilities.py +8 -8
  17. classiq/analyzer/rb.py +11 -11
  18. classiq/applications/__init__.py +1 -3
  19. classiq/applications/chemistry/__init__.py +1 -3
  20. classiq/applications/chemistry/ansatz_parameters.py +4 -4
  21. classiq/applications/chemistry/chemistry_model_constructor.py +10 -9
  22. classiq/applications/combinatorial_helpers/combinatorial_problem_utils.py +26 -9
  23. classiq/applications/combinatorial_helpers/encoding_mapping.py +10 -10
  24. classiq/applications/combinatorial_helpers/encoding_utils.py +4 -4
  25. classiq/applications/combinatorial_helpers/memory.py +5 -7
  26. classiq/applications/combinatorial_helpers/optimization_model.py +43 -24
  27. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +4 -6
  28. classiq/applications/combinatorial_helpers/pyomo_utils.py +95 -24
  29. classiq/applications/combinatorial_helpers/sympy_utils.py +2 -2
  30. classiq/applications/combinatorial_helpers/transformations/encoding.py +8 -8
  31. classiq/applications/combinatorial_helpers/transformations/fixed_variables.py +5 -5
  32. classiq/applications/combinatorial_helpers/transformations/ising_converter.py +7 -9
  33. classiq/applications/combinatorial_helpers/transformations/penalty.py +1 -2
  34. classiq/applications/combinatorial_helpers/transformations/sign_seperation.py +1 -2
  35. classiq/applications/combinatorial_helpers/transformations/slack_variables.py +1 -2
  36. classiq/applications/combinatorial_optimization/__init__.py +1 -3
  37. classiq/applications/combinatorial_optimization/combinatorial_optimization_config.py +2 -2
  38. classiq/applications/combinatorial_optimization/examples/__init__.py +1 -3
  39. classiq/applications/finance/__init__.py +1 -3
  40. classiq/applications/grover/__init__.py +1 -3
  41. classiq/applications/grover/grover_model_constructor.py +7 -9
  42. classiq/applications/hamiltonian/pauli_decomposition.py +6 -6
  43. classiq/applications/qnn/__init__.py +1 -3
  44. classiq/applications/qnn/circuit_utils.py +5 -5
  45. classiq/applications/qnn/datasets/__init__.py +1 -3
  46. classiq/applications/qnn/datasets/dataset_base_classes.py +5 -4
  47. classiq/applications/qnn/datasets/dataset_parity.py +2 -2
  48. classiq/applications/qnn/gradients/simple_quantum_gradient.py +2 -1
  49. classiq/applications/qnn/qlayer.py +3 -3
  50. classiq/applications/qnn/torch_utils.py +2 -2
  51. classiq/applications/qnn/types.py +5 -5
  52. classiq/applications/qsvm/qsvm.py +1 -3
  53. classiq/applications/qsvm/qsvm_data_generation.py +3 -3
  54. classiq/applications/qsvm/qsvm_model_constructor.py +5 -5
  55. classiq/execution/__init__.py +1 -3
  56. classiq/execution/all_hardware_devices.py +1 -3
  57. classiq/execution/execution_session.py +16 -16
  58. classiq/execution/jobs.py +4 -4
  59. classiq/execution/qaoa.py +3 -3
  60. classiq/execution/qnn.py +3 -3
  61. classiq/executor.py +3 -3
  62. classiq/interface/_version.py +1 -1
  63. classiq/interface/analyzer/analysis_params.py +9 -10
  64. classiq/interface/analyzer/cytoscape_graph.py +5 -5
  65. classiq/interface/analyzer/result.py +17 -17
  66. classiq/interface/applications/qsvm.py +6 -10
  67. classiq/interface/backend/backend_preferences.py +4 -3
  68. classiq/interface/backend/ionq/ionq_quantum_program.py +4 -5
  69. classiq/interface/backend/pydantic_backend.py +1 -2
  70. classiq/interface/chemistry/fermionic_operator.py +5 -5
  71. classiq/interface/chemistry/ground_state_problem.py +7 -8
  72. classiq/interface/chemistry/molecule.py +4 -4
  73. classiq/interface/chemistry/operator.py +11 -13
  74. classiq/interface/combinatorial_optimization/examples/ascending_sequence.py +1 -3
  75. classiq/interface/combinatorial_optimization/examples/integer_portfolio_optimization.py +2 -4
  76. classiq/interface/combinatorial_optimization/examples/knapsack.py +3 -3
  77. classiq/interface/combinatorial_optimization/examples/mht.py +2 -3
  78. classiq/interface/combinatorial_optimization/examples/portfolio_variations.py +2 -2
  79. classiq/interface/combinatorial_optimization/examples/set_cover.py +1 -2
  80. classiq/interface/combinatorial_optimization/mht_qaoa_input.py +5 -7
  81. classiq/interface/combinatorial_optimization/optimization_problem.py +2 -2
  82. classiq/interface/combinatorial_optimization/result.py +1 -3
  83. classiq/interface/debug_info/debug_info.py +8 -7
  84. classiq/interface/exceptions.py +8 -6
  85. classiq/interface/execution/jobs.py +2 -2
  86. classiq/interface/execution/primitives.py +3 -3
  87. classiq/interface/executor/aws_execution_cost.py +4 -4
  88. classiq/interface/executor/execution_request.py +2 -3
  89. classiq/interface/executor/execution_result.py +3 -3
  90. classiq/interface/executor/iqae_result.py +3 -5
  91. classiq/interface/executor/optimizer_preferences.py +2 -2
  92. classiq/interface/executor/quantum_code.py +6 -6
  93. classiq/interface/executor/register_initialization.py +2 -4
  94. classiq/interface/executor/result.py +23 -27
  95. classiq/interface/executor/vqe_result.py +8 -8
  96. classiq/interface/finance/function_input.py +2 -2
  97. classiq/interface/finance/gaussian_model_input.py +5 -5
  98. classiq/interface/finance/log_normal_model_input.py +2 -2
  99. classiq/interface/finance/model_input.py +1 -2
  100. classiq/interface/generator/adjacency.py +1 -3
  101. classiq/interface/generator/ansatz_library.py +4 -4
  102. classiq/interface/generator/application_apis/finance_declarations.py +1 -1
  103. classiq/interface/generator/arith/argument_utils.py +3 -3
  104. classiq/interface/generator/arith/arithmetic.py +7 -7
  105. classiq/interface/generator/arith/arithmetic_arg_type_validator.py +5 -5
  106. classiq/interface/generator/arith/arithmetic_expression_abc.py +11 -11
  107. classiq/interface/generator/arith/arithmetic_expression_parser.py +8 -7
  108. classiq/interface/generator/arith/arithmetic_expression_validator.py +8 -8
  109. classiq/interface/generator/arith/arithmetic_operations.py +4 -3
  110. classiq/interface/generator/arith/arithmetic_param_getters.py +6 -6
  111. classiq/interface/generator/arith/arithmetic_result_builder.py +9 -9
  112. classiq/interface/generator/arith/ast_node_rewrite.py +2 -1
  113. classiq/interface/generator/arith/binary_ops.py +10 -13
  114. classiq/interface/generator/arith/extremum_operations.py +3 -2
  115. classiq/interface/generator/arith/logical_ops.py +7 -6
  116. classiq/interface/generator/arith/number_utils.py +4 -4
  117. classiq/interface/generator/arith/register_user_input.py +4 -4
  118. classiq/interface/generator/arith/unary_ops.py +2 -1
  119. classiq/interface/generator/builtin_api_builder.py +2 -1
  120. classiq/interface/generator/circuit_code/circuit_code.py +4 -4
  121. classiq/interface/generator/circuit_code/types_and_constants.py +3 -5
  122. classiq/interface/generator/complex_type.py +1 -2
  123. classiq/interface/generator/control_state.py +2 -2
  124. classiq/interface/generator/custom_ansatz.py +1 -3
  125. classiq/interface/generator/distance.py +3 -5
  126. classiq/interface/generator/excitations.py +3 -2
  127. classiq/interface/generator/expressions/enums/finance_functions.py +1 -3
  128. classiq/interface/generator/expressions/evaluated_expression.py +4 -3
  129. classiq/interface/generator/expressions/expression.py +4 -5
  130. classiq/interface/generator/expressions/expression_constants.py +4 -4
  131. classiq/interface/generator/expressions/qmod_qarray_proxy.py +2 -1
  132. classiq/interface/generator/expressions/qmod_qscalar_proxy.py +2 -1
  133. classiq/interface/generator/expressions/qmod_qstruct_proxy.py +2 -1
  134. classiq/interface/generator/expressions/qmod_sized_proxy.py +2 -1
  135. classiq/interface/generator/expressions/qmod_struct_instance.py +2 -1
  136. classiq/interface/generator/expressions/sympy_supported_expressions.py +11 -13
  137. classiq/interface/generator/finance.py +2 -2
  138. classiq/interface/generator/function_param_library.py +6 -6
  139. classiq/interface/generator/function_params.py +13 -19
  140. classiq/interface/generator/functions/builtins/internal_operators.py +9 -1
  141. classiq/interface/generator/functions/classical_function_declaration.py +4 -3
  142. classiq/interface/generator/functions/classical_type.py +13 -13
  143. classiq/interface/generator/functions/concrete_types.py +1 -2
  144. classiq/interface/generator/functions/function_declaration.py +1 -1
  145. classiq/interface/generator/functions/qmod_python_interface.py +2 -1
  146. classiq/interface/generator/functions/type_name.py +3 -2
  147. classiq/interface/generator/generated_circuit_data.py +33 -22
  148. classiq/interface/generator/grover_diffuser.py +7 -7
  149. classiq/interface/generator/grover_operator.py +2 -2
  150. classiq/interface/generator/hardware/hardware_data.py +7 -6
  151. classiq/interface/generator/hardware_efficient_ansatz.py +8 -8
  152. classiq/interface/generator/identity.py +5 -6
  153. classiq/interface/generator/linear_pauli_rotations.py +6 -6
  154. classiq/interface/generator/mcu.py +2 -2
  155. classiq/interface/generator/mcx.py +6 -6
  156. classiq/interface/generator/model/__init__.py +1 -3
  157. classiq/interface/generator/model/constraints.py +2 -2
  158. classiq/interface/generator/model/model.py +5 -6
  159. classiq/interface/generator/model/preferences/preferences.py +11 -6
  160. classiq/interface/generator/model/quantum_register.py +6 -11
  161. classiq/interface/generator/oracles/arithmetic_oracle.py +1 -2
  162. classiq/interface/generator/oracles/custom_oracle.py +2 -2
  163. classiq/interface/generator/oracles/oracle_abc.py +6 -5
  164. classiq/interface/generator/partitioned_register.py +6 -5
  165. classiq/interface/generator/piecewise_linear_amplitude_loading.py +8 -7
  166. classiq/interface/generator/qpe.py +4 -4
  167. classiq/interface/generator/qsvm.py +3 -3
  168. classiq/interface/generator/quantum_function_call.py +24 -29
  169. classiq/interface/generator/quantum_program.py +9 -9
  170. classiq/interface/generator/register_role.py +2 -4
  171. classiq/interface/generator/slice_parsing_utils.py +4 -3
  172. classiq/interface/generator/standard_gates/standard_gates.py +3 -3
  173. classiq/interface/generator/state_preparation/bell_state_preparation.py +3 -3
  174. classiq/interface/generator/state_preparation/distributions.py +6 -5
  175. classiq/interface/generator/state_preparation/metrics.py +2 -4
  176. classiq/interface/generator/state_preparation/state_preparation.py +4 -4
  177. classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +3 -3
  178. classiq/interface/generator/transpiler_basis_gates.py +2 -2
  179. classiq/interface/generator/types/compilation_metadata.py +5 -0
  180. classiq/interface/generator/types/enum_declaration.py +2 -3
  181. classiq/interface/generator/types/qstruct_declaration.py +2 -1
  182. classiq/interface/generator/types/struct_declaration.py +3 -2
  183. classiq/interface/generator/ucc.py +2 -1
  184. classiq/interface/generator/unitary_gate.py +2 -2
  185. classiq/interface/generator/user_defined_function_params.py +1 -1
  186. classiq/interface/generator/validations/flow_graph.py +6 -5
  187. classiq/interface/generator/validations/validator_functions.py +3 -2
  188. classiq/interface/generator/visitor.py +9 -14
  189. classiq/interface/hardware.py +5 -6
  190. classiq/interface/helpers/custom_encoders.py +2 -2
  191. classiq/interface/helpers/custom_pydantic_types.py +8 -9
  192. classiq/interface/helpers/hashable_mixin.py +3 -2
  193. classiq/interface/helpers/hashable_pydantic_base_model.py +2 -1
  194. classiq/interface/helpers/pydantic_model_helpers.py +4 -3
  195. classiq/interface/helpers/validation_helpers.py +2 -2
  196. classiq/interface/ide/ide_data.py +11 -15
  197. classiq/interface/ide/visual_model.py +22 -22
  198. classiq/interface/jobs.py +2 -2
  199. classiq/interface/model/bind_operation.py +5 -4
  200. classiq/interface/model/classical_parameter_declaration.py +2 -2
  201. classiq/interface/model/control.py +22 -1
  202. classiq/interface/model/handle_binding.py +3 -2
  203. classiq/interface/model/inplace_binary_operation.py +2 -1
  204. classiq/interface/model/model.py +16 -11
  205. classiq/interface/model/native_function_definition.py +1 -1
  206. classiq/interface/model/port_declaration.py +2 -2
  207. classiq/interface/model/quantum_expressions/amplitude_loading_operation.py +3 -2
  208. classiq/interface/model/quantum_expressions/arithmetic_operation.py +4 -27
  209. classiq/interface/model/quantum_expressions/quantum_expression.py +8 -7
  210. classiq/interface/model/quantum_function_call.py +9 -14
  211. classiq/interface/model/quantum_function_declaration.py +10 -12
  212. classiq/interface/model/quantum_lambda_function.py +3 -16
  213. classiq/interface/model/quantum_statement.py +7 -3
  214. classiq/interface/model/quantum_type.py +5 -5
  215. classiq/interface/model/statement_block.py +2 -3
  216. classiq/interface/model/validation_handle.py +5 -4
  217. classiq/interface/server/global_versions.py +3 -3
  218. classiq/model_expansions/atomic_expression_functions_defs.py +3 -2
  219. classiq/model_expansions/capturing/captured_var_manager.py +4 -6
  220. classiq/model_expansions/capturing/propagated_var_stack.py +7 -7
  221. classiq/model_expansions/closure.py +83 -12
  222. classiq/model_expansions/evaluators/arg_type_match.py +3 -2
  223. classiq/model_expansions/evaluators/argument_types.py +3 -3
  224. classiq/model_expansions/evaluators/control.py +3 -3
  225. classiq/model_expansions/evaluators/parameter_types.py +7 -7
  226. classiq/model_expansions/evaluators/quantum_type_utils.py +2 -1
  227. classiq/model_expansions/evaluators/type_type_match.py +1 -1
  228. classiq/model_expansions/expression_evaluator.py +10 -9
  229. classiq/model_expansions/expression_renamer.py +6 -6
  230. classiq/model_expansions/function_builder.py +13 -12
  231. classiq/model_expansions/generative_functions.py +5 -4
  232. classiq/model_expansions/interpreter.py +20 -11
  233. classiq/model_expansions/model_tables.py +14 -14
  234. classiq/model_expansions/quantum_operations/bind.py +2 -4
  235. classiq/model_expansions/quantum_operations/classicalif.py +1 -1
  236. classiq/model_expansions/quantum_operations/control.py +81 -24
  237. classiq/model_expansions/quantum_operations/emitter.py +33 -20
  238. classiq/model_expansions/quantum_operations/expression_operation.py +47 -16
  239. classiq/model_expansions/quantum_operations/inplace_binary_operation.py +160 -35
  240. classiq/model_expansions/quantum_operations/phase.py +6 -6
  241. classiq/model_expansions/quantum_operations/quantum_assignment_operation.py +28 -31
  242. classiq/model_expansions/quantum_operations/quantum_function_call.py +9 -0
  243. classiq/model_expansions/quantum_operations/repeat.py +1 -3
  244. classiq/model_expansions/quantum_operations/within_apply.py +0 -16
  245. classiq/model_expansions/scope.py +11 -10
  246. classiq/model_expansions/scope_initialization.py +5 -5
  247. classiq/model_expansions/sympy_conversion/expression_to_sympy.py +6 -6
  248. classiq/model_expansions/sympy_conversion/sympy_to_python.py +2 -2
  249. classiq/model_expansions/visitors/variable_references.py +5 -4
  250. classiq/qmod/builtins/classical_execution_primitives.py +9 -9
  251. classiq/qmod/builtins/functions/__init__.py +72 -55
  252. classiq/qmod/builtins/functions/amplitude_estimation.py +4 -1
  253. classiq/qmod/builtins/functions/arithmetic.py +14 -1
  254. classiq/qmod/builtins/functions/discrete_sine_cosine_transform.py +86 -6
  255. classiq/qmod/builtins/functions/grover.py +41 -45
  256. classiq/qmod/builtins/functions/hea.py +60 -4
  257. classiq/qmod/builtins/functions/linear_pauli_rotation.py +26 -4
  258. classiq/qmod/builtins/functions/modular_exponentiation.py +90 -29
  259. classiq/qmod/builtins/functions/operators.py +1 -1
  260. classiq/qmod/builtins/functions/qaoa_penalty.py +14 -5
  261. classiq/qmod/builtins/functions/qft_functions.py +57 -0
  262. classiq/qmod/builtins/functions/qpe.py +20 -4
  263. classiq/qmod/builtins/functions/qsvt.py +49 -4
  264. classiq/qmod/builtins/functions/standard_gates.py +4 -4
  265. classiq/qmod/builtins/functions/state_preparation.py +92 -10
  266. classiq/qmod/builtins/functions/swap_test.py +7 -1
  267. classiq/qmod/builtins/functions/utility_functions.py +43 -0
  268. classiq/qmod/builtins/functions/variational.py +18 -2
  269. classiq/qmod/builtins/operations.py +117 -22
  270. classiq/qmod/cfunc.py +2 -2
  271. classiq/qmod/classical_function.py +3 -7
  272. classiq/qmod/create_model_function.py +16 -17
  273. classiq/qmod/declaration_inferrer.py +7 -10
  274. classiq/qmod/expression_query.py +3 -3
  275. classiq/qmod/generative.py +2 -1
  276. classiq/qmod/model_state_container.py +10 -8
  277. classiq/qmod/native/__init__.py +1 -3
  278. classiq/qmod/native/expression_to_qmod.py +9 -8
  279. classiq/qmod/native/pretty_printer.py +12 -6
  280. classiq/qmod/pretty_print/__init__.py +1 -3
  281. classiq/qmod/pretty_print/expression_to_python.py +13 -12
  282. classiq/qmod/pretty_print/pretty_printer.py +38 -23
  283. classiq/qmod/python_classical_type.py +8 -4
  284. classiq/qmod/qfunc.py +4 -4
  285. classiq/qmod/qmod_variable.py +11 -10
  286. classiq/qmod/quantum_expandable.py +12 -15
  287. classiq/qmod/quantum_function.py +35 -22
  288. classiq/qmod/semantics/annotation.py +1 -1
  289. classiq/qmod/semantics/error_manager.py +8 -7
  290. classiq/qmod/semantics/static_semantics_visitor.py +19 -24
  291. classiq/qmod/semantics/validation/constants_validation.py +1 -1
  292. classiq/qmod/semantics/validation/func_call_validation.py +2 -2
  293. classiq/qmod/semantics/validation/main_validation.py +33 -0
  294. classiq/qmod/semantics/validation/types_validation.py +2 -1
  295. classiq/qmod/symbolic.py +5 -8
  296. classiq/qmod/symbolic_type.py +2 -2
  297. classiq/qmod/synthesize_separately.py +1 -2
  298. {classiq-0.53.0.dist-info → classiq-0.55.0.dist-info}/METADATA +1 -1
  299. {classiq-0.53.0.dist-info → classiq-0.55.0.dist-info}/RECORD +300 -297
  300. classiq/qmod/builtins/functions/qft.py +0 -23
  301. {classiq-0.53.0.dist-info → classiq-0.55.0.dist-info}/WHEEL +0 -0
@@ -1,9 +1,7 @@
1
+ from collections.abc import Collection
1
2
  from functools import reduce
2
3
  from typing import (
3
4
  Any,
4
- Collection,
5
- Dict,
6
- List,
7
5
  Optional,
8
6
  Union,
9
7
  cast,
@@ -108,7 +106,7 @@ class PauliOperator(HashablePydanticBaseModel, VersionedModel):
108
106
 
109
107
  @pydantic.model_validator(mode="before")
110
108
  @classmethod
111
- def _validate_hermitianity(cls, values: Dict[str, Any]) -> Dict[str, Any]:
109
+ def _validate_hermitianity(cls, values: dict[str, Any]) -> dict[str, Any]:
112
110
  pauli_list = values.get("pauli_list", [])
113
111
  if PauliOperator.check_if_hermitian(pauli_list):
114
112
  values["is_hermitian"] = all(
@@ -153,7 +151,7 @@ class PauliOperator(HashablePydanticBaseModel, VersionedModel):
153
151
  )
154
152
 
155
153
  @staticmethod
156
- def _is_sub_pauli_commutative(qubit_pauli_string: Union[List[str], str]) -> bool:
154
+ def _is_sub_pauli_commutative(qubit_pauli_string: Union[list[str], str]) -> bool:
157
155
  unique_paulis = set(qubit_pauli_string) - {"I"}
158
156
  return len(unique_paulis) <= 1
159
157
 
@@ -241,8 +239,8 @@ class PauliOperator(HashablePydanticBaseModel, VersionedModel):
241
239
  @classmethod
242
240
  def from_unzipped_lists(
243
241
  cls,
244
- operators: List[List["Pauli"]],
245
- coefficients: Optional[List[complex]] = None,
242
+ operators: list[list["Pauli"]],
243
+ coefficients: Optional[list[complex]] = None,
246
244
  ) -> "PauliOperator":
247
245
  if coefficients is None:
248
246
  coefficients = [1] * len(operators)
@@ -316,7 +314,7 @@ class PauliOperatorV1(HashablePydanticBaseModel):
316
314
 
317
315
  @pydantic.model_validator(mode="before")
318
316
  @classmethod
319
- def _validate_hermitianity(cls, v: Dict[str, Any]) -> Dict[str, Any]:
317
+ def _validate_hermitianity(cls, v: dict[str, Any]) -> dict[str, Any]:
320
318
  pauli_list = cast(PydanticPauliList, v.get("pauli_list"))
321
319
  if all(isinstance(summand[1], complex) for summand in pauli_list):
322
320
  v["is_hermitian"] = all(
@@ -361,7 +359,7 @@ class PauliOperatorV1(HashablePydanticBaseModel):
361
359
  )
362
360
 
363
361
  @staticmethod
364
- def _is_sub_pauli_commutative(qubit_pauli_string: Union[List[str], str]) -> bool:
362
+ def _is_sub_pauli_commutative(qubit_pauli_string: Union[list[str], str]) -> bool:
365
363
  unique_paulis = set(qubit_pauli_string) - {"I"}
366
364
  return len(unique_paulis) <= 1
367
365
 
@@ -445,8 +443,8 @@ class PauliOperatorV1(HashablePydanticBaseModel):
445
443
  @classmethod
446
444
  def from_unzipped_lists(
447
445
  cls,
448
- operators: List[List["Pauli"]],
449
- coefficients: Optional[List[complex]] = None,
446
+ operators: list[list["Pauli"]],
447
+ coefficients: Optional[list[complex]] = None,
450
448
  ) -> "PauliOperatorV1":
451
449
  if coefficients is None:
452
450
  coefficients = [1] * len(operators)
@@ -505,9 +503,9 @@ def validate_operator_has_no_complex_coefficients(
505
503
  return pauli_operator
506
504
 
507
505
 
508
- def pauli_integers_to_str(paulis: List[Pauli]) -> str:
506
+ def pauli_integers_to_str(paulis: list[Pauli]) -> str:
509
507
  return "".join([Pauli(pauli).name for pauli in paulis])
510
508
 
511
509
 
512
510
  class PauliOperators(VersionedModel):
513
- operators: List[PauliOperator]
511
+ operators: list[PauliOperator]
@@ -1,10 +1,8 @@
1
- from typing import List
2
-
3
1
  import numpy as np
4
2
  import pyomo.core as pyo
5
3
 
6
4
 
7
- def ascending_sequence(coeffs: List[int], bound: int) -> pyo.ConcreteModel:
5
+ def ascending_sequence(coeffs: list[int], bound: int) -> pyo.ConcreteModel:
8
6
  model = pyo.ConcreteModel()
9
7
  model.x = pyo.Var(
10
8
  range(len(coeffs)), domain=pyo.NonNegativeIntegers, bounds=(0, bound)
@@ -1,16 +1,14 @@
1
- from typing import List, Tuple
2
-
3
1
  import numpy as np
4
2
  import pyomo.core as pyo
5
3
 
6
4
 
7
5
  def integer_portfolio_optimization(
8
- covariances: np.ndarray, returns: np.ndarray, upper_bounds: List[int]
6
+ covariances: np.ndarray, returns: np.ndarray, upper_bounds: list[int]
9
7
  ) -> pyo.ConcreteModel:
10
8
  model = pyo.ConcreteModel()
11
9
  num_assets = len(returns)
12
10
 
13
- def bounds(model: pyo.ConcreteModel, i: int) -> Tuple[int, int]:
11
+ def bounds(model: pyo.ConcreteModel, i: int) -> tuple[int, int]:
14
12
  return 0, upper_bounds[i]
15
13
 
16
14
  model.x = pyo.Var(range(num_assets), domain=pyo.NonNegativeIntegers, bounds=bounds)
@@ -1,13 +1,13 @@
1
- from typing import List, Optional
1
+ from typing import Optional
2
2
 
3
3
  import numpy as np
4
4
  import pyomo.core as pyo
5
5
 
6
6
 
7
7
  def knapsack(
8
- values: List[int],
8
+ values: list[int],
9
9
  upper_bound: int,
10
- weights: Optional[List[int]] = None,
10
+ weights: Optional[list[int]] = None,
11
11
  max_weight: Optional[int] = None,
12
12
  ) -> pyo.ConcreteModel:
13
13
  model = pyo.ConcreteModel()
@@ -1,13 +1,12 @@
1
1
  import math
2
- from typing import Dict, Tuple
3
2
 
4
3
  import networkx as nx
5
4
  import pyomo.core as pyo
6
5
  import pyomo.core.expr.numeric_expr as pyo_expr
7
6
 
8
7
  Node = int
9
- Edge = Tuple[Node, Node]
10
- Pubo = Dict[Tuple[Edge, ...], float]
8
+ Edge = tuple[Node, Node]
9
+ Pubo = dict[tuple[Edge, ...], float]
11
10
 
12
11
 
13
12
  def build_mht_pyomo_model(
@@ -1,9 +1,9 @@
1
- from typing import List, Tuple, Union
1
+ from typing import Union
2
2
 
3
3
  import numpy as np
4
4
  import pyomo.core as pyo
5
5
 
6
- BoundsList = List[Union[Tuple[int, int], int]]
6
+ BoundsList = list[Union[tuple[int, int], int]]
7
7
 
8
8
 
9
9
  def portfolio_optimization_binary(
@@ -1,11 +1,10 @@
1
1
  import itertools
2
- from typing import List
3
2
 
4
3
  import pyomo.core as pyo
5
4
  import pyomo.core.expr.numeric_expr as pyo_expr
6
5
 
7
6
 
8
- def set_cover(sub_sets: List[List[int]]) -> pyo.ConcreteModel:
7
+ def set_cover(sub_sets: list[list[int]]) -> pyo.ConcreteModel:
9
8
  entire_set = set(itertools.chain(*sub_sets))
10
9
  n = max(entire_set)
11
10
  num_sets = len(sub_sets)
@@ -1,5 +1,3 @@
1
- from typing import List
2
-
3
1
  import more_itertools
4
2
  import numpy as np
5
3
  import pydantic
@@ -24,7 +22,7 @@ class MhtQaoaInput(BaseModel):
24
22
  reps: pydantic.PositiveInt = pydantic.Field(
25
23
  default=3, description="Number of QAOA layers."
26
24
  )
27
- plot_list: List[PlotData] = pydantic.Field(
25
+ plot_list: list[PlotData] = pydantic.Field(
28
26
  description="The list of (x,y,t) plots of the MHT problem."
29
27
  )
30
28
  misdetection_maximum_time_steps: pydantic.NonNegativeInt = pydantic.Field(
@@ -56,8 +54,8 @@ class MhtQaoaInput(BaseModel):
56
54
  @pydantic.field_validator("plot_list")
57
55
  @classmethod
58
56
  def round_plot_list_times_and_validate(
59
- cls, plot_list: List[PlotData]
60
- ) -> List[PlotData]:
57
+ cls, plot_list: list[PlotData]
58
+ ) -> list[PlotData]:
61
59
  MhtQaoaInput._check_all_ids_are_distinct(plot_list)
62
60
  MhtQaoaInput._round_to_tolerance_decimals(plot_list)
63
61
 
@@ -75,11 +73,11 @@ class MhtQaoaInput(BaseModel):
75
73
  return plot_list
76
74
 
77
75
  @staticmethod
78
- def _round_to_tolerance_decimals(plot_list: List[PlotData]) -> None:
76
+ def _round_to_tolerance_decimals(plot_list: list[PlotData]) -> None:
79
77
  for plot in plot_list:
80
78
  plot.t = np.round(plot.t, decimals=_TOLERANCE_DECIMALS)
81
79
 
82
80
  @staticmethod
83
- def _check_all_ids_are_distinct(plot_list: List[PlotData]) -> None:
81
+ def _check_all_ids_are_distinct(plot_list: list[PlotData]) -> None:
84
82
  if not more_itertools.all_unique(plot.plot_id for plot in plot_list):
85
83
  raise ClassiqValueError("Plot IDs should be unique.")
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict
1
+ from typing import Any
2
2
 
3
3
  import pydantic
4
4
  from pydantic import BaseModel
@@ -14,4 +14,4 @@ class MaxCutProblem(BaseModel):
14
14
  default_factory=CombinatorialOptimizer,
15
15
  description="preferences for the VQE execution",
16
16
  )
17
- serialized_graph: Dict[str, Any]
17
+ serialized_graph: dict[str, Any]
@@ -1,10 +1,8 @@
1
- from typing import List
2
-
3
1
  from classiq.interface.helpers.versioned_model import VersionedModel
4
2
 
5
3
 
6
4
  class AnglesResult(VersionedModel):
7
- initial_point: List[float]
5
+ initial_point: list[float]
8
6
 
9
7
 
10
8
  class PyomoObjectResult(VersionedModel):
@@ -1,13 +1,14 @@
1
1
  import json
2
- from typing import Any, Dict, Mapping, Optional, Tuple, Union
2
+ from collections.abc import Mapping
3
+ from typing import Any, Optional, Union
3
4
  from uuid import UUID
4
5
 
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
  from classiq.interface.generator.generated_circuit_data import (
8
9
  FunctionDebugInfoInterface,
10
+ OperationLevel,
9
11
  )
10
- from classiq.interface.ide.visual_model import OperationLevel
11
12
 
12
13
  ParameterValue = Union[float, int, str, None]
13
14
 
@@ -15,11 +16,11 @@ ParameterValue = Union[float, int, str, None]
15
16
  class FunctionDebugInfo(BaseModel):
16
17
  name: str
17
18
  # Parameters describe classical parameters passed to function
18
- parameters: Dict[str, str]
19
+ parameters: dict[str, str]
19
20
  level: OperationLevel
20
21
  is_allocate_or_free: bool = Field(default=False)
21
22
  is_inverse: bool = Field(default=False)
22
- port_to_passed_variable_map: Dict[str, str] = Field(default_factory=dict)
23
+ port_to_passed_variable_map: dict[str, str] = Field(default_factory=dict)
23
24
 
24
25
  @staticmethod
25
26
  def param_controller(value: Any) -> str:
@@ -38,7 +39,7 @@ class FunctionDebugInfo(BaseModel):
38
39
  self.port_to_passed_variable_map = new_port_to_passed_variable_map
39
40
 
40
41
  def update_map_from_inout_port_mapping(
41
- self, port_mapping: Mapping[str, Tuple[str, str]]
42
+ self, port_mapping: Mapping[str, tuple[str, str]]
42
43
  ) -> None:
43
44
  new_port_to_passed_variable_map = self.port_to_passed_variable_map.copy()
44
45
  for old_key, (new_key1, new_key2) in port_mapping.items():
@@ -53,8 +54,8 @@ class DebugInfoCollection(BaseModel):
53
54
  # Pydantic only started supporting UUID as keys in Pydantic V2
54
55
  # See https://github.com/pydantic/pydantic/issues/2096#issuecomment-814860206
55
56
  # For now, we use strings as keys in the raw data and use UUID in the wrapper logic
56
- data: Dict[str, FunctionDebugInfo] = Field(default={})
57
- blackbox_data: Dict[str, FunctionDebugInfoInterface] = Field(default={})
57
+ data: dict[str, FunctionDebugInfo] = Field(default={})
58
+ blackbox_data: dict[str, FunctionDebugInfoInterface] = Field(default={})
58
59
 
59
60
  def __setitem__(self, key: UUID, value: FunctionDebugInfo) -> None:
60
61
  self.data[str(key)] = value
@@ -1,5 +1,6 @@
1
1
  import logging
2
- from typing import Iterable, List, Optional
2
+ from collections.abc import Iterable
3
+ from typing import Optional
3
4
 
4
5
  _logger = logging.getLogger(__name__)
5
6
 
@@ -26,7 +27,7 @@ class ClassiqExecutionError(ClassiqError):
26
27
 
27
28
 
28
29
  class ClassiqMissingOutputFormatError(ClassiqError):
29
- def __init__(self, missing_formats: List[str]) -> None:
30
+ def __init__(self, missing_formats: list[str]) -> None:
30
31
  msg = (
31
32
  f"Cannot create program because output format is missing. "
32
33
  f"Expected one of the following formats: {missing_formats}"
@@ -146,7 +147,7 @@ class ClassiqCombOptNoSolutionError(ClassiqError):
146
147
 
147
148
  class ClassiqCombOptTrivialProblemError(ClassiqError):
148
149
 
149
- def __init__(self, solution: List[int]) -> None:
150
+ def __init__(self, solution: list[int]) -> None:
150
151
  super().__init__(
151
152
  message=f"The problem doesn't have free decision variables. "
152
153
  f"The trivial solution is {solution}."
@@ -190,9 +191,10 @@ class ClassiqExpansionError(ClassiqError):
190
191
 
191
192
  class ClassiqInternalError(ClassiqError):
192
193
  def __init__(self, message: Optional[str] = None) -> None:
193
- super().__init__(
194
- "Internal error" if message is None else f"Internal error: {message}"
195
- )
194
+ final_message = "Internal error occurred. Please contact Classiq support."
195
+ if message is not None:
196
+ final_message += f"\nError: {message}"
197
+ super().__init__(final_message)
196
198
 
197
199
 
198
200
  class ClassiqInternalExpansionError(ClassiqInternalError):
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime
2
- from typing import List, Optional
2
+ from typing import Optional
3
3
 
4
4
  from pydantic import BaseModel
5
5
 
@@ -25,4 +25,4 @@ class ExecutionJobDetailsV1(BaseModel, extra="ignore"):
25
25
 
26
26
 
27
27
  class ExecutionJobsQueryResultsV1(BaseModel, extra="ignore"):
28
- results: List[ExecutionJobDetailsV1]
28
+ results: list[ExecutionJobDetailsV1]
@@ -1,4 +1,4 @@
1
- from typing import List, Optional
1
+ from typing import Optional
2
2
 
3
3
  from pydantic import BaseModel, Field
4
4
 
@@ -9,9 +9,9 @@ from classiq.interface.helpers.custom_encoders import CUSTOM_ENCODERS
9
9
 
10
10
  class EstimateInput(BaseModel, json_encoders=CUSTOM_ENCODERS):
11
11
  hamiltonian: PauliOperator
12
- parameters: List[Arguments]
12
+ parameters: list[Arguments]
13
13
 
14
14
 
15
15
  class PrimitivesInput(BaseModel, json_encoders=CUSTOM_ENCODERS):
16
- sample: Optional[List[Arguments]] = Field(default=None)
16
+ sample: Optional[list[Arguments]] = Field(default=None)
17
17
  estimate: Optional[EstimateInput] = Field(default=None)
@@ -1,6 +1,6 @@
1
1
  import datetime
2
2
  from datetime import date
3
- from typing import Any, Dict, List, Optional, Union
3
+ from typing import Any, Optional, Union
4
4
 
5
5
  import pydantic
6
6
  from pydantic import BaseModel, ConfigDict, Field
@@ -52,7 +52,7 @@ class ExecutionCostForTimePeriod(BaseModel):
52
52
  raise ValueError('"end" date should be after "start" date')
53
53
  return v
54
54
 
55
- def dict(self, **kwargs: Any) -> Dict[str, Any]:
55
+ def dict(self, **kwargs: Any) -> dict[str, Any]:
56
56
  data = super().model_dump(**kwargs)
57
57
  data["start"] = self.start.strftime("%Y-%m-%d")
58
58
  data["end"] = self.end.strftime("%Y-%m-%d")
@@ -80,11 +80,11 @@ class Total(pydantic.BaseModel):
80
80
  class ExecutedTaskForPeriodItem(pydantic.BaseModel):
81
81
  TimePeriod: TimePeriod
82
82
  Total: Total
83
- Groups: Optional[List] = None
83
+ Groups: Optional[list] = None
84
84
  Estimated: Optional[bool] = None
85
85
 
86
86
  model_config = ConfigDict(extra="forbid")
87
87
 
88
88
 
89
89
  class ExecutionCostForTimePeriodResponse(pydantic.BaseModel):
90
- executed_task_for_period: List[ExecutedTaskForPeriodItem]
90
+ executed_task_for_period: list[ExecutedTaskForPeriodItem]
@@ -1,9 +1,8 @@
1
1
  from datetime import datetime
2
- from typing import List, Literal, Optional, Union
2
+ from typing import Annotated, Literal, Optional, Union
3
3
 
4
4
  import pydantic
5
5
  from pydantic import BaseModel, Field
6
- from typing_extensions import Annotated
7
6
 
8
7
  from classiq.interface.executor.estimation import OperatorsEstimation
9
8
  from classiq.interface.executor.execution_preferences import ExecutionPreferences
@@ -63,4 +62,4 @@ class ExecutionJobDetails(VersionedModel):
63
62
 
64
63
 
65
64
  class ExecutionJobsQueryResults(VersionedModel):
66
- results: List[ExecutionJobDetails]
65
+ results: list[ExecutionJobDetails]
@@ -1,7 +1,7 @@
1
- from typing import Any, List, Literal, Union
1
+ from typing import Annotated, Any, Literal, Union
2
2
 
3
3
  from pydantic import BaseModel, ConfigDict, Field
4
- from typing_extensions import Annotated, TypeAlias
4
+ from typing_extensions import TypeAlias
5
5
 
6
6
  from classiq.interface.enum_utils import StrEnum
7
7
  from classiq.interface.executor.iqae_result import IQAEResult
@@ -104,7 +104,7 @@ SavedResult = Annotated[
104
104
  Field(..., discriminator="value_type"),
105
105
  ]
106
106
 
107
- ResultsCollection: TypeAlias = List[SavedResult]
107
+ ResultsCollection: TypeAlias = list[SavedResult]
108
108
 
109
109
 
110
110
  class ExecuteGeneratedCircuitResults(VersionedModel):
@@ -1,5 +1,3 @@
1
- from typing import List
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
3
  from classiq.interface.executor.result import ExecutionDetails
@@ -14,6 +12,6 @@ class IQAEIterationData(BaseModel):
14
12
 
15
13
  class IQAEResult(VersionedModel, QmodPyObject):
16
14
  estimation: float
17
- confidence_interval: List[float] = Field(min_length=2, max_length=2)
18
- iterations_data: List[IQAEIterationData]
19
- warnings: List[str]
15
+ confidence_interval: list[float] = Field(min_length=2, max_length=2)
16
+ iterations_data: list[IQAEIterationData]
17
+ warnings: list[str]
@@ -1,4 +1,4 @@
1
- from typing import List, Optional
1
+ from typing import Optional
2
2
 
3
3
  import pydantic
4
4
  from pydantic import BaseModel
@@ -45,7 +45,7 @@ class OptimizerPreferences(BaseModel):
45
45
  default=None,
46
46
  description="The random seed used for the generation",
47
47
  )
48
- initial_point: Optional[List[float]] = pydantic.Field(
48
+ initial_point: Optional[list[float]] = pydantic.Field(
49
49
  default=None,
50
50
  description="Initial values for the ansatz parameters",
51
51
  )
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from pathlib import Path
4
- from typing import Any, Dict, Optional, Tuple, Union
4
+ from typing import Any, Optional, Union
5
5
 
6
6
  import pydantic
7
7
  from pydantic import BaseModel, ConfigDict
@@ -16,12 +16,12 @@ from classiq.interface.generator.synthesis_metadata.synthesis_execution_data imp
16
16
  ExecutionData,
17
17
  )
18
18
 
19
- Arguments = Dict[PydanticArgumentNameType, Any]
20
- MultipleArguments = Tuple[Arguments, ...]
19
+ Arguments = dict[PydanticArgumentNameType, Any]
20
+ MultipleArguments = tuple[Arguments, ...]
21
21
  CodeType = str
22
- RegistersInitialization = Dict[str, RegisterInitialization]
23
- Qubits = Tuple[int, ...]
24
- OutputQubitsMap = Dict[str, Qubits]
22
+ RegistersInitialization = dict[str, RegisterInitialization]
23
+ Qubits = tuple[int, ...]
24
+ OutputQubitsMap = dict[str, Qubits]
25
25
 
26
26
 
27
27
  class QuantumBaseCode(BaseModel):
@@ -1,5 +1,3 @@
1
- from typing import List
2
-
3
1
  import pydantic
4
2
  from typing_extensions import Self
5
3
 
@@ -13,7 +11,7 @@ _NON_INTEGER_INITIALIZATION_ERROR_MSG: str = (
13
11
 
14
12
  class RegisterInitialization(pydantic.BaseModel):
15
13
  name: str
16
- qubits: List[int]
14
+ qubits: list[int]
17
15
  initial_condition: pydantic.NonNegativeInt
18
16
 
19
17
  @pydantic.field_validator("initial_condition", mode="before")
@@ -25,7 +23,7 @@ class RegisterInitialization(pydantic.BaseModel):
25
23
 
26
24
  @pydantic.model_validator(mode="after")
27
25
  def _validate_register_initialization(self) -> Self:
28
- qubits: List[int] = self.qubits or []
26
+ qubits: list[int] = self.qubits or []
29
27
  initial_condition: int = self.initial_condition or 0
30
28
  name: str = self.name or ""
31
29