emu-sv 2.3.0__py3-none-any.whl → 2.4.1__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.
- emu_sv/__init__.py +1 -1
- emu_sv/density_matrix_state.py +3 -1
- emu_sv/state_vector.py +2 -2
- emu_sv/sv_backend_impl.py +11 -20
- emu_sv/sv_config.py +4 -0
- emu_sv/time_evolution.py +15 -4
- {emu_sv-2.3.0.dist-info → emu_sv-2.4.1.dist-info}/METADATA +2 -2
- emu_sv-2.4.1.dist-info/RECORD +15 -0
- emu_sv-2.3.0.dist-info/RECORD +0 -15
- {emu_sv-2.3.0.dist-info → emu_sv-2.4.1.dist-info}/WHEEL +0 -0
emu_sv/__init__.py
CHANGED
emu_sv/density_matrix_state.py
CHANGED
|
@@ -80,7 +80,9 @@ class DensityMatrix(State[complex, torch.Tensor]):
|
|
|
80
80
|
self.matrix.shape == other.matrix.shape
|
|
81
81
|
), "States do not have the same number of sites"
|
|
82
82
|
|
|
83
|
-
return torch.vdot(
|
|
83
|
+
return torch.vdot(
|
|
84
|
+
self.matrix.flatten(), other.matrix.to(self.matrix.device).flatten()
|
|
85
|
+
)
|
|
84
86
|
|
|
85
87
|
@classmethod
|
|
86
88
|
def from_state_vector(cls, state: StateVector) -> DensityMatrix:
|
emu_sv/state_vector.py
CHANGED
|
@@ -134,7 +134,7 @@ class StateVector(State[complex, torch.Tensor]):
|
|
|
134
134
|
), "States do not have the same shape"
|
|
135
135
|
|
|
136
136
|
# by our internal convention inner and norm return to cpu
|
|
137
|
-
return torch.vdot(self.vector, other.vector).cpu()
|
|
137
|
+
return torch.vdot(self.vector, other.vector.to(self.vector.device)).cpu()
|
|
138
138
|
|
|
139
139
|
def sample(
|
|
140
140
|
self,
|
|
@@ -275,7 +275,7 @@ class StateVector(State[complex, torch.Tensor]):
|
|
|
275
275
|
return accum_state, amplitudes
|
|
276
276
|
|
|
277
277
|
def overlap(self, other: StateVector, /) -> torch.Tensor:
|
|
278
|
-
return self.inner(other)
|
|
278
|
+
return torch.abs(self.inner(other)) ** 2
|
|
279
279
|
|
|
280
280
|
|
|
281
281
|
def inner(left: StateVector, right: StateVector) -> torch.Tensor:
|
emu_sv/sv_backend_impl.py
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
2
|
import time
|
|
3
3
|
import typing
|
|
4
|
+
import torch
|
|
4
5
|
|
|
5
6
|
from emu_sv.hamiltonian import RydbergHamiltonian
|
|
6
7
|
from emu_sv.lindblad_operator import RydbergLindbladian
|
|
7
8
|
from pulser import Sequence
|
|
8
|
-
import torch
|
|
9
|
-
from resource import RUSAGE_SELF, getrusage
|
|
10
9
|
|
|
11
10
|
from pulser.backend import Results, Observable, State, EmulationConfig
|
|
12
|
-
from emu_base import PulserData
|
|
13
|
-
from emu_base.noise import pick_dark_qubits
|
|
11
|
+
from emu_base import PulserData, get_max_rss
|
|
14
12
|
|
|
15
13
|
from emu_sv.state_vector import StateVector
|
|
16
14
|
from emu_sv.density_matrix_state import DensityMatrix
|
|
@@ -46,20 +44,12 @@ class Statistics(Observable):
|
|
|
46
44
|
assert isinstance(state, StateVector | DensityMatrix)
|
|
47
45
|
assert isinstance(config, SVConfig)
|
|
48
46
|
duration = self.data[-1]
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
elif isinstance(state, DensityMatrix) and state.matrix.is_cuda:
|
|
56
|
-
max_mem_per_device = (
|
|
57
|
-
torch.cuda.max_memory_allocated(device) * 1e-6
|
|
58
|
-
for device in range(torch.cuda.device_count())
|
|
59
|
-
)
|
|
60
|
-
max_mem = max(max_mem_per_device)
|
|
61
|
-
else:
|
|
62
|
-
max_mem = getrusage(RUSAGE_SELF).ru_maxrss * 1e-3
|
|
47
|
+
max_mem = get_max_rss(
|
|
48
|
+
isinstance(state, StateVector)
|
|
49
|
+
and state.vector.is_cuda
|
|
50
|
+
or isinstance(state, DensityMatrix)
|
|
51
|
+
and state.matrix.is_cuda
|
|
52
|
+
)
|
|
63
53
|
|
|
64
54
|
config.logger.info(
|
|
65
55
|
f"step = {len(self.data)}/{self.timestep_count}, "
|
|
@@ -118,8 +108,9 @@ class BaseSVBackendImpl:
|
|
|
118
108
|
|
|
119
109
|
def init_dark_qubits(self) -> None:
|
|
120
110
|
if self._config.noise_model.state_prep_error > 0.0:
|
|
121
|
-
|
|
122
|
-
|
|
111
|
+
bad_atoms = self._pulser_data.hamiltonian.bad_atoms
|
|
112
|
+
self.well_prepared_qubits_filter = torch.tensor(
|
|
113
|
+
[bool(bad_atoms[x]) for x in self._pulser_data.qubit_ids]
|
|
123
114
|
)
|
|
124
115
|
else:
|
|
125
116
|
self.well_prepared_qubits_filter = None
|
emu_sv/sv_config.py
CHANGED
|
@@ -6,6 +6,8 @@ from types import MethodType
|
|
|
6
6
|
from typing import Any, ClassVar
|
|
7
7
|
|
|
8
8
|
from emu_sv.utils import choose
|
|
9
|
+
from emu_sv.state_vector import StateVector
|
|
10
|
+
from emu_sv.dense_operator import DenseOperator
|
|
9
11
|
|
|
10
12
|
from emu_sv.custom_callback_implementations import (
|
|
11
13
|
qubit_occupation_sv_impl,
|
|
@@ -59,6 +61,8 @@ class SVConfig(EmulationConfig):
|
|
|
59
61
|
|
|
60
62
|
# Whether to warn if unexpected kwargs are received
|
|
61
63
|
_enforce_expected_kwargs: ClassVar[bool] = True
|
|
64
|
+
_state_type = StateVector
|
|
65
|
+
_operator_type = DenseOperator
|
|
62
66
|
|
|
63
67
|
def __init__(
|
|
64
68
|
self,
|
emu_sv/time_evolution.py
CHANGED
|
@@ -140,7 +140,10 @@ class EvolveStateVector(torch.autograd.Function):
|
|
|
140
140
|
interaction_matrix=interaction_matrix,
|
|
141
141
|
device=state.device,
|
|
142
142
|
)
|
|
143
|
-
|
|
143
|
+
|
|
144
|
+
def op(x: torch.Tensor) -> torch.Tensor:
|
|
145
|
+
return -1j * dt * (ham * x)
|
|
146
|
+
|
|
144
147
|
res = krylov_exp(
|
|
145
148
|
op,
|
|
146
149
|
state,
|
|
@@ -273,7 +276,10 @@ class EvolveStateVector(torch.autograd.Function):
|
|
|
273
276
|
)
|
|
274
277
|
|
|
275
278
|
if any(ctx.needs_input_grad[1:5]):
|
|
276
|
-
|
|
279
|
+
|
|
280
|
+
def op(x: torch.Tensor):
|
|
281
|
+
return -1j * dt * (ham * x)
|
|
282
|
+
|
|
277
283
|
lanczos_vectors_state, dS, lanczos_vectors_grad = double_krylov(
|
|
278
284
|
op, state, grad_state_out, tolerance
|
|
279
285
|
)
|
|
@@ -316,7 +322,10 @@ class EvolveStateVector(torch.autograd.Function):
|
|
|
316
322
|
grad_int_mat[i, j] = (-1j * dt * torch.tensordot(Vg.conj(), v)).real
|
|
317
323
|
|
|
318
324
|
if ctx.needs_input_grad[5]:
|
|
319
|
-
|
|
325
|
+
|
|
326
|
+
def op(x: torch.Tensor):
|
|
327
|
+
return (1j * dt) * (ham * x)
|
|
328
|
+
|
|
320
329
|
grad_state_in = krylov_exp(op, grad_state_out.detach(), tolerance, tolerance)
|
|
321
330
|
|
|
322
331
|
return (
|
|
@@ -353,7 +362,9 @@ class EvolveDensityMatrix:
|
|
|
353
362
|
device=density_matrix.device,
|
|
354
363
|
)
|
|
355
364
|
|
|
356
|
-
op
|
|
365
|
+
def op(x: torch.Tensor) -> torch.Tensor:
|
|
366
|
+
return -1j * dt * (ham @ x)
|
|
367
|
+
|
|
357
368
|
return (
|
|
358
369
|
krylov_exp(
|
|
359
370
|
op,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: emu-sv
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.1
|
|
4
4
|
Summary: Pasqal State Vector based pulse emulator built on PyTorch
|
|
5
5
|
Project-URL: Documentation, https://pasqal-io.github.io/emulators/
|
|
6
6
|
Project-URL: Repository, https://github.com/pasqal-io/emulators
|
|
@@ -25,7 +25,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
25
25
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
26
26
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
27
27
|
Requires-Python: >=3.10
|
|
28
|
-
Requires-Dist: emu-base==2.
|
|
28
|
+
Requires-Dist: emu-base==2.4.1
|
|
29
29
|
Description-Content-Type: text/markdown
|
|
30
30
|
|
|
31
31
|
<div align="center">
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
emu_sv/__init__.py,sha256=Sv7BbiGYuZzUh30AqMZpyA9m2zM8z-UKh_D2C6LACNs,771
|
|
2
|
+
emu_sv/custom_callback_implementations.py,sha256=_7XLIDzJ-p3DVqz-Jyv0eYbl8nih2x2p-pM4cBCLumA,6367
|
|
3
|
+
emu_sv/dense_operator.py,sha256=AvgntJNwwtf3Wl66CIWSwUezVYV3vignCL24SQQQwQg,5901
|
|
4
|
+
emu_sv/density_matrix_state.py,sha256=6QmLZvqEHLR64r0nD7D2jZIiAYOgciNVCjh3ywfvIs0,7243
|
|
5
|
+
emu_sv/hamiltonian.py,sha256=CqNGuWJlO2ZljK47wt130s-5uKiOldQUsC3tjwk1mKA,6106
|
|
6
|
+
emu_sv/lindblad_operator.py,sha256=pgjRNLBcvEM2-qxM8uy9wL74OtrD4A8trQeERi_AXH8,8892
|
|
7
|
+
emu_sv/state_vector.py,sha256=Ookw_BDqzs9OFppQd7kaMxDSkaj5F_clhOCgo-LSaMg,9910
|
|
8
|
+
emu_sv/sv_backend.py,sha256=-soOkSEzEBK1dCKnYnbtvYjmNZtZra1_4jP3H1ROOtM,737
|
|
9
|
+
emu_sv/sv_backend_impl.py,sha256=OYsJK_DJ8dmq3QZLKiBejXrq22R5Auyye-pai07NeeY,8798
|
|
10
|
+
emu_sv/sv_config.py,sha256=6fcuC9RKc7Pp55Yb-lWCGtZ7UJP53oLyZsy1f9wBtRg,6100
|
|
11
|
+
emu_sv/time_evolution.py,sha256=Uy3qMdt3BlLB6Aq1-o5uajRTu_3fPuBCtcusHxFPPJc,13545
|
|
12
|
+
emu_sv/utils.py,sha256=t0nMDVo6DF5bQW-vbsyRMCmvkyNxCU-v0Enmns9aOAU,1151
|
|
13
|
+
emu_sv-2.4.1.dist-info/METADATA,sha256=5nUzMJNramhABPKHG1D7h78W6L2MeSJpkZg1wAmDg2c,3595
|
|
14
|
+
emu_sv-2.4.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
15
|
+
emu_sv-2.4.1.dist-info/RECORD,,
|
emu_sv-2.3.0.dist-info/RECORD
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
emu_sv/__init__.py,sha256=BWI-O-rXdn7xncmWEUdxtx7gFbWflcPD2lKcsll6t9w,771
|
|
2
|
-
emu_sv/custom_callback_implementations.py,sha256=_7XLIDzJ-p3DVqz-Jyv0eYbl8nih2x2p-pM4cBCLumA,6367
|
|
3
|
-
emu_sv/dense_operator.py,sha256=AvgntJNwwtf3Wl66CIWSwUezVYV3vignCL24SQQQwQg,5901
|
|
4
|
-
emu_sv/density_matrix_state.py,sha256=BJpFzxjgWQOb_D6dehdA6dRUUQKP1iVccTDrZKicwRE,7198
|
|
5
|
-
emu_sv/hamiltonian.py,sha256=CqNGuWJlO2ZljK47wt130s-5uKiOldQUsC3tjwk1mKA,6106
|
|
6
|
-
emu_sv/lindblad_operator.py,sha256=pgjRNLBcvEM2-qxM8uy9wL74OtrD4A8trQeERi_AXH8,8892
|
|
7
|
-
emu_sv/state_vector.py,sha256=oZeTr44Wt1zYEmPc3yN-Zz8aKxIBTjKA0XM23T8MQkU,9871
|
|
8
|
-
emu_sv/sv_backend.py,sha256=-soOkSEzEBK1dCKnYnbtvYjmNZtZra1_4jP3H1ROOtM,737
|
|
9
|
-
emu_sv/sv_backend_impl.py,sha256=ISls8DGZNHrH3Z7kmrzk3oQU3J8lgBg2V4KG09Zt3jA,9263
|
|
10
|
-
emu_sv/sv_config.py,sha256=J4yb9-Na5hAbShDySzPfbt0WXvL8JpfrTEikTK8nH9s,5943
|
|
11
|
-
emu_sv/time_evolution.py,sha256=_VH4f2RF6lGKzO08WxTYJ5Aw8_pTTMRKcyMnIuxH03I,13382
|
|
12
|
-
emu_sv/utils.py,sha256=t0nMDVo6DF5bQW-vbsyRMCmvkyNxCU-v0Enmns9aOAU,1151
|
|
13
|
-
emu_sv-2.3.0.dist-info/METADATA,sha256=yc7Z-DlF125zrnUeErZ24WrRnFKjbyPxeNAfz6RwjDI,3595
|
|
14
|
-
emu_sv-2.3.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
15
|
-
emu_sv-2.3.0.dist-info/RECORD,,
|
|
File without changes
|