classiq 0.38.0__py3-none-any.whl → 0.39.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 (137) hide show
  1. classiq/__init__.py +21 -22
  2. classiq/_internals/api_wrapper.py +13 -1
  3. classiq/_internals/client.py +12 -2
  4. classiq/analyzer/analyzer.py +3 -1
  5. classiq/applications/__init__.py +1 -8
  6. classiq/applications/chemistry/__init__.py +6 -0
  7. classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/arithmetic_expression.py +1 -1
  8. classiq/{applications_model_constructors → applications}/combinatorial_helpers/combinatorial_problem_utils.py +26 -6
  9. classiq/{applications_model_constructors → applications}/combinatorial_helpers/encoding_mapping.py +1 -1
  10. classiq/{applications_model_constructors → applications}/combinatorial_helpers/encoding_utils.py +1 -1
  11. classiq/{applications_model_constructors → applications}/combinatorial_helpers/memory.py +2 -4
  12. classiq/{applications_model_constructors → applications}/combinatorial_helpers/optimization_model.py +6 -10
  13. classiq/{applications_model_constructors → applications}/combinatorial_helpers/pauli_helpers/pauli_utils.py +10 -0
  14. classiq/{applications_model_constructors → applications}/combinatorial_helpers/pyomo_utils.py +4 -2
  15. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/encoding.py +3 -10
  16. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/fixed_variables.py +4 -6
  17. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/ising_converter.py +3 -5
  18. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/penalty_support.py +3 -7
  19. classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/slack_variables.py +4 -6
  20. classiq/applications/combinatorial_optimization/__init__.py +9 -3
  21. classiq/{applications_model_constructors → applications/combinatorial_optimization}/combinatorial_optimization_model_constructor.py +7 -8
  22. classiq/applications/finance/__init__.py +3 -2
  23. classiq/{applications_model_constructors → applications/finance}/finance_model_constructor.py +24 -14
  24. classiq/applications/grover/__init__.py +11 -0
  25. classiq/applications/libraries/qmci_library.py +35 -0
  26. classiq/applications/qsvm/__init__.py +5 -1
  27. classiq/execution/all_hardware_devices.py +13 -0
  28. classiq/executor.py +2 -1
  29. classiq/interface/_version.py +1 -1
  30. classiq/interface/analyzer/result.py +1 -5
  31. classiq/interface/applications/qsvm.py +4 -2
  32. classiq/interface/ast_node.py +23 -0
  33. classiq/interface/combinatorial_optimization/examples/mht.py +8 -3
  34. classiq/interface/executor/execution_request.py +2 -37
  35. classiq/interface/executor/vqe_result.py +1 -1
  36. classiq/interface/generator/builtin_api_builder.py +0 -5
  37. classiq/interface/generator/constant.py +2 -3
  38. classiq/interface/generator/expressions/expression.py +2 -4
  39. classiq/interface/generator/expressions/qmod_qscalar_proxy.py +1 -1
  40. classiq/interface/generator/functions/__init__.py +2 -2
  41. classiq/interface/generator/functions/builtins/__init__.py +15 -0
  42. classiq/interface/generator/functions/builtins/core_library/__init__.py +14 -0
  43. classiq/interface/generator/functions/builtins/internal_operators.py +62 -0
  44. classiq/interface/generator/functions/{core_lib_declarations/quantum_functions/std_lib_functions.py → builtins/open_lib_functions.py} +109 -83
  45. classiq/interface/generator/functions/builtins/quantum_operators.py +37 -0
  46. classiq/interface/generator/functions/classical_type.py +2 -4
  47. classiq/interface/generator/functions/function_declaration.py +2 -2
  48. classiq/interface/generator/hartree_fock.py +10 -2
  49. classiq/interface/generator/model/classical_main_validator.py +1 -1
  50. classiq/interface/generator/model/model.py +1 -1
  51. classiq/interface/generator/quantum_function_call.py +1 -1
  52. classiq/interface/generator/types/struct_declaration.py +2 -4
  53. classiq/interface/model/call_synthesis_data.py +3 -3
  54. classiq/interface/model/classical_if.py +13 -0
  55. classiq/interface/model/classical_parameter_declaration.py +2 -3
  56. classiq/interface/model/control.py +16 -0
  57. classiq/interface/model/handle_binding.py +3 -2
  58. classiq/interface/model/invert.py +10 -0
  59. classiq/interface/model/model.py +2 -1
  60. classiq/interface/model/power.py +12 -0
  61. classiq/interface/model/quantum_function_call.py +9 -4
  62. classiq/interface/model/quantum_if_operation.py +3 -3
  63. classiq/interface/model/quantum_lambda_function.py +3 -9
  64. classiq/interface/model/quantum_statement.py +3 -2
  65. classiq/interface/model/quantum_type.py +2 -4
  66. classiq/interface/model/quantum_variable_declaration.py +2 -2
  67. classiq/interface/model/repeat.py +13 -0
  68. classiq/interface/model/resolvers/function_call_resolver.py +26 -0
  69. classiq/interface/model/statement_block.py +21 -4
  70. classiq/interface/model/validations/handles_validator.py +8 -12
  71. classiq/interface/model/within_apply_operation.py +4 -4
  72. classiq/interface/server/routes.py +0 -4
  73. classiq/qmod/builtins/classical_functions.py +9 -9
  74. classiq/qmod/builtins/functions.py +153 -226
  75. classiq/qmod/builtins/operations.py +160 -13
  76. classiq/qmod/native/pretty_printer.py +49 -20
  77. classiq/qmod/qmod_constant.py +26 -2
  78. classiq/qmod/qmod_parameter.py +2 -1
  79. classiq/qmod/qmod_variable.py +48 -15
  80. classiq/qmod/quantum_callable.py +1 -0
  81. classiq/qmod/quantum_expandable.py +6 -7
  82. classiq/qmod/quantum_function.py +4 -0
  83. classiq/qmod/symbolic.py +2 -2
  84. {classiq-0.38.0.dist-info → classiq-0.39.0.dist-info}/METADATA +1 -1
  85. {classiq-0.38.0.dist-info → classiq-0.39.0.dist-info}/RECORD +107 -124
  86. classiq/applications/benchmarking/__init__.py +0 -9
  87. classiq/applications/benchmarking/mirror_benchmarking.py +0 -70
  88. classiq/applications/numpy_utils.py +0 -37
  89. classiq/applications_model_constructors/__init__.py +0 -25
  90. classiq/applications_model_constructors/combinatorial_helpers/multiple_comp_basis_sp.py +0 -34
  91. classiq/applications_model_constructors/libraries/qmci_library.py +0 -107
  92. classiq/builtin_functions/__init__.py +0 -43
  93. classiq/builtin_functions/amplitude_loading.py +0 -3
  94. classiq/builtin_functions/binary_ops.py +0 -1
  95. classiq/builtin_functions/exponentiation.py +0 -5
  96. classiq/builtin_functions/qpe.py +0 -4
  97. classiq/builtin_functions/qsvm.py +0 -7
  98. classiq/builtin_functions/range_types.py +0 -5
  99. classiq/builtin_functions/standard_gates.py +0 -1
  100. classiq/builtin_functions/state_preparation.py +0 -6
  101. classiq/builtin_functions/suzuki_trotter.py +0 -3
  102. classiq/interface/generator/functions/core_lib_declarations/quantum_functions/__init__.py +0 -18
  103. classiq/interface/generator/functions/core_lib_declarations/quantum_operators.py +0 -95
  104. classiq/model/__init__.py +0 -14
  105. classiq/model/composite_function_generator.py +0 -33
  106. classiq/model/function_handler.py +0 -462
  107. classiq/model/logic_flow.py +0 -149
  108. classiq/model/logic_flow_change_handler.py +0 -71
  109. classiq/model/model.py +0 -229
  110. classiq/quantum_functions/__init__.py +0 -17
  111. classiq/quantum_functions/annotation_parser.py +0 -205
  112. classiq/quantum_functions/decorators.py +0 -22
  113. classiq/quantum_functions/function_library.py +0 -181
  114. classiq/quantum_functions/function_parser.py +0 -74
  115. classiq/quantum_functions/quantum_function.py +0 -236
  116. /classiq/{applications_model_constructors → applications/chemistry}/chemistry_model_constructor.py +0 -0
  117. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/__init__.py +0 -0
  118. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/allowed_constraints.py +0 -0
  119. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/__init__.py +0 -0
  120. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/arithmetic/isolation.py +0 -0
  121. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/pauli_helpers/__init__.py +0 -0
  122. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/pauli_helpers/pauli_sparsing.py +0 -0
  123. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/py.typed +0 -0
  124. /classiq/{applications_model_constructors/combinatorial_helpers/transformations → applications/combinatorial_helpers/solvers}/__init__.py +0 -0
  125. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/sympy_utils.py +0 -0
  126. /classiq/{applications_model_constructors/libraries → applications/combinatorial_helpers/transformations}/__init__.py +0 -0
  127. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/penalty.py +0 -0
  128. /classiq/{applications_model_constructors → applications}/combinatorial_helpers/transformations/sign_seperation.py +0 -0
  129. /classiq/{applications_model_constructors → applications/grover}/grover_model_constructor.py +0 -0
  130. /classiq/{interface/generator/functions/core_lib_declarations → applications/libraries}/__init__.py +0 -0
  131. /classiq/{applications_model_constructors → applications}/libraries/ampltitude_estimation_library.py +0 -0
  132. /classiq/{applications_model_constructors → applications/qsvm}/qsvm_model_constructor.py +0 -0
  133. /classiq/interface/generator/functions/{core_lib_declarations/quantum_functions → builtins/core_library}/atomic_quantum_functions.py +0 -0
  134. /classiq/interface/generator/functions/{core_lib_declarations/quantum_functions → builtins/core_library}/chemistry_functions.py +0 -0
  135. /classiq/interface/generator/functions/{core_lib_declarations/quantum_functions → builtins/core_library}/exponentiation_functions.py +0 -0
  136. /classiq/{quantum_register.py → interface/model/quantum_register.py} +0 -0
  137. {classiq-0.38.0.dist-info → classiq-0.39.0.dist-info}/WHEEL +0 -0
