classiq 0.81.0__py3-none-any.whl → 0.82.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.
@@ -27,10 +27,16 @@ def is_classiq_studio() -> bool:
27
27
  return bool(os.environ.get("OPENVSCODE"))
28
28
 
29
29
 
30
- def get_app_url(data_id: DataID, circuit: QuantumProgram) -> str:
30
+ def get_app_url(
31
+ data_id: DataID, circuit: QuantumProgram, include_query: bool = True
32
+ ) -> str:
31
33
  return urljoin(
32
34
  client_ide_base_url(),
33
- circuit_page_uri(circuit_id=data_id.id, circuit_version=circuit.version),
35
+ circuit_page_uri(
36
+ circuit_id=data_id.id,
37
+ circuit_version=circuit.version,
38
+ include_query=include_query,
39
+ ),
34
40
  )
35
41
 
36
42
 
@@ -95,7 +101,7 @@ async def handle_remote_app(circuit: QuantumProgram, display_url: bool = True) -
95
101
 
96
102
  renderer = get_visualization_renderer()
97
103
  if display_url:
98
- app_url = get_app_url(circuit_dataid, circuit)
104
+ app_url = get_app_url(circuit_dataid, circuit, include_query=False)
99
105
  print(f"Quantum program link: {app_url}") # noqa: T201
100
106
  await renderer(circuit_dataid, circuit)
101
107
 
@@ -111,7 +117,7 @@ async def _show_interactive(self: QuantumProgram, display_url: bool = True) -> N
111
117
  Whether to print the url
112
118
 
113
119
  Links:
