classiq 0.42.2__py3-none-any.whl → 0.43.1__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 (113) hide show
  1. classiq/__init__.py +2 -6
  2. classiq/_internals/api_wrapper.py +6 -12
  3. classiq/_internals/authentication/token_manager.py +5 -2
  4. classiq/_internals/jobs.py +5 -10
  5. classiq/analyzer/rb.py +3 -3
  6. classiq/applications/chemistry/chemistry_model_constructor.py +12 -8
  7. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +2 -2
  8. classiq/applications/finance/finance_model_constructor.py +16 -13
  9. classiq/applications/qsvm/__init__.py +1 -3
  10. classiq/applications/qsvm/qsvm_model_constructor.py +7 -6
  11. classiq/exceptions.py +9 -4
  12. classiq/execution/execution_session.py +5 -2
  13. classiq/execution/qnn.py +1 -1
  14. classiq/executor.py +0 -2
  15. classiq/interface/_version.py +1 -1
  16. classiq/interface/chemistry/operator.py +19 -5
  17. classiq/interface/executor/constants.py +1 -0
  18. classiq/interface/finance/function_input.py +16 -10
  19. classiq/interface/generator/application_apis/chemistry_declarations.py +2 -2
  20. classiq/interface/generator/application_apis/qsvm_declarations.py +4 -2
  21. classiq/interface/generator/arith/argument_utils.py +20 -3
  22. classiq/interface/generator/arith/arithmetic_expression_validator.py +3 -26
  23. classiq/interface/generator/arith/binary_ops.py +8 -14
  24. classiq/interface/generator/arith/extremum_operations.py +30 -0
  25. classiq/interface/generator/arith/number_utils.py +1 -1
  26. classiq/interface/generator/arith/unary_ops.py +1 -3
  27. classiq/interface/generator/compiler_keywords.py +1 -1
  28. classiq/interface/generator/expressions/atomic_expression_functions.py +13 -3
  29. classiq/interface/generator/expressions/enums/__init__.py +0 -20
  30. classiq/interface/generator/expressions/enums/finance_functions.py +11 -18
  31. classiq/interface/generator/expressions/non_symbolic_expr.py +119 -0
  32. classiq/interface/generator/expressions/qmod_qarray_proxy.py +52 -37
  33. classiq/interface/generator/expressions/qmod_qscalar_proxy.py +16 -11
  34. classiq/interface/generator/expressions/qmod_sized_proxy.py +5 -5
  35. classiq/interface/generator/function_param_list_without_self_reference.py +0 -10
  36. classiq/interface/generator/function_params.py +0 -4
  37. classiq/interface/generator/functions/__init__.py +0 -20
  38. classiq/interface/generator/functions/builtins/core_library/exponentiation_functions.py +2 -2
  39. classiq/interface/generator/functions/builtins/open_lib_functions.py +530 -1
  40. classiq/interface/generator/functions/classical_type.py +22 -69
  41. classiq/interface/generator/functions/port_declaration.py +0 -11
  42. classiq/interface/generator/model/__init__.py +0 -1
  43. classiq/interface/generator/model/model.py +9 -185
  44. classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +3 -1
  45. classiq/interface/generator/types/builtin_enum_declarations.py +69 -0
  46. classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +2 -2
  47. classiq/interface/generator/types/enum_declaration.py +57 -0
  48. classiq/interface/jobs.py +36 -65
  49. classiq/interface/model/bind_operation.py +3 -0
  50. classiq/interface/model/classical_parameter_declaration.py +3 -0
  51. classiq/interface/model/handle_binding.py +7 -0
  52. classiq/interface/model/inplace_binary_operation.py +13 -15
  53. classiq/interface/model/model.py +8 -20
  54. classiq/interface/model/native_function_definition.py +0 -17
  55. classiq/interface/model/quantum_function_call.py +63 -182
  56. classiq/interface/model/quantum_type.py +71 -10
  57. classiq/interface/server/routes.py +0 -6
  58. classiq/qmod/__init__.py +3 -3
  59. classiq/qmod/builtins/__init__.py +10 -1
  60. classiq/qmod/builtins/classical_execution_primitives.py +4 -2
  61. classiq/qmod/builtins/enums.py +177 -0
  62. classiq/qmod/builtins/functions.py +1 -2
  63. classiq/qmod/builtins/operations.py +2 -4
  64. classiq/qmod/builtins/structs.py +16 -17
  65. classiq/qmod/declaration_inferrer.py +23 -20
  66. classiq/qmod/model_state_container.py +2 -0
  67. classiq/qmod/native/pretty_printer.py +31 -13
  68. classiq/qmod/pretty_print/pretty_printer.py +52 -27
  69. classiq/qmod/qmod_constant.py +7 -3
  70. classiq/qmod/qmod_parameter.py +2 -1
  71. classiq/qmod/qmod_struct.py +9 -33
  72. classiq/qmod/qmod_variable.py +55 -22
  73. classiq/qmod/quantum_callable.py +6 -1
  74. classiq/qmod/quantum_expandable.py +29 -11
  75. classiq/qmod/quantum_function.py +8 -4
  76. classiq/qmod/semantics/annotation.py +38 -0
  77. classiq/qmod/semantics/error_manager.py +49 -0
  78. classiq/qmod/semantics/static_semantics_visitor.py +308 -0
  79. classiq/qmod/semantics/validation/func_call_validation.py +149 -0
  80. classiq/qmod/semantics/validation/types_validation.py +21 -0
  81. classiq/qmod/symbolic.py +6 -6
  82. classiq/qmod/symbolic_expr.py +26 -11
  83. classiq/qmod/utilities.py +23 -1
  84. {classiq-0.42.2.dist-info → classiq-0.43.1.dist-info}/METADATA +2 -2
  85. {classiq-0.42.2.dist-info → classiq-0.43.1.dist-info}/RECORD +88 -103
  86. classiq/_internals/_qfunc_ext.py +0 -6
  87. classiq/applications/libraries/ampltitude_estimation_library.py +0 -11
  88. classiq/interface/generator/credit_risk_example/linear_gci.py +0 -122
  89. classiq/interface/generator/credit_risk_example/weighted_adder.py +0 -69
  90. classiq/interface/generator/expressions/enums/chemistry.py +0 -28
  91. classiq/interface/generator/expressions/enums/classical_enum.py +0 -20
  92. classiq/interface/generator/expressions/enums/ladder_operator.py +0 -6
  93. classiq/interface/generator/expressions/enums/optimizers.py +0 -9
  94. classiq/interface/generator/expressions/enums/pauli.py +0 -8
  95. classiq/interface/generator/expressions/enums/qsvm_feature_map_entanglement.py +0 -9
  96. classiq/interface/generator/functions/foreign_function_definition.py +0 -114
  97. classiq/interface/generator/functions/function_implementation.py +0 -107
  98. classiq/interface/generator/functions/native_function_definition.py +0 -155
  99. classiq/interface/generator/functions/quantum_function_declaration.py +0 -69
  100. classiq/interface/generator/functions/register.py +0 -44
  101. classiq/interface/generator/functions/register_mapping_data.py +0 -106
  102. classiq/interface/generator/inequality_mixer.py +0 -51
  103. classiq/interface/generator/model/classical_main_validator.py +0 -106
  104. classiq/interface/generator/range_mixer.py +0 -56
  105. classiq/interface/generator/state_propagator.py +0 -74
  106. classiq/interface/model/resolvers/function_call_resolver.py +0 -64
  107. classiq/interface/model/validations/__init__.py +0 -0
  108. classiq/interface/model/validations/handle_validation_base.py +0 -55
  109. classiq/interface/model/validations/handles_validator.py +0 -153
  110. classiq/interface/model/validations/port_to_wire_name_generator.py +0 -12
  111. /classiq/{interface/generator/credit_risk_example → qmod/semantics}/__init__.py +0 -0
  112. /classiq/{interface/model/resolvers → qmod/semantics/validation}/__init__.py +0 -0
  113. {classiq-0.42.2.dist-info → classiq-0.43.1.dist-info}/WHEEL +0 -0