@@ -1,107 +0,0 @@
1
- from classiq.interface.generator.expressions.expression import Expression
2
- from classiq.interface.generator.functions.port_declaration import (
3
- PortDeclarationDirection,
4
- )
5
- from classiq.interface.model.handle_binding import HandleBinding, SlicedHandleBinding
6
- from classiq.interface.model.native_function_definition import NativeFunctionDefinition
7
- from classiq.interface.model.port_declaration import PortDeclaration
8
- from classiq.interface.model.quantum_function_call import QuantumFunctionCall
9
- from classiq.interface.model.quantum_function_declaration import (
10
- QuantumOperandDeclaration,
11
- )
12
- from classiq.interface.model.quantum_lambda_function import QuantumLambdaFunction
13
-
14
- from classiq import Integer
15
-
16
- QMCI_LIBRARY = [
17
- NativeFunctionDefinition(
18
- name="qmci",
19
- param_decls={
20
- "num_phase_qubits": Integer(),
21
- "num_unitary_qubits": Integer(),
22
- },
23
- port_declarations={
24
- "phase_port": PortDeclaration(
25
- name="phase_port",
26
- size=Expression(expr="num_phase_qubits"),
27
- direction=PortDeclarationDirection.Output,
28
- ),
29
- "unitary_port": PortDeclaration(
30
- name="unitary_port",
31
- size=Expression(expr="num_unitary_qubits"),
32
- direction=PortDeclarationDirection.Output,
33
- ),
34
- },
35
- operand_declarations={
36
- "sp_op": QuantumOperandDeclaration(
37
- name="sp_op",
38
- param_decls={"num_unitary_qubits": Integer()},
39
- port_declarations={
40
- "reg": PortDeclaration(
41
- name="reg",
42
- direction=PortDeclarationDirection.Inout,
43
- size=Expression(expr="num_unitary_qubits-1"),
44
- ),
45
- "ind": PortDeclaration(
46
- name="ind",
47
- direction=PortDeclarationDirection.Inout,
48
- size=Expression(expr="1"),
49
- ),
50
- },
51
- ),
52
- },
53
- body=[
54
- QuantumFunctionCall(
55
- function="amplitude_estimation",
56
- params={
57
- "num_phase_qubits": Expression(expr="num_phase_qubits"),
58
- "num_unitary_qubits": Expression(expr="num_unitary_qubits"),
59
- },
60
- outputs={
61
- "phase_port": HandleBinding(name="phase_port"),
62
- "unitary_port": HandleBinding(name="unitary_port"),
63
- },
64
- operands={
65
- "sp_op": QuantumLambdaFunction(
66
- body=[
67
- QuantumFunctionCall(
68
- function="sp_op",
69
- params={
70
- "num_unitary_qubits": Expression(
71
- expr="num_unitary_qubits"
72
- )
73
- },
74
- inouts={
75
- "reg": SlicedHandleBinding(
76
- name="spq",
77
- start=Expression(expr="0"),
78
- end=Expression(expr="num_unitary_qubits-1"),
79
- ),
80
- "ind": SlicedHandleBinding(
81
- name="spq",
82
- start=Expression(expr="num_unitary_qubits-1"),
83
- end=Expression(expr="num_unitary_qubits"),
84
- ),
85
- },
86
- )
87
- ],
88
- ),
89
- "oracle_op": QuantumLambdaFunction(
90
- body=[
91
- QuantumFunctionCall(
92
- function="Z",
93
- inouts={
94
- "target": SlicedHandleBinding(
95
- name="oq",
96
- start=Expression(expr="num_unitary_qubits-1"),
97
- end=Expression(expr="num_unitary_qubits"),
98
- ),
99
- },
100
- ),
101
- ]
102
- ),
103
- },
104
- ),
105
- ],
106
- ),
107
- ]
@@ -1,43 +0,0 @@
1
- from typing import List
2
-
3
- from classiq.interface.generator.function_param_list import * # noqa: F403
4
- from classiq.interface.generator.function_param_list_without_self_reference import * # noqa: F403
5
- from classiq.interface.generator.oracles.oracle_function_param_list import * # noqa: F403
6
-
7
- from ..builtin_functions import (
8
- amplitude_loading,
9
- binary_ops,
10
- exponentiation,
11
- qpe,
12
- qsvm,
13
- range_types,
14
- state_preparation,
15
- suzuki_trotter,
16
- )
17
- from .standard_gates import * # noqa: F403
18
-
19
- __all__ = (
20
- [function.__name__ for function in function_param_library.param_list] # noqa: F405
21
- + [
22
- function.__name__
23
- for function in standard_gate_function_param_library.param_list # noqa: F405
24
- ]
25
- + [
26
- function.__name__
27
- for function in oracle_function_param_library.param_list # noqa: F405
28
- ]
29
- + [
30
- "exponentiation",
31
- "state_preparation",
32
- "suzuki_trotter",
33
- "range_types",
34
- "binary_ops",
35
- "qpe",
36
- "amplitude_loading",
37
- "qsvm",
38
- ]
39
- )
40
-
41
-
42
- def __dir__() -> List[str]:
43
- return __all__
@@ -1,3 +0,0 @@
1
- from classiq.interface.generator.amplitude_loading import ( # noqa: F401
2
- AmplitudeLoadingImplementation,
3
- )
@@ -1 +0,0 @@
1
- from classiq.interface.generator.arith.binary_ops import ArgToInplace # noqa: F401
@@ -1,5 +0,0 @@
1
- from classiq.interface.chemistry.operator import PauliOperator # noqa: F401
2
- from classiq.interface.generator.hamiltonian_evolution.exponentiation import ( # noqa: F401
3
- ExponentiationConstraints,
4
- ExponentiationOptimization,
5
- )
@@ -1,4 +0,0 @@
1
- from classiq.interface.generator.qpe import ( # noqa: F401
2
- ExponentiationScaling,
3
- ExponentiationSpecification,
4
- )
@@ -1,7 +0,0 @@
1
- from classiq.interface.generator.qsvm import ( # noqa: F401
2
- FeatureMapType,
3
- QSVMFeatureMapBlochSphere,
4
- QSVMFeatureMapDimensional,
5
- QSVMFeatureMapEntanglement,
6
- QSVMFeatureMapPauli,
7
- )
@@ -1,5 +0,0 @@
1
- from classiq.interface.generator.range_types import ( # noqa: F401
2
- NonNegativeFloatRange,
3
- NonNegativeIntRange,
4
- Range,
5
- )
@@ -1 +0,0 @@
1
- from classiq.interface.generator.standard_gates.standard_gates_param_list import * # noqa: F403
@@ -1,6 +0,0 @@
1
- from classiq.interface.generator.state_preparation import ( # noqa: F401
2
- PMF,
3
- GaussianMixture,
4
- GaussianMoments,
5
- Metrics,
6
- )
@@ -1,3 +0,0 @@
1
- from classiq.interface.generator.hamiltonian_evolution.suzuki_trotter import ( # noqa: F401
2
- SuzukiParameters,
3
- )
@@ -1,18 +0,0 @@
1
- from classiq.interface.helpers.pydantic_model_helpers import nameables_to_dict
2
- from classiq.interface.model.quantum_function_declaration import (
3
- QuantumFunctionDeclaration,
4
- )
5
-
6
- from .atomic_quantum_functions import * # noqa: F403
7
- from .exponentiation_functions import * # noqa: F403
8
- from .std_lib_functions import * # noqa: F403
9
-
10
- QuantumFunctionDeclaration.BUILTIN_FUNCTION_DECLARATIONS.update(
11
- nameables_to_dict(
12
- [
13
- func
14
- for func in vars().values()
15
- if isinstance(func, QuantumFunctionDeclaration)
16
- ]
17
- )
18
- )
@@ -1,95 +0,0 @@
1
- from typing import Any
2
-
3
- from classiq.interface.generator.functions.classical_type import Bool, Integer
4
- from classiq.interface.generator.functions.port_declaration import (
5
- PortDeclarationDirection,
6
- )
7
- from classiq.interface.helpers.pydantic_model_helpers import nameables_to_dict
8
- from classiq.interface.model.port_declaration import PortDeclaration
9
- from classiq.interface.model.quantum_function_declaration import (
10
- QuantumFunctionDeclaration,
11
- QuantumOperandDeclaration,
12
- )
13
-
14
- REPEAT_OPERATOR = QuantumFunctionDeclaration(
15
- name="repeat",
16
- param_decls={"count": Integer()},
17
- operand_declarations={
18
- "iteration": QuantumOperandDeclaration(
19
- name="iteration", param_decls={"index": Integer()}
20
- )
21
- },
22
- )
23
-
24
-
25
- def _get_single_empty_operand_operator(
26
- operator_name: str, **kwargs: Any
27
- ) -> QuantumFunctionDeclaration:
28
- operand_field_name = "operand"
29
- return QuantumFunctionDeclaration(
30
- name=operator_name,
31
- operand_declarations={
32
- operand_field_name: QuantumOperandDeclaration(name=operand_field_name)
33
- },
34
- **kwargs,
35
- )
36
-
37
-
38
- INVERT_OPERATOR = _get_single_empty_operand_operator(operator_name="invert")
39
-
40
- _CTRL_FIELD_NAME = "ctrl"
41
- CONTROL_OPERATOR = _get_single_empty_operand_operator(
42
- operator_name="control",
43
- port_declarations={
44
- _CTRL_FIELD_NAME: PortDeclaration(
45
- name=_CTRL_FIELD_NAME,
46
- direction=PortDeclarationDirection.Inout,
47
- )
48
- },
49
- )
50
-
51
- IF_OPERATOR = QuantumFunctionDeclaration(
52
- name="if",
53
- param_decls={"condition": Bool()},
54
- operand_declarations={
55
- "then": QuantumOperandDeclaration(name="then"),
56
- "else": QuantumOperandDeclaration(name="else"),
57
- },
58
- )
59
-
60
-
61
- PERMUTE_OPERATOR = QuantumFunctionDeclaration(
62
- name="permute",
63
- operand_declarations={
64
- "functions": QuantumOperandDeclaration(
65
- name="functions",
66
- is_list=True,
67
- )
68
- },
69
- )
70
-
71
- POWER_OPERATOR = _get_single_empty_operand_operator(
72
- operator_name="power", param_decls={"power": Integer()}
73
- )
74
-
75
- APPLY_OPERATOR = _get_single_empty_operand_operator(operator_name="apply")
76
-
77
- COMPUTE = _get_single_empty_operand_operator(operator_name="compute")
78
-
79
- UNCOMPUTE = _get_single_empty_operand_operator(operator_name="uncompute")
80
-
81
- BUILTIN_QUANTUM_OPERATOR_LIST = [
82
- REPEAT_OPERATOR,
83
- INVERT_OPERATOR,
84
- CONTROL_OPERATOR,
85
- IF_OPERATOR,
86
- PERMUTE_OPERATOR,
87
- POWER_OPERATOR,
88
- APPLY_OPERATOR,
89
- COMPUTE,
90
- UNCOMPUTE,
91
- ]
92
-
93
- QuantumFunctionDeclaration.BUILTIN_FUNCTION_DECLARATIONS.update(
94
- nameables_to_dict(BUILTIN_QUANTUM_OPERATOR_LIST)
95
- )
classiq/model/__init__.py DELETED
@@ -1,14 +0,0 @@
1
- from typing import List
2
-
3
- from classiq.interface.generator.model import * # noqa: F403
4
- from classiq.interface.generator.model import __all__ as _model_all
5
-
6
- from classiq.model.composite_function_generator import FunctionGenerator
7
- from classiq.model.model import Model
8
-
9
- __all__ = ["FunctionGenerator", "Model"]
10
- __all__.extend(_model_all)
11
-
12
-
13
- def __dir__() -> List[str]:
14
- return __all__
@@ -1,33 +0,0 @@
1
- from typing import List
2
-
3
- from classiq.interface.generator.function_params import PortDirection
4
- from classiq.interface.generator.functions import SynthesisNativeFunctionDefinition
5
- from classiq.interface.generator.quantum_function_call import (
6
- SynthesisQuantumFunctionCall,
7
- )
8
-
9
- from classiq.model import function_handler
10
- from classiq.quantum_functions.function_library import FunctionLibrary
11
-
12
-
13
- class FunctionGenerator(function_handler.FunctionHandler):
14
- def __init__(self, function_name: str) -> None:
15
- super().__init__()
16
- self._name = function_name
17
- self._logic_flow_list: List[SynthesisQuantumFunctionCall] = list()
18
-
19
- @property
20
- def _body(self) -> List[SynthesisQuantumFunctionCall]:
21
- return self._logic_flow_list
22
-
23
- def to_function_definition(self) -> SynthesisNativeFunctionDefinition:
24
- return SynthesisNativeFunctionDefinition(
25
- name=self._name,
26
- body=self._body,
27
- port_declarations=self._port_declarations,
28
- input_ports_wiring=self._external_port_wiring[PortDirection.Input],
29
- output_ports_wiring=self._external_port_wiring[PortDirection.Output],
30
- )
31
-
32
- def create_library(self) -> None:
33
- self.include_library(FunctionLibrary())