classiq 0.43.3__py3-none-any.whl → 0.45.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.
Files changed (220) hide show
  1. classiq/__init__.py +8 -3
  2. classiq/_internals/api_wrapper.py +2 -2
  3. classiq/_internals/authentication/auth0.py +1 -1
  4. classiq/_internals/authentication/device.py +5 -1
  5. classiq/_internals/authentication/token_manager.py +5 -4
  6. classiq/_internals/client.py +5 -8
  7. classiq/_internals/config.py +1 -2
  8. classiq/_internals/host_checker.py +34 -13
  9. classiq/_internals/jobs.py +3 -3
  10. classiq/analyzer/analyzer.py +1 -1
  11. classiq/analyzer/analyzer_utilities.py +1 -1
  12. classiq/analyzer/rb.py +1 -1
  13. classiq/applications/chemistry/chemistry_model_constructor.py +13 -7
  14. classiq/applications/combinatorial_helpers/allowed_constraints.py +4 -1
  15. classiq/applications/combinatorial_helpers/arithmetic/isolation.py +1 -1
  16. classiq/applications/combinatorial_helpers/encoding_mapping.py +1 -1
  17. classiq/applications/combinatorial_helpers/encoding_utils.py +2 -1
  18. classiq/applications/combinatorial_helpers/optimization_model.py +1 -1
  19. classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +1 -1
  20. classiq/applications/combinatorial_helpers/pyomo_utils.py +1 -2
  21. classiq/applications/combinatorial_helpers/transformations/encoding.py +1 -1
  22. classiq/applications/combinatorial_helpers/transformations/fixed_variables.py +5 -4
  23. classiq/applications/combinatorial_helpers/transformations/ising_converter.py +1 -1
  24. classiq/applications/combinatorial_helpers/transformations/sign_seperation.py +1 -1
  25. classiq/applications/combinatorial_optimization/combinatorial_optimization_model_constructor.py +1 -1
  26. classiq/applications/finance/finance_model_constructor.py +4 -3
  27. classiq/applications/grover/grover_model_constructor.py +7 -5
  28. classiq/applications/hamiltonian/__init__.py +0 -0
  29. classiq/applications/hamiltonian/pauli_decomposition.py +113 -0
  30. classiq/applications/qnn/circuit_utils.py +1 -1
  31. classiq/applications/qnn/datasets/dataset_base_classes.py +2 -1
  32. classiq/applications/qnn/datasets/dataset_not.py +2 -1
  33. classiq/applications/qnn/qlayer.py +3 -2
  34. classiq/applications/qnn/torch_utils.py +2 -1
  35. classiq/applications/qsvm/qsvm_model_constructor.py +1 -1
  36. classiq/execution/execution_session.py +1 -1
  37. classiq/execution/jobs.py +5 -2
  38. classiq/interface/_version.py +1 -1
  39. classiq/interface/analyzer/cytoscape_graph.py +1 -2
  40. classiq/interface/analyzer/result.py +2 -3
  41. classiq/interface/ast_node.py +1 -18
  42. classiq/interface/backend/backend_preferences.py +11 -18
  43. classiq/interface/backend/ionq/ionq_quantum_program.py +1 -1
  44. classiq/interface/backend/pydantic_backend.py +0 -5
  45. classiq/interface/backend/quantum_backend_providers.py +4 -3
  46. classiq/interface/chemistry/fermionic_operator.py +1 -2
  47. classiq/interface/chemistry/ground_state_problem.py +2 -3
  48. classiq/interface/chemistry/molecule.py +1 -2
  49. classiq/interface/chemistry/operator.py +8 -10
  50. classiq/interface/combinatorial_optimization/encoding_types.py +1 -1
  51. classiq/interface/combinatorial_optimization/mht_qaoa_input.py +1 -1
  52. classiq/interface/combinatorial_optimization/solver_types.py +1 -1
  53. classiq/interface/debug_info/__init__.py +0 -0
  54. classiq/interface/debug_info/debug_info.py +32 -0
  55. classiq/{exceptions.py → interface/exceptions.py} +4 -0
  56. classiq/interface/executor/aws_execution_cost.py +2 -2
  57. classiq/interface/executor/execution_preferences.py +2 -47
  58. classiq/interface/executor/execution_result.py +1 -2
  59. classiq/interface/executor/optimizer_preferences.py +2 -3
  60. classiq/interface/executor/quantum_code.py +1 -2
  61. classiq/interface/executor/quantum_instruction_set.py +2 -2
  62. classiq/interface/executor/register_initialization.py +1 -2
  63. classiq/interface/executor/result.py +29 -14
  64. classiq/interface/finance/function_input.py +6 -11
  65. classiq/interface/generator/amplitude_loading.py +2 -3
  66. classiq/interface/generator/ansatz_library.py +1 -1
  67. classiq/interface/generator/application_apis/arithmetic_declarations.py +8 -5
  68. classiq/interface/generator/application_apis/chemistry_declarations.py +78 -60
  69. classiq/interface/generator/application_apis/combinatorial_optimization_declarations.py +19 -10
  70. classiq/interface/generator/application_apis/entangler_declarations.py +11 -6
  71. classiq/interface/generator/application_apis/finance_declarations.py +37 -44
  72. classiq/interface/generator/application_apis/qsvm_declarations.py +21 -15
  73. classiq/interface/generator/arith/arithmetic.py +10 -8
  74. classiq/interface/generator/arith/arithmetic_arg_type_validator.py +1 -2
  75. classiq/interface/generator/arith/arithmetic_expression_abc.py +22 -3
  76. classiq/interface/generator/arith/arithmetic_expression_parser.py +3 -4
  77. classiq/interface/generator/arith/arithmetic_expression_validator.py +1 -2
  78. classiq/interface/generator/arith/arithmetic_param_getters.py +1 -2
  79. classiq/interface/generator/arith/arithmetic_result_builder.py +15 -11
  80. classiq/interface/generator/arith/ast_node_rewrite.py +1 -1
  81. classiq/interface/generator/arith/binary_ops.py +7 -7
  82. classiq/interface/generator/arith/endianness.py +1 -1
  83. classiq/interface/generator/arith/extremum_operations.py +44 -21
  84. classiq/interface/generator/arith/logical_ops.py +1 -2
  85. classiq/interface/generator/arith/register_user_input.py +1 -2
  86. classiq/interface/generator/arith/unary_ops.py +1 -2
  87. classiq/interface/generator/arith/uncomputation_methods.py +1 -1
  88. classiq/interface/generator/chemistry_function_params.py +1 -2
  89. classiq/interface/generator/circuit_code/circuit_code.py +1 -2
  90. classiq/interface/generator/circuit_code/types_and_constants.py +1 -2
  91. classiq/interface/generator/commuting_pauli_exponentiation.py +1 -2
  92. classiq/interface/generator/constant.py +1 -1
  93. classiq/interface/generator/control_state.py +1 -2
  94. classiq/interface/generator/custom_ansatz.py +1 -2
  95. classiq/interface/generator/expressions/atomic_expression_functions.py +1 -0
  96. classiq/interface/generator/expressions/enums/finance_functions.py +4 -5
  97. classiq/interface/generator/expressions/evaluated_expression.py +1 -2
  98. classiq/interface/generator/expressions/expression.py +1 -2
  99. classiq/interface/generator/expressions/expression_constants.py +3 -1
  100. classiq/interface/generator/expressions/non_symbolic_expr.py +1 -1
  101. classiq/interface/generator/expressions/qmod_qarray_proxy.py +53 -70
  102. classiq/interface/generator/expressions/qmod_qscalar_proxy.py +2 -7
  103. classiq/interface/generator/expressions/qmod_qstruct_proxy.py +35 -0
  104. classiq/interface/generator/expressions/qmod_sized_proxy.py +1 -1
  105. classiq/interface/generator/expressions/sympy_supported_expressions.py +2 -1
  106. classiq/interface/generator/function_params.py +2 -3
  107. classiq/interface/generator/functions/builtins/core_library/__init__.py +4 -2
  108. classiq/interface/generator/functions/builtins/core_library/atomic_quantum_functions.py +41 -41
  109. classiq/interface/generator/functions/builtins/core_library/exponentiation_functions.py +52 -42
  110. classiq/interface/generator/functions/builtins/open_lib_functions.py +1095 -3347
  111. classiq/interface/generator/functions/builtins/quantum_operators.py +9 -22
  112. classiq/interface/generator/functions/classical_function_declaration.py +14 -6
  113. classiq/interface/generator/functions/classical_type.py +7 -114
  114. classiq/interface/generator/functions/concrete_types.py +55 -0
  115. classiq/interface/generator/functions/function_declaration.py +10 -10
  116. classiq/interface/generator/functions/port_declaration.py +1 -2
  117. classiq/interface/generator/functions/type_name.py +80 -0
  118. classiq/interface/generator/generated_circuit_data.py +3 -3
  119. classiq/interface/generator/grover_diffuser.py +1 -2
  120. classiq/interface/generator/grover_operator.py +1 -2
  121. classiq/interface/generator/hamiltonian_evolution/exponentiation.py +1 -2
  122. classiq/interface/generator/hamiltonian_evolution/suzuki_trotter.py +1 -2
  123. classiq/interface/generator/hardware/hardware_data.py +1 -2
  124. classiq/interface/generator/hardware_efficient_ansatz.py +2 -3
  125. classiq/interface/generator/hartree_fock.py +1 -2
  126. classiq/interface/generator/linear_pauli_rotations.py +1 -2
  127. classiq/interface/generator/mcmt_method.py +1 -1
  128. classiq/interface/generator/mcu.py +1 -2
  129. classiq/interface/generator/mcx.py +1 -2
  130. classiq/interface/generator/model/constraints.py +2 -3
  131. classiq/interface/generator/model/model.py +12 -2
  132. classiq/interface/generator/model/preferences/preferences.py +7 -3
  133. classiq/interface/generator/model/quantum_register.py +1 -2
  134. classiq/interface/generator/oracles/arithmetic_oracle.py +1 -2
  135. classiq/interface/generator/oracles/custom_oracle.py +1 -2
  136. classiq/interface/generator/oracles/oracle_abc.py +1 -2
  137. classiq/interface/generator/partitioned_register.py +1 -2
  138. classiq/interface/generator/piecewise_linear_amplitude_loading.py +1 -2
  139. classiq/interface/generator/preferences/optimization.py +1 -2
  140. classiq/interface/generator/qpe.py +1 -2
  141. classiq/interface/generator/qsvm.py +2 -3
  142. classiq/interface/generator/quantum_function_call.py +4 -2
  143. classiq/interface/generator/quantum_program.py +6 -7
  144. classiq/interface/generator/range_types.py +1 -1
  145. classiq/interface/generator/register_role.py +8 -2
  146. classiq/interface/generator/slice_parsing_utils.py +1 -2
  147. classiq/interface/generator/standard_gates/controlled_standard_gates.py +1 -2
  148. classiq/interface/generator/state_preparation/metrics.py +2 -3
  149. classiq/interface/generator/state_preparation/state_preparation.py +1 -2
  150. classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +1 -3
  151. classiq/interface/generator/transpiler_basis_gates.py +1 -1
  152. classiq/interface/generator/types/builtin_enum_declarations.py +38 -45
  153. classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +1 -2
  154. classiq/interface/generator/types/enum_declaration.py +1 -2
  155. classiq/interface/generator/types/qstruct_declaration.py +17 -0
  156. classiq/interface/generator/types/struct_declaration.py +2 -3
  157. classiq/interface/generator/ucc.py +1 -2
  158. classiq/interface/generator/unitary_gate.py +1 -2
  159. classiq/interface/generator/validations/flow_graph.py +1 -2
  160. classiq/interface/generator/validations/validator_functions.py +1 -2
  161. classiq/interface/hardware.py +1 -1
  162. classiq/interface/helpers/validation_helpers.py +2 -19
  163. classiq/interface/ide/visual_model.py +10 -4
  164. classiq/interface/interface_version.py +1 -0
  165. classiq/interface/jobs.py +2 -3
  166. classiq/interface/model/bind_operation.py +26 -7
  167. classiq/interface/model/classical_parameter_declaration.py +8 -5
  168. classiq/interface/model/control.py +5 -5
  169. classiq/interface/model/handle_binding.py +185 -12
  170. classiq/interface/model/inplace_binary_operation.py +17 -6
  171. classiq/interface/model/model.py +29 -7
  172. classiq/interface/model/native_function_definition.py +8 -4
  173. classiq/interface/model/parameter.py +13 -0
  174. classiq/interface/model/port_declaration.py +21 -4
  175. classiq/interface/model/quantum_expressions/amplitude_loading_operation.py +22 -8
  176. classiq/interface/model/quantum_expressions/arithmetic_operation.py +30 -6
  177. classiq/interface/model/quantum_expressions/quantum_expression.py +4 -9
  178. classiq/interface/model/quantum_function_call.py +136 -194
  179. classiq/interface/model/quantum_function_declaration.py +147 -165
  180. classiq/interface/model/quantum_lambda_function.py +23 -6
  181. classiq/interface/model/quantum_statement.py +34 -8
  182. classiq/interface/model/quantum_type.py +41 -11
  183. classiq/interface/model/quantum_variable_declaration.py +1 -1
  184. classiq/interface/model/statement_block.py +2 -0
  185. classiq/interface/model/validation_handle.py +8 -2
  186. classiq/interface/server/global_versions.py +4 -4
  187. classiq/interface/server/routes.py +2 -0
  188. classiq/interface/source_reference.py +59 -0
  189. classiq/qmod/__init__.py +2 -3
  190. classiq/qmod/builtins/classical_execution_primitives.py +1 -1
  191. classiq/qmod/builtins/functions.py +39 -11
  192. classiq/qmod/builtins/operations.py +172 -41
  193. classiq/qmod/classical_function.py +1 -1
  194. classiq/qmod/declaration_inferrer.py +102 -57
  195. classiq/qmod/expression_query.py +1 -1
  196. classiq/qmod/model_state_container.py +2 -0
  197. classiq/qmod/native/pretty_printer.py +71 -53
  198. classiq/qmod/pretty_print/pretty_printer.py +98 -52
  199. classiq/qmod/qfunc.py +11 -5
  200. classiq/qmod/qmod_constant.py +1 -1
  201. classiq/qmod/qmod_parameter.py +27 -4
  202. classiq/qmod/qmod_variable.py +405 -174
  203. classiq/qmod/quantum_callable.py +3 -3
  204. classiq/qmod/quantum_expandable.py +128 -68
  205. classiq/qmod/quantum_function.py +24 -5
  206. classiq/qmod/semantics/annotation.py +13 -15
  207. classiq/qmod/semantics/error_manager.py +36 -10
  208. classiq/qmod/semantics/static_semantics_visitor.py +164 -76
  209. classiq/qmod/semantics/validation/func_call_validation.py +43 -97
  210. classiq/qmod/semantics/validation/handle_validation.py +85 -0
  211. classiq/qmod/semantics/validation/types_validation.py +108 -1
  212. classiq/qmod/symbolic.py +2 -1
  213. classiq/qmod/type_attribute_remover.py +32 -0
  214. classiq/qmod/utilities.py +26 -5
  215. classiq/{interface/ide/show.py → show.py} +1 -1
  216. {classiq-0.43.3.dist-info → classiq-0.45.0.dist-info}/METADATA +3 -3
  217. {classiq-0.43.3.dist-info → classiq-0.45.0.dist-info}/RECORD +219 -207
  218. classiq/qmod/qmod_struct.py +0 -13
  219. /classiq/{_internals → interface}/enum_utils.py +0 -0
  220. {classiq-0.43.3.dist-info → classiq-0.45.0.dist-info}/WHEEL +0 -0
