qilisdk 0.1.5__py3-none-any.whl → 0.1.6__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.
- qilisdk/analog/hamiltonian.py +3 -3
- qilisdk/analog/linear_schedule.py +5 -2
- qilisdk/analog/schedule.py +8 -5
- qilisdk/backends/cuda_backend.py +1 -1
- qilisdk/backends/qutip_backend.py +2 -21
- qilisdk/{common → core}/model.py +7 -7
- qilisdk/{common → core}/qtensor.py +1 -1
- qilisdk/{common → core}/variables.py +42 -4
- qilisdk/cost_functions/cost_function.py +1 -1
- qilisdk/cost_functions/model_cost_function.py +5 -5
- qilisdk/cost_functions/observable_cost_function.py +2 -2
- qilisdk/digital/ansatz.py +0 -3
- qilisdk/digital/circuit.py +2 -2
- qilisdk/digital/gates.py +3 -3
- qilisdk/functionals/functional.py +2 -2
- qilisdk/functionals/functional_result.py +1 -1
- qilisdk/functionals/sampling.py +1 -1
- qilisdk/functionals/time_evolution.py +3 -3
- qilisdk/functionals/time_evolution_result.py +2 -2
- qilisdk/optimizers/optimizer_result.py +1 -1
- qilisdk/speqtrum/__init__.py +2 -0
- qilisdk/speqtrum/speqtrum.py +216 -61
- qilisdk/speqtrum/speqtrum_models.py +167 -0
- qilisdk/utils/visualization/schedule_renderers.py +6 -1
- {qilisdk-0.1.5.dist-info → qilisdk-0.1.6.dist-info}/METADATA +17 -17
- {qilisdk-0.1.5.dist-info → qilisdk-0.1.6.dist-info}/RECORD +33 -33
- /qilisdk/{common → core}/__init__.py +0 -0
- /qilisdk/{common → core}/algorithm.py +0 -0
- /qilisdk/{common → core}/exceptions.py +0 -0
- /qilisdk/{common → core}/parameterizable.py +0 -0
- /qilisdk/{common → core}/result.py +0 -0
- {qilisdk-0.1.5.dist-info → qilisdk-0.1.6.dist-info}/WHEEL +0 -0
- {qilisdk-0.1.5.dist-info → qilisdk-0.1.6.dist-info}/licenses/LICENCE +0 -0
qilisdk/analog/hamiltonian.py
CHANGED
|
@@ -24,9 +24,9 @@ from typing import TYPE_CHECKING, Callable, ClassVar
|
|
|
24
24
|
import numpy as np
|
|
25
25
|
from scipy.sparse import csr_matrix, identity, kron, spmatrix
|
|
26
26
|
|
|
27
|
-
from qilisdk.
|
|
28
|
-
from qilisdk.
|
|
29
|
-
from qilisdk.
|
|
27
|
+
from qilisdk.core.parameterizable import Parameterizable
|
|
28
|
+
from qilisdk.core.qtensor import QTensor
|
|
29
|
+
from qilisdk.core.variables import BaseVariable, Parameter, Term
|
|
30
30
|
from qilisdk.yaml import yaml
|
|
31
31
|
|
|
32
32
|
from .exceptions import InvalidHamiltonianOperation
|
|
@@ -15,7 +15,7 @@ from __future__ import annotations
|
|
|
15
15
|
|
|
16
16
|
from qilisdk.analog.hamiltonian import Hamiltonian
|
|
17
17
|
from qilisdk.analog.schedule import Schedule
|
|
18
|
-
from qilisdk.
|
|
18
|
+
from qilisdk.core.variables import Number, Parameter, Term
|
|
19
19
|
from qilisdk.yaml import yaml
|
|
20
20
|
|
|
21
21
|
|
|
@@ -85,7 +85,9 @@ class LinearSchedule(Schedule):
|
|
|
85
85
|
if next_idx is None or prev_idx is None or prev_expr is None or next_expr is None:
|
|
86
86
|
raise ValueError("Something unexpected happened while retrieving the coefficient.")
|
|
87
87
|
alpha: float = (t - prev_idx) / (next_idx - prev_idx)
|
|
88
|
-
|
|
88
|
+
e1 = next_expr * alpha
|
|
89
|
+
e2 = prev_expr * (1 - alpha)
|
|
90
|
+
return e1 + e2
|
|
89
91
|
|
|
90
92
|
def get_coefficient(self, time_step: float, hamiltonian_key: str) -> Number:
|
|
91
93
|
"""
|
|
@@ -98,6 +100,7 @@ class LinearSchedule(Schedule):
|
|
|
98
100
|
Returns:
|
|
99
101
|
Number: Evaluated coefficient value.
|
|
100
102
|
"""
|
|
103
|
+
time_step = float(time_step)
|
|
101
104
|
val = self.get_coefficient_expression(time_step=time_step, hamiltonian_key=hamiltonian_key)
|
|
102
105
|
return val.evaluate({}) if isinstance(val, Term) else (val.evaluate() if isinstance(val, Parameter) else val)
|
|
103
106
|
|
qilisdk/analog/schedule.py
CHANGED
|
@@ -18,8 +18,8 @@ from typing import Callable
|
|
|
18
18
|
from loguru import logger
|
|
19
19
|
|
|
20
20
|
from qilisdk.analog.hamiltonian import Hamiltonian
|
|
21
|
-
from qilisdk.
|
|
22
|
-
from qilisdk.
|
|
21
|
+
from qilisdk.core.parameterizable import Parameterizable
|
|
22
|
+
from qilisdk.core.variables import BaseVariable, Number, Parameter, Term
|
|
23
23
|
from qilisdk.utils.visualization import ScheduleStyle
|
|
24
24
|
from qilisdk.yaml import yaml
|
|
25
25
|
|
|
@@ -110,7 +110,7 @@ class Schedule(Parameterizable):
|
|
|
110
110
|
f"The schedule can only contain Parameters, but a generic variable was provided ({time_step})"
|
|
111
111
|
)
|
|
112
112
|
self._parameters[v.label] = v
|
|
113
|
-
|
|
113
|
+
elif isinstance(coeff, BaseVariable):
|
|
114
114
|
if not isinstance(coeff, Parameter):
|
|
115
115
|
raise ValueError(
|
|
116
116
|
f"The schedule can only contain Parameters, but a generic variable was provided ({time_step})"
|
|
@@ -256,12 +256,12 @@ class Schedule(Parameterizable):
|
|
|
256
256
|
self._hamiltonians[label] = hamiltonian
|
|
257
257
|
self._schedule[0][label] = 0
|
|
258
258
|
self._nqubits = max(self._nqubits, hamiltonian.nqubits)
|
|
259
|
-
for
|
|
259
|
+
for _, param in hamiltonian.parameters.items():
|
|
260
260
|
self._parameters[param.label] = param
|
|
261
261
|
|
|
262
262
|
if schedule is not None:
|
|
263
263
|
for t in range(int(self.T / self.dt)):
|
|
264
|
-
time_step = schedule(t, **kwargs)
|
|
264
|
+
time_step = schedule(float(t), **kwargs)
|
|
265
265
|
if isinstance(time_step, Term):
|
|
266
266
|
for v in time_step.variables():
|
|
267
267
|
if not isinstance(v, Parameter):
|
|
@@ -422,6 +422,7 @@ class Schedule(Parameterizable):
|
|
|
422
422
|
Returns:
|
|
423
423
|
Number: The coefficient of the Hamiltonian at the specified time, or 0 if not defined.
|
|
424
424
|
"""
|
|
425
|
+
time_step = float(time_step)
|
|
425
426
|
val = self.get_coefficient_expression(time_step=time_step, hamiltonian_key=hamiltonian_key)
|
|
426
427
|
return val.evaluate({}) if isinstance(val, Term) else (val.evaluate() if isinstance(val, Parameter) else val)
|
|
427
428
|
|
|
@@ -502,3 +503,5 @@ class Schedule(Parameterizable):
|
|
|
502
503
|
renderer.plot()
|
|
503
504
|
if filepath:
|
|
504
505
|
renderer.save(filepath)
|
|
506
|
+
else:
|
|
507
|
+
renderer.show()
|
qilisdk/backends/cuda_backend.py
CHANGED
|
@@ -24,7 +24,7 @@ from loguru import logger
|
|
|
24
24
|
|
|
25
25
|
from qilisdk.analog.hamiltonian import Hamiltonian, PauliI, PauliOperator, PauliX, PauliY, PauliZ
|
|
26
26
|
from qilisdk.backends.backend import Backend
|
|
27
|
-
from qilisdk.
|
|
27
|
+
from qilisdk.core.qtensor import QTensor
|
|
28
28
|
from qilisdk.digital.exceptions import UnsupportedGateError
|
|
29
29
|
from qilisdk.digital.gates import RX, RY, RZ, SWAP, U1, U2, U3, Adjoint, BasicGate, Controlled, H, I, M, S, T, X, Y, Z
|
|
30
30
|
from qilisdk.functionals.sampling_result import SamplingResult
|
|
@@ -25,7 +25,7 @@ from qutip_qip.operations.gateclass import SingleQubitGate, is_qutip5
|
|
|
25
25
|
|
|
26
26
|
from qilisdk.analog.hamiltonian import Hamiltonian, PauliI, PauliOperator
|
|
27
27
|
from qilisdk.backends.backend import Backend
|
|
28
|
-
from qilisdk.
|
|
28
|
+
from qilisdk.core.qtensor import QTensor, tensor_prod
|
|
29
29
|
from qilisdk.digital import RX, RY, RZ, SWAP, U1, U2, U3, Circuit, H, I, M, S, T, X, Y, Z
|
|
30
30
|
from qilisdk.digital.exceptions import UnsupportedGateError
|
|
31
31
|
from qilisdk.digital.gates import Adjoint, BasicGate, Controlled
|
|
@@ -33,7 +33,6 @@ from qilisdk.functionals.sampling_result import SamplingResult
|
|
|
33
33
|
from qilisdk.functionals.time_evolution_result import TimeEvolutionResult
|
|
34
34
|
|
|
35
35
|
if TYPE_CHECKING:
|
|
36
|
-
from qilisdk.common.variables import Number
|
|
37
36
|
from qilisdk.functionals.sampling import Sampling
|
|
38
37
|
from qilisdk.functionals.time_evolution import TimeEvolution
|
|
39
38
|
|
|
@@ -183,28 +182,10 @@ class QutipBackend(Backend):
|
|
|
183
182
|
)
|
|
184
183
|
)
|
|
185
184
|
|
|
186
|
-
def get_hamiltonian_schedule(
|
|
187
|
-
hamiltonian: str, dt: float, schedule: dict[int, dict[str, Number]], T: float
|
|
188
|
-
) -> Callable:
|
|
189
|
-
def get_coeff(t: float) -> Number:
|
|
190
|
-
if int(t / dt) in schedule:
|
|
191
|
-
return schedule[int(t / dt)][hamiltonian]
|
|
192
|
-
time_step = int(t / dt)
|
|
193
|
-
while time_step > 0:
|
|
194
|
-
time_step -= 1
|
|
195
|
-
if time_step in schedule:
|
|
196
|
-
return schedule[time_step][hamiltonian]
|
|
197
|
-
return 0
|
|
198
|
-
|
|
199
|
-
return get_coeff
|
|
200
|
-
# return lambda t: schedule[int(t / dt)][ham] if int(t / dt) < int(T / dt) else schedule[int(T / dt)][ham]
|
|
201
|
-
|
|
202
185
|
H_t = [
|
|
203
186
|
[
|
|
204
187
|
qutip_hamiltonians[i],
|
|
205
|
-
|
|
206
|
-
h, functional.schedule.dt, functional.schedule.schedule, functional.schedule.T
|
|
207
|
-
),
|
|
188
|
+
np.array([functional.schedule.get_coefficient(t, h) for t in tlist]),
|
|
208
189
|
]
|
|
209
190
|
for i, h in enumerate(functional.schedule.hamiltonians)
|
|
210
191
|
]
|
qilisdk/{common → core}/model.py
RENAMED
|
@@ -103,8 +103,8 @@ class Constraint:
|
|
|
103
103
|
Example:
|
|
104
104
|
.. code-block:: python
|
|
105
105
|
|
|
106
|
-
from qilisdk.
|
|
107
|
-
from qilisdk.
|
|
106
|
+
from qilisdk.core.model import Constraint
|
|
107
|
+
from qilisdk.core.variables import BinaryVariable, LEQ
|
|
108
108
|
|
|
109
109
|
x = BinaryVariable("x")
|
|
110
110
|
constraint = Constraint("limit", LEQ(x, 1))
|
|
@@ -195,8 +195,8 @@ class Objective:
|
|
|
195
195
|
Example:
|
|
196
196
|
.. code-block:: python
|
|
197
197
|
|
|
198
|
-
from qilisdk.
|
|
199
|
-
from qilisdk.
|
|
198
|
+
from qilisdk.core.model import Objective, ObjectiveSense
|
|
199
|
+
from qilisdk.core.variables import BinaryVariable
|
|
200
200
|
|
|
201
201
|
x = BinaryVariable("x")
|
|
202
202
|
obj = Objective("profit", 3 * x, sense=ObjectiveSense.MAXIMIZE)
|
|
@@ -275,7 +275,7 @@ class Model:
|
|
|
275
275
|
Example:
|
|
276
276
|
.. code-block:: python
|
|
277
277
|
|
|
278
|
-
from qilisdk.
|
|
278
|
+
from qilisdk.core import BinaryVariable, LEQ, Model
|
|
279
279
|
|
|
280
280
|
num_items = 4
|
|
281
281
|
values = [1, 3, 5, 2]
|
|
@@ -517,8 +517,8 @@ class QUBO(Model):
|
|
|
517
517
|
Example:
|
|
518
518
|
.. code-block:: python
|
|
519
519
|
|
|
520
|
-
from qilisdk.
|
|
521
|
-
from qilisdk.
|
|
520
|
+
from qilisdk.core.model import QUBO
|
|
521
|
+
from qilisdk.core.variables import BinaryVariable
|
|
522
522
|
|
|
523
523
|
x0, x1 = BinaryVariable("x0"), BinaryVariable("x1")
|
|
524
524
|
qubo = QUBO("Example")
|
|
@@ -23,7 +23,7 @@ from typing import TYPE_CHECKING, Iterator, Mapping, Sequence, TypeVar
|
|
|
23
23
|
import numpy as np
|
|
24
24
|
from loguru import logger
|
|
25
25
|
|
|
26
|
-
from qilisdk.
|
|
26
|
+
from qilisdk.core.exceptions import EvaluationError, InvalidBoundsError, NotSupportedOperation, OutOfBoundsException
|
|
27
27
|
from qilisdk.yaml import yaml
|
|
28
28
|
|
|
29
29
|
if TYPE_CHECKING:
|
|
@@ -890,6 +890,9 @@ class BaseVariable(ABC):
|
|
|
890
890
|
if isinstance(other, Term):
|
|
891
891
|
return other + self
|
|
892
892
|
|
|
893
|
+
if isinstance(other, np.generic):
|
|
894
|
+
other = other.item()
|
|
895
|
+
|
|
893
896
|
return Term(elements=[self, other], operation=Operation.ADD)
|
|
894
897
|
|
|
895
898
|
__radd__ = __add__
|
|
@@ -901,6 +904,9 @@ class BaseVariable(ABC):
|
|
|
901
904
|
if isinstance(other, Term):
|
|
902
905
|
return other * self
|
|
903
906
|
|
|
907
|
+
if isinstance(other, np.generic):
|
|
908
|
+
other = other.item()
|
|
909
|
+
|
|
904
910
|
return Term(elements=[self, other], operation=Operation.MUL)
|
|
905
911
|
|
|
906
912
|
def __rmul__(self, other: Number | BaseVariable | Term) -> Term:
|
|
@@ -909,6 +915,9 @@ class BaseVariable(ABC):
|
|
|
909
915
|
if isinstance(other, Term):
|
|
910
916
|
return other * self
|
|
911
917
|
|
|
918
|
+
if isinstance(other, np.generic):
|
|
919
|
+
other = other.item()
|
|
920
|
+
|
|
912
921
|
return Term(elements=[other, self], operation=Operation.MUL)
|
|
913
922
|
|
|
914
923
|
__imul__ = __mul__
|
|
@@ -916,11 +925,19 @@ class BaseVariable(ABC):
|
|
|
916
925
|
def __sub__(self, other: Number | BaseVariable | Term) -> Term:
|
|
917
926
|
if not isinstance(other, (Number, BaseVariable, Term)):
|
|
918
927
|
return NotImplemented
|
|
928
|
+
|
|
929
|
+
if isinstance(other, np.generic):
|
|
930
|
+
other = other.item()
|
|
931
|
+
|
|
919
932
|
return self + -1 * other
|
|
920
933
|
|
|
921
934
|
def __rsub__(self, other: Number | BaseVariable | Term) -> Term:
|
|
922
935
|
if not isinstance(other, (Number, BaseVariable, Term)):
|
|
923
936
|
return NotImplemented
|
|
937
|
+
|
|
938
|
+
if isinstance(other, np.generic):
|
|
939
|
+
other = other.item()
|
|
940
|
+
|
|
924
941
|
return -1 * self + other
|
|
925
942
|
|
|
926
943
|
__isub__ = __sub__
|
|
@@ -935,6 +952,8 @@ class BaseVariable(ABC):
|
|
|
935
952
|
if other == 0:
|
|
936
953
|
raise ValueError("Division by zero is not allowed")
|
|
937
954
|
|
|
955
|
+
if isinstance(other, np.generic):
|
|
956
|
+
other = other.item()
|
|
938
957
|
other = 1 / other
|
|
939
958
|
return self * other
|
|
940
959
|
|
|
@@ -979,7 +998,7 @@ class BinaryVariable(BaseVariable):
|
|
|
979
998
|
Example:
|
|
980
999
|
.. code-block:: python
|
|
981
1000
|
|
|
982
|
-
from qilisdk.
|
|
1001
|
+
from qilisdk.core.variables import BinaryVariable
|
|
983
1002
|
|
|
984
1003
|
x = BinaryVariable("x")
|
|
985
1004
|
"""
|
|
@@ -1048,7 +1067,7 @@ class Variable(BaseVariable):
|
|
|
1048
1067
|
Example:
|
|
1049
1068
|
.. code-block:: python
|
|
1050
1069
|
|
|
1051
|
-
from qilisdk.
|
|
1070
|
+
from qilisdk.core.variables import Domain, Variable
|
|
1052
1071
|
|
|
1053
1072
|
price = Variable("price", domain=Domain.REAL, bounds=(0, 10))
|
|
1054
1073
|
binary_term = price.to_binary()
|
|
@@ -1183,7 +1202,7 @@ class Parameter(BaseVariable):
|
|
|
1183
1202
|
Example:
|
|
1184
1203
|
.. code-block:: python
|
|
1185
1204
|
|
|
1186
|
-
from qilisdk.
|
|
1205
|
+
from qilisdk.core.variables import Parameter
|
|
1187
1206
|
|
|
1188
1207
|
theta = Parameter("theta", value=0.5)
|
|
1189
1208
|
theta.set_value(0.75)
|
|
@@ -1665,6 +1684,10 @@ class Term:
|
|
|
1665
1684
|
if not isinstance(other, (Number, BaseVariable, Term)):
|
|
1666
1685
|
return NotImplemented
|
|
1667
1686
|
out = self.to_list() if self.operation == Operation.ADD else [copy.copy(self)]
|
|
1687
|
+
|
|
1688
|
+
if isinstance(other, np.generic):
|
|
1689
|
+
other = other.item()
|
|
1690
|
+
|
|
1668
1691
|
out.append(other)
|
|
1669
1692
|
return Term(out, Operation.ADD)
|
|
1670
1693
|
|
|
@@ -1674,6 +1697,9 @@ class Term:
|
|
|
1674
1697
|
if not isinstance(other, (Number, BaseVariable, Term)):
|
|
1675
1698
|
return NotImplemented
|
|
1676
1699
|
out = self.to_list() if self.operation == Operation.ADD else [copy.copy(self)]
|
|
1700
|
+
|
|
1701
|
+
if isinstance(other, np.generic):
|
|
1702
|
+
other = other.item()
|
|
1677
1703
|
out.insert(0, other)
|
|
1678
1704
|
return Term(out, Operation.ADD)
|
|
1679
1705
|
|
|
@@ -1683,6 +1709,10 @@ class Term:
|
|
|
1683
1709
|
out = self.to_list() if self.operation == Operation.MUL else [copy.copy(self)]
|
|
1684
1710
|
if len(out) == 0:
|
|
1685
1711
|
out = [0]
|
|
1712
|
+
|
|
1713
|
+
if isinstance(other, np.generic):
|
|
1714
|
+
other = other.item()
|
|
1715
|
+
|
|
1686
1716
|
out.append(other)
|
|
1687
1717
|
return Term(out, Operation.MUL)._unfold_parentheses()
|
|
1688
1718
|
|
|
@@ -1694,6 +1724,10 @@ class Term:
|
|
|
1694
1724
|
out = self.to_list() if self.operation == Operation.MUL else [copy.copy(self)]
|
|
1695
1725
|
if len(out) == 0:
|
|
1696
1726
|
out = [0]
|
|
1727
|
+
|
|
1728
|
+
if isinstance(other, np.generic):
|
|
1729
|
+
other = other.item()
|
|
1730
|
+
|
|
1697
1731
|
out.insert(0, other)
|
|
1698
1732
|
return Term(out, Operation.MUL)._unfold_parentheses()
|
|
1699
1733
|
|
|
@@ -1703,6 +1737,10 @@ class Term:
|
|
|
1703
1737
|
def __sub__(self, other: Number | BaseVariable | Term) -> Term:
|
|
1704
1738
|
if not isinstance(other, (Number, BaseVariable, Term)):
|
|
1705
1739
|
return NotImplemented
|
|
1740
|
+
|
|
1741
|
+
if isinstance(other, np.generic):
|
|
1742
|
+
other = other.item()
|
|
1743
|
+
|
|
1706
1744
|
return self + -1 * other
|
|
1707
1745
|
|
|
1708
1746
|
def __rsub__(self, other: Number | BaseVariable | Term) -> Term:
|
|
@@ -21,7 +21,7 @@ from qilisdk.functionals.sampling_result import SamplingResult
|
|
|
21
21
|
from qilisdk.functionals.time_evolution_result import TimeEvolutionResult
|
|
22
22
|
|
|
23
23
|
if TYPE_CHECKING:
|
|
24
|
-
from qilisdk.
|
|
24
|
+
from qilisdk.core.variables import Number
|
|
25
25
|
|
|
26
26
|
TResult = TypeVar("TResult", bound=FunctionalResult)
|
|
27
27
|
|
|
@@ -17,24 +17,24 @@ from typing import TYPE_CHECKING
|
|
|
17
17
|
|
|
18
18
|
import numpy as np
|
|
19
19
|
|
|
20
|
-
from qilisdk.
|
|
21
|
-
from qilisdk.
|
|
20
|
+
from qilisdk.core.model import QUBO, Model
|
|
21
|
+
from qilisdk.core.qtensor import QTensor, expect_val, ket
|
|
22
22
|
from qilisdk.cost_functions.cost_function import CostFunction
|
|
23
23
|
|
|
24
24
|
if TYPE_CHECKING:
|
|
25
|
-
from qilisdk.
|
|
25
|
+
from qilisdk.core.variables import Number
|
|
26
26
|
from qilisdk.functionals.sampling_result import SamplingResult
|
|
27
27
|
from qilisdk.functionals.time_evolution_result import TimeEvolutionResult
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class ModelCostFunction(CostFunction):
|
|
31
31
|
"""
|
|
32
|
-
Evaluate the cost of functional results with respect to a :class:`~qilisdk.
|
|
32
|
+
Evaluate the cost of functional results with respect to a :class:`~qilisdk.core.model.Model`.
|
|
33
33
|
|
|
34
34
|
Example:
|
|
35
35
|
.. code-block:: python
|
|
36
36
|
|
|
37
|
-
from qilisdk.
|
|
37
|
+
from qilisdk.core import BinaryVariable, Model, LEQ
|
|
38
38
|
from qilisdk.cost_functions import ModelCostFunction
|
|
39
39
|
|
|
40
40
|
model = Model("demo")
|
|
@@ -18,11 +18,11 @@ from typing import TYPE_CHECKING
|
|
|
18
18
|
import numpy as np
|
|
19
19
|
|
|
20
20
|
from qilisdk.analog.hamiltonian import Hamiltonian, PauliOperator
|
|
21
|
-
from qilisdk.
|
|
21
|
+
from qilisdk.core.qtensor import QTensor, expect_val, ket, tensor_prod
|
|
22
22
|
from qilisdk.cost_functions.cost_function import CostFunction
|
|
23
23
|
|
|
24
24
|
if TYPE_CHECKING:
|
|
25
|
-
from qilisdk.
|
|
25
|
+
from qilisdk.core.variables import Number
|
|
26
26
|
from qilisdk.functionals.sampling_result import SamplingResult
|
|
27
27
|
from qilisdk.functionals.time_evolution_result import TimeEvolutionResult
|
|
28
28
|
|
qilisdk/digital/ansatz.py
CHANGED
|
@@ -188,9 +188,6 @@ class HardwareEfficientAnsatz(Ansatz):
|
|
|
188
188
|
# Parameter iterator covering all single-qubit blocks, in order
|
|
189
189
|
parameter_iterator = iter(self._parameter_blocks())
|
|
190
190
|
|
|
191
|
-
# U(0)
|
|
192
|
-
self._apply_single_qubit_block(parameter_iterator)
|
|
193
|
-
|
|
194
191
|
# For each remaining layer: U -> E
|
|
195
192
|
if self.structure == "grouped":
|
|
196
193
|
for _ in range(self.layers):
|
qilisdk/digital/circuit.py
CHANGED
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
|
|
15
15
|
import numpy as np
|
|
16
16
|
|
|
17
|
-
from qilisdk.
|
|
18
|
-
from qilisdk.
|
|
17
|
+
from qilisdk.core.parameterizable import Parameterizable
|
|
18
|
+
from qilisdk.core.variables import Parameter, RealNumber
|
|
19
19
|
from qilisdk.utils.visualization import CircuitStyle
|
|
20
20
|
from qilisdk.yaml import yaml
|
|
21
21
|
|
qilisdk/digital/gates.py
CHANGED
|
@@ -20,8 +20,8 @@ import numpy as np
|
|
|
20
20
|
from scipy.linalg import expm
|
|
21
21
|
from typing_extensions import Self
|
|
22
22
|
|
|
23
|
-
from qilisdk.
|
|
24
|
-
from qilisdk.
|
|
23
|
+
from qilisdk.core.parameterizable import Parameterizable
|
|
24
|
+
from qilisdk.core.variables import Parameter
|
|
25
25
|
from qilisdk.yaml import yaml
|
|
26
26
|
|
|
27
27
|
from .exceptions import (
|
|
@@ -924,7 +924,7 @@ class U2(BasicGate):
|
|
|
924
924
|
``U2(phi, gamma) = U2_qiskit/pennylane(phi, gamma) = exp(i*(phi+gamma)/2) U2_qibo(phi, gamma)``
|
|
925
925
|
|
|
926
926
|
Other unitaries you can get from this one are:
|
|
927
|
-
- ``U2(phi=0, gamma=
|
|
927
|
+
- ``U2(phi=0, gamma=pi) = H``
|
|
928
928
|
- ``U2(phi=0, gamma=0) = RY(theta=pi/2)``
|
|
929
929
|
- ``U2(phi=-pi/2, gamma=pi/2) = RX(theta=pi/2)``
|
|
930
930
|
"""
|
|
@@ -16,7 +16,7 @@ from __future__ import annotations
|
|
|
16
16
|
from abc import ABC
|
|
17
17
|
from typing import ClassVar, Generic, TypeVar
|
|
18
18
|
|
|
19
|
-
from qilisdk.
|
|
19
|
+
from qilisdk.core.parameterizable import Parameterizable
|
|
20
20
|
from qilisdk.functionals.functional_result import FunctionalResult
|
|
21
21
|
|
|
22
22
|
TResult_co = TypeVar("TResult_co", bound=FunctionalResult, covariant=True)
|
|
@@ -35,5 +35,5 @@ class Functional(ABC):
|
|
|
35
35
|
|
|
36
36
|
class PrimitiveFunctional(Parameterizable, Functional, ABC, Generic[TResult_co]):
|
|
37
37
|
"""
|
|
38
|
-
Base class for functionals backed by a :class:`~qilisdk.
|
|
38
|
+
Base class for functionals backed by a :class:`~qilisdk.core.parameterizable.Parameterizable` object.
|
|
39
39
|
"""
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
|
-
from qilisdk.
|
|
14
|
+
from qilisdk.core.result import Result
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class FunctionalResult(Result):
|
qilisdk/functionals/sampling.py
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
from typing import ClassVar
|
|
15
15
|
|
|
16
|
-
from qilisdk.
|
|
16
|
+
from qilisdk.core.variables import RealNumber
|
|
17
17
|
from qilisdk.digital.circuit import Circuit
|
|
18
18
|
from qilisdk.functionals.functional import PrimitiveFunctional
|
|
19
19
|
from qilisdk.functionals.sampling_result import SamplingResult
|
|
@@ -15,8 +15,8 @@ from typing import ClassVar
|
|
|
15
15
|
|
|
16
16
|
from qilisdk.analog.hamiltonian import Hamiltonian, PauliOperator
|
|
17
17
|
from qilisdk.analog.schedule import Schedule
|
|
18
|
-
from qilisdk.
|
|
19
|
-
from qilisdk.
|
|
18
|
+
from qilisdk.core.qtensor import QTensor
|
|
19
|
+
from qilisdk.core.variables import RealNumber
|
|
20
20
|
from qilisdk.functionals.functional import PrimitiveFunctional
|
|
21
21
|
from qilisdk.functionals.time_evolution_result import TimeEvolutionResult
|
|
22
22
|
from qilisdk.yaml import yaml
|
|
@@ -31,7 +31,7 @@ class TimeEvolution(PrimitiveFunctional[TimeEvolutionResult]):
|
|
|
31
31
|
.. code-block:: python
|
|
32
32
|
|
|
33
33
|
from qilisdk.analog import Schedule, Hamiltonian, Z
|
|
34
|
-
from qilisdk.
|
|
34
|
+
from qilisdk.core import ket
|
|
35
35
|
from qilisdk.functionals.time_evolution import TimeEvolution
|
|
36
36
|
|
|
37
37
|
h0 = Z(0)
|
|
@@ -15,8 +15,8 @@ from pprint import pformat
|
|
|
15
15
|
|
|
16
16
|
import numpy as np
|
|
17
17
|
|
|
18
|
-
from qilisdk.
|
|
19
|
-
from qilisdk.
|
|
18
|
+
from qilisdk.core.model import Model
|
|
19
|
+
from qilisdk.core.qtensor import QTensor
|
|
20
20
|
from qilisdk.functionals.functional_result import FunctionalResult
|
|
21
21
|
from qilisdk.yaml import yaml
|
|
22
22
|
|
qilisdk/speqtrum/__init__.py
CHANGED
|
@@ -25,6 +25,8 @@ OPTIONAL_FEATURES: list[OptionalFeature] = [
|
|
|
25
25
|
Symbol(path="qilisdk.speqtrum.speqtrum", name="SpeQtrum"),
|
|
26
26
|
Symbol(path="qilisdk.speqtrum.speqtrum_models", name="DeviceStatus"),
|
|
27
27
|
Symbol(path="qilisdk.speqtrum.speqtrum_models", name="DeviceType"),
|
|
28
|
+
Symbol(path="qilisdk.speqtrum.speqtrum_models", name="JobHandle"),
|
|
29
|
+
Symbol(path="qilisdk.speqtrum.speqtrum_models", name="TypedJobDetail"),
|
|
28
30
|
],
|
|
29
31
|
),
|
|
30
32
|
]
|