@@ -1,153 +0,0 @@
1
- from typing import Dict, Mapping, Set, Union
2
-
3
- from classiq.interface.generator.function_params import PortDirection
4
- from classiq.interface.generator.functions.builtins.quantum_operators import (
5
- APPLY_OPERATOR,
6
- )
7
- from classiq.interface.model.handle_binding import (
8
- HandleBinding,
9
- SlicedHandleBinding,
10
- SubscriptHandleBinding,
11
- )
12
- from classiq.interface.model.port_declaration import PortDeclaration
13
- from classiq.interface.model.quantum_function_call import QuantumFunctionCall
14
- from classiq.interface.model.quantum_statement import QuantumOperation
15
- from classiq.interface.model.statement_block import StatementBlock
16
- from classiq.interface.model.validation_handle import HandleState, ValidationHandle
17
- from classiq.interface.model.validations.handle_validation_base import (
18
- HandleValidationBase,
19
- )
20
- from classiq.interface.model.variable_declaration_statement import (
21
- VariableDeclarationStatement,
22
- )
23
- from classiq.interface.model.within_apply_operation import WithinApply
24
-
25
- from classiq.exceptions import ClassiqValueError
26
-
27
-
28
- def _initialize_handles_to_state(
29
- port_declarations: Mapping[str, PortDeclaration],
30
- ) -> Dict[str, ValidationHandle]:
31
- handles_to_state: Dict[str, ValidationHandle] = dict()
32
-
33
- for port_decl in port_declarations.values():
34
- handles_to_state[port_decl.name] = ValidationHandle(
35
- initial_state=(
36
- HandleState.INITIALIZED
37
- if port_decl.direction.includes_port_direction(PortDirection.Input)
38
- else HandleState.UNINITIALIZED
39
- )
40
- )
41
-
42
- return handles_to_state
43
-
44
-
45
- class HandleValidator(HandleValidationBase):
46
- def __init__(
47
- self,
48
- port_declarations: Mapping[str, PortDeclaration],
49
- ) -> None:
50
- super().__init__(port_declarations)
51
- self._port_declarations = port_declarations.values()
52
- self._handles_to_state = _initialize_handles_to_state(port_declarations)
53
-
54
- @property
55
- def _validation_handles_state(self) -> Mapping[str, ValidationHandle]:
56
- return self._handles_to_state
57
-
58
- def handle_operation(self, op: QuantumOperation) -> None:
59
- if isinstance(op, QuantumFunctionCall) and op.function == APPLY_OPERATOR.name:
60
- call_name = op.operands[APPLY_OPERATOR.operand_names[0]]
61
- self._handle_apply([QuantumFunctionCall(function=call_name)])
62
- elif isinstance(op, WithinApply):
63
- self._handle_apply(op.action)
64
-
65
- self._handle_inputs(op.wiring_inputs)
66
- self._handle_outputs(op.wiring_outputs)
67
- self._handle_inouts(op.wiring_inouts)
68
-
69
- def handle_variable_declaration(
70
- self, declaration: VariableDeclarationStatement
71
- ) -> None:
72
- handle_wiring_state = self._handles_to_state.get(declaration.name)
73
- if handle_wiring_state is not None:
74
- handle_wiring_state.append_error(
75
- f"Trying to declare a variable of the same name as previously declared variable {declaration.name}"
76
- )
77
- return
78
-
79
- self._handles_to_state[declaration.name] = ValidationHandle(
80
- HandleState.UNINITIALIZED
81
- )
82
-
83
- def _handle_inputs(self, inputs: Mapping[str, HandleBinding]) -> None:
84
- for handle_binding in inputs.values():
85
- handle_wiring_state = self._handles_to_state[handle_binding.name]
86
- if handle_wiring_state.state is not HandleState.INITIALIZED:
87
- handle_wiring_state.append_error(
88
- f"Trying to access handle {handle_binding.name!r} as input but it is in incorrect state"
89
- )
90
- continue
91
-
92
- handle_wiring_state.uninitialize()
93
-
94
- def _handle_outputs(self, outputs: Mapping[str, HandleBinding]) -> None:
95
- for handle_binding in outputs.values():
96
- handle_wiring_state = self._handles_to_state[handle_binding.name]
97
-
98
- if handle_wiring_state.state is not HandleState.UNINITIALIZED:
99
- handle_wiring_state.append_error(
100
- f"Trying to access handle {handle_binding.name!r} as output but it is in incorrect state"
101
- )
102
- continue
103
-
104
- handle_wiring_state.initialize()
105
-
106
- def _handle_inouts(
107
- self,
108
- inouts: Mapping[
109
- str, Union[SlicedHandleBinding, SubscriptHandleBinding, HandleBinding]
110
- ],
111
- ) -> None:
112
- sliced_handles = set()
113
- whole_handles = set()
114
-
115
- for handle_binding in inouts.values():
116
- handle_wiring_state = self._handles_to_state[handle_binding.name]
117
-
118
- if handle_wiring_state.state is not HandleState.INITIALIZED:
119
- handle_wiring_state.append_error(
120
- f"Trying to access handle {handle_binding.name!r} as inout but it is in incorrect state"
121
- )
122
-
123
- if isinstance(
124
- handle_binding, (SlicedHandleBinding, SubscriptHandleBinding)
125
- ):
126
- sliced_handles.add(handle_binding.name)
127
- else:
128
- whole_handles.add(handle_binding.name)
129
-
130
- for handle in sliced_handles & whole_handles:
131
- self._handles_to_state[handle].append_error(
132
- f"Invalid use of inout handle {handle!r}, used both in slice or subscript and whole"
133
- )
134
-
135
- def _handle_apply(self, body: StatementBlock) -> None:
136
- local_variables: Set[str] = set()
137
- output_capturing_variables: Set[str] = set()
138
- for statement in body:
139
- if isinstance(statement, VariableDeclarationStatement):
140
- local_variables.add(statement.name)
141
- elif isinstance(statement, QuantumOperation):
142
- for handle in statement.wiring_outputs.values():
143
- if (
144
- handle.name in local_variables
145
- or handle.name in output_capturing_variables
146
- ):
147
- continue
148
- output_capturing_variables.add(handle.name)
149
- self._handles_to_state[handle.name].initialize()
150
- else:
151
- raise ClassiqValueError(
152
- f"Unknown statement type {type(statement).__name__}"
153
- )
@@ -1,12 +0,0 @@
1
- import typing
2
- from collections import Counter
3
-
4
-
5
- class PortToWireNameGenerator:
6
- def __init__(self) -> None:
7
- self._name_counter: typing.Counter[str] = Counter()
8
-
9
- def get(self, port_name: str) -> str:
10
- counter = self._name_counter[port_name]
11
- self._name_counter[port_name] += 1
12
- return f"{port_name}_{counter}"