qilisdk 0.1.5__py3-none-any.whl → 0.1.7__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/__init__.py +1 -2
- qilisdk/analog/hamiltonian.py +4 -71
- qilisdk/analog/schedule.py +291 -313
- qilisdk/backends/backend.py +5 -1
- qilisdk/backends/cuda_backend.py +10 -6
- qilisdk/backends/qutip_backend.py +24 -32
- qilisdk/{common → core}/__init__.py +4 -0
- qilisdk/core/interpolator.py +406 -0
- qilisdk/{common → core}/model.py +7 -7
- qilisdk/core/parameterizable.py +131 -0
- qilisdk/{common → core}/qtensor.py +1 -1
- qilisdk/{common → core}/variables.py +192 -11
- 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 +3 -2
- qilisdk/digital/circuit_transpiler.py +46 -0
- qilisdk/digital/circuit_transpiler_passes/__init__.py +18 -0
- qilisdk/digital/circuit_transpiler_passes/circuit_transpiler_pass.py +36 -0
- qilisdk/digital/circuit_transpiler_passes/decompose_multi_controlled_gates_pass.py +216 -0
- qilisdk/digital/circuit_transpiler_passes/numeric_helpers.py +82 -0
- qilisdk/digital/gates.py +15 -5
- qilisdk/{speqtrum/experiments → experiments}/__init__.py +13 -2
- qilisdk/{speqtrum/experiments → experiments}/experiment_functional.py +90 -2
- qilisdk/{speqtrum/experiments → experiments}/experiment_result.py +16 -0
- qilisdk/functionals/functional.py +2 -2
- qilisdk/functionals/functional_result.py +1 -1
- qilisdk/functionals/sampling.py +8 -1
- qilisdk/functionals/time_evolution.py +8 -4
- qilisdk/functionals/time_evolution_result.py +2 -2
- qilisdk/functionals/variational_program.py +58 -0
- qilisdk/optimizers/optimizer_result.py +1 -1
- qilisdk/speqtrum/__init__.py +2 -0
- qilisdk/speqtrum/speqtrum.py +537 -152
- qilisdk/speqtrum/speqtrum_models.py +258 -2
- qilisdk/utils/openfermion/__init__.py +38 -0
- qilisdk/{common/algorithm.py → utils/openfermion/__init__.pyi} +2 -3
- qilisdk/utils/openfermion/openfermion.py +45 -0
- qilisdk/utils/visualization/schedule_renderers.py +22 -9
- {qilisdk-0.1.5.dist-info → qilisdk-0.1.7.dist-info}/METADATA +89 -39
- qilisdk-0.1.7.dist-info/RECORD +76 -0
- {qilisdk-0.1.5.dist-info → qilisdk-0.1.7.dist-info}/WHEEL +1 -1
- qilisdk/analog/linear_schedule.py +0 -118
- qilisdk/common/parameterizable.py +0 -75
- qilisdk-0.1.5.dist-info/RECORD +0 -69
- /qilisdk/{common → core}/exceptions.py +0 -0
- /qilisdk/{common → core}/result.py +0 -0
- {qilisdk-0.1.5.dist-info → qilisdk-0.1.7.dist-info}/licenses/LICENCE +0 -0
qilisdk/analog/__init__.py
CHANGED
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from .hamiltonian import Hamiltonian, I, PauliI, PauliX, PauliY, PauliZ, X, Y, Z
|
|
16
|
-
from .linear_schedule import LinearSchedule
|
|
17
16
|
from .schedule import Schedule
|
|
18
17
|
|
|
19
|
-
__all__ = ["Hamiltonian", "I", "
|
|
18
|
+
__all__ = ["Hamiltonian", "I", "PauliI", "PauliX", "PauliY", "PauliZ", "Schedule", "X", "Y", "Z"]
|
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
|
|
@@ -256,6 +256,7 @@ class Hamiltonian(Parameterizable):
|
|
|
256
256
|
Raises:
|
|
257
257
|
ValueError: If the provided coefficients include generic variables instead of parameters.
|
|
258
258
|
"""
|
|
259
|
+
super(Hamiltonian, self).__init__()
|
|
259
260
|
self._elements: dict[tuple[PauliOperator, ...], complex | Term | Parameter] = defaultdict(complex)
|
|
260
261
|
self._parameters: dict[str, Parameter] = {}
|
|
261
262
|
if elements:
|
|
@@ -294,79 +295,11 @@ class Hamiltonian(Parameterizable):
|
|
|
294
295
|
for k, v in self._elements.items()
|
|
295
296
|
}
|
|
296
297
|
|
|
297
|
-
@property
|
|
298
|
-
def nparameters(self) -> int:
|
|
299
|
-
"""Return the number of unique symbolic parameters contained in the Hamiltonian."""
|
|
300
|
-
return len(self._parameters)
|
|
301
|
-
|
|
302
298
|
@property
|
|
303
299
|
def parameters(self) -> dict[str, Parameter]:
|
|
304
300
|
"""Return a mapping from parameter labels to their corresponding parameter objects."""
|
|
305
301
|
return self._parameters
|
|
306
302
|
|
|
307
|
-
def get_parameter_values(self) -> list[float]:
|
|
308
|
-
"""Return the current numeric values of the Hamiltonian parameters."""
|
|
309
|
-
return [param.value for param in self._parameters.values()]
|
|
310
|
-
|
|
311
|
-
def get_parameter_names(self) -> list[str]:
|
|
312
|
-
"""Return the ordered list of parameter labels defined in the Hamiltonian."""
|
|
313
|
-
return list(self._parameters.keys())
|
|
314
|
-
|
|
315
|
-
def get_parameters(self) -> dict[str, float]:
|
|
316
|
-
"""Return a mapping from parameter labels to their current numerical values."""
|
|
317
|
-
return {label: param.value for label, param in self._parameters.items()}
|
|
318
|
-
|
|
319
|
-
def set_parameter_values(self, values: list[float]) -> None:
|
|
320
|
-
"""
|
|
321
|
-
Update the numerical values of the Hamiltonian parameters.
|
|
322
|
-
|
|
323
|
-
Args:
|
|
324
|
-
values (list[float]): New values ordered according to ``get_parameter_names()``.
|
|
325
|
-
|
|
326
|
-
Raises:
|
|
327
|
-
ValueError: If the number of provided values does not match ``nparameters``.
|
|
328
|
-
"""
|
|
329
|
-
if len(values) != self.nparameters:
|
|
330
|
-
raise ValueError(f"Provided {len(values)} but Hamiltonian has {self.nparameters} parameters.")
|
|
331
|
-
for i, parameter in enumerate(self._parameters.values()):
|
|
332
|
-
parameter.set_value(values[i])
|
|
333
|
-
|
|
334
|
-
def set_parameters(self, parameter_dict: dict[str, float]) -> None:
|
|
335
|
-
"""
|
|
336
|
-
Update a subset of parameters by label.
|
|
337
|
-
|
|
338
|
-
Args:
|
|
339
|
-
parameter_dict (dict[str, float]): Mapping from parameter labels to new numerical values.
|
|
340
|
-
|
|
341
|
-
Raises:
|
|
342
|
-
ValueError: If an unknown parameter label is provided.
|
|
343
|
-
"""
|
|
344
|
-
for label, param in parameter_dict.items():
|
|
345
|
-
if label not in self._parameters:
|
|
346
|
-
raise ValueError(f"Parameter {label} is not defined in this hamiltonian.")
|
|
347
|
-
self._parameters[label].set_value(param)
|
|
348
|
-
|
|
349
|
-
def get_parameter_bounds(self) -> dict[str, tuple[float, float]]:
|
|
350
|
-
"""Return the lower and upper bounds currently associated with each parameter."""
|
|
351
|
-
return {k: v.bounds for k, v in self._parameters.items()}
|
|
352
|
-
|
|
353
|
-
def set_parameter_bounds(self, ranges: dict[str, tuple[float, float]]) -> None:
|
|
354
|
-
"""
|
|
355
|
-
Update parameter bounds.
|
|
356
|
-
|
|
357
|
-
Args:
|
|
358
|
-
ranges (dict[str, tuple[float, float]]): Mapping from parameter labels to ``(lower, upper)`` bounds.
|
|
359
|
-
|
|
360
|
-
Raises:
|
|
361
|
-
ValueError: If an unknown parameter label is provided.
|
|
362
|
-
"""
|
|
363
|
-
for label, bound in ranges.items():
|
|
364
|
-
if label not in self._parameters:
|
|
365
|
-
raise ValueError(
|
|
366
|
-
f"The provided parameter label {label} is not defined in the list of parameters in this object."
|
|
367
|
-
)
|
|
368
|
-
self._parameters[label].set_bounds(bound[0], bound[1])
|
|
369
|
-
|
|
370
303
|
def simplify(self) -> Hamiltonian:
|
|
371
304
|
"""Simplify the Hamiltonian expression by removing near-zero terms and accumulating constant terms.
|
|
372
305
|
|