classiq/__init__.py CHANGED
@@ -14,9 +14,8 @@ from classiq.interface.generator.model import * # noqa: F403
14
14
  from classiq.interface.generator.model import __all__ as _md_all
15
15
  from classiq.interface.generator.quantum_program import QuantumProgram
16
16
  from classiq.interface.generator.types.builtin_enum_declarations import * # noqa: F403
17
- from classiq.interface.ide.show import show
18
17
 
19
- from classiq import applications, exceptions, execution, synthesis
18
+ from classiq import applications, execution, synthesis
20
19
  from classiq._internals import logger
21
20
  from classiq._internals.async_utils import (
22
21
  enable_jupyter_notebook,
@@ -38,6 +37,10 @@ from classiq.applications.combinatorial_optimization import (
38
37
  )
39
38
  from classiq.applications.finance import construct_finance_model
40
39
  from classiq.applications.grover import construct_grover_model
40
+ from classiq.applications.hamiltonian.pauli_decomposition import (
41
+ hamiltonian_to_matrix,
42
+ matrix_to_hamiltonian,
43
+ )
41
44
  from classiq.applications.qsvm import construct_qsvm_model
42
45
  from classiq.executor import (
43
46
  execute,
@@ -46,6 +49,7 @@ from classiq.executor import (
46
49
  )
47
50
  from classiq.qmod import * # noqa: F403
48
51
  from classiq.qmod import __all__ as _qmod_all
52
+ from classiq.show import show
49
53
  from classiq.synthesis import (
50
54
  set_constraints,
51
55
  set_execution_preferences,
@@ -71,7 +75,6 @@ if _is_notebook():
71
75
  _sub_modules = [
72
76
  "analyzer",
73
77
  "applications",
74
- "exceptions",
75
78
  "execution",
76
79
  "open_help",
77
80
  "qmod",
@@ -95,6 +98,8 @@ __all__ = (
95
98
  "set_execution_preferences",
96
99
  "set_quantum_program_execution_preferences",
97
100
  "show",
101
+ "hamiltonian_to_matrix",
102
+ "matrix_to_hamiltonian",
98
103
  ]
99
104
  + _md_all
100
105
  + _sub_modules
@@ -8,6 +8,8 @@ import classiq.interface.pyomo_extension
8
8
  from classiq.interface.analyzer import analysis_params, result as analysis_result
9
9
  from classiq.interface.analyzer.analysis_params import AnalysisRBParams
10
10
  from classiq.interface.chemistry import ground_state_problem, operator
11
+ from classiq.interface.enum_utils import StrEnum
12
+ from classiq.interface.exceptions import ClassiqAPIError, ClassiqValueError
11
13
  from classiq.interface.execution.jobs import (
12
14
  ExecutionJobDetailsV1,
13
15
  ExecutionJobsQueryResultsV1,
@@ -20,9 +22,7 @@ from classiq.interface.model.model import Model
20
22
  from classiq.interface.server import routes
21
23
 
22
24
  from classiq._internals.client import client
23
- from classiq._internals.enum_utils import StrEnum
24
25
  from classiq._internals.jobs import JobPoller
25
- from classiq.exceptions import ClassiqAPIError, ClassiqValueError
26
26
 
27
27
  ResultType = TypeVar("ResultType", bound=pydantic.BaseModel)
28
28
  CLASSIQ_ACCEPT_HEADER = "X-Classiq-Accept-Version"
@@ -5,7 +5,7 @@ from typing import Any, Dict, Optional, Union
5
5
  from httpx import AsyncClient, Response, codes
6
6
  from pydantic import BaseSettings, Field
7
7
 
8
- from classiq.exceptions import ClassiqAuthenticationError
8
+ from classiq.interface.exceptions import ClassiqAuthenticationError
9
9
 
10
10
 
11
11
  class AuthSettings(BaseSettings):
@@ -3,9 +3,13 @@ import webbrowser
3
3
  from datetime import timedelta
4
4
  from typing import Any, Dict, Iterable, Optional, TypeVar
5
5
 
6
+ from classiq.interface.exceptions import (
7
+ ClassiqAuthenticationError,
8
+ ClassiqExpiredTokenError,
9
+ )
10
+
6
11
  from classiq._internals.async_utils import poll_for
7
12
  from classiq._internals.authentication.auth0 import Auth0, Tokens
8
- from classiq.exceptions import ClassiqAuthenticationError, ClassiqExpiredTokenError
9
13
 
10
14
  T = TypeVar("T")
11
15
 
@@ -4,14 +4,15 @@ import threading
4
4
  import warnings
5
5
  from typing import Optional, Sequence, Type
6
6
 
7
+ from classiq.interface.exceptions import (
8
+ ClassiqAuthenticationError,
9
+ ClassiqPasswordManagerSelectionError,
10
+ )
11
+
7
12
  from classiq._internals.authentication import password_manager as pm
8
13
  from classiq._internals.authentication.auth0 import Auth0
9
14
  from classiq._internals.authentication.device import DeviceRegistrar, Tokens
10
15
  from classiq._internals.config import Configuration
11
- from classiq.exceptions import (
12
- ClassiqAuthenticationError,
13
- ClassiqPasswordManagerSelectionError,
14
- )
15
16
 
16
17
  PASSWORD_MANAGERS: Sequence[Type[pm.PasswordManager]] = [
17
18
  pm.KeyringPasswordManager,
@@ -19,15 +19,15 @@ from typing import (
19
19
  )
20
20
 
21
21
  import httpx
22
- from packaging.version import Version
23
22
  from typing_extensions import ParamSpec
24
23
 
25
24
  from classiq.interface._version import VERSION as _VERSION
25
+ from classiq.interface.exceptions import ClassiqAPIError, ClassiqExpiredTokenError
26
+ from classiq.interface.interface_version import INTERFACE_VERSION
26
27
 
27
28
  from classiq._internals import config
28
29
  from classiq._internals.authentication import token_manager
29
30
  from classiq._internals.host_checker import HostChecker
30
- from classiq.exceptions import ClassiqAPIError, ClassiqExpiredTokenError
31
31
 
32
32
  _FRONTEND_VARIANT: str = "classiq-sdk"
33
33
  _INTERFACE_VARIANT: str = "classiq-interface-sdk"
@@ -161,12 +161,9 @@ class Client:
161
161
  self._api_prefix = self._make_api_prefix()
162
162
  self._session_id: Optional[str] = None
163
163
 
164
- @classmethod
165
- def _make_api_prefix(cls) -> str:
166
- if _VERSION == cls._UNKNOWN_VERSION:
167
- return cls._LATEST_VERSION_API_PREFIX
168
- parsed_version = Version(_VERSION)
169
- return f"/api/v{parsed_version.major}-{parsed_version.minor}"
164
+ @staticmethod
165
+ def _make_api_prefix() -> str:
166
+ return f"/api/v{INTERFACE_VERSION}"
170
167
 
171
168
  def make_versioned_url(self, url_postfix: str) -> str:
172
169
  return self._api_prefix + url_postfix
@@ -8,10 +8,9 @@ import configargparse # type: ignore[import]
8
8
  import pydantic
9
9
  from pydantic import BaseModel
10
10
 
11
+ from classiq.interface.enum_utils import StrEnum
11
12
  from classiq.interface.server.routes import DEFAULT_IDE_FE_APP
12
13
 
13
- from classiq._internals.enum_utils import StrEnum
14
-
15
14
  DEFAULT_HOST = "https://api.classiq.io"
16
15
 
17
16
 
@@ -1,6 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
+ import warnings
5
+ from datetime import datetime
4
6
  from typing import TYPE_CHECKING, Optional
5
7
 
6
8
  import httpx
@@ -8,10 +10,10 @@ import pydantic
8
10
  from packaging.version import Version
9
11
  from pydantic import BaseModel
10
12
 
13
+ from classiq.interface.exceptions import ClassiqAPIError, ClassiqDeprecationWarning
14
+ from classiq.interface.interface_version import INTERFACE_VERSION
11
15
  from classiq.interface.server.global_versions import DeprecationInfo, GlobalVersions
12
16
 
13
- from classiq.exceptions import ClassiqAPIError
14
-
15
17
  if TYPE_CHECKING:
16
18
  from classiq._internals.client import Client
17
19
 
@@ -26,9 +28,23 @@ class HostVersions(BaseModel):
26
28
  class HostChecker:
27
29
  _UNKNOWN_VERSION = "0.0.0"
28
30
 
29
- def __init__(self, client: Client, client_version: str) -> None:
31
+ def __init__(
32
+ self,
33
+ client: Client,
34
+ client_version: str,
35
+ interface_version: str = INTERFACE_VERSION,
36
+ ) -> None:
30
37
  self._client = client
31
38
  self._client_version = client_version
39
+ self._interface_version = interface_version
40
+
41
+ def _get_interface_version(self) -> Optional[str]:
42
+ global_interfaces = GlobalVersions.parse_obj(
43
+ self._client.sync_call_api(
44
+ "get", "/interface_versions", use_versioned_url=False
45
+ )
46
+ )
47
+ return global_interfaces.deployed.get(self._interface_version, None)
32
48
 
33
49
  def _get_host_version(self) -> str:
34
50
  host = HostVersions.parse_obj(self._client.sync_call_api("get", "/versions"))
@@ -56,18 +72,16 @@ class HostChecker:
56
72
 
57
73
  def check_host_version(self) -> None:
58
74
  try:
59
- raw_host_version = self._get_host_version()
75
+ interface_version = self._get_interface_version()
60
76
  except httpx.ConnectError:
61
77
  _logger.warning(
62
78
  "Version check failed - host unavailable.",
63
79
  )
64
80
  else:
65
- if not self._check_matching_versions(
66
- raw_host_version, self._client_version
67
- ):
81
+ if interface_version is None:
68
82
  raise ClassiqAPIError(
69
- f"Classiq API version mismatch: 'classiq' version is "
70
- f"{self._client_version}, backend version is {raw_host_version}. {_VERSION_UPDATE_SUGGESTION}"
83
+ f"You are using an unsupported version of Classiq SDK - {self._client_version}. "
84
+ f"{_VERSION_UPDATE_SUGGESTION}"
71
85
  )
72
86
 
73
87
  def check_deprecated_version(self) -> None:
@@ -80,8 +94,15 @@ class HostChecker:
80
94
  else:
81
95
  if deprecation_info is None:
82
96
  return
83
- _logger.warning(
84
- "The current version of 'classiq' has been deprecated, and will not be supported as of %s. %s",
85
- deprecation_info.removal_date.date(),
86
- _VERSION_UPDATE_SUGGESTION,
97
+ removal_date = (
98
+ deprecation_info.removal_date.date()
99
+ if isinstance(deprecation_info.removal_date, datetime)
100
+ else deprecation_info.removal_date
101
+ )
102
+ warnings.warn(
103
+ f"The current version of 'classiq' has been deprecated, and"
104
+ f" will not be supported as of {removal_date}. "
105
+ f"{_VERSION_UPDATE_SUGGESTION}",
106
+ ClassiqDeprecationWarning,
107
+ stacklevel=2,
87
108
  )
@@ -5,12 +5,12 @@ from typing import Callable, Dict, Iterable, Optional, Set, TypeVar
5
5
  import httpx
6
6
  import pydantic
7
7
 
8
+ from classiq.interface.exceptions import ClassiqAPIError
8
9
  from classiq.interface.jobs import JobDescription, JobID, JSONObject
9
10
 
10
11
  from classiq._internals.async_utils import poll_for
11
12
  from classiq._internals.client import client, try_again_on_failure
12
13
  from classiq._internals.config import SDKMode
13
- from classiq.exceptions import ClassiqAPIError
14
14
 
15
15
  _URL_PATH_SEP = "/"
16
16
  GeneralJobDescription = JobDescription[JSONObject]
@@ -169,7 +169,7 @@ class JobPoller:
169
169
  self, model: pydantic.BaseModel, timeout_sec: Optional[float]
170
170
  ) -> GeneralJobDescription:
171
171
  # TODO: we can't use model.dict() - it doesn't serialize complex class.
172
- # This was added because JSON serializer doesn't serialize complex type, and pydantic does.
173
- # We should add support for smarter json serialization.
172
+ # This was added because JSON serializer doesn't serialize complex and UUID,
173
+ # while pydantic does. We should add support for smarter json serialization.
174
174
  body = json.loads(model.json())
175
175
  return await self.run(body, timeout_sec)
@@ -10,6 +10,7 @@ import plotly.graph_objects as go
10
10
 
11
11
  from classiq.interface.analyzer import analysis_params
12
12
  from classiq.interface.backend.quantum_backend_providers import AnalyzerProviderVendor
13
+ from classiq.interface.exceptions import ClassiqAnalyzerError
13
14
  from classiq.interface.generator import quantum_program as generator_result
14
15
 
15
16
  from classiq._internals import async_utils, client
@@ -20,7 +21,6 @@ from classiq.analyzer.analyzer_utilities import (
20
21
  ProviderNameEnum,
21
22
  )
22
23
  from classiq.analyzer.url_utils import circuit_page_uri, client_ide_base_url
23
- from classiq.exceptions import ClassiqAnalyzerError
24
24
 
25
25
  find_ipywidgets = find_spec("ipywidgets")
26
26
  VBox = Any
@@ -2,10 +2,10 @@ from typing import Dict, List, Union
2
2
 
3
3
  from classiq.interface.analyzer import analysis_params
4
4
  from classiq.interface.backend.quantum_backend_providers import AnalyzerProviderVendor
5
+ from classiq.interface.exceptions import ClassiqAnalyzerError
5
6
  from classiq.interface.generator.quantum_program import QuantumProgram
6
7
 
7
8
  from classiq._internals.api_wrapper import ApiWrapper
8
- from classiq.exceptions import ClassiqAnalyzerError
9
9
 
10
10
  DeviceName = str
11
11
  ProviderName = str
classiq/analyzer/rb.py CHANGED
@@ -8,9 +8,9 @@ import plotly.graph_objects as go
8
8
 
9
9
  from classiq.interface.analyzer.analysis_params import AnalysisRBParams
10
10
  from classiq.interface.analyzer.result import RbResults
11
+ from classiq.interface.exceptions import ClassiqAnalyzerError
11
12
 
12
13
  from classiq._internals.api_wrapper import ApiWrapper
13
- from classiq.exceptions import ClassiqAnalyzerError
14
14
  from classiq.executor import BackendPreferencesAndResult
15
15
 
16
16
 
@@ -50,7 +50,7 @@ from classiq.applications.chemistry.ansatz_parameters import (
50
50
  from classiq.applications.chemistry.chemistry_execution_parameters import (
51
51
  ChemistryExecutionParameters,
52
52
  )
53
- from classiq.exceptions import ClassiqError
53
+ from classiq.interface.exceptions import ClassiqError
54
54
  from classiq.qmod.utilities import qmod_val_to_expr_str
55
55
 
56
56
  _LADDER_OPERATOR_TYPE_INDICATOR_TO_QMOD_MAPPING: Dict[str, str] = {
@@ -154,7 +154,6 @@ _HAE_GATE_MAPPING: Dict[str, QuantumFunctionCall] = {
154
154
  ),
155
155
  "crx": QuantumFunctionCall(
156
156
  function="CRX",
157
- designated_params={"theta": Expression(expr="angle")},
158
157
  positional_args=[
159
158
  Expression(expr="angle"),
160
159
  HandleBinding(name="q1"),
@@ -325,11 +324,17 @@ def _get_hea_function(hea_parameters: HEAParameters) -> QuantumFunctionCall:
325
324
  ),
326
325
  Expression(expr=f"{hea_parameters.reps}"),
327
326
  [
328
- QuantumLambdaFunction(body=[_HAE_GATE_MAPPING[gate]])
327
+ QuantumLambdaFunction(
328
+ pos_rename_params=["angle", "q"],
329
+ body=[_HAE_GATE_MAPPING[gate]],
330
+ )
329
331
  for gate in hea_parameters.one_qubit_gates
330
332
  ],
331
333
  [
332
- QuantumLambdaFunction(body=[_HAE_GATE_MAPPING[gate]])
334
+ QuantumLambdaFunction(
335
+ pos_rename_params=["angle", "q1", "q2"],
336
+ body=[_HAE_GATE_MAPPING[gate]],
337
+ )
333
338
  for gate in hea_parameters.two_qubit_gates
334
339
  ],
335
340
  HandleBinding(name="qbv"),
@@ -378,9 +383,10 @@ save({{{_MOLECULE_PROBLEM_RESULT!r}: {_MOLECULE_PROBLEM_RESULT}}})
378
383
 
379
384
 
380
385
  def _is_parametric_gate(call: QuantumFunctionCall) -> bool:
381
- return len(call.designated_params) > 0 or any(
382
- isinstance(arg, Expression) for arg in call.positional_args
383
- )
386
+ # FIXME: call call.params instead (CAD-21568)
387
+ return any(
388
+ arg for arg in call.positional_args if isinstance(arg, Expression)
389
+ ) or any(isinstance(arg, Expression) for arg in call.positional_args)
384
390
 
385
391
 
386
392
  def _get_execution_result_post_processing_statements(
@@ -15,6 +15,9 @@ def is_constraint_sum_less_than_one(
15
15
  isinstance(expression, LessThan)
16
16
  and isinstance(expression.args[0], Add)
17
17
  and all(isinstance(arg, Symbol) for arg in expression.args[0].args)
18
- and expression.args[1] == _INEQUALITY_UPPER_LIMIT
18
+ and (
19
+ expression.args[1] == _INEQUALITY_UPPER_LIMIT
20
+ or expression.args[1] == float(_INEQUALITY_UPPER_LIMIT)
21
+ )
19
22
  and encoding_type is None
20
23
  )
@@ -1,7 +1,7 @@
1
1
  from sympy import Eq, Expr, GreaterThan, LessThan, Rational, Symbol, solve
2
2
  from sympy.core.relational import Relational
3
3
 
4
- from classiq.exceptions import ClassiqCombOptNoSolutionError
4
+ from classiq.interface.exceptions import ClassiqCombOptNoSolutionError
5
5
 
6
6
 
7
7
  def isolate(expression: Expr, var: Symbol) -> Expr:
@@ -7,9 +7,9 @@ from pyomo.core.base import _GeneralVarData
7
7
  from pyomo.core.expr.visitor import clone_expression, identify_variables
8
8
 
9
9
  from classiq.interface.combinatorial_optimization.encoding_types import EncodingType
10
+ from classiq.interface.exceptions import ClassiqCombOptError
10
11
 
11
12
  from classiq.applications.combinatorial_helpers import pyomo_utils
12
- from classiq.exceptions import ClassiqCombOptError
13
13
 
14
14
 
15
15
  @dataclass
@@ -14,8 +14,9 @@ from pyomo.core.expr.numeric_expr import (
14
14
  )
15
15
  from sympy import Expr
16
16
 
17
+ from classiq.interface.exceptions import ClassiqCombOptNoSolutionError
18
+
17
19
  from classiq.applications.combinatorial_helpers import pyomo_utils
18
- from classiq.exceptions import ClassiqCombOptNoSolutionError
19
20
 
20
21
  _INTEGER_TYPES = [pyo.NonNegativeIntegers, pyo.Integers, pyo.PositiveIntegers]
21
22
 
@@ -12,6 +12,7 @@ from classiq.interface.chemistry.operator import PauliOperator
12
12
  from classiq.interface.combinatorial_optimization import sense
13
13
  from classiq.interface.combinatorial_optimization.encoding_types import EncodingType
14
14
  from classiq.interface.combinatorial_optimization.solver_types import QSolver
15
+ from classiq.interface.exceptions import ClassiqCombOptError
15
16
 
16
17
  from classiq.applications.combinatorial_helpers import (
17
18
  encoding_utils,
@@ -33,7 +34,6 @@ from classiq.applications.combinatorial_helpers.transformations.fixed_variables
33
34
  from classiq.applications.combinatorial_helpers.transformations.penalty_support import (
34
35
  is_model_penalty_supported,
35
36
  )
36
- from classiq.exceptions import ClassiqCombOptError
37
37
 
38
38
 
39
39
  class OptimizationModel:
@@ -1,9 +1,9 @@
1
1
  from typing import List
2
2
 
3
+ from classiq.interface.exceptions import ClassiqNonNumericCoefficientInPauliError
3
4
  from classiq.interface.generator.functions.qmod_python_interface import QmodPyStruct
4
5
  from classiq.interface.helpers.custom_pydantic_types import PydanticPauliList
5
6
 
6
- from classiq.exceptions import ClassiqNonNumericCoefficientInPauliError
7
7
  from classiq.qmod.builtins import PauliTerm
8
8
  from classiq.qmod.builtins.enums import Pauli
9
9
 
@@ -18,11 +18,10 @@ from pyomo.core.expr.sympy_tools import (
18
18
  Sympy2PyomoVisitor,
19
19
  )
20
20
 
21
+ from classiq.interface.exceptions import ClassiqValueError
21
22
  from classiq.interface.generator.expressions.expression import Expression
22
23
  from classiq.interface.generator.types.struct_declaration import StructDeclaration
23
24
 
24
- from classiq.exceptions import ClassiqValueError
25
-
26
25
  ListVars = List[_GeneralVarData]
27
26
 
28
27
 
@@ -9,11 +9,11 @@ from pyomo.core.expr.relational_expr import EqualityExpression
9
9
 
10
10
  from classiq.interface.combinatorial_optimization.encoding_types import EncodingType
11
11
  from classiq.interface.combinatorial_optimization.solver_types import QSolver
12
+ from classiq.interface.exceptions import ClassiqCombOptInvalidEncodingTypeError
12
13
 
13
14
  from classiq.applications.combinatorial_helpers import encoding_utils, pyomo_utils
14
15
  from classiq.applications.combinatorial_helpers.encoding_mapping import EncodingMapping
15
16
  from classiq.applications.combinatorial_helpers.encoding_utils import ONE_HOT_SUFFIX
16
- from classiq.exceptions import ClassiqCombOptInvalidEncodingTypeError
17
17
 
18
18
 
19
19
  def _make_invalid_encoding_type_error(
@@ -7,6 +7,11 @@ from pyomo.core.expr.relational_expr import EqualityExpression
7
7
  from pyomo.core.expr.visitor import identify_variables
8
8
  from pyomo.repn.standard_repn import _GeneralVarData
9
9
 
10
+ from classiq.interface.exceptions import (
11
+ ClassiqCombOptNoSolutionError,
12
+ ClassiqCombOptTrivialProblemError,
13
+ )
14
+
10
15
  from classiq.applications.combinatorial_helpers import (
11
16
  encoding_utils,
12
17
  pyomo_utils,
@@ -20,10 +25,6 @@ from classiq.applications.combinatorial_helpers.sympy_utils import (
20
25
  sympyify_expression,
21
26
  sympyify_vars,
22
27
  )
23
- from classiq.exceptions import (
24
- ClassiqCombOptNoSolutionError,
25
- ClassiqCombOptTrivialProblemError,
26
- )
27
28
 
28
29
 
29
30
  def remove_fixed_variables(model: ConcreteModel) -> ConcreteModel:
@@ -5,6 +5,7 @@ import sympy as sp
5
5
  from pyomo.core.base import _GeneralVarData
6
6
 
7
7
  from classiq.interface.chemistry.operator import PauliOperator
8
+ from classiq.interface.exceptions import ClassiqCombOptNotSupportedProblemError
8
9
  from classiq.interface.helpers import custom_pydantic_types
9
10
 
10
11
  from classiq.applications.combinatorial_helpers import memory
@@ -13,7 +14,6 @@ from classiq.applications.combinatorial_helpers.sympy_utils import (
13
14
  sympyify_expression,
14
15
  sympyify_vars,
15
16
  )
16
- from classiq.exceptions import ClassiqCombOptNotSupportedProblemError
17
17
 
18
18
  PYOMO_PARSING_ERROR_MESAGE = "Parsing of this pyomo model is not supported."
19
19
 
@@ -13,7 +13,7 @@ from sympy import (
13
13
  simplify,
14
14
  )
15
15
 
16
- from classiq.exceptions import ClassiqCombOptError
16
+ from classiq.interface.exceptions import ClassiqCombOptError
17
17
 
18
18
 
19
19
  def sign_separation(expr: Expr) -> LessThan:
@@ -9,7 +9,6 @@ from classiq.interface.generator.functions.classical_type import (
9
9
  ClassicalArray,
10
10
  ClassicalList,
11
11
  Real,
12
- Struct,
13
12
  )
14
13
  from classiq.interface.generator.functions.port_declaration import (
15
14
  PortDeclarationDirection,
@@ -24,6 +23,7 @@ from classiq.interface.model.port_declaration import PortDeclaration
24
23
  from classiq.interface.model.quantum_function_call import QuantumFunctionCall
25
24
  from classiq.interface.model.quantum_type import QuantumBitvector
26
25
 
26
+ from classiq import Struct
27
27
  from classiq.applications.combinatorial_helpers.combinatorial_problem_utils import (
28
28
  compute_qaoa_initial_point,
29
29
  convert_pyomo_to_global_presentation,
@@ -1,6 +1,7 @@
1
1
  from math import floor, log
2
2
  from typing import Union
3
3
 
4
+ from classiq.interface.exceptions import ClassiqError
4
5
  from classiq.interface.finance.function_input import FinanceFunctionInput
5
6
  from classiq.interface.finance.gaussian_model_input import GaussianModelInput
6
7
  from classiq.interface.finance.log_normal_model_input import LogNormalModelInput
@@ -20,7 +21,6 @@ from classiq.interface.model.variable_declaration_statement import (
20
21
  )
21
22
 
22
23
  from classiq.applications.libraries.qmci_library import QMCI_LIBRARY
23
- from classiq.exceptions import ClassiqError
24
24
  from classiq.qmod.utilities import qmod_val_to_expr_str
25
25
 
26
26
  _OUTPUT_VARIABLE_NAME = "payoff_estimation"
@@ -96,14 +96,15 @@ def construct_finance_model(
96
96
  function="qmci",
97
97
  positional_args=[
98
98
  QuantumLambdaFunction(
99
+ pos_rename_params=["state", "ind"],
99
100
  body=[
100
101
  QuantumFunctionCall(
101
102
  function=finance_function,
102
103
  positional_args=[
103
104
  Expression(expr=finance_model),
104
105
  Expression(expr=finance_function_object),
105
- HandleBinding(name="arg0"),
106
- HandleBinding(name="arg1"),
106
+ HandleBinding(name="state"),
107
+ HandleBinding(name="ind"),
107
108
  ],
108
109
  ),
109
110
  ],
@@ -34,7 +34,7 @@ def _arithmetic_oracle_ios(
34
34
  for _, reg in definitions:
35
35
  ios.append(
36
36
  SlicedHandleBinding(
37
- name=handle_name,
37
+ base_handle=HandleBinding(name=handle_name),
38
38
  start=Expression(expr=f"{cursor}"),
39
39
  end=Expression(expr=f"{cursor + reg.size}"),
40
40
  )
@@ -47,12 +47,13 @@ def _construct_arithmetic_oracle(
47
47
  predicate_function: str,
48
48
  definitions: List[Tuple[str, RegisterUserInput]],
49
49
  ) -> QuantumFunctionCall:
50
- predicate_var_binding = _arithmetic_oracle_ios(definitions, "arg0")
51
- predicate_var_binding.append(HandleBinding(name="arg1"))
50
+ predicate_var_binding = _arithmetic_oracle_ios(definitions, "state")
51
+ predicate_var_binding.append(HandleBinding(name="oracle"))
52
52
  return QuantumFunctionCall(
53
53
  function="phase_oracle",
54
54
  positional_args=[
55
55
  QuantumLambdaFunction(
56
+ pos_rename_params=["state", "oracle"],
56
57
  body=[
57
58
  QuantumFunctionCall(
58
59
  function=predicate_function,
@@ -60,7 +61,7 @@ def _construct_arithmetic_oracle(
60
61
  ),
61
62
  ],
62
63
  ),
63
- HandleBinding(name="arg0"),
64
+ HandleBinding(name="packed_vars"),
64
65
  ],
65
66
  )
66
67
 
@@ -132,12 +133,13 @@ def construct_grover_model(
132
133
  positional_args=[
133
134
  Expression(expr=f"{num_reps}"),
134
135
  QuantumLambdaFunction(
136
+ pos_rename_params=["packed_vars"],
135
137
  body=[
136
138
  _construct_arithmetic_oracle(
137
139
  _PREDICATE_FUNCTION_NAME,
138
140
  definitions,
139
141
  )
140
- ]
142
+ ],
141
143
  ),
142
144
  HandleBinding(name="packed_vars"),
143
145
  ],
File without changes