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.
- classiq/__init__.py +8 -3
- classiq/_internals/api_wrapper.py +2 -2
- classiq/_internals/authentication/auth0.py +1 -1
- classiq/_internals/authentication/device.py +5 -1
- classiq/_internals/authentication/token_manager.py +5 -4
- classiq/_internals/client.py +5 -8
- classiq/_internals/config.py +1 -2
- classiq/_internals/host_checker.py +34 -13
- classiq/_internals/jobs.py +3 -3
- classiq/analyzer/analyzer.py +1 -1
- classiq/analyzer/analyzer_utilities.py +1 -1
- classiq/analyzer/rb.py +1 -1
- classiq/applications/chemistry/chemistry_model_constructor.py +13 -7
- classiq/applications/combinatorial_helpers/allowed_constraints.py +4 -1
- classiq/applications/combinatorial_helpers/arithmetic/isolation.py +1 -1
- classiq/applications/combinatorial_helpers/encoding_mapping.py +1 -1
- classiq/applications/combinatorial_helpers/encoding_utils.py +2 -1
- classiq/applications/combinatorial_helpers/optimization_model.py +1 -1
- classiq/applications/combinatorial_helpers/pauli_helpers/pauli_utils.py +1 -1
- classiq/applications/combinatorial_helpers/pyomo_utils.py +1 -2
- classiq/applications/combinatorial_helpers/transformations/encoding.py +1 -1
- classiq/applications/combinatorial_helpers/transformations/fixed_variables.py +5 -4
- classiq/applications/combinatorial_helpers/transformations/ising_converter.py +1 -1
- classiq/applications/combinatorial_helpers/transformations/sign_seperation.py +1 -1
- classiq/applications/combinatorial_optimization/combinatorial_optimization_model_constructor.py +1 -1
- classiq/applications/finance/finance_model_constructor.py +4 -3
- classiq/applications/grover/grover_model_constructor.py +7 -5
- classiq/applications/hamiltonian/__init__.py +0 -0
- classiq/applications/hamiltonian/pauli_decomposition.py +113 -0
- classiq/applications/qnn/circuit_utils.py +1 -1
- classiq/applications/qnn/datasets/dataset_base_classes.py +2 -1
- classiq/applications/qnn/datasets/dataset_not.py +2 -1
- classiq/applications/qnn/qlayer.py +3 -2
- classiq/applications/qnn/torch_utils.py +2 -1
- classiq/applications/qsvm/qsvm_model_constructor.py +1 -1
- classiq/execution/execution_session.py +1 -1
- classiq/execution/jobs.py +5 -2
- classiq/interface/_version.py +1 -1
- classiq/interface/analyzer/cytoscape_graph.py +1 -2
- classiq/interface/analyzer/result.py +2 -3
- classiq/interface/ast_node.py +1 -18
- classiq/interface/backend/backend_preferences.py +11 -18
- classiq/interface/backend/ionq/ionq_quantum_program.py +1 -1
- classiq/interface/backend/pydantic_backend.py +0 -5
- classiq/interface/backend/quantum_backend_providers.py +4 -3
- classiq/interface/chemistry/fermionic_operator.py +1 -2
- classiq/interface/chemistry/ground_state_problem.py +2 -3
- classiq/interface/chemistry/molecule.py +1 -2
- classiq/interface/chemistry/operator.py +8 -10
- classiq/interface/combinatorial_optimization/encoding_types.py +1 -1
- classiq/interface/combinatorial_optimization/mht_qaoa_input.py +1 -1
- classiq/interface/combinatorial_optimization/solver_types.py +1 -1
- classiq/interface/debug_info/__init__.py +0 -0
- classiq/interface/debug_info/debug_info.py +32 -0
- classiq/{exceptions.py → interface/exceptions.py} +4 -0
- classiq/interface/executor/aws_execution_cost.py +2 -2
- classiq/interface/executor/execution_preferences.py +2 -47
- classiq/interface/executor/execution_result.py +1 -2
- classiq/interface/executor/optimizer_preferences.py +2 -3
- classiq/interface/executor/quantum_code.py +1 -2
- classiq/interface/executor/quantum_instruction_set.py +2 -2
- classiq/interface/executor/register_initialization.py +1 -2
- classiq/interface/executor/result.py +29 -14
- classiq/interface/finance/function_input.py +6 -11
- classiq/interface/generator/amplitude_loading.py +2 -3
- classiq/interface/generator/ansatz_library.py +1 -1
- classiq/interface/generator/application_apis/arithmetic_declarations.py +8 -5
- classiq/interface/generator/application_apis/chemistry_declarations.py +78 -60
- classiq/interface/generator/application_apis/combinatorial_optimization_declarations.py +19 -10
- classiq/interface/generator/application_apis/entangler_declarations.py +11 -6
- classiq/interface/generator/application_apis/finance_declarations.py +37 -44
- classiq/interface/generator/application_apis/qsvm_declarations.py +21 -15
- classiq/interface/generator/arith/arithmetic.py +10 -8
- classiq/interface/generator/arith/arithmetic_arg_type_validator.py +1 -2
- classiq/interface/generator/arith/arithmetic_expression_abc.py +22 -3
- classiq/interface/generator/arith/arithmetic_expression_parser.py +3 -4
- classiq/interface/generator/arith/arithmetic_expression_validator.py +1 -2
- classiq/interface/generator/arith/arithmetic_param_getters.py +1 -2
- classiq/interface/generator/arith/arithmetic_result_builder.py +15 -11
- classiq/interface/generator/arith/ast_node_rewrite.py +1 -1
- classiq/interface/generator/arith/binary_ops.py +7 -7
- classiq/interface/generator/arith/endianness.py +1 -1
- classiq/interface/generator/arith/extremum_operations.py +44 -21
- classiq/interface/generator/arith/logical_ops.py +1 -2
- classiq/interface/generator/arith/register_user_input.py +1 -2
- classiq/interface/generator/arith/unary_ops.py +1 -2
- classiq/interface/generator/arith/uncomputation_methods.py +1 -1
- classiq/interface/generator/chemistry_function_params.py +1 -2
- classiq/interface/generator/circuit_code/circuit_code.py +1 -2
- classiq/interface/generator/circuit_code/types_and_constants.py +1 -2
- classiq/interface/generator/commuting_pauli_exponentiation.py +1 -2
- classiq/interface/generator/constant.py +1 -1
- classiq/interface/generator/control_state.py +1 -2
- classiq/interface/generator/custom_ansatz.py +1 -2
- classiq/interface/generator/expressions/atomic_expression_functions.py +1 -0
- classiq/interface/generator/expressions/enums/finance_functions.py +4 -5
- classiq/interface/generator/expressions/evaluated_expression.py +1 -2
- classiq/interface/generator/expressions/expression.py +1 -2
- classiq/interface/generator/expressions/expression_constants.py +3 -1
- classiq/interface/generator/expressions/non_symbolic_expr.py +1 -1
- classiq/interface/generator/expressions/qmod_qarray_proxy.py +53 -70
- classiq/interface/generator/expressions/qmod_qscalar_proxy.py +2 -7
- classiq/interface/generator/expressions/qmod_qstruct_proxy.py +35 -0
- classiq/interface/generator/expressions/qmod_sized_proxy.py +1 -1
- classiq/interface/generator/expressions/sympy_supported_expressions.py +2 -1
- classiq/interface/generator/function_params.py +2 -3
- classiq/interface/generator/functions/builtins/core_library/__init__.py +4 -2
- classiq/interface/generator/functions/builtins/core_library/atomic_quantum_functions.py +41 -41
- classiq/interface/generator/functions/builtins/core_library/exponentiation_functions.py +52 -42
- classiq/interface/generator/functions/builtins/open_lib_functions.py +1095 -3347
- classiq/interface/generator/functions/builtins/quantum_operators.py +9 -22
- classiq/interface/generator/functions/classical_function_declaration.py +14 -6
- classiq/interface/generator/functions/classical_type.py +7 -114
- classiq/interface/generator/functions/concrete_types.py +55 -0
- classiq/interface/generator/functions/function_declaration.py +10 -10
- classiq/interface/generator/functions/port_declaration.py +1 -2
- classiq/interface/generator/functions/type_name.py +80 -0
- classiq/interface/generator/generated_circuit_data.py +3 -3
- classiq/interface/generator/grover_diffuser.py +1 -2
- classiq/interface/generator/grover_operator.py +1 -2
- classiq/interface/generator/hamiltonian_evolution/exponentiation.py +1 -2
- classiq/interface/generator/hamiltonian_evolution/suzuki_trotter.py +1 -2
- classiq/interface/generator/hardware/hardware_data.py +1 -2
- classiq/interface/generator/hardware_efficient_ansatz.py +2 -3
- classiq/interface/generator/hartree_fock.py +1 -2
- classiq/interface/generator/linear_pauli_rotations.py +1 -2
- classiq/interface/generator/mcmt_method.py +1 -1
- classiq/interface/generator/mcu.py +1 -2
- classiq/interface/generator/mcx.py +1 -2
- classiq/interface/generator/model/constraints.py +2 -3
- classiq/interface/generator/model/model.py +12 -2
- classiq/interface/generator/model/preferences/preferences.py +7 -3
- classiq/interface/generator/model/quantum_register.py +1 -2
- classiq/interface/generator/oracles/arithmetic_oracle.py +1 -2
- classiq/interface/generator/oracles/custom_oracle.py +1 -2
- classiq/interface/generator/oracles/oracle_abc.py +1 -2
- classiq/interface/generator/partitioned_register.py +1 -2
- classiq/interface/generator/piecewise_linear_amplitude_loading.py +1 -2
- classiq/interface/generator/preferences/optimization.py +1 -2
- classiq/interface/generator/qpe.py +1 -2
- classiq/interface/generator/qsvm.py +2 -3
- classiq/interface/generator/quantum_function_call.py +4 -2
- classiq/interface/generator/quantum_program.py +6 -7
- classiq/interface/generator/range_types.py +1 -1
- classiq/interface/generator/register_role.py +8 -2
- classiq/interface/generator/slice_parsing_utils.py +1 -2
- classiq/interface/generator/standard_gates/controlled_standard_gates.py +1 -2
- classiq/interface/generator/state_preparation/metrics.py +2 -3
- classiq/interface/generator/state_preparation/state_preparation.py +1 -2
- classiq/interface/generator/synthesis_metadata/synthesis_execution_data.py +1 -3
- classiq/interface/generator/transpiler_basis_gates.py +1 -1
- classiq/interface/generator/types/builtin_enum_declarations.py +38 -45
- classiq/interface/generator/types/builtin_struct_declarations/pauli_struct_declarations.py +1 -2
- classiq/interface/generator/types/enum_declaration.py +1 -2
- classiq/interface/generator/types/qstruct_declaration.py +17 -0
- classiq/interface/generator/types/struct_declaration.py +2 -3
- classiq/interface/generator/ucc.py +1 -2
- classiq/interface/generator/unitary_gate.py +1 -2
- classiq/interface/generator/validations/flow_graph.py +1 -2
- classiq/interface/generator/validations/validator_functions.py +1 -2
- classiq/interface/hardware.py +1 -1
- classiq/interface/helpers/validation_helpers.py +2 -19
- classiq/interface/ide/visual_model.py +10 -4
- classiq/interface/interface_version.py +1 -0
- classiq/interface/jobs.py +2 -3
- classiq/interface/model/bind_operation.py +26 -7
- classiq/interface/model/classical_parameter_declaration.py +8 -5
- classiq/interface/model/control.py +5 -5
- classiq/interface/model/handle_binding.py +185 -12
- classiq/interface/model/inplace_binary_operation.py +17 -6
- classiq/interface/model/model.py +29 -7
- classiq/interface/model/native_function_definition.py +8 -4
- classiq/interface/model/parameter.py +13 -0
- classiq/interface/model/port_declaration.py +21 -4
- classiq/interface/model/quantum_expressions/amplitude_loading_operation.py +22 -8
- classiq/interface/model/quantum_expressions/arithmetic_operation.py +30 -6
- classiq/interface/model/quantum_expressions/quantum_expression.py +4 -9
- classiq/interface/model/quantum_function_call.py +136 -194
- classiq/interface/model/quantum_function_declaration.py +147 -165
- classiq/interface/model/quantum_lambda_function.py +23 -6
- classiq/interface/model/quantum_statement.py +34 -8
- classiq/interface/model/quantum_type.py +41 -11
- classiq/interface/model/quantum_variable_declaration.py +1 -1
- classiq/interface/model/statement_block.py +2 -0
- classiq/interface/model/validation_handle.py +8 -2
- classiq/interface/server/global_versions.py +4 -4
- classiq/interface/server/routes.py +2 -0
- classiq/interface/source_reference.py +59 -0
- classiq/qmod/__init__.py +2 -3
- classiq/qmod/builtins/classical_execution_primitives.py +1 -1
- classiq/qmod/builtins/functions.py +39 -11
- classiq/qmod/builtins/operations.py +172 -41
- classiq/qmod/classical_function.py +1 -1
- classiq/qmod/declaration_inferrer.py +102 -57
- classiq/qmod/expression_query.py +1 -1
- classiq/qmod/model_state_container.py +2 -0
- classiq/qmod/native/pretty_printer.py +71 -53
- classiq/qmod/pretty_print/pretty_printer.py +98 -52
- classiq/qmod/qfunc.py +11 -5
- classiq/qmod/qmod_constant.py +1 -1
- classiq/qmod/qmod_parameter.py +27 -4
- classiq/qmod/qmod_variable.py +405 -174
- classiq/qmod/quantum_callable.py +3 -3
- classiq/qmod/quantum_expandable.py +128 -68
- classiq/qmod/quantum_function.py +24 -5
- classiq/qmod/semantics/annotation.py +13 -15
- classiq/qmod/semantics/error_manager.py +36 -10
- classiq/qmod/semantics/static_semantics_visitor.py +164 -76
- classiq/qmod/semantics/validation/func_call_validation.py +43 -97
- classiq/qmod/semantics/validation/handle_validation.py +85 -0
- classiq/qmod/semantics/validation/types_validation.py +108 -1
- classiq/qmod/symbolic.py +2 -1
- classiq/qmod/type_attribute_remover.py +32 -0
- classiq/qmod/utilities.py +26 -5
- classiq/{interface/ide/show.py → show.py} +1 -1
- {classiq-0.43.3.dist-info → classiq-0.45.0.dist-info}/METADATA +3 -3
- {classiq-0.43.3.dist-info → classiq-0.45.0.dist-info}/RECORD +219 -207
- classiq/qmod/qmod_struct.py +0 -13
- /classiq/{_internals → interface}/enum_utils.py +0 -0
- {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,
|
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,
|
classiq/_internals/client.py
CHANGED
@@ -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
|
-
@
|
165
|
-
def _make_api_prefix(
|
166
|
-
|
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
|
classiq/_internals/config.py
CHANGED
@@ -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__(
|
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
|
-
|
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
|
66
|
-
raw_host_version, self._client_version
|
67
|
-
):
|
81
|
+
if interface_version is None:
|
68
82
|
raise ClassiqAPIError(
|
69
|
-
f"
|
70
|
-
f"{
|
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
|
-
|
84
|
-
|
85
|
-
deprecation_info.removal_date
|
86
|
-
|
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
|
)
|
classiq/_internals/jobs.py
CHANGED
@@ -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
|
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)
|
classiq/analyzer/analyzer.py
CHANGED
@@ -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(
|
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(
|
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
|
-
|
382
|
-
|
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
|
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
|
|
classiq/applications/combinatorial_optimization/combinatorial_optimization_model_constructor.py
CHANGED
@@ -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="
|
106
|
-
HandleBinding(name="
|
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, "
|
51
|
-
predicate_var_binding.append(HandleBinding(name="
|
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="
|
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
|