classiq 0.50.0__py3-none-any.whl → 0.51.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 CHANGED
@@ -49,6 +49,8 @@ from classiq.executor import (
49
49
  from classiq.qmod import * # noqa: F403
50
50
  from classiq.qmod import __all__ as _qmod_all
51
51
  from classiq.synthesis import (
52
+ quantum_program_from_qasm,
53
+ quantum_program_from_qasm_async,
52
54
  set_constraints,
53
55
  set_execution_preferences,
54
56
  set_preferences,
@@ -105,6 +107,8 @@ __all__ = (
105
107
  "show",
106
108
  "hamiltonian_to_matrix",
107
109
  "matrix_to_hamiltonian",
110
+ "quantum_program_from_qasm",
111
+ "quantum_program_from_qasm_async",
108
112
  ]
109
113
  + _md_all
110
114
  + _sub_modules
@@ -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.50.0'
6
+ SEMVER_VERSION = '0.51.1'
7
7
  VERSION = str(Version(SEMVER_VERSION))
@@ -447,6 +447,30 @@ class IntelBackendPreferences(BackendPreferences):
447
447
  )
448
448
 
449
449
 
450
+ class AQTBackendPreferences(BackendPreferences):
451
+ """
452
+ NOTE: This is a work in progress and is subject to change.
453
+
454
+ Represents the backend preferences specific to AQT (Alpine Quantum Technologies).
455
+
456
+ Attributes:
457
+ api_key: The API key required to access AQT's quantum computing services.
458
+ workspace: The AQT workspace where the simulator/hardware is located.
459
+ """
460
+
461
+ # TODO[pydantic]: Add a default value
462
+ backend_service_provider: ProviderTypeVendor.AQT
463
+ api_key: str = pydantic.Field(description="AQT API key")
464
+ workspace: str = pydantic.Field(description="AQT workspace")
465
+
466
+ # TODO[pydantic]: Remove this validator
467
+ @pydantic.root_validator(pre=True)
468
+ def _set_backend_service_provider(cls, values: Dict[str, Any]) -> Dict[str, Any]:
469
+ return values_with_discriminator(
470
+ values, "backend_service_provider", ProviderVendor.AQT
471
+ )
472
+
473
+
450
474
  def is_exact_simulator(backend_preferences: BackendPreferences) -> bool:
451
475
  return backend_preferences.backend_name in EXACT_SIMULATORS
452
476
 
@@ -477,6 +501,7 @@ BackendPreferencesTypes = Union[
477
501
  AliceBobBackendPreferences,
478
502
  OQCBackendPreferences,
479
503
  IntelBackendPreferences,
504
+ AQTBackendPreferences,
480
505
  ]
481
506
 
482
507
  __all__ = [
@@ -499,6 +524,7 @@ __all__ = [
499
524
  "OQCBackendPreferences",
500
525
  "OQCBackendNames",
501
526
  "IntelBackendPreferences",
527
+ "AQTBackendPreferences",
502
528
  ]
503
529
 
504
530
 
@@ -19,6 +19,7 @@ class ProviderVendor(StrEnum):
19
19
  ALICE_AND_BOB = "Alice & Bob"
20
20
  OQC = "OQC"
21
21
  INTEL = "Intel"
22
+ AQT = "AQT"
22
23
 
23
24
 
24
25
  class ProviderTypeVendor:
@@ -31,6 +32,7 @@ class ProviderTypeVendor:
31
32
  ALICE_BOB = Literal[ProviderVendor.ALICE_AND_BOB]
32
33
  OQC = Literal[ProviderVendor.OQC]
33
34
  INTEL = Literal[ProviderVendor.INTEL]
35
+ AQT = Literal[ProviderVendor.AQT]
34
36
 
35
37
 
36
38
  class ClassiqSimulatorBackendNames(StrEnum):
@@ -57,6 +57,14 @@ SupportedNodesTypes = Union[
57
57
  DEFAULT_SUPPORTED_NODE_TYPES = get_args(SupportedNodesTypes)
58
58
 
59
59
 
60
+ def _is_constant(expr: str) -> bool:
61
+ try:
62
+ float(expr)
63
+ return True
64
+ except ValueError:
65
+ return False
66
+
67
+
60
68
  class ExpressionValidator(ast.NodeVisitor):
61
69
  def __init__(
62
70
  self,
@@ -89,7 +97,7 @@ class ExpressionValidator(ast.NodeVisitor):
89
97
  @staticmethod
90
98
  def _get_adjusted_expression(expression: str) -> str:
91
99
  # This works around the simplification of the trivial expressions such as a + 0, 1 * a, etc.
92
- if IDENITIFIER_REGEX.fullmatch(expression):
100
+ if IDENITIFIER_REGEX.fullmatch(expression) or _is_constant(expression):
93
101
  return f"0 + {expression}"
94
102
  return expression
95
103
 
@@ -19,7 +19,10 @@ from pydantic.generics import GenericModel
19
19
  from classiq.interface.enum_utils import StrEnum
20
20
  from classiq.interface.exceptions import ClassiqValueError
21
21
  from classiq.interface.generator.arith import argument_utils, number_utils
22
- from classiq.interface.generator.arith.argument_utils import RegisterOrConst
22
+ from classiq.interface.generator.arith.argument_utils import (
23
+ RegisterOrConst,
24
+ as_arithmetic_info,
25
+ )
23
26
  from classiq.interface.generator.arith.arithmetic_operations import (
24
27
  MODULO_WITH_FRACTION_PLACES_ERROR_MSG,
25
28
  ArithmeticOperationParams,
@@ -59,11 +62,9 @@ class BinaryOpParams(
59
62
  right_arg_name: ClassVar[str] = DEFAULT_RIGHT_ARG_NAME
60
63
 
61
64
  @pydantic.root_validator(pre=True)
62
- def _validate_one_is_register(cls, values: Dict[str, Any]) -> Dict[str, Any]:
65
+ def _clone_repeated_arg(cls, values: Dict[str, Any]) -> Dict[str, Any]:
63
66
  left_arg = values.get("left_arg")
64
67
  right_arg = values.get("right_arg")
65
- if isinstance(left_arg, Numeric) and isinstance(right_arg, Numeric):
66
- raise ClassiqValueError("One argument must be a register")
67
68
  if left_arg is right_arg and isinstance(left_arg, pydantic.BaseModel):
68
69
  # In case both arguments refer to the same object, copy it.
69
70
  # This prevents changes performed on one argument to affect the other.
@@ -288,8 +289,9 @@ class Adder(InplacableBinaryOpParams[RegisterOrConst, RegisterOrConst]):
288
289
 
289
290
  def _get_output_size(self, ub: float, lb: float, fraction_places: int) -> int:
290
291
  if isinstance(self.left_arg, float) and self.left_arg == 0.0:
291
- assert isinstance(self.right_arg, RegisterArithmeticInfo)
292
- return self.right_arg.size
292
+ if isinstance(self.right_arg, RegisterArithmeticInfo):
293
+ return self.right_arg.size
294
+ return as_arithmetic_info(self.right_arg).size
293
295
  elif isinstance(self.right_arg, float) and self.right_arg == 0.0:
294
296
  assert isinstance(self.left_arg, RegisterArithmeticInfo)
295
297
  return self.left_arg.size
@@ -29,10 +29,10 @@ class QmodQNumProxy(QmodQScalarProxy):
29
29
  self, handle: HandleBinding, size: int, fraction_digits: int, is_signed: bool
30
30
  ) -> None:
31
31
  super().__init__(handle, size)
32
- if fraction_digits + is_signed > size:
32
+ if fraction_digits > size:
33
33
  raise ClassiqValueError(
34
- f"{'Signed' if is_signed else 'Unsigned'} quantum numeric of size "
35
- f"{size} cannot have {fraction_digits} fraction digits"
34
+ f"Quantum numeric of size {size} cannot have {fraction_digits} "
35
+ f"fraction digits"
36
36
  )
37
37
  self._fraction_digits = fraction_digits
38
38
  self._is_signed = is_signed
@@ -149,6 +149,9 @@ class SynthesisQuantumFunctionCall(BaseModel):
149
149
  description="The name of the function instance. "
150
150
  "If not set, determined automatically.",
151
151
  )
152
+ model_source_id: Optional[UUID] = pydantic.Field(default=None)
153
+ arithmetic_id: Optional[str] = pydantic.Field(default=None)
154
+ inverse_op_id: Optional[UUID] = pydantic.Field(default=None)
152
155
 
153
156
  uuid: UUID = pydantic.Field(default_factory=uuid4)
154
157
 
@@ -21,6 +21,7 @@ class Provider(StrEnum):
21
21
  ALICE_AND_BOB = "Alice & Bob"
22
22
  OQC = "OQC"
23
23
  INTEL = "Intel"
24
+ AQT = "AQT"
24
25
 
25
26
  @property
26
27
  def id(self) -> "ProviderIDEnum":
@@ -11,7 +11,6 @@ class OperationLevel(StrEnum):
11
11
  QMOD_FUNCTION_CALL = "QMOD_CALL"
12
12
  QMOD_STATEMENT = "QMOD_STATEMENT"
13
13
  ENGINE_FUNCTION_CALL = "ENGINE_CALL"
14
- ATOMIC = "ATOMIC"
15
14
  UNKNOWN = "UNKNOWN"
16
15
 
17
16
 
@@ -20,6 +19,7 @@ class OperationType(StrEnum):
20
19
  ALLOCATE = "ALLOCATE"
21
20
  FREE = "FREE"
22
21
  BIND = "BIND"
22
+ ATOMIC = "ATOMIC"
23
23
 
24
24
 
25
25
  class OperationData(pydantic.BaseModel):
@@ -9,7 +9,6 @@ from typing import (
9
9
  Tuple,
10
10
  Union,
11
11
  )
12
- from uuid import UUID, uuid4
13
12
 
14
13
  import pydantic
15
14
 
@@ -49,9 +48,6 @@ class QuantumFunctionCall(QuantumOperation):
49
48
  description="The function that is called"
50
49
  )
51
50
  positional_args: List[ArgValue] = pydantic.Field(default_factory=list)
52
- uuid: UUID = pydantic.Field(
53
- description="A unique identifier for this call", default_factory=uuid4
54
- )
55
51
 
56
52
  _func_decl: Optional[QuantumFunctionDeclaration] = pydantic.PrivateAttr(
57
53
  default=None
@@ -1,5 +1,6 @@
1
1
  from dataclasses import dataclass
2
2
  from typing import Any, Callable, Dict, Mapping, Optional, Sequence
3
+ from uuid import UUID, uuid4
3
4
 
4
5
  import pydantic
5
6
  from pydantic import Extra, root_validator
@@ -30,6 +31,9 @@ class HandleMetadata:
30
31
 
31
32
 
32
33
  class QuantumOperation(QuantumStatement):
34
+ uuid: UUID = pydantic.Field(
35
+ description="A unique identifier for this operation", default_factory=uuid4
36
+ )
33
37
  _generative_blocks: Dict[str, Callable] = pydantic.PrivateAttr(default_factory=dict)
34
38
 
35
39
  @property
@@ -161,7 +161,7 @@ class Emitter(Generic[QuantumStatementT]):
161
161
  }
162
162
 
163
163
  port_to_passed_variable_map = {
164
- arg_decl.name: evaluated_arg.value.handle.name
164
+ arg_decl.name: str(evaluated_arg.value.handle)
165
165
  for arg_decl, evaluated_arg in zip(new_positional_arg_decls, evaluated_args)
166
166
  if isinstance(arg_decl, PortDeclaration)
167
167
  }
@@ -230,10 +230,7 @@ def _pad_with_sign_bit(kind: str, var: QuantumSymbol, size_diff: int) -> Tuple[
230
230
  if not quantum_type.sign_value or size_diff >= 0:
231
231
  return var, [], [], [], []
232
232
 
233
- significand_var, sign_var, sign_split_bind = _split_sign(kind, var)
234
233
  padding_var, padding_allocation = _allocate_padding(kind, size_diff)
235
- padding_init_ops = _init_padding(sign_var, padding_var, size_diff)
236
-
237
234
  padded_var = QuantumSymbol(
238
235
  handle=HandleBinding(name=f"padded_{kind}"),
239
236
  quantum_type=QuantumNumeric(
@@ -242,17 +239,42 @@ def _pad_with_sign_bit(kind: str, var: QuantumSymbol, size_diff: int) -> Tuple[
242
239
  fraction_digits=Expression(expr="0"),
243
240
  ),
244
241
  )
242
+ var_decls = [
243
+ VariableDeclarationStatement(
244
+ name=var.handle.name,
245
+ quantum_type=var.quantum_type,
246
+ )
247
+ for var in (padding_var, padded_var)
248
+ ]
249
+
250
+ if quantum_type.size_in_bits == 1: # qnum<1, SIGNED, ?>
251
+ padding_init_ops = _init_padding(var, padding_var, size_diff)
252
+ padding_rebind = BindOperation(
253
+ in_handles=[var.handle, padding_var.handle],
254
+ out_handles=[padded_var.handle],
255
+ )
256
+ return (
257
+ padded_var,
258
+ var_decls,
259
+ [padding_allocation],
260
+ padding_init_ops,
261
+ [padding_rebind],
262
+ )
263
+
264
+ significand_var, sign_var, sign_split_bind = _split_sign(kind, var)
265
+ padding_init_ops = _init_padding(sign_var, padding_var, size_diff)
266
+
245
267
  padding_rebind = BindOperation(
246
268
  in_handles=[significand_var.handle, sign_var.handle, padding_var.handle],
247
269
  out_handles=[padded_var.handle],
248
270
  )
249
271
 
250
- var_decls = [
272
+ var_decls += [
251
273
  VariableDeclarationStatement(
252
274
  name=var.handle.name,
253
275
  quantum_type=var.quantum_type,
254
276
  )
255
- for var in (significand_var, sign_var, padding_var, padded_var)
277
+ for var in (significand_var, sign_var)
256
278
  ]
257
279
 
258
280
  return (
@@ -35,7 +35,14 @@ from classiq.model_expansions.visitors.boolean_expression_transformers import (
35
35
  BooleanExpressionOptimizer,
36
36
  )
37
37
  from classiq.qmod import builtins
38
- from classiq.qmod.builtins.functions import X
38
+ from classiq.qmod.builtins.functions import X, allocate
39
+
40
+
41
+ def _is_zero(expr: str) -> bool:
42
+ try:
43
+ return float(expr) == 0.0
44
+ except ValueError:
45
+ return False
39
46
 
40
47
 
41
48
  class QuantumAssignmentOperationEmitter(
@@ -43,6 +50,8 @@ class QuantumAssignmentOperationEmitter(
43
50
  ):
44
51
  def emit(self, op: QuantumAssignmentOperation, /) -> None:
45
52
  new_expression = self._evaluate_op_expression(op)
53
+ if self._skip_assignment(op, new_expression.expr):
54
+ return
46
55
  arrays_with_subscript = self._get_symbols_to_split(new_expression)
47
56
  if len(arrays_with_subscript) > 0:
48
57
  self._emit_with_split(op, new_expression, arrays_with_subscript)
@@ -71,8 +80,12 @@ class QuantumAssignmentOperationEmitter(
71
80
  def _emit_inplace_arithmetic_op(
72
81
  self, op: ArithmeticOperation, expression: Expression, is_bool_opt: bool
73
82
  ) -> None:
74
- if op.operation_kind != ArithmeticOperationKind.InplaceXor or (
75
- op.result_type.size_in_bits > 1 or not _is_res_boolean(op)
83
+ target = self._interpreter.evaluate(op.result_var).as_type(QuantumSymbol)
84
+ if (
85
+ op.operation_kind != ArithmeticOperationKind.InplaceXor
86
+ or op.result_type.size_in_bits > 1
87
+ or not _is_res_boolean(op)
88
+ or target.quantum_type.size_in_bits > 1
76
89
  ):
77
90
  _validate_naive_inplace_handles(op)
78
91
  self._build_naive_inplace(op, expression)
@@ -156,6 +169,19 @@ class QuantumAssignmentOperationEmitter(
156
169
  WithinApply(compute=[arith_expression], action=[inplace_store])
157
170
  )
158
171
 
172
+ def _skip_assignment(self, op: QuantumAssignmentOperation, expr: str) -> bool:
173
+ if not isinstance(op, ArithmeticOperation) or not _is_zero(expr):
174
+ return False
175
+ if op.operation_kind != ArithmeticOperationKind.Assignment:
176
+ return True
177
+ allocate_call = QuantumFunctionCall(
178
+ function=allocate.func_decl.name,
179
+ positional_args=[Expression(expr="1"), op.result_var],
180
+ )
181
+ allocate_call.set_func_decl(allocate.func_decl)
182
+ self._interpreter.emit_statement(allocate_call)
183
+ return True
184
+
159
185
 
160
186
  def _validate_naive_inplace_handles(qe: ArithmeticOperation) -> None:
161
187
  if qe.result_var in qe.var_handles:
@@ -106,7 +106,7 @@ def _expand_generative_model(
106
106
  preferences,
107
107
  classical_execution_function,
108
108
  )
109
- generative_functions = _get_generative_functions(gen_main)
109
+ generative_functions = _get_generative_functions(gen_main, preferences)
110
110
  model.functions = generative_functions
111
111
  model.types = list(QMODULE.type_decls.values())
112
112
  model.enums = list(QMODULE.enum_decls.values())
@@ -114,20 +114,25 @@ def _expand_generative_model(
114
114
  return model
115
115
 
116
116
 
117
- def _get_generative_functions(gen_main: QFunc) -> List[NativeFunctionDefinition]:
117
+ def _get_generative_functions(
118
+ gen_main: QFunc, preferences: Optional[Preferences]
119
+ ) -> List[NativeFunctionDefinition]:
118
120
  # The Interpreter accepts a model and a list of generative functions.
119
121
  # Since the main function is generative, it can only be expanded using the
120
122
  # Interpreter.
121
123
  # To solve this deadlock, we create a wrapper model
122
124
  # `qfunc main(...) { _gen_main(...); }` and rename `main` to `_gen_main` before
123
125
  # passing them to the Interpreter.
124
- gen_model = _get_wrapper_main(gen_main)
126
+ gen_model = _get_wrapper_main(gen_main, preferences)
125
127
  gen_functions = _get_all_model_functions_as_generative_functions()
126
128
  functions_dict = _interpret_generative_model(gen_model, gen_functions)
127
129
  return list(functions_dict.values())
128
130
 
129
131
 
130
- def _get_wrapper_main(gen_main: QFunc) -> Model:
132
+ def _get_wrapper_main(gen_main: QFunc, preferences: Optional[Preferences]) -> Model:
133
+ extra_args = {}
134
+ if preferences is not None:
135
+ extra_args["preferences"] = preferences
131
136
  return Model(
132
137
  functions=[
133
138
  NativeFunctionDefinition(
@@ -145,6 +150,7 @@ def _get_wrapper_main(gen_main: QFunc) -> Model:
145
150
  ],
146
151
  ),
147
152
  ],
153
+ **extra_args,
148
154
  )
149
155
 
150
156
 
classiq/synthesis.py CHANGED
@@ -2,6 +2,7 @@ from typing import Any, NewType, Optional
2
2
 
3
3
  import pydantic
4
4
 
5
+ from classiq.interface.analyzer.result import QasmCode
5
6
  from classiq.interface.exceptions import ClassiqValueError
6
7
  from classiq.interface.executor.execution_preferences import ExecutionPreferences
7
8
  from classiq.interface.generator.model.constraints import Constraints
@@ -37,6 +38,26 @@ def show(quantum_program: SerializedQuantumProgram) -> None:
37
38
  circuit.show() # type: ignore[attr-defined]
38
39
 
39
40
 
41
+ async def quantum_program_from_qasm_async(qasm: str) -> SerializedQuantumProgram:
42
+ quantum_program = await ApiWrapper.get_generated_circuit_from_qasm(
43
+ QasmCode(code=qasm)
44
+ )
45
+ return SerializedQuantumProgram(quantum_program.json())
46
+
47
+
48
+ def quantum_program_from_qasm(qasm: str) -> SerializedQuantumProgram:
49
+ """
50
+ generate a quantum program from a QASM file.
51
+
52
+ Args:
53
+ qasm: A QASM2/3 string.
54
+
55
+ Returns:
56
+ SerializedQuantumProgram: Quantum program serialized as a string. (See: QuantumProgram)
57
+ """
58
+ return async_utils.run(quantum_program_from_qasm_async(qasm))
59
+
60
+
40
61
  async def synthesize_async(
41
62
  serialized_model: SerializedModel,
42
63
  ) -> SerializedQuantumProgram:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: classiq
3
- Version: 0.50.0
3
+ Version: 0.51.1
4
4
  Summary: Classiq's Python SDK for quantum computing
5
5
  Home-page: https://classiq.io
6
6
  License: Proprietary
@@ -1,4 +1,4 @@
1
- classiq/__init__.py,sha256=kJpBZtjz012nNg9KoP6bi5TtYTTGOFPi3bF7ZoRUfT4,3290
1
+ classiq/__init__.py,sha256=J4FvaP0HW4-Q3B4ojhK-KHE3alSN3Qwu7EzXYm8Q2_Y,3438
2
2
  classiq/_analyzer_extras/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  classiq/_analyzer_extras/_ipywidgets_async_extension.py,sha256=DF-G1Dhp51P6qlxTJT-kxPMJiYy9tyNoCvqbPQOeJd0,2163
4
4
  classiq/_analyzer_extras/interactive_hardware.py,sha256=f7ad2HeFq1f-2dJtPpgOE_w2IFzm49W6P_c-MzqJ5qE,3257
@@ -93,7 +93,7 @@ classiq/execution/jobs.py,sha256=t7Wdegpi6lylthg23a98rSmoZ8xXNGfz--efHYw39JY,956
93
93
  classiq/execution/qnn.py,sha256=qsOA2mD8Ne_4VwvyGPfuHVDTzyxVnDHwE2gfoaOMsf8,2339
94
94
  classiq/executor.py,sha256=jKD5O_tJpL2NMTC_N0NEuPJEmKZIaqsTpQrgZ88sleg,2594
95
95
  classiq/interface/__init__.py,sha256=cg7hD_XVu1_jJ1fgwmT0rMIoZHopNVeB8xtlmMx-E_A,83
96
- classiq/interface/_version.py,sha256=iHzQs1kSmGAqjEszJd80LP2IqPpGcunBlSect_qAg6o,197
96
+ classiq/interface/_version.py,sha256=gsOl-z2ZImE1-e-rSOkR9cpHmHsBf2DNIZ0T3Wtznh8,197
97
97
  classiq/interface/analyzer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
98
  classiq/interface/analyzer/analysis_params.py,sha256=043hfS-I3Ec6tkcniKMQQUiRyEC7zlNhntTBpZQB8hw,3725
99
99
  classiq/interface/analyzer/cytoscape_graph.py,sha256=_2GviubgrDMAbF57PTDMhS9W0mTCLYWdyu0HndDPh54,2116
@@ -102,11 +102,11 @@ classiq/interface/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
102
102
  classiq/interface/applications/qsvm.py,sha256=7LElAz4QwTeia7MeAOy8WUHvuFUOUojs8j2wDOwPMao,3363
103
103
  classiq/interface/ast_node.py,sha256=EE06R8KwRA-QkK44Ou9TmMxiaa8J60G9Z9qf9T76k_k,398
104
104
  classiq/interface/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
- classiq/interface/backend/backend_preferences.py,sha256=l05slQjXiIFul59f0FmI6M1WHOY67qcBT3wWn3nIqj8,20649
105
+ classiq/interface/backend/backend_preferences.py,sha256=bg_BKeu9jBN_zwMGtgLpmX486RnN57xG_hTE_VSkgKI,21610
106
106
  classiq/interface/backend/ionq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
107
  classiq/interface/backend/ionq/ionq_quantum_program.py,sha256=2DRnrzeSDC34mIdpsafWFSm7ZnHhKYspJYGULHv0XgI,1584
108
108
  classiq/interface/backend/pydantic_backend.py,sha256=aRf8kljUMiLBH2odswSCJ3hbex_1nOGTK3YmBC6EfmQ,1462
109
- classiq/interface/backend/quantum_backend_providers.py,sha256=d77iUBupdvocQTALuFGbeZjkm7Foav03pimGHftmtqs,6463
109
+ classiq/interface/backend/quantum_backend_providers.py,sha256=E4Kf3F_4b-5KtLPZFqDSSI94aPL_vNMX3SfvecMBH3s,6517
110
110
  classiq/interface/chemistry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
111
  classiq/interface/chemistry/ansatz_library.py,sha256=3ki3uaV77cUxUxUzDbn3mVhjvMoKejJ5bIR1kXpBT1k,360
112
112
  classiq/interface/chemistry/elements.py,sha256=Yy8L80SBVgmuKQyW-GlZKzwTqnP1O9po-FGFmKMJLRA,1181
@@ -185,12 +185,12 @@ classiq/interface/generator/arith/arithmetic.py,sha256=DrlA41wZxJwur8Va7-MVHEpVI
185
185
  classiq/interface/generator/arith/arithmetic_arg_type_validator.py,sha256=ut0iSKnrZK01pf59KjqQo5bJqygW8cnkl86zU9FdgZI,1189
186
186
  classiq/interface/generator/arith/arithmetic_expression_abc.py,sha256=FjibKgQcIpj6Yw9BJm7ixzKQXCmFpTTPeNg4e6CJ2ig,6445
187
187
  classiq/interface/generator/arith/arithmetic_expression_parser.py,sha256=8_aCF2XmZBDxlGVy26Y_6p1-PE8Bx2hjTXZk8YG2k8A,5368
188
- classiq/interface/generator/arith/arithmetic_expression_validator.py,sha256=oKaZw_k75xOBAh6JRvNuI10JhTa_PQHa29hVHqnSeqk,6495
188
+ classiq/interface/generator/arith/arithmetic_expression_validator.py,sha256=r6lKdppBdjhYS4YLGYOw9J9x_022hzYf0N_gAA4-qZg,6655
189
189
  classiq/interface/generator/arith/arithmetic_operations.py,sha256=a5eEbnOT9-7HNioNhoeqre5p-3s17epartLQkcAu0WM,1717
190
190
  classiq/interface/generator/arith/arithmetic_param_getters.py,sha256=W-QaPNSmFrtfZF6KSPsJfcQ8cXsdHxz3_r42cQd0Lso,13390
191
191
  classiq/interface/generator/arith/arithmetic_result_builder.py,sha256=c7Oiy6Bp43jbbfHwo5i0S5c_Zuc6oNxRgdNx5lQ0c-c,4255
192
192
  classiq/interface/generator/arith/ast_node_rewrite.py,sha256=GxWvW6HWHS-bQshPr-xgnOlkqRQ6PA1ea0fzMxDNZQY,2769
193
- classiq/interface/generator/arith/binary_ops.py,sha256=RDyN4hX11tGCHAbdvZeVbvKo0nlamwxrnBBFMZE63aE,30816
193
+ classiq/interface/generator/arith/binary_ops.py,sha256=RxpXoEDdkEsBnTUx2AgJvljitnC5xwE8tpL16lSneoU,30755
194
194
  classiq/interface/generator/arith/endianness.py,sha256=buplQY6swjKczmnGbyNxu9JqvzZcNPyjQdOePd9pPCA,116
195
195
  classiq/interface/generator/arith/extremum_operations.py,sha256=eBcFJf3RE8NdqfFDJoCoy5zdGVNMhr6lRwdozQQc5xo,5966
196
196
  classiq/interface/generator/arith/logical_ops.py,sha256=9VGq4hlZ_N85LsTnfJaoB4DAFkcnxpafqXhzUzGbWQM,2579
@@ -226,7 +226,7 @@ classiq/interface/generator/expressions/expression_types.py,sha256=BcqLJ_v0Rwm7g
226
226
  classiq/interface/generator/expressions/handle_identifier.py,sha256=Vf1EsfzkW3tBk9S6QOLPn5yuLW1EChQ4Ja6OpLWPLFw,93
227
227
  classiq/interface/generator/expressions/non_symbolic_expr.py,sha256=9JzU1y6oYmDjZyZLjDQNA81X3p1Z7CGzweN6WeFAcY8,4036
228
228
  classiq/interface/generator/expressions/qmod_qarray_proxy.py,sha256=0PBTDnTl_3YqKOKnzHcj5MRp6wDCPI4ZgWw0rrnGgtM,3542
229
- classiq/interface/generator/expressions/qmod_qscalar_proxy.py,sha256=YEpgw1eDV8-zFcxawTrE5FBanCJf5_r6HStW3rC91bk,1778
229
+ classiq/interface/generator/expressions/qmod_qscalar_proxy.py,sha256=XL3tJZkqO2YuRm9Hyo-ehFqIe9cd2AM-Lx_X__NXasQ,1726
230
230
  classiq/interface/generator/expressions/qmod_qstruct_proxy.py,sha256=7mUER-9XBlu2Zu8MsfTFzVWh-ieBc3_D-MY0L6OZ2bk,1114
231
231
  classiq/interface/generator/expressions/qmod_sized_proxy.py,sha256=mYqQfqvqB9vthhhWfbT3R-vp26xwJEDR28x1MfRSx2A,740
232
232
  classiq/interface/generator/expressions/qmod_struct_instance.py,sha256=oMXVjU6243RmykMD0EU4Jnjup4pXveeuXv2UFchZTpM,1067
@@ -287,7 +287,7 @@ classiq/interface/generator/preferences/optimization.py,sha256=7iEWWNFSxqi4XMb4J
287
287
  classiq/interface/generator/qft.py,sha256=SDLcPWYxshDfPl-tAfhpRFb30NpPRRFpje5Jrrkb9Gs,1184
288
288
  classiq/interface/generator/qpe.py,sha256=qc7k1C1joRSH-DL3ULIbHr7xRjQWOwszhyplSFWfcW4,6010
289
289
  classiq/interface/generator/qsvm.py,sha256=iwLn-ACt1dilP60ddXBzLEKA0toJuHJCeAZ0-7VNnCQ,3000
290
- classiq/interface/generator/quantum_function_call.py,sha256=xlO3Sq33I2D5b1-DHbJ717Vuy_iYVRjNZFiTbRPvh8Q,23284
290
+ classiq/interface/generator/quantum_function_call.py,sha256=fFfQMNlrAbqYuhkOzDNVlBDxWqzrntL8EEesaq3gAVg,23480
291
291
  classiq/interface/generator/quantum_program.py,sha256=ahtP8DqNe0Fe0KN5r7kfuQNamanFuufSv8GuzHiQsOk,6811
292
292
  classiq/interface/generator/randomized_benchmarking.py,sha256=D6KI_1fMF5oBydaal2WLmTSit6xSMtz0yDAIZMMO89Q,635
293
293
  classiq/interface/generator/range_types.py,sha256=5TWlKLQSEdhvfRkJEa6WyLWZJDICTW6fWUfi7V_h_jg,2061
@@ -330,7 +330,7 @@ classiq/interface/generator/validations/validator_functions.py,sha256=n-K4R903O2
330
330
  classiq/interface/generator/visitor.py,sha256=4stDieh3p7JYuSL9bH_FqKrn0k0Nl8bMO72RQocZ8M8,2864
331
331
  classiq/interface/grover/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
332
332
  classiq/interface/grover/grover_modelling_params.py,sha256=eMXdjfuGlVq5qD3QyG-C8mAyIBAoxzkjF052M4b1i-k,390
333
- classiq/interface/hardware.py,sha256=1ZXtKhkhpJo2-Fg7oqGMe-XDG9OBNIUj29gmukuJblQ,2007
333
+ classiq/interface/hardware.py,sha256=9qxWDoVE-234RXe2eROVZo4NOS5DgjDq5EB7byP94DU,2023
334
334
  classiq/interface/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
335
335
  classiq/interface/helpers/classproperty.py,sha256=pt9A39GgEMzj2nbY5gjFp_CId_wom6lOQt_PADidT4Y,279
336
336
  classiq/interface/helpers/custom_encoders.py,sha256=0-9DTHwQr-I_vP1Ie4Z9N4qfzDhFvGT4qsXP-EdDegs,107
@@ -342,7 +342,7 @@ classiq/interface/helpers/validation_helpers.py,sha256=oUD1jMdTSoAkV-HjbkvMovb8Z
342
342
  classiq/interface/helpers/versioned_model.py,sha256=iHB0oO7pWKaE0l62SdfBbY3QwHSiSA0h9oUQQwRrvKI,295
343
343
  classiq/interface/ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
344
344
  classiq/interface/ide/ide_data.py,sha256=Z3keVfjxK8dpC64ZJ0PEoLWgtmOaxiv2CgBzkxbFVmY,2508
345
- classiq/interface/ide/visual_model.py,sha256=-Wn8_0RXgitZr2N5pWArYHpxMEFbXGlsIQrB3DnSMEI,2727
345
+ classiq/interface/ide/visual_model.py,sha256=tXwkxyEmBDwiyw6uM6ecMDV0nVO2-3u83ABeRWBZN-g,2727
346
346
  classiq/interface/interface_version.py,sha256=Q1aeahrMg6ePaFeDei3GEHzHA2_cJnGoJK3KQ3Av55k,24
347
347
  classiq/interface/jobs.py,sha256=QFGSbXpFK589jW4DzGGrNhkwm3ZhTehDt8P3lENXTsc,2749
348
348
  classiq/interface/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -363,10 +363,10 @@ classiq/interface/model/quantum_expressions/__init__.py,sha256=47DEQpj8HBSa-_TIm
363
363
  classiq/interface/model/quantum_expressions/amplitude_loading_operation.py,sha256=v45Eb44VxyBTMH-E1NTb5-YdKCj5EY_rb-BClHI0A48,2428
364
364
  classiq/interface/model/quantum_expressions/arithmetic_operation.py,sha256=HKFZci4z4QSmE8Bpwu6_6sCU1Wb-jzovrmsU1lmxjmw,3428
365
365
  classiq/interface/model/quantum_expressions/quantum_expression.py,sha256=yw-sYXbaaKoUSL8oujDFBjyShxCfAQnPPX64h-Yh-_8,2118
366
- classiq/interface/model/quantum_function_call.py,sha256=YOwmNuz7F0I7jimVjy69eGI044iXS0hAcBjBRuvhsI8,7313
366
+ classiq/interface/model/quantum_function_call.py,sha256=CCLORUqsVDORLJcR-uLzl0egUw4jxIVqQIANPny9T50,7166
367
367
  classiq/interface/model/quantum_function_declaration.py,sha256=N1iccemg-xC4Cc1pPLWT3cBGYO3RIEBPVz_zlWWkLpQ,7704
368
368
  classiq/interface/model/quantum_lambda_function.py,sha256=gNrzQuQ_UKdoZXPtGjhb-L1n67gBbJmuc7A6cKUhu68,2114
369
- classiq/interface/model/quantum_statement.py,sha256=tBWQ9ycUVCGo-9mRvYnfB1_q7zFCfCR_pTaevTXIiqY,2476
369
+ classiq/interface/model/quantum_statement.py,sha256=V-Kv7InndkM9q6RPhO6Kxi0T_-tmsiHWCbGUFJL-FM4,2628
370
370
  classiq/interface/model/quantum_type.py,sha256=19JjWMEU44l7C9VtsFakOZ3c3-ugQzC3_vdygrhieck,8199
371
371
  classiq/interface/model/quantum_variable_declaration.py,sha256=Vmx-aHnss8E_ghqX_wi4Njp-dEtYK-WwYHtHAwmGZxk,229
372
372
  classiq/interface/model/repeat.py,sha256=pSq0rzSDUVQqyzlv-mV1k-Jx57KyjqjZ1KgScGFOQgE,408
@@ -409,13 +409,13 @@ classiq/model_expansions/quantum_operations/__init__.py,sha256=BMruLYFsir2nU9Du9
409
409
  classiq/model_expansions/quantum_operations/bind.py,sha256=yRHOyMw3Kdkr1tJaRfPkbS6amCKl504weaWYqbVvZ0A,2631
410
410
  classiq/model_expansions/quantum_operations/classicalif.py,sha256=6SFumWVIWCTNQsng1GCkZ2zysT8aVrtwPqpwlJ6M_dQ,2151
411
411
  classiq/model_expansions/quantum_operations/control.py,sha256=SibNNK8gwzBMojwmXDg--SXbqhn3PJmIB2y0sK-7rJA,10151
412
- classiq/model_expansions/quantum_operations/emitter.py,sha256=wMuICR_CzLmaiwhS6EZWu4H864ZxTndITQC1gNRVaWA,10899
412
+ classiq/model_expansions/quantum_operations/emitter.py,sha256=z3axE2OfTjIxp6sevyo2VGsN1d5Elx5a8721YgGCpOM,10899
413
413
  classiq/model_expansions/quantum_operations/expression_operation.py,sha256=q2EaNec3kvTw2xDVGrd36p_rHiNMaWzkR0qFC55sJDY,8182
414
- classiq/model_expansions/quantum_operations/inplace_binary_operation.py,sha256=OoEBjjE9sXoOuV3h7p29UN6DgGywcXPVHntSLHXAUp4,11142
414
+ classiq/model_expansions/quantum_operations/inplace_binary_operation.py,sha256=6crgrrrUW_dwnNZsiMpHap9V-0FZiHw6vHNrscMja94,11765
415
415
  classiq/model_expansions/quantum_operations/invert.py,sha256=iR6ZpTyntchWb5kJFFMCC6rkBURbueJO42H7-8ljbKw,1661
416
416
  classiq/model_expansions/quantum_operations/phase.py,sha256=W3qHfxs9S25yE2Ofgy9NwO5t9og6DxhqSQW8w1ptm1w,7337
417
417
  classiq/model_expansions/quantum_operations/power.py,sha256=89FEo5xJkOxCP7L7Jy9MJatRbbzjVVR0oc8Q7aBzF8Q,2661
418
- classiq/model_expansions/quantum_operations/quantum_assignment_operation.py,sha256=-WjwH-DmRbIZa4BusHl8HC7fvt7pc0U2IeU7-Mz5k-A,7485
418
+ classiq/model_expansions/quantum_operations/quantum_assignment_operation.py,sha256=Kk_7cYqJbwi3Nhh48yu51jIyaDo_dRB4nQnMOkGQKZE,8428
419
419
  classiq/model_expansions/quantum_operations/quantum_function_call.py,sha256=hQcOwaZV0qe7SmlqV3hdlKIcX_EKmxGOysH0lOVh9F0,729
420
420
  classiq/model_expansions/quantum_operations/repeat.py,sha256=zxxKxbMqa_4zkA5x10NrDpgUqEHKId4WxLXmD4aboJk,2060
421
421
  classiq/model_expansions/quantum_operations/variable_decleration.py,sha256=fRMRxctSxQFhPIhTMMVGC0F9p4iBLIMCD59G_j4Rk2Y,1196
@@ -464,7 +464,7 @@ classiq/qmod/builtins/structs.py,sha256=pdjNKFAhxLNzVdz4bhONO4PwvfI_W7Z7Skjgqt47
464
464
  classiq/qmod/cfunc.py,sha256=quwJdgYRgqI2C13SRrRunLi-Kuf7nCAk2-O2B46QtoY,1093
465
465
  classiq/qmod/classical_function.py,sha256=DuPzfK--_6pR6JcuvkWoNx3jRHkRVskqyTOi4qbejr8,1221
466
466
  classiq/qmod/cparam.py,sha256=wai8PyfS6QCJ8_WLck2nRZrtuEXYg1cogj4CQ_EZKP4,1182
467
- classiq/qmod/create_model_function.py,sha256=zAOz1T8_o6bzlBaBF0Q1AWkbzDr86ui3WXhaW_S3lYU,7275
467
+ classiq/qmod/create_model_function.py,sha256=A3IhmgCv4pFhn2tiaQ2HmFMl3zzeZQKOR2Qy5wnSQHs,7501
468
468
  classiq/qmod/declaration_inferrer.py,sha256=4GEh_qzwqR2Rj_B-oBAtENCPDSq92PKcahc7I4vghG0,7003
469
469
  classiq/qmod/expression_query.py,sha256=EkZPG-iJGcar2zqAwji0QtPKjapO6RL3nz8YEuhxyGg,1642
470
470
  classiq/qmod/generative.py,sha256=--557jt22gVKJROwcSA7AzQBdgNl9zMXGEfRJVI6W1k,1561
@@ -498,7 +498,7 @@ classiq/qmod/symbolic_type.py,sha256=whMy3Uw4iE2SOVfHeyfTpDJ3BH6Rxlhk492ij-4QRU4
498
498
  classiq/qmod/type_attribute_remover.py,sha256=dN9dcsmFQI1UXz_DllGKl2BP4XkyvGdNk8diPan-9RE,1236
499
499
  classiq/qmod/utilities.py,sha256=z_VnIRmOYTWjJp2UlOcWK0rQRtMqysmP_Gr6WYY_nak,2734
500
500
  classiq/qmod/write_qmod.py,sha256=SO7hdBdO31lTzyeaJ-Htyma-aJmrbBNtABNEB2llI4Q,1818
501
- classiq/synthesis.py,sha256=s9-o3lzSxghx0YftQg3iZGvIreJ-H7DSTQYsevKcKw8,7374
502
- classiq-0.50.0.dist-info/METADATA,sha256=wAexI0GGQ4hKonmsIasJW0HL-rFLBLwwec6rPZWUdKA,3458
503
- classiq-0.50.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
504
- classiq-0.50.0.dist-info/RECORD,,
501
+ classiq/synthesis.py,sha256=egu5iUXeED5Lt0sDDQZvybUNVSYckNia5HbqRtoS11A,8035
502
+ classiq-0.51.1.dist-info/METADATA,sha256=cirVNZ9qM7PL8ljeUkomYY6xR6Q5OF6EODmpDZUVxic,3458
503
+ classiq-0.51.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
504
+ classiq-0.51.1.dist-info/RECORD,,