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.
- classiq/__init__.py +2 -6
- classiq/_internals/api_wrapper.py +6 -12
- classiq/_internals/authentication/token_manager.py +5 -2
- classiq/_internals/jobs.py +5 -10
- classiq/analyzer/rb.py +3 -3
- classiq/applications/chemistry/chemistry_model_constructor.py +12 -8
- classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +2 -2
- classiq/applications/finance/finance_model_constructor.py +16 -13
- classiq/applications/qsvm/__init__.py +1 -3
- classiq/applications/qsvm/qsvm_model_constructor.py +7 -6
- classiq/exceptions.py +9 -4
- classiq/execution/execution_session.py +5 -2
- classiq/execution/qnn.py +1 -1
- classiq/executor.py +0 -2
- classiq/interface/_version.py +1 -1
- classiq/interface/chemistry/operator.py +19 -5
- classiq/interface/executor/constants.py +1 -0
- classiq/interface/finance/function_input.py +16 -10
- classiq/interface/generator/application_apis/chemistry_declarations.py +2 -2
- classiq/interface/generator/application_apis/qsvm_declarations.py +4 -2
- classiq/interface/generator/arith/argument_utils.py +20 -3
- classiq/interface/generator/arith/arithmetic_expression_validator.py +3 -26
- classiq/interface/generator/arith/binary_ops.py +8 -14
- classiq/interface/generator/arith/extremum_operations.py +30 -0
- classiq/interface/generator/arith/number_utils.py +1 -1
- classiq/interface/generator/arith/unary_ops.py +1 -3
- classiq/interface/generator/compiler_keywords.py +1 -1
- classiq/interface/generator/expressions/atomic_expression_functions.py +13 -3
- classiq/interface/generator/expressions/enums/__init__.py +0 -20
- classiq/interface/generator/expressions/enums/finance_functions.py +11 -18
- classiq/interface/generator/expressions/non_symbolic_expr.py +119 -0
- classiq/interface/generator/expressions/qmod_qarray_proxy.py +52 -37
- classiq/interface/generator/expressions/qmod_qscalar_proxy.py +16 -11
- classiq/interface/generator/expressions/qmod_sized_proxy.py +5 -5
- classiq/interface/generator/function_param_list_without_self_reference.py +0 -10
- classiq/interface/generator/function_params.py +0 -4
- classiq/interface/generator/functions/__init__.py +0 -20
- classiq/interface/generator/functions/builtins/core_library/exponentiation_functions.py +2 -2
- classiq/interface/generator/functions/builtins/open_lib_functions.py +530 -1
- classiq/interface/generator/functions/classical_type.py +22 -69
- classiq/interface/generator/functions/port_declaration.py +0 -11
- classiq/interface/generator/model/__init__.py +0 -1
- classiq/interface/generator/model/model.py +9 -185
- classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +3 -1
- classiq/interface/generator/types/builtin_enum_declarations.py +69 -0
- classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +2 -2
- classiq/interface/generator/types/enum_declaration.py +57 -0
- classiq/interface/jobs.py +36 -65
- classiq/interface/model/bind_operation.py +3 -0
- classiq/interface/model/classical_parameter_declaration.py +3 -0
- classiq/interface/model/handle_binding.py +7 -0
- classiq/interface/model/inplace_binary_operation.py +13 -15
- classiq/interface/model/model.py +8 -20
- classiq/interface/model/native_function_definition.py +0 -17
- classiq/interface/model/quantum_function_call.py +63 -182
- classiq/interface/model/quantum_type.py +71 -10
- classiq/interface/server/routes.py +0 -6
- classiq/qmod/__init__.py +3 -3
- classiq/qmod/builtins/__init__.py +10 -1
- classiq/qmod/builtins/classical_execution_primitives.py +4 -2
- classiq/qmod/builtins/enums.py +177 -0
- classiq/qmod/builtins/functions.py +1 -2
- classiq/qmod/builtins/operations.py +2 -4
- classiq/qmod/builtins/structs.py +16 -17
- classiq/qmod/declaration_inferrer.py +23 -20
- classiq/qmod/model_state_container.py +2 -0
- classiq/qmod/native/pretty_printer.py +31 -13
- classiq/qmod/pretty_print/pretty_printer.py +52 -27
- classiq/qmod/qmod_constant.py +7 -3
- classiq/qmod/qmod_parameter.py +2 -1
- classiq/qmod/qmod_struct.py +9 -33
- classiq/qmod/qmod_variable.py +55 -22
- classiq/qmod/quantum_callable.py +6 -1
- classiq/qmod/quantum_expandable.py +29 -11
- classiq/qmod/quantum_function.py +8 -4
- classiq/qmod/semantics/annotation.py +38 -0
- classiq/qmod/semantics/error_manager.py +49 -0
- classiq/qmod/semantics/static_semantics_visitor.py +308 -0
- classiq/qmod/semantics/validation/func_call_validation.py +149 -0
- classiq/qmod/semantics/validation/types_validation.py +21 -0
- classiq/qmod/symbolic.py +6 -6
- classiq/qmod/symbolic_expr.py +26 -11
- classiq/qmod/utilities.py +23 -1
- {classiq-0.42.2.dist-info → classiq-0.43.1.dist-info}/METADATA +2 -2
- {classiq-0.42.2.dist-info → classiq-0.43.1.dist-info}/RECORD +88 -103
- classiq/_internals/_qfunc_ext.py +0 -6
- classiq/applications/libraries/ampltitude_estimation_library.py +0 -11
- classiq/interface/generator/credit_risk_example/linear_gci.py +0 -122
- classiq/interface/generator/credit_risk_example/weighted_adder.py +0 -69
- classiq/interface/generator/expressions/enums/chemistry.py +0 -28
- classiq/interface/generator/expressions/enums/classical_enum.py +0 -20
- classiq/interface/generator/expressions/enums/ladder_operator.py +0 -6
- classiq/interface/generator/expressions/enums/optimizers.py +0 -9
- classiq/interface/generator/expressions/enums/pauli.py +0 -8
- classiq/interface/generator/expressions/enums/qsvm_feature_map_entanglement.py +0 -9
- classiq/interface/generator/functions/foreign_function_definition.py +0 -114
- classiq/interface/generator/functions/function_implementation.py +0 -107
- classiq/interface/generator/functions/native_function_definition.py +0 -155
- classiq/interface/generator/functions/quantum_function_declaration.py +0 -69
- classiq/interface/generator/functions/register.py +0 -44
- classiq/interface/generator/functions/register_mapping_data.py +0 -106
- classiq/interface/generator/inequality_mixer.py +0 -51
- classiq/interface/generator/model/classical_main_validator.py +0 -106
- classiq/interface/generator/range_mixer.py +0 -56
- classiq/interface/generator/state_propagator.py +0 -74
- classiq/interface/model/resolvers/function_call_resolver.py +0 -64
- classiq/interface/model/validations/__init__.py +0 -0
- classiq/interface/model/validations/handle_validation_base.py +0 -55
- classiq/interface/model/validations/handles_validator.py +0 -153
- classiq/interface/model/validations/port_to_wire_name_generator.py +0 -12
- /classiq/{interface/generator/credit_risk_example → qmod/semantics}/__init__.py +0 -0
- /classiq/{interface/model/resolvers → qmod/semantics/validation}/__init__.py +0 -0
- {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}"
|
File without changes
|
File without changes
|
File without changes
|