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,13 +1,14 @@
1
1
  from enum import IntEnum
2
- from typing import Dict, List, Optional, Union
2
+ from typing import Optional, Union
3
3
 
4
4
  import pydantic
5
5
 
6
6
  from classiq.interface.generator.generated_circuit_data import GeneratedFunction
7
7
  from classiq.interface.generator.hardware.hardware_data import SynthesisHardwareData
8
8
  from classiq.interface.helpers.versioned_model import VersionedModel
9
+ from classiq.interface.ide.visual_model import CircuitMetrics
9
10
 
10
- GateCount = Dict[str, int]
11
+ GateCount = dict[str, int]
11
12
  Depth = int
12
13
 
13
14
 
@@ -51,17 +52,17 @@ class ConditionalRender(IntEnum):
51
52
  class IDEDataOperation(pydantic.BaseModel):
52
53
  gate: str
53
54
  displayName: str
54
- children: List["IDEDataOperation"]
55
+ children: list["IDEDataOperation"]
55
56
  depth: Depth
56
57
  width: int
57
58
  gate_count: GateCount
58
59
  _qubits: list = pydantic.PrivateAttr() # list[Qubit]
59
60
 
60
61
  displayArgs: str = ""
61
- targets: Union[List[IDEQubitDef], List[IDEClassicalBitDef]] = pydantic.Field(
62
+ targets: Union[list[IDEQubitDef], list[IDEClassicalBitDef]] = pydantic.Field(
62
63
  default_factory=list
63
64
  )
64
- controls: List[IDEQubitDef] = list()
65
+ controls: list[IDEQubitDef] = list()
65
66
  dataAttributes: DataAttributes = pydantic.Field(default_factory=DataAttributes)
66
67
  isControlled: bool = False
67
68
  isMeasurement: bool = False
@@ -81,7 +82,7 @@ class IDEDataProperties(pydantic.BaseModel):
81
82
 
82
83
 
83
84
  class RegisterData(pydantic.BaseModel):
84
- segmentIds: List[str]
85
+ segmentIds: list[str]
85
86
  properties: IDEDataProperties
86
87
  registerId: str
87
88
 
@@ -91,16 +92,11 @@ class InterfaceSegmentData(pydantic.BaseModel):
91
92
  properties: IDEDataProperties
92
93
 
93
94
 
94
- class CircuitMetrics(pydantic.BaseModel):
95
- depth: int
96
- count_ops: Dict[str, int]
97
-
98
-
99
95
  class IDEData(VersionedModel):
100
- qubits: List[IDEDataQubit]
101
- operations: List[IDEDataOperation]
102
- register_data: List[RegisterData]
103
- segment_data: List[InterfaceSegmentData]
96
+ qubits: list[IDEDataQubit]
97
+ operations: list[IDEDataOperation]
98
+ register_data: list[RegisterData]
99
+ segment_data: list[InterfaceSegmentData]
104
100
  circuit_metrics: Optional[CircuitMetrics]
105
101
  hardware_data: SynthesisHardwareData
106
102
  creation_time: str
@@ -1,20 +1,18 @@
1
- from typing import Any, Dict, List, Optional, Tuple
1
+ from collections import Counter
2
+ from typing import Any, Optional
2
3
 
3
4
  import pydantic
4
5
  from pydantic import ConfigDict
5
6
 
6
7
  from classiq.interface.enum_utils import StrEnum
8
+ from classiq.interface.generator.generated_circuit_data import (
9
+ OperationLevel,
10
+ OperationParameter,
11
+ )
7
12
  from classiq.interface.generator.hardware.hardware_data import SynthesisHardwareData
8
13
  from classiq.interface.helpers.versioned_model import VersionedModel
9
14
 
10
15
 
11
- class OperationLevel(StrEnum):
12
- QMOD_FUNCTION_CALL = "QMOD_CALL"
13
- QMOD_STATEMENT = "QMOD_STATEMENT"
14
- ENGINE_FUNCTION_CALL = "ENGINE_CALL"
15
- UNKNOWN = "UNKNOWN"
16
-
17
-
18
16
  class OperationType(StrEnum):
19
17
  REGULAR = "REGULAR"
20
18
  ALLOCATE = "ALLOCATE"
@@ -26,22 +24,23 @@ class OperationType(StrEnum):
26
24
  class OperationData(pydantic.BaseModel):
27
25
  approximated_depth: Optional[int] = None
28
26
  width: int
29
- gate_count: Dict[str, int] = pydantic.Field(default_factory=dict)
27
+ gate_count: Counter[str] = pydantic.Field(default_factory=dict)
30
28
 
31
29
 
32
- class ProgramData(pydantic.BaseModel):
33
- hardware_data: SynthesisHardwareData
30
+ class CircuitMetrics(pydantic.BaseModel):
31
+ depth: int
32
+ count_ops: dict[str, int]
34
33
 
35
34
 
36
- class OperationParameter(pydantic.BaseModel):
37
- label: str
38
- value: Optional[str] = None
35
+ class ProgramData(pydantic.BaseModel):
36
+ hardware_data: SynthesisHardwareData
37
+ circuit_metrics: CircuitMetrics
39
38
 
40
39
 
41
40
  class OperationLink(pydantic.BaseModel):
42
41
  label: str
43
42
  inner_label: Optional[str] = None
44
- qubits: Tuple[int, ...]
43
+ qubits: tuple[int, ...]
45
44
  type: str
46
45
 
47
46
  model_config = ConfigDict(frozen=True)
@@ -56,8 +55,8 @@ class OperationLink(pydantic.BaseModel):
56
55
 
57
56
 
58
57
  class OperationLinks(pydantic.BaseModel):
59
- inputs: List[OperationLink]
60
- outputs: List[OperationLink]
58
+ inputs: list[OperationLink]
59
+ outputs: list[OperationLink]
61
60
 
62
61
  @property
63
62
  def input_width(self) -> int:
@@ -106,13 +105,14 @@ class AtomicGate(StrEnum):
106
105
 
107
106
  class Operation(pydantic.BaseModel):
108
107
  name: str
109
- children: List["Operation"]
108
+ details: str = pydantic.Field(default="")
109
+ children: list["Operation"]
110
110
  operation_data: Optional[OperationData] = None
111
111
  operation_links: OperationLinks
112
- control_qubits: Tuple[int, ...] = pydantic.Field(default_factory=tuple)
113
- auxiliary_qubits: Tuple[int, ...]
114
- target_qubits: Tuple[int, ...]
115
- parameters: List[OperationParameter] = pydantic.Field(default_factory=list)
112
+ control_qubits: tuple[int, ...] = pydantic.Field(default_factory=tuple)
113
+ auxiliary_qubits: tuple[int, ...]
114
+ target_qubits: tuple[int, ...]
115
+ parameters: list[OperationParameter] = pydantic.Field(default_factory=list)
116
116
  operation_level: OperationLevel
117
117
  operation_type: OperationType = pydantic.Field(
118
118
  description="Identifies unique operations that are visualized differently"
classiq/interface/jobs.py CHANGED
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, Generic, Optional, TypeVar, Union
1
+ from typing import Any, Generic, Optional, TypeVar, Union
2
2
 
3
3
  import pydantic
4
4
  from pydantic import BaseModel
@@ -8,7 +8,7 @@ from classiq.interface.enum_utils import StrEnum
8
8
  from classiq.interface.exceptions import ClassiqAPIError
9
9
  from classiq.interface.helpers.custom_encoders import CUSTOM_ENCODERS
10
10
 
11
- JSONObject = Dict[str, Any]
11
+ JSONObject = dict[str, Any]
12
12
  T = TypeVar("T", bound=Union[pydantic.BaseModel, JSONObject])
13
13
  AUTH_HEADER = "Classiq-BE-Auth"
14
14
  INVALID_RESPONSE_ERROR_MSG = "Invalid response from Classiq API"
@@ -1,4 +1,5 @@
1
- from typing import List, Literal, Mapping, Sequence
1
+ from collections.abc import Mapping, Sequence
2
+ from typing import Literal
2
3
 
3
4
  import pydantic
4
5
 
@@ -13,8 +14,8 @@ BIND_OUTPUT_NAME = "bind_output"
13
14
  class BindOperation(QuantumOperation):
14
15
  kind: Literal["BindOperation"]
15
16
 
16
- in_handles: List[ConcreteHandleBinding]
17
- out_handles: List[ConcreteHandleBinding]
17
+ in_handles: list[ConcreteHandleBinding]
18
+ out_handles: list[ConcreteHandleBinding]
18
19
 
19
20
  @property
20
21
  def wiring_inputs(self) -> Mapping[str, HandleBinding]:
@@ -51,7 +52,7 @@ class BindOperation(QuantumOperation):
51
52
 
52
53
  @pydantic.field_validator("in_handles", "out_handles")
53
54
  @classmethod
54
- def validate_handle(cls, handles: List[HandleBinding]) -> List[HandleBinding]:
55
+ def validate_handle(cls, handles: list[HandleBinding]) -> list[HandleBinding]:
55
56
  for handle in handles:
56
57
  if not handle.is_bindable():
57
58
  raise ClassiqValueError(f"Cannot bind '{handle}'")
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, Literal
1
+ from typing import Any, Literal
2
2
 
3
3
  import pydantic
4
4
 
@@ -14,7 +14,7 @@ class AnonClassicalParameterDeclaration(Parameter):
14
14
 
15
15
  @pydantic.model_validator(mode="before")
16
16
  @classmethod
17
- def _set_kind(cls, values: Any) -> Dict[str, Any]:
17
+ def _set_kind(cls, values: Any) -> dict[str, Any]:
18
18
  return values_with_discriminator(
19
19
  values, "kind", "ClassicalParameterDeclaration"
20
20
  )
@@ -1,10 +1,12 @@
1
- from typing import TYPE_CHECKING, Literal
1
+ from typing import TYPE_CHECKING, Literal, Optional
2
2
 
3
3
  import pydantic
4
4
 
5
+ from classiq.interface.generator.arith.arithmetic import compute_arithmetic_result_type
5
6
  from classiq.interface.model.quantum_expressions.quantum_expression import (
6
7
  QuantumExpressionOperation,
7
8
  )
9
+ from classiq.interface.model.quantum_type import QuantumType
8
10
 
9
11
  if TYPE_CHECKING:
10
12
  from classiq.interface.model.statement_block import StatementBlock
@@ -13,8 +15,12 @@ if TYPE_CHECKING:
13
15
  class Control(QuantumExpressionOperation):
14
16
  kind: Literal["Control"]
15
17
  body: "StatementBlock"
18
+ else_block: Optional["StatementBlock"] = None
16
19
 
17
20
  _ctrl_size: int = pydantic.PrivateAttr(default=0)
21
+ _result_type: Optional[QuantumType] = pydantic.PrivateAttr(
22
+ default=None,
23
+ )
18
24
 
19
25
  @property
20
26
  def ctrl_size(self) -> int:
@@ -22,3 +28,18 @@ class Control(QuantumExpressionOperation):
22
28
 
23
29
  def set_ctrl_size(self, ctrl_size: int) -> None:
24
30
  self._ctrl_size = ctrl_size
31
+
32
+ @property
33
+ def result_type(self) -> QuantumType:
34
+ assert self._result_type is not None
35
+ return self._result_type
36
+
37
+ def initialize_var_types(
38
+ self,
39
+ var_types: dict[str, QuantumType],
40
+ machine_precision: int,
41
+ ) -> None:
42
+ super().initialize_var_types(var_types, machine_precision)
43
+ self._result_type = compute_arithmetic_result_type(
44
+ self.expression.expr, var_types, machine_precision
45
+ )
@@ -1,5 +1,6 @@
1
+ from collections.abc import Sequence
1
2
  from itertools import chain
2
- from typing import TYPE_CHECKING, Any, Dict, Sequence, Union
3
+ from typing import TYPE_CHECKING, Any, Union
3
4
 
4
5
  import pydantic
5
6
  from pydantic import ConfigDict, Field
@@ -51,7 +52,7 @@ class NestedHandleBinding(HandleBinding):
51
52
 
52
53
  @pydantic.model_validator(mode="before")
53
54
  @classmethod
54
- def _set_name(cls, values: Any) -> Dict[str, Any]:
55
+ def _set_name(cls, values: Any) -> dict[str, Any]:
55
56
  if isinstance(values, dict):
56
57
  orig = values
57
58
  while "base_handle" in values:
@@ -1,4 +1,5 @@
1
- from typing import Literal, Mapping, Sequence, Union
1
+ from collections.abc import Mapping, Sequence
2
+ from typing import Literal, Union
2
3
 
3
4
  from classiq.interface.enum_utils import StrEnum
4
5
  from classiq.interface.generator.expressions.expression import Expression
@@ -1,5 +1,6 @@
1
1
  from collections import Counter
2
- from typing import Any, List, Literal, Mapping, NewType
2
+ from collections.abc import Mapping
3
+ from typing import Any, Literal, NewType
3
4
 
4
5
  import pydantic
5
6
 
@@ -14,6 +15,7 @@ from classiq.interface.generator.functions.port_declaration import (
14
15
  from classiq.interface.generator.model.constraints import Constraints
15
16
  from classiq.interface.generator.model.preferences.preferences import Preferences
16
17
  from classiq.interface.generator.quantum_function_call import SUFFIX_RANDOMIZER
18
+ from classiq.interface.generator.types.compilation_metadata import CompilationMetadata
17
19
  from classiq.interface.generator.types.enum_declaration import EnumDeclaration
18
20
  from classiq.interface.generator.types.qstruct_declaration import QStructDeclaration
19
21
  from classiq.interface.generator.types.struct_declaration import StructDeclaration
@@ -58,23 +60,23 @@ class Model(VersionedModel, ASTNode):
58
60
  kind: Literal["user"] = pydantic.Field(default=USER_MODEL_MARKER)
59
61
 
60
62
  # Must be validated before logic_flow
61
- functions: List[NativeFunctionDefinition] = pydantic.Field(
63
+ functions: list[NativeFunctionDefinition] = pydantic.Field(
62
64
  default_factory=list,
63
65
  description="The user-defined custom type library.",
64
66
  validate_default=True,
65
67
  )
66
68
 
67
- enums: List[EnumDeclaration] = pydantic.Field(
69
+ enums: list[EnumDeclaration] = pydantic.Field(
68
70
  default_factory=list,
69
71
  description="user-defined enums",
70
72
  )
71
73
 
72
- types: List[StructDeclaration] = pydantic.Field(
74
+ types: list[StructDeclaration] = pydantic.Field(
73
75
  default_factory=list,
74
76
  description="user-defined structs",
75
77
  )
76
78
 
77
- qstructs: List[QStructDeclaration] = pydantic.Field(
79
+ qstructs: list[QStructDeclaration] = pydantic.Field(
78
80
  default_factory=list,
79
81
  description="user-defined quantum structs",
80
82
  )
@@ -83,7 +85,7 @@ class Model(VersionedModel, ASTNode):
83
85
  description="The classical execution code of the model", default=""
84
86
  )
85
87
 
86
- constants: List[Constant] = pydantic.Field(
88
+ constants: list[Constant] = pydantic.Field(
87
89
  default_factory=list,
88
90
  )
89
91
 
@@ -97,6 +99,9 @@ class Model(VersionedModel, ASTNode):
97
99
  debug_info: DebugInfoCollection = pydantic.Field(
98
100
  default_factory=DebugInfoCollection
99
101
  )
102
+ functions_compilation_metadata: dict[str, CompilationMetadata] = pydantic.Field(
103
+ default_factory=dict
104
+ )
100
105
 
101
106
  @property
102
107
  def main_func(self) -> NativeFunctionDefinition:
@@ -133,8 +138,8 @@ class Model(VersionedModel, ASTNode):
133
138
  @pydantic.field_validator("functions")
134
139
  @classmethod
135
140
  def _add_empty_main(
136
- cls, functions: List[NativeFunctionDefinition]
137
- ) -> List[NativeFunctionDefinition]:
141
+ cls, functions: list[NativeFunctionDefinition]
142
+ ) -> list[NativeFunctionDefinition]:
138
143
  function_dict = nameables_to_dict(functions)
139
144
  if MAIN_FUNCTION_NAME not in function_dict:
140
145
  functions.append(_create_empty_main_function())
@@ -146,8 +151,8 @@ class Model(VersionedModel, ASTNode):
146
151
  @pydantic.field_validator("functions")
147
152
  @classmethod
148
153
  def _validate_entry_point(
149
- cls, functions: List[NativeFunctionDefinition]
150
- ) -> List[NativeFunctionDefinition]:
154
+ cls, functions: list[NativeFunctionDefinition]
155
+ ) -> list[NativeFunctionDefinition]:
151
156
  function_dict = nameables_to_dict(functions)
152
157
  if MAIN_FUNCTION_NAME not in function_dict:
153
158
  raise ClassiqValueError("The model must contain a `main` function")
@@ -161,7 +166,7 @@ class Model(VersionedModel, ASTNode):
161
166
 
162
167
  @pydantic.field_validator("constants")
163
168
  @classmethod
164
- def _validate_constants(cls, constants: List[Constant]) -> List[Constant]:
169
+ def _validate_constants(cls, constants: list[Constant]) -> list[Constant]:
165
170
  constant_definition_counts = Counter(
166
171
  [constant.name for constant in constants]
167
172
  ).items()
@@ -29,5 +29,5 @@ class NativeFunctionDefinition(NamedParamsQuantumFunctionDeclaration):
29
29
  default_factory=list, description="List of function calls to perform."
30
30
  )
31
31
  synthesis_data: FunctionSynthesisData = pydantic.Field(
32
- default_factory=FunctionSynthesisData,
32
+ default_factory=FunctionSynthesisData, deprecated=True, exclude=True
33
33
  )
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, Literal
1
+ from typing import Any, Literal
2
2
 
3
3
  import pydantic
4
4
  from pydantic_core.core_schema import ValidationInfo
@@ -19,7 +19,7 @@ class AnonPortDeclaration(Parameter):
19
19
 
20
20
  @pydantic.model_validator(mode="before")
21
21
  @classmethod
22
- def _set_kind(cls, values: Any) -> Dict[str, Any]:
22
+ def _set_kind(cls, values: Any) -> dict[str, Any]:
23
23
  return values_with_discriminator(values, "kind", "PortDeclaration")
24
24
 
25
25
  @pydantic.field_validator("direction", mode="before")
@@ -1,4 +1,5 @@
1
- from typing import Dict, Literal, Mapping, Sequence
1
+ from collections.abc import Mapping, Sequence
2
+ from typing import Literal
2
3
 
3
4
  import pydantic
4
5
 
@@ -61,7 +62,7 @@ class AmplitudeLoadingOperation(QuantumAssignmentOperation):
61
62
 
62
63
  def initialize_var_types(
63
64
  self,
64
- var_types: Dict[str, QuantumType],
65
+ var_types: dict[str, QuantumType],
65
66
  machine_precision: int,
66
67
  ) -> None:
67
68
  if len(var_types) != 1:
@@ -1,7 +1,5 @@
1
- from typing import Dict, Literal, Mapping, Optional, Sequence
2
-
3
- import pydantic
4
- from pydantic_core.core_schema import ValidationInfo
1
+ from collections.abc import Mapping, Sequence
2
+ from typing import Literal
5
3
 
6
4
  from classiq.interface.enum_utils import StrEnum
7
5
  from classiq.interface.generator.arith.arithmetic import (
@@ -28,28 +26,7 @@ class ArithmeticOperationKind(StrEnum):
28
26
  class ArithmeticOperation(QuantumAssignmentOperation):
29
27
  kind: Literal["ArithmeticOperation"]
30
28
 
31
- inplace_result: Optional[bool] = pydantic.Field(
32
- description="Determines whether the result variable is initialized",
33
- default=None,
34
- exclude=True,
35
- )
36
-
37
- operation_kind: ArithmeticOperationKind = pydantic.Field(
38
- default=None, validate_default=True
39
- )
40
-
41
- @pydantic.field_validator("operation_kind", mode="before")
42
- @classmethod
43
- def _propagate_inplace_result(
44
- cls, operation_kind: Optional[ArithmeticOperationKind], info: ValidationInfo
45
- ) -> ArithmeticOperationKind:
46
- if operation_kind is None:
47
- operation_kind = (
48
- ArithmeticOperationKind.InplaceXor
49
- if info.data["inplace_result"]
50
- else ArithmeticOperationKind.Assignment
51
- )
52
- return operation_kind
29
+ operation_kind: ArithmeticOperationKind
53
30
 
54
31
  @property
55
32
  def is_inplace(self) -> bool:
@@ -60,7 +37,7 @@ class ArithmeticOperation(QuantumAssignmentOperation):
60
37
 
61
38
  def initialize_var_types(
62
39
  self,
63
- var_types: Dict[str, QuantumType],
40
+ var_types: dict[str, QuantumType],
64
41
  machine_precision: int,
65
42
  ) -> None:
66
43
  super().initialize_var_types(var_types, machine_precision)
@@ -1,5 +1,6 @@
1
1
  import abc
2
- from typing import Dict, List, Mapping, Optional
2
+ from collections.abc import Mapping
3
+ from typing import Optional
3
4
 
4
5
  import pydantic
5
6
 
@@ -15,27 +16,27 @@ from classiq.interface.model.quantum_type import QuantumType
15
16
 
16
17
  class QuantumExpressionOperation(QuantumOperation):
17
18
  expression: Expression = pydantic.Field()
18
- _var_handles: List[HandleBinding] = pydantic.PrivateAttr(
19
+ _var_handles: list[HandleBinding] = pydantic.PrivateAttr(
19
20
  default_factory=list,
20
21
  )
21
- _var_types: Dict[str, QuantumType] = pydantic.PrivateAttr(
22
+ _var_types: dict[str, QuantumType] = pydantic.PrivateAttr(
22
23
  default_factory=dict,
23
24
  )
24
25
 
25
26
  @property
26
- def var_handles(self) -> List[HandleBinding]:
27
+ def var_handles(self) -> list[HandleBinding]:
27
28
  return self._var_handles
28
29
 
29
- def set_var_handles(self, var_handles: List[HandleBinding]) -> None:
30
+ def set_var_handles(self, var_handles: list[HandleBinding]) -> None:
30
31
  self._var_handles = var_handles
31
32
 
32
33
  @property
33
- def var_types(self) -> Dict[str, QuantumType]:
34
+ def var_types(self) -> dict[str, QuantumType]:
34
35
  return self._var_types
35
36
 
36
37
  def initialize_var_types(
37
38
  self,
38
- var_types: Dict[str, QuantumType],
39
+ var_types: dict[str, QuantumType],
39
40
  machine_precision: int,
40
41
  ) -> None:
41
42
  assert len(var_types) == len(self.var_handles) or len(self.var_handles) == 0
@@ -1,12 +1,7 @@
1
+ from collections.abc import Iterable, Mapping, Sequence
1
2
  from typing import (
2
- Dict,
3
- Iterable,
4
- List,
5
3
  Literal,
6
- Mapping,
7
4
  Optional,
8
- Sequence,
9
- Tuple,
10
5
  Union,
11
6
  )
12
7
 
@@ -47,7 +42,7 @@ class QuantumFunctionCall(QuantumOperation):
47
42
  function: Union[str, OperandIdentifier] = pydantic.Field(
48
43
  description="The function that is called"
49
44
  )
50
- positional_args: List[ArgValue] = pydantic.Field(default_factory=list)
45
+ positional_args: list[ArgValue] = pydantic.Field(default_factory=list)
51
46
 
52
47
  _func_decl: Optional[QuantumFunctionDeclaration] = pydantic.PrivateAttr(
53
48
  default=None
@@ -151,17 +146,17 @@ class QuantumFunctionCall(QuantumOperation):
151
146
  ]
152
147
 
153
148
  @property
154
- def params(self) -> List[Expression]:
149
+ def params(self) -> list[Expression]:
155
150
  return [
156
151
  param for param in self.positional_args if isinstance(param, Expression)
157
152
  ]
158
153
 
159
154
  @property
160
- def params_dict(self) -> Dict[str, Expression]:
155
+ def params_dict(self) -> dict[str, Expression]:
161
156
  return dict(zip(self.func_decl.param_names, self.params))
162
157
 
163
158
  @property
164
- def operands(self) -> List["QuantumOperand"]:
159
+ def operands(self) -> list["QuantumOperand"]:
165
160
  return [
166
161
  param
167
162
  for param in self.positional_args
@@ -169,14 +164,14 @@ class QuantumFunctionCall(QuantumOperation):
169
164
  ]
170
165
 
171
166
  @property
172
- def ports(self) -> List[HandleBinding]:
167
+ def ports(self) -> list[HandleBinding]:
173
168
  return [
174
169
  param for param in self.positional_args if isinstance(param, HandleBinding)
175
170
  ]
176
171
 
177
172
  def _get_handles_by_direction(
178
173
  self, direction: PortDeclarationDirection
179
- ) -> List[Tuple[int, AnonPortDeclaration, HandleBinding]]:
174
+ ) -> list[tuple[int, AnonPortDeclaration, HandleBinding]]:
180
175
  return [
181
176
  (idx, port_decl, handle)
182
177
  for idx, port_decl, handle in self._get_handles_with_declarations()
@@ -185,7 +180,7 @@ class QuantumFunctionCall(QuantumOperation):
185
180
 
186
181
  def _get_pos_port_args_by_direction(
187
182
  self, direction: PortDeclarationDirection
188
- ) -> Dict[str, HandleBinding]:
183
+ ) -> dict[str, HandleBinding]:
189
184
  # This is a hack for handles to wires reduction tests,
190
185
  # that initialize function definitions or calls not in the scope of a model,
191
186
  # so there is no function resolution annotation.
@@ -199,7 +194,7 @@ class QuantumFunctionCall(QuantumOperation):
199
194
 
200
195
  def _get_handles_with_declarations(
201
196
  self,
202
- ) -> Iterable[Tuple[int, AnonPortDeclaration, HandleBinding]]:
197
+ ) -> Iterable[tuple[int, AnonPortDeclaration, HandleBinding]]:
203
198
  return [
204
199
  (idx, port, handle)
205
200
  for idx, (port, handle) in enumerate(
@@ -1,16 +1,14 @@
1
+ from collections.abc import Sequence
1
2
  from typing import (
3
+ Annotated,
2
4
  Any,
3
- Dict,
4
5
  Literal,
5
- Sequence,
6
- Set,
7
6
  Union,
8
7
  )
9
8
 
10
9
  import pydantic
11
10
  from pydantic import SerializeAsAny
12
11
  from pydantic_core.core_schema import ValidationInfo
13
- from typing_extensions import Annotated
14
12
 
15
13
  from classiq.interface.exceptions import ClassiqInternalError
16
14
  from classiq.interface.generator.arith.register_user_input import RegisterUserInput
@@ -92,11 +90,11 @@ class AnonQuantumFunctionDeclaration(FunctionDeclaration):
92
90
  return [param.get_name() for param in self.param_decls]
93
91
 
94
92
  @property
95
- def input_set(self) -> Set[str]:
93
+ def input_set(self) -> set[str]:
96
94
  return {inp.name for inp in self.inputs}
97
95
 
98
96
  @property
99
- def output_set(self) -> Set[str]:
97
+ def output_set(self) -> set[str]:
100
98
  return {output.name for output in self.outputs}
101
99
 
102
100
  @property
@@ -126,7 +124,7 @@ class AnonQuantumFunctionDeclaration(FunctionDeclaration):
126
124
 
127
125
  def ports_by_declaration_direction(
128
126
  self, direction: PortDeclarationDirection
129
- ) -> Set[str]:
127
+ ) -> set[str]:
130
128
  return {
131
129
  port.get_name()
132
130
  for port in self.port_declarations
@@ -162,7 +160,7 @@ class AnonQuantumOperandDeclaration(AnonQuantumFunctionDeclaration):
162
160
 
163
161
  @pydantic.model_validator(mode="before")
164
162
  @classmethod
165
- def _set_kind(cls, values: Any) -> Dict[str, Any]:
163
+ def _set_kind(cls, values: Any) -> dict[str, Any]:
166
164
  return values_with_discriminator(values, "kind", "QuantumOperandDeclaration")
167
165
 
168
166
  def rename(self, new_name: str) -> "QuantumOperandDeclaration":
@@ -186,7 +184,7 @@ class QuantumOperandDeclaration(
186
184
  ):
187
185
  @pydantic.model_validator(mode="before")
188
186
  @classmethod
189
- def _set_none(cls, values: Any, info: ValidationInfo) -> Dict[str, Any]:
187
+ def _set_none(cls, values: Any, info: ValidationInfo) -> dict[str, Any]:
190
188
  return values
191
189
 
192
190
 
@@ -209,15 +207,15 @@ class NamedParamsQuantumFunctionDeclaration(QuantumFunctionDeclaration):
209
207
  )
210
208
 
211
209
  @property
212
- def port_declarations_dict(self) -> Dict[str, PortDeclaration]:
210
+ def port_declarations_dict(self) -> dict[str, PortDeclaration]:
213
211
  return {port.name: port for port in self.port_declarations}
214
212
 
215
213
  @property
216
- def operand_declarations_dict(self) -> Dict[str, QuantumOperandDeclaration]:
214
+ def operand_declarations_dict(self) -> dict[str, QuantumOperandDeclaration]:
217
215
  return {op.name: op for op in self.operand_declarations}
218
216
 
219
217
  @property
220
- def param_decls_dict(self) -> Dict[str, ClassicalParameterDeclaration]:
218
+ def param_decls_dict(self) -> dict[str, ClassicalParameterDeclaration]:
221
219
  return {param.name: param for param in self.param_decls}
222
220
 
223
221
  @property