114
- [Visualization tool](https://docs.classiq.io/latest/reference-manual/analyzer/quantum-program-visualization-tool/)
120
+ [Visualization tool](https://docs.classiq.io/latest/user-guide/analysis/quantum-program-visualization-tool/)
115
121
  """
116
122
  await handle_remote_app(self, display_url)
117
123
 
@@ -24,8 +24,9 @@ def circuit_page_search_params(circuit_version: str) -> str:
24
24
  )
25
25
 
26
26
 
27
- def circuit_page_uri(circuit_id: str, circuit_version: str) -> str:
27
+ def circuit_page_uri(circuit_id: str, circuit_version: str, include_query: bool) -> str:
28
28
  url = urljoin(f"{routes.ANALYZER_CIRCUIT_PAGE}/", circuit_id)
29
- query_string = circuit_page_search_params(circuit_version)
30
- url += QUERY_START_MARK + query_string
29
+ if include_query:
30
+ query_string = circuit_page_search_params(circuit_version)
31
+ url += QUERY_START_MARK + query_string
31
32
  return url
@@ -273,6 +273,6 @@ class QLayer(nn.Module):
273
273
  self._epsilon,
274
274
  )
275
275
 
276
- def _cleanup(self) -> None:
276
+ def teardown(self) -> None:
277
277
  if hasattr(self, "_session"):
278
278
  self._session.close()
@@ -3,5 +3,5 @@ from packaging.version import Version
3
3
  # This file was generated automatically
4
4
  # Please don't track in version control (DONTTRACK)
5
5
 
6
- SEMVER_VERSION = '0.81.0'
6
+ SEMVER_VERSION = '0.82.0'
7
7
  VERSION = str(Version(SEMVER_VERSION))
@@ -30,9 +30,6 @@ class BackendPreferences(BaseModel):
30
30
  """
31
31
  Preferences for the execution of the quantum program.
32
32
 
33
- For more details, refer to:
34
- [BackendPreferences](https://docs.classiq.io/latest/reference-manual/python-sdk/?h=backend#classiq.Preferences.backend_preferences)
35
-
36
33
  Attributes:
37
34
  backend_service_provider (str): Provider company or cloud for the requested backend.
38
35
  backend_name (str): Name of the requested backend or target.
@@ -29,7 +29,8 @@ class ExecutionPreferences(pydantic.BaseModel):
29
29
  Execution preferences for running a quantum program.
30
30
 
31
31
  For more details, refer to:
32
- `ExecutionPreferences example: [ExecutionPreferences](https://docs.classiq.io/latest/reference-manual/executor/?h=execution+pref#execution-preferences)..
32
+ ExecutionPreferences example: [ExecutionPreferences](https://docs.classiq.io/latest/user-guide/execution/#execution-preferences)..
33
+
33
34
 
34
35
  Attributes:
35
36
  noise_properties (Optional[NoiseProperties]): Properties defining the noise in the quantum circuit. Defaults to `None`.
@@ -5,4 +5,4 @@ INPLACE_ARITH_AUX_VAR_PREFIX = "_tmp"
5
5
 
6
6
 
7
7
  def generate_original_function_name(name: str) -> str:
8
- return name.split(f"_{EXPANDED_KEYWORD}")[0]
8
+ return name.split(f"_{LAMBDA_KEYWORD}")[0].split(f"_{EXPANDED_KEYWORD}")[0]
@@ -1,4 +1,5 @@
1
1
  import uuid
2
+ import warnings
2
3
  from datetime import datetime, timezone
3
4
  from pathlib import Path
4
5
  from typing import Optional, Union
@@ -8,6 +9,7 @@ from typing_extensions import TypeAlias
8
9
 
9
10
  from classiq.interface.compression_utils import decompress
10
11
  from classiq.interface.exceptions import (
12
+ ClassiqDeprecationWarning,
11
13
  ClassiqMissingOutputFormatError,
12
14
  ClassiqStateInitializationError,
13
15
  )
@@ -72,6 +74,8 @@ class QuantumProgram(VersionedModel, CircuitCodeInterface):
72
74
  compressed_debug_info: Optional[bytes] = pydantic.Field(default=None)
73
75
  program_id: str = pydantic.Field(default_factory=get_uuid_as_str)
74
76
  execution_primitives_input: Optional[PrimitivesInput] = pydantic.Field(default=None)
77
+ synthesis_warnings: Optional[list[str]] = pydantic.Field(default=None)
78
+ should_warn: bool = pydantic.Field(default=False)
75
79
 
76
80
  def __str__(self) -> str:
77
81
  return self.model_dump_json(indent=2)
@@ -198,3 +202,12 @@ class QuantumProgram(VersionedModel, CircuitCodeInterface):
198
202
  FunctionDebugInfoInterface.model_validate(debug_info_dict)
199
203
  for debug_info_dict in decompressed_debug_info_dict_list
200
204
  ]
205
+
206
+ def raise_warnings(self) -> None:
207
+ """
208
+ Raises all warnings that were collected during synthesis.
209
+ """
210
+ if self.synthesis_warnings is None:
211
+ return
212
+ for warning in self.synthesis_warnings:
213
+ warnings.warn(warning, ClassiqDeprecationWarning, stacklevel=2)
@@ -1,10 +1,19 @@
1
- from pydantic import BaseModel, Field, NonNegativeInt
1
+ from pydantic import BaseModel, Field, NonNegativeInt, PrivateAttr
2
2
 
3
3
 
4
4
  class CompilationMetadata(BaseModel):
5
5
  should_synthesize_separately: bool = Field(default=False)
6
6
  occurrences_number: NonNegativeInt = Field(default=1)
7
+ _occupation_number: NonNegativeInt = PrivateAttr(default=0)
7
8
  unchecked: list[str] = Field(default_factory=list)
8
9
  atomic_qualifiers: list[str] = Field(
9
10
  default_factory=list, exclude=True
10
- ) # TODO remove after deprecation https://classiq.atlassian.net/browse/CLS-2671
11
+ ) # TODO remove after deprecation https://classiq.atlassian.net/browse/CLS-2671 atomic_qualifiers: list[str] = Field(default_factory=list)
12
+
13
+ @property
14
+ def occupation_number(self) -> NonNegativeInt:
15
+ return self._occupation_number
16
+
17
+ @occupation_number.setter
18
+ def occupation_number(self, value: NonNegativeInt) -> None:
19
+ self._occupation_number = value
@@ -75,6 +75,8 @@ from classiq.qmod.utilities import qmod_val_to_expr_str
75
75
 
76
76
 
77
77
  class BaseInterpreter:
78
+ skip_type_modifier_validation: bool = False
79
+
78
80
  def __init__(self, model: Model) -> None:
79
81
  validate_model(model)
80
82
  self._model = model
@@ -424,9 +424,9 @@ class CallEmitter(Generic[QuantumStatementT], Emitter[QuantumStatementT], VarSpl
424
424
  unchecked = self._functions_compilation_metadata.get(
425
425
  func_context.name, CompilationMetadata()
426
426
  ).unchecked
427
- TypeQualifierValidation().run(
428
- func_def.port_declarations, func_def.body, unchecked
429
- )
427
+ TypeQualifierValidation(
428
+ skip_validation=self._interpreter.skip_type_modifier_validation
429
+ ).run(func_def.port_declarations, func_def.body, unchecked)
430
430
 
431
431
  @staticmethod
432
432
  def _should_override_type_qualifiers(func_context: FunctionContext) -> bool:
@@ -1,13 +1,17 @@
1
1
  import ast
2
2
  import functools
3
3
  import itertools
4
+ import warnings
4
5
  from collections.abc import Collection, Iterator, Sequence
5
6
  from contextlib import contextmanager
6
7
 
7
8
  from classiq.interface.exceptions import (
8
- ClassiqExpansionError,
9
+ ClassiqDeprecationWarning,
9
10
  ClassiqInternalExpansionError,
10
11
  )
12
+ from classiq.interface.generator.functions.port_declaration import (
13
+ PortDeclarationDirection,
14
+ )
11
15
  from classiq.interface.generator.functions.type_qualifier import TypeQualifier
12
16
  from classiq.interface.model.allocate import Allocate
13
17
  from classiq.interface.model.bind_operation import BindOperation
@@ -40,7 +44,21 @@ def _inconsistent_type_qualifier_error(
40
44
  f"The type modifier of variable '{port_name}' does not conform to the function signature: "
41
45
  f"expected '{expected.name}', but found '{actual.name}'.\n"
42
46
  f"Tip: If the final role of the variable in the function matches '{expected.name}', "
43
- f"you may use the `unchecked` flag to instruct the compiler to disregard individual operations."
47
+ f"you may use the `unchecked` flag to instruct the compiler to disregard individual operations.\n"
48
+ # TODO add earliest date of enforcement. See https://classiq.atlassian.net/browse/CLS-2709.
49
+ )
50
+
51
+
52
+ def _inconsistent_type_qualifier_in_binding_error(
53
+ expected: TypeQualifier, known_qualifiers: dict[str, TypeQualifier]
54
+ ) -> str:
55
+ actual = ", ".join(
56
+ f"{name}: {qualifier.name}" for name, qualifier in known_qualifiers.items()
57
+ )
58
+ return (
59
+ f"The variable binding has inconsistent type modifiers: "
60
+ f"Expected modifier: {expected.name}, Actual modifiers: {actual}"
61
+ # TODO add earliest date of enforcement. See https://classiq.atlassian.net/browse/CLS-2709.
44
62
  )
45
63
 
46
64
 
@@ -52,14 +70,21 @@ class TypeQualifierValidation(ModelVisitor):
52
70
  The function definition ports are modified inplace.
53
71
  """
54
72
 
55
- def __init__(self, support_unused_ports: bool = True) -> None:
73
+ def __init__(
74
+ self, *, skip_validation: bool = False, support_unused_ports: bool = True
75
+ ) -> None:
56
76
  self._signature_ports: dict[str, PortDeclaration] = dict()
57
77
  self._inferred_ports: dict[str, PortDeclaration] = dict()
58
78
  self._unchecked: set[str] = set()
79
+
80
+ self._initialized_vars: dict[str, TypeQualifier] = dict()
81
+ self._bound_vars: list[set[str]] = []
82
+
59
83
  self._conjugation_context: bool = False
60
84
  self._support_unused_ports = (
61
85
  support_unused_ports # could be turned off for debugging
62
86
  )
87
+ self._skip_validation = skip_validation
63
88
 
64
89
  @contextmanager
65
90
  def validate_ports(
@@ -72,9 +97,12 @@ class TypeQualifierValidation(ModelVisitor):
72
97
  self._signature_ports[port.name] = port
73
98
  self._unchecked.update(unchecked)
74
99
 
75
- yield len(self._inferred_ports) > 0 or any(
76
- port.type_qualifier is not TypeQualifier.Quantum
77
- for port in self._signature_ports.values()
100
+ yield len(self._inferred_ports) > 0 or (
101
+ any(
102
+ port.type_qualifier is not TypeQualifier.Quantum
103
+ for port in self._signature_ports.values()
104
+ )
105
+ and not self._skip_validation
78
106
  )
79
107
 
80
108
  self._set_unused_as_const()
@@ -115,19 +143,39 @@ class TypeQualifierValidation(ModelVisitor):
115
143
  )
116
144
  return
117
145
 
118
- if candidate not in self._signature_ports or candidate in self._unchecked:
146
+ if self._skip_validation or candidate in self._unchecked:
119
147
  return
120
148
 
149
+ if candidate in self._signature_ports:
150
+ self._validate_signature_qualifier(candidate, qualifier)
151
+
152
+ elif candidate in self._initialized_vars:
153
+ self._initialized_vars[candidate] = TypeQualifier.and_(
154
+ self._initialized_vars[candidate], qualifier
155
+ )
156
+
157
+ def _validate_signature_qualifier(
158
+ self, candidate: str, qualifier: TypeQualifier
159
+ ) -> None:
121
160
  signature_qualifier = self._signature_ports[candidate].type_qualifier
122
161
  if signature_qualifier is not TypeQualifier.and_(
123
162
  signature_qualifier, qualifier
124
163
  ):
125
- raise ClassiqExpansionError(
164
+ warnings.warn(
126
165
  _inconsistent_type_qualifier_error(
127
166
  candidate, signature_qualifier, qualifier
128
- )
167
+ ),
168
+ ClassiqDeprecationWarning,
169
+ stacklevel=1,
129
170
  )
130
171
 
172
+ def _add_initialized_qualifier(self, var: str, qualifier: TypeQualifier) -> None:
173
+ if var in self._inferred_ports or var in self._signature_ports:
174
+ return
175
+ if self._conjugation_context and qualifier is TypeQualifier.QFree:
176
+ qualifier = TypeQualifier.Const
177
+ self._initialized_vars[var] = qualifier
178
+
131
179
  def run(
132
180
  self,
133
181
  ports: Collection[PortDeclaration],
@@ -137,59 +185,92 @@ class TypeQualifierValidation(ModelVisitor):
137
185
  with self.validate_ports(ports, unchecked) as should_validate:
138
186
  if should_validate:
139
187
  self.visit(body)
188
+ self._update_bound_vars()
189
+
190
+ def _update_bound_vars(self) -> None:
191
+ merged_bound_vars = _merge_overlapping(self._bound_vars)
192
+ for bound_vars in merged_bound_vars:
193
+ reduced_qualifier = self._get_reduced_qualifier(bound_vars)
194
+ for var in bound_vars:
195
+ self._validate_qualifier(var, reduced_qualifier)
140
196
 
141
197
  def visit_QuantumFunctionCall(self, call: QuantumFunctionCall) -> None:
142
198
  for handle, port in call.handles_with_params:
143
199
  self._validate_qualifier(handle.name, port.type_qualifier)
200
+ if port.direction is PortDeclarationDirection.Output:
201
+ self._add_initialized_qualifier(handle.name, port.type_qualifier)
202
+
203
+ if self._has_inputs(call):
204
+ bound_vars = {
205
+ handle.name
206
+ for handle, port in call.handles_with_params
207
+ if port.direction is not PortDeclarationDirection.Inout
208
+ }
209
+ self._bound_vars.append(bound_vars)
210
+
211
+ @staticmethod
212
+ def _has_inputs(call: QuantumFunctionCall) -> bool:
213
+ return any(
214
+ port.direction is PortDeclarationDirection.Input
215
+ for _, port in call.handles_with_params
216
+ )
144
217
 
145
218
  def visit_Allocate(self, alloc: Allocate) -> None:
146
219
  self._validate_qualifier(alloc.target.name, TypeQualifier.QFree)
220
+ self._add_initialized_qualifier(alloc.target.name, TypeQualifier.QFree)
147
221
 
148
222
  def visit_BindOperation(self, bind_op: BindOperation) -> None:
149
- reduced_qualifier = self._get_reduced_qualifier(bind_op)
150
- for handle in itertools.chain(bind_op.in_handles, bind_op.out_handles):
151
- self._validate_qualifier(handle.name, reduced_qualifier)
152
-
153
- def _get_reduced_qualifier(self, bind_op: BindOperation) -> TypeQualifier:
154
- handles = itertools.chain(bind_op.in_handles, bind_op.out_handles)
155
- op_vars = {handle.name for handle in handles}
156
-
157
- signature_ports = {
158
- name: self._signature_ports[name]
159
- for name in op_vars.intersection(self._signature_ports)
223
+ var_names = {
224
+ handle.name
225
+ for handle in itertools.chain(bind_op.in_handles, bind_op.out_handles)
226
+ }
227
+ self._bound_vars.append(var_names)
228
+ for handle in bind_op.out_handles:
229
+ self._add_initialized_qualifier(handle.name, TypeQualifier.Inferred)
230
+
231
+ def _get_reduced_qualifier(self, bound_vars: set[str]) -> TypeQualifier:
232
+ signature_qualifier = {
233
+ name: self._signature_ports[name].type_qualifier
234
+ for name in bound_vars.intersection(self._signature_ports)
160
235
  }
161
- known_inferred_ports = {
162
- name: self._inferred_ports[name]
163
- for name in op_vars.intersection(self._inferred_ports)
236
+ known_inferred_qualifiers = {
237
+ name: self._inferred_ports[name].type_qualifier
238
+ for name in bound_vars.intersection(self._inferred_ports)
164
239
  if self._inferred_ports[name].type_qualifier is not TypeQualifier.Inferred
165
240
  }
166
- min_qualifier = self._get_min_qualifier(known_inferred_ports, signature_ports)
241
+ known_initialized_qualifiers = {
242
+ name: self._initialized_vars[name]
243
+ for name in bound_vars.intersection(self._initialized_vars)
244
+ if self._initialized_vars[name] is not TypeQualifier.Inferred
245
+ }
246
+ known_qualifiers = (
247
+ signature_qualifier
248
+ | known_inferred_qualifiers
249
+ | known_initialized_qualifiers
250
+ )
251
+ min_qualifier = self._get_min_qualifier(list(known_qualifiers.values()))
167
252
  if not all(
168
- port.type_qualifier is min_qualifier for port in signature_ports.values()
253
+ type_qualifier is min_qualifier
254
+ for type_qualifier in signature_qualifier.values()
169
255
  ):
170
- raise ClassiqInternalExpansionError(
171
- f"Bind operation {bind_op} has inconsistent type qualifiers: "
172
- f"{signature_ports}, {known_inferred_ports}"
256
+ warnings.warn(
257
+ _inconsistent_type_qualifier_in_binding_error(
258
+ min_qualifier, known_qualifiers
259
+ ),
260
+ ClassiqDeprecationWarning,
261
+ stacklevel=1,
173
262
  )
174
263
 
175
264
  return min_qualifier
176
265
 
177
266
  @staticmethod
178
- def _get_min_qualifier(
179
- known_inferred_ports: dict[str, PortDeclaration],
180
- signature_ports: dict[str, PortDeclaration],
181
- ) -> TypeQualifier:
182
- known_ports = tuple(
183
- itertools.chain(signature_ports.values(), known_inferred_ports.values())
184
- )
185
- if len(known_ports) == 0:
267
+ def _get_min_qualifier(qualifiers: list[TypeQualifier]) -> TypeQualifier:
268
+ if len(qualifiers) == 0:
186
269
  return TypeQualifier.Const
187
- elif len(known_ports) == 1:
188
- return known_ports[0].type_qualifier
270
+ elif len(qualifiers) == 1:
271
+ return qualifiers[0]
189
272
  else:
190
- return functools.reduce(
191
- TypeQualifier.and_, (port.type_qualifier for port in known_ports)
192
- )
273
+ return functools.reduce(TypeQualifier.and_, qualifiers)
193
274
 
194
275
  @staticmethod
195
276
  def _extract_expr_vars(expr_op: QuantumExpressionOperation) -> list[str]:
@@ -204,6 +285,8 @@ class TypeQualifierValidation(ModelVisitor):
204
285
  self._validate_qualifier(result_var, TypeQualifier.QFree)
205
286
  for expr_var in self._extract_expr_vars(arith):
206
287
  self._validate_qualifier(expr_var, TypeQualifier.Const)
288
+ if not arith.is_inplace:
289
+ self._add_initialized_qualifier(result_var, TypeQualifier.QFree)
207
290
 
208
291
  def visit_AmplitudeLoadingOperation(
209
292
  self, amp_load: AmplitudeLoadingOperation
@@ -234,3 +317,37 @@ class TypeQualifierValidation(ModelVisitor):
234
317
  with self.conjugation_context():
235
318
  self.visit(within_apply.compute)
236
319
  self.visit(within_apply.action)
320
+
321
+
322
+ def _merge_overlapping(bound_vars: Sequence[Collection[str]]) -> list[set[str]]:
323
+ """
324
+ Merges overlapping sets of bound variables.
325
+ Two sets overlap if they share at least one variable.
326
+ """
327
+ all_bound_vars = bound_vars
328
+ merged_bound_vars: list[set[str]] = []
329
+ loop_guard: int = 10
330
+ idx: int = 0
331
+
332
+ for _ in range(loop_guard):
333
+ idx += 1
334
+
335
+ merged_bound_vars = []
336
+ modified: bool = False
337
+ for current_bound_vars in all_bound_vars:
338
+ for existing in merged_bound_vars:
339
+ if existing.intersection(current_bound_vars):
340
+ existing.update(current_bound_vars)
341
+ modified = True
342
+ break
343
+ else:
344
+ merged_bound_vars.append(set(current_bound_vars))
345
+
346
+ if not modified:
347
+ break
348
+ all_bound_vars = merged_bound_vars
349
+
350
+ if idx == loop_guard - 1:
351
+ raise ClassiqInternalExpansionError
352
+
353
+ return merged_bound_vars
@@ -97,11 +97,14 @@ class DSLPrettyPrinter(ModelVisitor):
97
97
  self,
98
98
  decimal_precision: Optional[int] = DEFAULT_DECIMAL_PRECISION,
99
99
  emit_open_lib_functions: bool = False,
100
+ compilation_metadata: Optional[dict[str, CompilationMetadata]] = None,
100
101
  ) -> None:
101
102
  self._level = 0
102
103
  self._decimal_precision = decimal_precision
103
104
  self._emit_open_lib_functions = emit_open_lib_functions
104
- self._compilation_metadata: dict[str, CompilationMetadata] = {}
105
+ self._compilation_metadata: dict[str, CompilationMetadata] = (
106
+ compilation_metadata or {}
107
+ )
105
108
 
106
109
  def visit(self, node: NodeType) -> str:
107
110
  res = super().visit(node)
@@ -73,9 +73,15 @@ class ErrorManager:
73
73
  def has_errors(self) -> bool:
74
74
  return len(self._errors) > 0
75
75
 
76
- def report_errors(self, error_type: type[Exception]) -> None:
76
+ def report_errors(
77
+ self, error_type: type[Exception], mask: Optional[list[int]] = None
78
+ ) -> None:
77
79
  if self.has_errors():
78
- errors = self.annotated_errors
80
+ errors = (
81
+ self.annotated_errors
82
+ if mask is None
83
+ else [self.annotated_errors[idx] for idx in mask]
84
+ )
79
85
  self.clear()
80
86
  raise error_type("\n\t" + "\n\t".join(errors))
81
87
 
classiq/synthesis.py CHANGED
@@ -27,7 +27,7 @@ def show(quantum_program: QuantumProgram, display_url: bool = True) -> None:
27
27
  Whether to print the url
28
28
 
29
29
  Links:
30
- [Visualization tool](https://docs.classiq.io/latest/reference-manual/analyzer/quantum-program-visualization-tool/)
30
+ [Visualization tool](https://docs.classiq.io/latest/user-guide/analysis/quantum-program-visualization-tool/)
31
31
  """
32
32
  QuantumProgram.model_validate(quantum_program)
33
33
  quantum_program.show() # type: ignore[attr-defined]
@@ -54,7 +54,10 @@ async def synthesize_async(
54
54
  serialized_model: SerializedModel,
55
55
  ) -> QuantumProgram:
56
56
  model = Model.model_validate_json(serialized_model)
57
- return await ApiWrapper.call_generation_task(model)
57
+ quantum_program = await ApiWrapper.call_generation_task(model)
58
+ if quantum_program.should_warn:
59
+ quantum_program.raise_warnings()
60
+ return quantum_program
58
61
 
59
62
 
60
63
  def synthesize(
@@ -202,7 +205,7 @@ def set_execution_preferences(
202
205
  Returns:
203
206
  SerializedModel: The model with the attached execution preferences.
204
207
 
205
- For more examples please see: [set_execution_preferences](https://docs.classiq.io/latest/reference-manual/executor/?h=set_execution_preferences#usage)
208
+ For more examples please see: [set_execution_preferences](https://docs.classiq.io/latest/user-guide/execution/#execution-preferences)
206
209
  """
207
210
  if execution_preferences is None:
208
211
  if kwargs:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: classiq
3
- Version: 0.81.0
3
+ Version: 0.82.0
4
4
  Summary: Classiq's Python SDK for quantum computing
5
5
  License: Proprietary
6
6
  Keywords: quantum computing,quantum circuits,quantum algorithms,QAD,QDL
@@ -22,8 +22,8 @@ classiq/analyzer/__init__.py,sha256=1ASEd3a5BLznMq_uD4ogR6buanALXfJIONZYmCweAgA,
22
22
  classiq/analyzer/analyzer.py,sha256=GOCuI9YpNCOGuA139j9gCMheu8qBDuj0wixNg-cyXpU,6648
23
23
  classiq/analyzer/analyzer_utilities.py,sha256=PT_WsLygmAx4Hf7-VGBzKi6xHclIy5FYelCkdtChe1k,3658
24
24
  classiq/analyzer/rb.py,sha256=gUQPYEcy99rLcV-MQG87HSbiQP4IP_Qz3KKqqeq2T2E,4934
25
- classiq/analyzer/show_interactive_hack.py,sha256=NsPORQS55zoZQ8E9es8Dcd54GkjBjz8qCHlxafNTYlU,4601
26
- classiq/analyzer/url_utils.py,sha256=I819GIoqFOiGN92BeUuwh8dmpjZ0343fuzkzmooNMjI,778
25
+ classiq/analyzer/show_interactive_hack.py,sha256=iSHMUHXcK90_HpOc9hAUEbNyKpwotyVEkSiM_JZc9Oo,4726
26
+ classiq/analyzer/url_utils.py,sha256=VkZCzidnFRIAGShn0u1PO3BFJvN5776_szco8Y7Vejs,829
27
27
  classiq/applications/__init__.py,sha256=gb2dQI2ZuiU3c77hUAAY0D-BIW4YLD-9W5dKzOmMR1U,306
28
28
  classiq/applications/chemistry/__init__.py,sha256=_OGx8E8znq8jpjnHCSj89NpjxkcFZZ7endS5JLCybBM,1094
29
29
  classiq/applications/chemistry/ansatz_parameters.py,sha256=2YXfTOGrsCc6xMpLiGhnIQfI6iBXvlWOS9DY862fgJc,673
@@ -77,7 +77,7 @@ classiq/applications/qnn/datasets/datasets_utils.py,sha256=LgerS3HPe82gVTMg6YLWF
77
77
  classiq/applications/qnn/gradients/__init__.py,sha256=md5sLINVaPeZUHJUe1ZtIcqLN_V_I2RKfBe3mO3zZs4,102
78
78
  classiq/applications/qnn/gradients/quantum_gradient.py,sha256=FtyrLbpN4lqOlrj86LFtUGvTUZs_Jajblzrau5a0-CE,1169
79
79
  classiq/applications/qnn/gradients/simple_quantum_gradient.py,sha256=QT1wh9SpSFtRH0-OxRsWxCKHlDjLumNwyVAcmR9r78w,5020
80
- classiq/applications/qnn/qlayer.py,sha256=qO5lcI6ZuCXYi6Nim4GoInD6aRQGv0XjaXBZg8UNORc,9066
80
+ classiq/applications/qnn/qlayer.py,sha256=AfLgvNfWQpF-srLbGC4DIZYCm7PLPQ7sHI0B_J_pgtc,9066
81
81
  classiq/applications/qnn/torch_utils.py,sha256=vCUsTyvDCSwY9Z9rcK9QslEzAVag3caTHFXXH8iblUg,4430
82
82
  classiq/applications/qnn/types.py,sha256=mDElTam102OolLt1KWrVHZPW_9jNTUyhohJLEN-SOs0,835
83
83
  classiq/applications/qsvm/__init__.py,sha256=ctM9hllKY9zuc3Ps8YgLBrDXgPInJNwJ3nVpTurs8MY,191
@@ -92,7 +92,7 @@ classiq/execution/qnn.py,sha256=BjwJw0LXr_I_eeZuXrFTpNVcs6pFBCvzsys8ZraRZZg,2373
92
92
  classiq/execution/user_budgets.py,sha256=FY21S7fh6KwBFw5YcZhzWzIktIMifMOLc-fO772EmxE,1184
93
93
  classiq/executor.py,sha256=uLr1640-DZtdPP0T6fCsmUf1Jj7QPumyoE09mJ8lVo0,2308
94
94
  classiq/interface/__init__.py,sha256=cg7hD_XVu1_jJ1fgwmT0rMIoZHopNVeB8xtlmMx-E_A,83
95
- classiq/interface/_version.py,sha256=TKmDU2L_TTzt9MBR8Quyy7bepvvJDlCgTBbwmdB_bAM,197
95
+ classiq/interface/_version.py,sha256=Ix5e6xFImhy-iSvj9753jWO9sgM59o-d24vgjYUfS2A,197
96
96
  classiq/interface/analyzer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
97
  classiq/interface/analyzer/analysis_params.py,sha256=dM5rwSks798cxk4FWe4_X5ToRYtgZQh34F1u0XrFkK8,3881
98
98
  classiq/interface/analyzer/cytoscape_graph.py,sha256=MpeRBIYS1TfwYwiFpgTO51IE0KoxhY510pmEM3S0rbw,2361
@@ -104,7 +104,7 @@ classiq/interface/applications/iqae/iqae_result.py,sha256=S13A_mQKRTBaqO2NKJEJlg
104
104
  classiq/interface/applications/qsvm.py,sha256=4dHVSZH--sv58SvxmpDHPh9JDr4qQUZbbGCeaEv6b1I,3408
105
105
  classiq/interface/ast_node.py,sha256=-X3lke3c2Wm0fGDupj0g4cGfuRmLv4hA4EjLsJ1dHqE,941
106
106
  classiq/interface/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
- classiq/interface/backend/backend_preferences.py,sha256=apW0rA9nQSrU8NUa9piFPfoKiMQWQJnUILewn73DVqc,21539
107
+ classiq/interface/backend/backend_preferences.py,sha256=VMuUG0k6q4S3-ao_tN-01zHz86maOTFiSCvXCM8W0YQ,21370
108
108
  classiq/interface/backend/ionq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
109
109
  classiq/interface/backend/ionq/ionq_quantum_program.py,sha256=f8w1XvgIggaM_w9TF0_wkQHB3wamXg5kHMNsgtCsH3k,1235
110
110
  classiq/interface/backend/pydantic_backend.py,sha256=XfG1u_8ZEq382P5LTHYEhjkDH7UZYY_1sl1O-RImSmk,1610
@@ -152,7 +152,7 @@ classiq/interface/execution/primitives.py,sha256=HU0-ZjlFfL6DVtOHPqSwDxSwEJhGoce
152
152
  classiq/interface/executor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
153
  classiq/interface/executor/constants.py,sha256=DtSx-1HArWE0hHjOZHY9WJBevt3hP7M8SrYO3eM3dgo,31
154
154
  classiq/interface/executor/estimation.py,sha256=lJEmN3Uj9bW0EY7JEZvzItwEybbBHSn7zYFz89L8fqo,389
155
- classiq/interface/executor/execution_preferences.py,sha256=Tnd9yS42Nk28f8Ds78lC-b8ohwwOLvcqwaBVVHw1OPE,2931
155
+ classiq/interface/executor/execution_preferences.py,sha256=lGnJVPUJv04W5H7ZqWeEy1eCpXmMh34lim9Mz8IX_PY,2909
156
156
  classiq/interface/executor/execution_request.py,sha256=bf5qEF4eeb2UQ2DIriW-DBTRmPcDYiWs9QsfmzyhYEg,2441
157
157
  classiq/interface/executor/execution_result.py,sha256=z_D0KpnxKelnkxg6b1WkTWRbLZI7Dm7Q5juNWWdIZx0,2876
158
158
  classiq/interface/executor/optimizer_preferences.py,sha256=koqBO5YDzO3iBH71a8oe4hK-ib8M1yUPWJbC_m-Nzn4,4427
@@ -208,7 +208,7 @@ classiq/interface/generator/circuit_code/circuit_code.py,sha256=B9k2du6_fo_-bItN
208
208
  classiq/interface/generator/circuit_code/types_and_constants.py,sha256=BVodYSj6CSXATNDaVkwpBls0NuXtPWzj9UfKp8Sx-hM,1414
209
209
  classiq/interface/generator/circuit_outline.py,sha256=w67uw-cQw5DlZBmzh2XC_Vi5yAvFWB2qxVLVrR2JHII,213
210
210
  classiq/interface/generator/commuting_pauli_exponentiation.py,sha256=prx80q_d3d8M3_Qsvy-o70VLa4wcxVsjyVoM1YMULiQ,1728
211
- classiq/interface/generator/compiler_keywords.py,sha256=bDcNqbRsOMABA0JXoMJ5AKWLGS-vFbti2mnW4fCu-io,235
211
+ classiq/interface/generator/compiler_keywords.py,sha256=27QflHm-lInYlq6GH65hNLQM5WsSjKPUMFDwmcK16X0,266
212
212
  classiq/interface/generator/complex_type.py,sha256=tQ-2vUkXhpWz7dOMmcRTfd3tMJfXDvFkdy-KkQwe2FA,480
213
213
  classiq/interface/generator/constant.py,sha256=cLhRil6sof0UyYRU4lKdm_aBRcmmz7dtvX5bbNpb7N8,309
214
214
  classiq/interface/generator/control_state.py,sha256=eioObKxQt-g69NF3_-2QhLwO2mA5BIkFJnvqolwGFxk,2745
@@ -301,7 +301,7 @@ classiq/interface/generator/qft.py,sha256=SDLcPWYxshDfPl-tAfhpRFb30NpPRRFpje5Jrr
301
301
  classiq/interface/generator/qpe.py,sha256=C6CddpuD196TUVpUEvvlA9uaRLmFlTkwrHheaWbGojY,6526
302
302
  classiq/interface/generator/qsvm.py,sha256=Ry2iTC2NIoh0u9BsuwVaO-ICUBbRIF7Of9scJG4sGFs,3056
303
303
  classiq/interface/generator/quantum_function_call.py,sha256=BlqclMwh_Qj6_yXUTIBM23eLdQ_X3x_KTQ4WWwBN4JY,24123
304
- classiq/interface/generator/quantum_program.py,sha256=t5dd_5ClUBAFuVZFOD3sf_9Fn2fuH5d1ie-BF-_skEM,7674
304
+ classiq/interface/generator/quantum_program.py,sha256=FqGksHqL6Xvu5eO3Z0ERoEzU9KLsZ-1xREAhepo6kgE,8166
305
305
  classiq/interface/generator/randomized_benchmarking.py,sha256=D6KI_1fMF5oBydaal2WLmTSit6xSMtz0yDAIZMMO89Q,635
306
306
  classiq/interface/generator/range_types.py,sha256=X6CtSyimlpISz9QNbCdqqQkRg1pOGHEQCXy4aEeSwA4,2044
307
307
  classiq/interface/generator/register_role.py,sha256=moerPIO9gQUuG5pe43TemmScSVjTK7_gi-qbrhIgLOA,1147
@@ -332,7 +332,7 @@ classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py,sha25
332
332
  classiq/interface/generator/transpiler_basis_gates.py,sha256=ffnVjysrQVFq1MSjmlFia4akK9w3cIlLvAa-8_MOY9o,2450
333
333
  classiq/interface/generator/types/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
334
334
  classiq/interface/generator/types/builtin_enum_declarations.py,sha256=1LB7uwf53QOu-f5TfQyGYlkYmhTi8zAhtHMvZPOr-vM,2330
335
- classiq/interface/generator/types/compilation_metadata.py,sha256=amM7R3e89Ztt1bw9wxDHtZnueHRC_6pvnATZQY8NRTI,439
335
+ classiq/interface/generator/types/compilation_metadata.py,sha256=Xt3VhOu5xjheHWgffhC2TD2RU9hIUMGtIuUm4P781K0,997
336
336
  classiq/interface/generator/types/enum_declaration.py,sha256=Bz52SsXHAai205Utv-3NOolUP0HYT8KnMuUF16Iq_y0,3385
337
337
  classiq/interface/generator/types/qstruct_declaration.py,sha256=Qw6cHW_elZmrs4UO0z7lgS7TWb0hEUEJ5Ur-Ko0bCR4,485
338
338
  classiq/interface/generator/types/struct_declaration.py,sha256=2qKVV-pdqeUGiwKh2-5W2Ci4z0aQG4TG91MuQ82fa_A,959
@@ -426,7 +426,7 @@ classiq/model_expansions/expression_evaluator.py,sha256=zMGmVvBvItaz_rX3XqFLrkDZ
426
426
  classiq/model_expansions/function_builder.py,sha256=5CKygDYo6dpGVS_88UxTBL9z7gP8VaNLPh3xcUlP-8o,8185
427
427
  classiq/model_expansions/generative_functions.py,sha256=pdesJ83Ze_G4yZPPuwneuwMJJEyOXIF_rfdYRScr3lE,8078
428
428
  classiq/model_expansions/interpreters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
429
- classiq/model_expansions/interpreters/base_interpreter.py,sha256=8l-52QAK-_DfoIGjDf47tsO1STcY5ltkyjJryf_sU9U,11986
429
+ classiq/model_expansions/interpreters/base_interpreter.py,sha256=12Eny-z7BdHKDROhKJxfUn5QmxwumlpthNp3R9U8FpI,12035
430
430
  classiq/model_expansions/interpreters/frontend_generative_interpreter.py,sha256=8Q1na4j4u6bFy8TG3xIyoEjCOIql0UiqukS1zko-0BY,4284
431
431
  classiq/model_expansions/interpreters/generative_interpreter.py,sha256=pdZHvhKLWvhMe7di7qKwGk29irappWrdW28YWXVoowQ,13054
432
432
  classiq/model_expansions/model_tables.py,sha256=dlrOGRS2x4Fd_dzClIcV7V8edmbbQzePv9eqxtJQrpo,620
@@ -438,7 +438,7 @@ classiq/model_expansions/quantum_operations/assignment_result_processor.py,sha25
438
438
  classiq/model_expansions/quantum_operations/bind.py,sha256=FK6ZoYoG3Y5uUyCU0q1ZqB9BcyoTdpY0imkRkhJlx3k,5753
439
439
  classiq/model_expansions/quantum_operations/block_evaluator.py,sha256=06EYOb5CVDUvqYXKk-s-rcoY3rQ2Dr2XWUkqNzT0N0w,4734
440
440
  classiq/model_expansions/quantum_operations/bounds.py,sha256=hvy7mJaM5ReHewvoLg3yIdJrxrFWQ6BUwWvJnbTnn0g,1171
441
- classiq/model_expansions/quantum_operations/call_emitter.py,sha256=D_cBSWRv3sPUcgdIIS1nVzC3eiJGP_Ok8hILJBkwR4A,18716
441
+ classiq/model_expansions/quantum_operations/call_emitter.py,sha256=JqBdTsYP3I-KjITXdia53WAe9ho65PgTd4POlj-cZ9U,18779
442
442
  classiq/model_expansions/quantum_operations/composite_emitter.py,sha256=AQp3cYaUUA7eEKNwmZwIq1KEdDlTKRaXiop9pXxSVZg,815
443
443
  classiq/model_expansions/quantum_operations/declarative_call_emitter.py,sha256=IHCS_jqmKcFNSyVCj5MYAe86LZKaf1vEAFTYaLAjVIs,3641
444
444
  classiq/model_expansions/quantum_operations/emitter.py,sha256=320bpN7oyMrIlo4guEEUFbM0YLABTxDh9xGj96nVdu8,11155
@@ -457,7 +457,7 @@ classiq/model_expansions/sympy_conversion/sympy_to_python.py,sha256=03fkNV_GvsUU
457
457
  classiq/model_expansions/transformers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
458
458
  classiq/model_expansions/transformers/ast_renamer.py,sha256=Ve3ix6u_xbbxqU2SF0Z4F0-4oIhN8lyUPID1O387C-U,806
459
459
  classiq/model_expansions/transformers/model_renamer.py,sha256=eQ1XLcUp4MNtIvKxJgKxg8Qe-ayl7TXRqB9vEX05YUg,5600
460
- classiq/model_expansions/transformers/type_qualifier_inference.py,sha256=dRFFkt9Iovyeh1TfsUYQoevsV9OHoppHN36Fy0Mnvqw,9672
460
+ classiq/model_expansions/transformers/type_qualifier_inference.py,sha256=GV18wM-CYGYzX0oJQyh5GdX48cPQEJtv2_e2oNt8yX4,13867
461
461
  classiq/model_expansions/transformers/var_splitter.py,sha256=lojo3zHj4B78g2oJlYfjrnpRdlNbKMtZ5dx9q5HlubM,7871
462
462
  classiq/model_expansions/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
463
463
  classiq/model_expansions/utils/counted_name_allocator.py,sha256=9LPLBm-4ZrpC_0r1rbogyF11FnLaGCUyzwWpcBJoSmA,297
@@ -516,7 +516,7 @@ classiq/qmod/global_declarative_switch.py,sha256=30QOkNsDdsVdk14TNx-AetFbBskoXGp
516
516
  classiq/qmod/model_state_container.py,sha256=ZLP-yGf9syJy3uH6Bm5NhesoVfihADidvNP4tYYZwgs,2147
517
517
  classiq/qmod/native/__init__.py,sha256=gm0L3ew0KAy0eSqaMQrvpnKWx85HoA1p9ADaAlyejdA,126
518
518
  classiq/qmod/native/expression_to_qmod.py,sha256=5UakdOGiJFJkPthFD7FrO2Z4mQsqZMNOg9xHTAmPVC4,7389
519
- classiq/qmod/native/pretty_printer.py,sha256=k-ed_vmtl54U25BTJP9IWFmE2ufyoTbwDgVwqGBXnrk,18301
519
+ classiq/qmod/native/pretty_printer.py,sha256=nB6i-AbUP4doKTubGxl7bCb3IrrKontckgmoX5ng9Xg,18428
520
520
  classiq/qmod/pretty_print/__init__.py,sha256=jhR0cpXumOJnyb-zWnvMLpEuUOYPnnJ7DJmV-Zxpy1I,132
521
521
  classiq/qmod/pretty_print/expression_to_python.py,sha256=Ej_xAJApE6mvesmgVNCXKu4G3owwdTysw1m6xn3Vpww,7797
522
522
  classiq/qmod/pretty_print/pretty_printer.py,sha256=Glz9EbTGbxwNatLukz4YrX1yaHfkLlzbamhcA-a2KWk,25499
@@ -533,7 +533,7 @@ classiq/qmod/semantics/annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
533
533
  classiq/qmod/semantics/annotation/call_annotation.py,sha256=I94YDffDP-PDx3-r8XRFtg7D8B07OyuwnWOGwJVOOOA,3804
534
534
  classiq/qmod/semantics/annotation/model_annotation.py,sha256=gzsX3RrcaTPYBxxplbXaE3pBlQQvVkLGrK-xewzdVMA,329
535
535
  classiq/qmod/semantics/annotation/qstruct_annotator.py,sha256=_TplU5rqUqEyXF7K_HLC9OyJ6YRA6Pu0Z6dYaLhEuk4,1911
536
- classiq/qmod/semantics/error_manager.py,sha256=vR7bV9wBJa9a0khLvBeCn_RO4uURY_v1dy8Gdh4_L7U,3037
536
+ classiq/qmod/semantics/error_manager.py,sha256=iSx2IjmTqiWv292OdH-wZT6C54js-xzc8HEqMNhTKO0,3215
537
537
  classiq/qmod/semantics/lambdas.py,sha256=vtJ37ZRHHI_ieGU2A0JvMst6mwkC2FdOgfT_UkerDN0,1266
538
538
  classiq/qmod/semantics/static_semantics_visitor.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
539
539
  classiq/qmod/semantics/validation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -551,8 +551,8 @@ classiq/qmod/type_attribute_remover.py,sha256=NZmTXAsngWqthXjE8n-n6yE72fiWTFM12-
551
551
  classiq/qmod/utilities.py,sha256=oWpvPWu_wnuA_GrGBrheO0OIrdxTlKGbFwAy54FAsdg,5573
552
552
  classiq/qmod/write_qmod.py,sha256=QddTcpXsjLahq3ZATGTIKZW3aj99RtG6MPUHZTKaw38,3508
553
553
  classiq/quantum_program.py,sha256=q4vTnRqNr4VWjrZPJVreX3L_C3s60Nnb1GOp3Wv3SJ0,2088
554
- classiq/synthesis.py,sha256=nP8lMJ5FqCuR8tJoOgrytm7lRsKtWbXW6mooDfgJxFI,8650
554
+ classiq/synthesis.py,sha256=KbOaQOseDmmaMPHQyt03ESE7HlXikHHmNvqfWjOIDiQ,8742
555
555
  classiq/visualization.py,sha256=q-GepvUJf2-tDqof0isaNwWAlf3W3_1dxvlsak1U0ng,983
556
- classiq-0.81.0.dist-info/METADATA,sha256=BKaL0bG3mP42oeRH2efI276xOBM4AvXjh6t73M-8ikY,3382
557
- classiq-0.81.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
558
- classiq-0.81.0.dist-info/RECORD,,
556
+ classiq-0.82.0.dist-info/METADATA,sha256=XyFtdBiBb4g5dvvnZ1-1afXvaiQ8iKSK5ztHhF19a5k,3382
557
+ classiq-0.82.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
558
+ classiq-0.82.0.dist-info/RECORD,,