classiq 0.51.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/interface/_version.py +1 -1
- classiq/interface/generator/expressions/qmod_qscalar_proxy.py +3 -3
- classiq/model_expansions/quantum_operations/inplace_binary_operation.py +27 -5
- classiq/qmod/create_model_function.py +10 -4
- {classiq-0.51.0.dist-info → classiq-0.51.1.dist-info}/METADATA +1 -1
- {classiq-0.51.0.dist-info → classiq-0.51.1.dist-info}/RECORD +7 -7
- {classiq-0.51.0.dist-info → classiq-0.51.1.dist-info}/WHEEL +0 -0
classiq/interface/_version.py
CHANGED
@@ -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
|
32
|
+
if fraction_digits > size:
|
33
33
|
raise ClassiqValueError(
|
34
|
-
f"
|
35
|
-
f"
|
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
|
@@ -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
|
277
|
+
for var in (significand_var, sign_var)
|
256
278
|
]
|
257
279
|
|
258
280
|
return (
|
@@ -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(
|
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
|
|
@@ -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=
|
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
|
@@ -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=
|
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
|
@@ -411,7 +411,7 @@ classiq/model_expansions/quantum_operations/classicalif.py,sha256=6SFumWVIWCTNQs
|
|
411
411
|
classiq/model_expansions/quantum_operations/control.py,sha256=SibNNK8gwzBMojwmXDg--SXbqhn3PJmIB2y0sK-7rJA,10151
|
412
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=
|
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
|
@@ -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=
|
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
|
@@ -499,6 +499,6 @@ classiq/qmod/type_attribute_remover.py,sha256=dN9dcsmFQI1UXz_DllGKl2BP4XkyvGdNk8
|
|
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
501
|
classiq/synthesis.py,sha256=egu5iUXeED5Lt0sDDQZvybUNVSYckNia5HbqRtoS11A,8035
|
502
|
-
classiq-0.51.
|
503
|
-
classiq-0.51.
|
504
|
-
classiq-0.51.
|
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,,
|
File without changes
|