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.
Files changed (49) hide show
  1. qilisdk/analog/__init__.py +1 -2
  2. qilisdk/analog/hamiltonian.py +4 -71
  3. qilisdk/analog/schedule.py +291 -313
  4. qilisdk/backends/backend.py +5 -1
  5. qilisdk/backends/cuda_backend.py +10 -6
  6. qilisdk/backends/qutip_backend.py +24 -32
  7. qilisdk/{common → core}/__init__.py +4 -0
  8. qilisdk/core/interpolator.py +406 -0
  9. qilisdk/{common → core}/model.py +7 -7
  10. qilisdk/core/parameterizable.py +131 -0
  11. qilisdk/{common → core}/qtensor.py +1 -1
  12. qilisdk/{common → core}/variables.py +192 -11
  13. qilisdk/cost_functions/cost_function.py +1 -1
  14. qilisdk/cost_functions/model_cost_function.py +5 -5
  15. qilisdk/cost_functions/observable_cost_function.py +2 -2
  16. qilisdk/digital/ansatz.py +0 -3
  17. qilisdk/digital/circuit.py +3 -2
  18. qilisdk/digital/circuit_transpiler.py +46 -0
  19. qilisdk/digital/circuit_transpiler_passes/__init__.py +18 -0
  20. qilisdk/digital/circuit_transpiler_passes/circuit_transpiler_pass.py +36 -0
  21. qilisdk/digital/circuit_transpiler_passes/decompose_multi_controlled_gates_pass.py +216 -0
  22. qilisdk/digital/circuit_transpiler_passes/numeric_helpers.py +82 -0
  23. qilisdk/digital/gates.py +15 -5
  24. qilisdk/{speqtrum/experiments → experiments}/__init__.py +13 -2
  25. qilisdk/{speqtrum/experiments → experiments}/experiment_functional.py +90 -2
  26. qilisdk/{speqtrum/experiments → experiments}/experiment_result.py +16 -0
  27. qilisdk/functionals/functional.py +2 -2
  28. qilisdk/functionals/functional_result.py +1 -1
  29. qilisdk/functionals/sampling.py +8 -1
  30. qilisdk/functionals/time_evolution.py +8 -4
  31. qilisdk/functionals/time_evolution_result.py +2 -2
  32. qilisdk/functionals/variational_program.py +58 -0
  33. qilisdk/optimizers/optimizer_result.py +1 -1
  34. qilisdk/speqtrum/__init__.py +2 -0
  35. qilisdk/speqtrum/speqtrum.py +537 -152
  36. qilisdk/speqtrum/speqtrum_models.py +258 -2
  37. qilisdk/utils/openfermion/__init__.py +38 -0
  38. qilisdk/{common/algorithm.py → utils/openfermion/__init__.pyi} +2 -3
  39. qilisdk/utils/openfermion/openfermion.py +45 -0
  40. qilisdk/utils/visualization/schedule_renderers.py +22 -9
  41. {qilisdk-0.1.5.dist-info → qilisdk-0.1.7.dist-info}/METADATA +89 -39
  42. qilisdk-0.1.7.dist-info/RECORD +76 -0
  43. {qilisdk-0.1.5.dist-info → qilisdk-0.1.7.dist-info}/WHEEL +1 -1
  44. qilisdk/analog/linear_schedule.py +0 -118
  45. qilisdk/common/parameterizable.py +0 -75
  46. qilisdk-0.1.5.dist-info/RECORD +0 -69
  47. /qilisdk/{common → core}/exceptions.py +0 -0
  48. /qilisdk/{common → core}/result.py +0 -0
  49. {qilisdk-0.1.5.dist-info → qilisdk-0.1.7.dist-info}/licenses/LICENCE +0 -0
@@ -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", "LinearSchedule", "PauliI", "PauliX", "PauliY", "PauliZ", "Schedule", "X", "Y", "Z"]
18
+ __all__ = ["Hamiltonian", "I", "PauliI", "PauliX", "PauliY", "PauliZ", "Schedule", "X", "Y", "Z"]
@@ -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.common.parameterizable import Parameterizable
28
- from qilisdk.common.qtensor import QTensor
29
- from qilisdk.common.variables import BaseVariable, Parameter, Term
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