essreduce 25.4.0__py3-none-any.whl → 25.5.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.
- ess/reduce/nexus/types.py +8 -14
- ess/reduce/nexus/workflow.py +2 -28
- ess/reduce/time_of_flight/__init__.py +22 -10
- ess/reduce/time_of_flight/eto_to_tof.py +244 -150
- ess/reduce/time_of_flight/fakes.py +2 -2
- ess/reduce/time_of_flight/interpolator_numba.py +41 -67
- ess/reduce/time_of_flight/interpolator_scipy.py +13 -14
- ess/reduce/time_of_flight/types.py +53 -27
- ess/reduce/time_of_flight/workflow.py +61 -0
- ess/reduce/utils.py +36 -0
- {essreduce-25.4.0.dist-info → essreduce-25.5.0.dist-info}/METADATA +3 -3
- {essreduce-25.4.0.dist-info → essreduce-25.5.0.dist-info}/RECORD +16 -14
- {essreduce-25.4.0.dist-info → essreduce-25.5.0.dist-info}/WHEEL +1 -1
- {essreduce-25.4.0.dist-info → essreduce-25.5.0.dist-info}/entry_points.txt +0 -0
- {essreduce-25.4.0.dist-info → essreduce-25.5.0.dist-info}/licenses/LICENSE +0 -0
- {essreduce-25.4.0.dist-info → essreduce-25.5.0.dist-info}/top_level.txt +0 -0
|
@@ -8,108 +8,82 @@ from numba import njit, prange
|
|
|
8
8
|
def interpolate(
|
|
9
9
|
x: np.ndarray,
|
|
10
10
|
y: np.ndarray,
|
|
11
|
-
z: np.ndarray,
|
|
12
11
|
values: np.ndarray,
|
|
13
12
|
xp: np.ndarray,
|
|
14
13
|
yp: np.ndarray,
|
|
15
|
-
|
|
14
|
+
xoffset: np.ndarray | None,
|
|
15
|
+
deltax: float,
|
|
16
16
|
fill_value: float,
|
|
17
17
|
out: np.ndarray,
|
|
18
18
|
):
|
|
19
19
|
"""
|
|
20
|
-
Linear interpolation of data on a
|
|
20
|
+
Linear interpolation of data on a 2D regular grid.
|
|
21
21
|
|
|
22
22
|
Parameters
|
|
23
23
|
----------
|
|
24
24
|
x:
|
|
25
|
-
1D array of grid edges along the x-axis. They must be linspaced.
|
|
25
|
+
1D array of grid edges along the x-axis (size nx). They must be linspaced.
|
|
26
26
|
y:
|
|
27
|
-
1D array of grid edges along the y-axis. They must be linspaced.
|
|
28
|
-
z:
|
|
29
|
-
1D array of grid edges along the z-axis. They must be linspaced.
|
|
27
|
+
1D array of grid edges along the y-axis (size ny). They must be linspaced.
|
|
30
28
|
values:
|
|
31
|
-
|
|
29
|
+
2D array of values on the grid. The shape must be (ny, nx).
|
|
32
30
|
xp:
|
|
33
31
|
1D array of x-coordinates where to interpolate (size N).
|
|
34
32
|
yp:
|
|
35
33
|
1D array of y-coordinates where to interpolate (size N).
|
|
36
|
-
|
|
37
|
-
1D array of
|
|
34
|
+
xoffset:
|
|
35
|
+
1D array of integer offsets to apply to the x-coordinates (size N).
|
|
36
|
+
deltax:
|
|
37
|
+
Multiplier to apply to the integer offsets (i.e. the step size).
|
|
38
38
|
fill_value:
|
|
39
39
|
Value to use for points outside of the grid.
|
|
40
40
|
out:
|
|
41
41
|
1D array where the interpolated values will be stored (size N).
|
|
42
42
|
"""
|
|
43
|
-
if not (len(xp) == len(yp) == len(
|
|
43
|
+
if not (len(xp) == len(yp) == len(out)):
|
|
44
44
|
raise ValueError("Interpolator: all input arrays must have the same size.")
|
|
45
45
|
|
|
46
|
+
nx = len(x)
|
|
47
|
+
ny = len(y)
|
|
46
48
|
npoints = len(xp)
|
|
47
49
|
xmin = x[0]
|
|
48
|
-
xmax = x[-1]
|
|
50
|
+
xmax = x[nx - 1]
|
|
49
51
|
ymin = y[0]
|
|
50
|
-
ymax = y[-1]
|
|
51
|
-
zmin = z[0]
|
|
52
|
-
zmax = z[-1]
|
|
52
|
+
ymax = y[ny - 1]
|
|
53
53
|
dx = x[1] - xmin
|
|
54
54
|
dy = y[1] - ymin
|
|
55
|
-
dz = z[1] - zmin
|
|
56
55
|
|
|
57
56
|
one_over_dx = 1.0 / dx
|
|
58
57
|
one_over_dy = 1.0 / dy
|
|
59
|
-
|
|
60
|
-
norm = one_over_dx * one_over_dy * one_over_dz
|
|
58
|
+
norm = one_over_dx * one_over_dy
|
|
61
59
|
|
|
62
60
|
for i in prange(npoints):
|
|
63
|
-
xx = xp[i]
|
|
61
|
+
xx = xp[i] + (xoffset[i] * deltax if xoffset is not None else 0.0)
|
|
64
62
|
yy = yp[i]
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (
|
|
68
|
-
(xx < xmin)
|
|
69
|
-
or (xx > xmax)
|
|
70
|
-
or (yy < ymin)
|
|
71
|
-
or (yy > ymax)
|
|
72
|
-
or (zz < zmin)
|
|
73
|
-
or (zz > zmax)
|
|
74
|
-
):
|
|
63
|
+
|
|
64
|
+
if (xx < xmin) or (xx > xmax) or (yy < ymin) or (yy > ymax):
|
|
75
65
|
out[i] = fill_value
|
|
76
66
|
|
|
77
67
|
else:
|
|
78
|
-
ix = int((xx - xmin) * one_over_dx)
|
|
79
|
-
iy = int((yy - ymin) * one_over_dy)
|
|
80
|
-
iz = int((zz - zmin) * one_over_dz)
|
|
68
|
+
ix = nx - 2 if xx == xmax else int((xx - xmin) * one_over_dx)
|
|
69
|
+
iy = ny - 2 if yy == ymax else int((yy - ymin) * one_over_dy)
|
|
81
70
|
|
|
82
|
-
y2 = y[iy + 1]
|
|
83
|
-
y1 = y[iy]
|
|
84
|
-
x2 = x[ix + 1]
|
|
85
71
|
x1 = x[ix]
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
a212 = values[iz + 1, iy, ix + 1]
|
|
95
|
-
a122 = values[iz + 1, iy + 1, ix]
|
|
96
|
-
a222 = values[iz + 1, iy + 1, ix + 1]
|
|
72
|
+
x2 = x[ix + 1]
|
|
73
|
+
y1 = y[iy]
|
|
74
|
+
y2 = y[iy + 1]
|
|
75
|
+
|
|
76
|
+
a11 = values[iy, ix]
|
|
77
|
+
a21 = values[iy, ix + 1]
|
|
78
|
+
a12 = values[iy + 1, ix]
|
|
79
|
+
a22 = values[iy + 1, ix + 1]
|
|
97
80
|
|
|
98
81
|
x2mxx = x2 - xx
|
|
99
82
|
xxmx1 = xx - x1
|
|
100
|
-
|
|
101
|
-
yymy1 = yy - y1
|
|
83
|
+
|
|
102
84
|
out[i] = (
|
|
103
|
-
(
|
|
104
|
-
* (
|
|
105
|
-
y2myy * (x2mxx * a111 + xxmx1 * a211)
|
|
106
|
-
+ yymy1 * (x2mxx * a121 + xxmx1 * a221)
|
|
107
|
-
)
|
|
108
|
-
+ (zz - z1)
|
|
109
|
-
* (
|
|
110
|
-
y2myy * (x2mxx * a112 + xxmx1 * a212)
|
|
111
|
-
+ yymy1 * (x2mxx * a122 + xxmx1 * a222)
|
|
112
|
-
)
|
|
85
|
+
(y2 - yy) * (x2mxx * a11 + xxmx1 * a21)
|
|
86
|
+
+ (yy - y1) * (x2mxx * a12 + xxmx1 * a22)
|
|
113
87
|
) * norm
|
|
114
88
|
|
|
115
89
|
|
|
@@ -118,12 +92,11 @@ class Interpolator:
|
|
|
118
92
|
self,
|
|
119
93
|
time_edges: np.ndarray,
|
|
120
94
|
distance_edges: np.ndarray,
|
|
121
|
-
pulse_edges: np.ndarray,
|
|
122
95
|
values: np.ndarray,
|
|
123
96
|
fill_value: float = np.nan,
|
|
124
97
|
):
|
|
125
98
|
"""
|
|
126
|
-
Interpolator for
|
|
99
|
+
Interpolator for 2D regular grid data (Numba implementation).
|
|
127
100
|
|
|
128
101
|
Parameters
|
|
129
102
|
----------
|
|
@@ -131,31 +104,32 @@ class Interpolator:
|
|
|
131
104
|
1D array of time edges.
|
|
132
105
|
distance_edges:
|
|
133
106
|
1D array of distance edges.
|
|
134
|
-
pulse_edges:
|
|
135
|
-
1D array of pulse edges.
|
|
136
107
|
values:
|
|
137
|
-
|
|
108
|
+
2D array of values on the grid. The shape must be (ny, nx).
|
|
138
109
|
fill_value:
|
|
139
110
|
Value to use for points outside of the grid.
|
|
140
111
|
"""
|
|
141
112
|
self.time_edges = time_edges
|
|
142
113
|
self.distance_edges = distance_edges
|
|
143
|
-
self.pulse_edges = pulse_edges
|
|
144
114
|
self.values = values
|
|
145
115
|
self.fill_value = fill_value
|
|
146
116
|
|
|
147
117
|
def __call__(
|
|
148
|
-
self,
|
|
118
|
+
self,
|
|
119
|
+
times: np.ndarray,
|
|
120
|
+
distances: np.ndarray,
|
|
121
|
+
pulse_period: float = 0.0,
|
|
122
|
+
pulse_index: np.ndarray | None = None,
|
|
149
123
|
) -> np.ndarray:
|
|
150
124
|
out = np.empty_like(times)
|
|
151
125
|
interpolate(
|
|
152
126
|
x=self.time_edges,
|
|
153
127
|
y=self.distance_edges,
|
|
154
|
-
z=self.pulse_edges,
|
|
155
128
|
values=self.values,
|
|
156
129
|
xp=times,
|
|
157
130
|
yp=distances,
|
|
158
|
-
|
|
131
|
+
xoffset=pulse_index,
|
|
132
|
+
deltax=pulse_period,
|
|
159
133
|
fill_value=self.fill_value,
|
|
160
134
|
out=out,
|
|
161
135
|
)
|
|
@@ -9,7 +9,6 @@ class Interpolator:
|
|
|
9
9
|
self,
|
|
10
10
|
time_edges: np.ndarray,
|
|
11
11
|
distance_edges: np.ndarray,
|
|
12
|
-
pulse_edges: np.ndarray,
|
|
13
12
|
values: np.ndarray,
|
|
14
13
|
method: str = "linear",
|
|
15
14
|
bounds_error: bool = False,
|
|
@@ -17,18 +16,16 @@ class Interpolator:
|
|
|
17
16
|
**kwargs,
|
|
18
17
|
):
|
|
19
18
|
"""
|
|
20
|
-
Interpolator for
|
|
19
|
+
Interpolator for 2D regular grid data (SciPy implementation).
|
|
21
20
|
|
|
22
21
|
Parameters
|
|
23
22
|
----------
|
|
24
23
|
time_edges:
|
|
25
|
-
1D array of time edges.
|
|
24
|
+
1D array of time edges (length N_time).
|
|
26
25
|
distance_edges:
|
|
27
|
-
1D array of distance edges.
|
|
28
|
-
pulse_edges:
|
|
29
|
-
1D array of pulse edges.
|
|
26
|
+
1D array of distance edges (length N_dist).
|
|
30
27
|
values:
|
|
31
|
-
|
|
28
|
+
2D array of values on the grid. The shape must be (N_dist, N_time).
|
|
32
29
|
method:
|
|
33
30
|
Method of interpolation. Default is "linear".
|
|
34
31
|
bounds_error:
|
|
@@ -42,11 +39,7 @@ class Interpolator:
|
|
|
42
39
|
from scipy.interpolate import RegularGridInterpolator
|
|
43
40
|
|
|
44
41
|
self._interp = RegularGridInterpolator(
|
|
45
|
-
(
|
|
46
|
-
pulse_edges,
|
|
47
|
-
distance_edges,
|
|
48
|
-
time_edges,
|
|
49
|
-
),
|
|
42
|
+
(distance_edges, time_edges),
|
|
50
43
|
values,
|
|
51
44
|
method=method,
|
|
52
45
|
bounds_error=bounds_error,
|
|
@@ -55,6 +48,12 @@ class Interpolator:
|
|
|
55
48
|
)
|
|
56
49
|
|
|
57
50
|
def __call__(
|
|
58
|
-
self,
|
|
51
|
+
self,
|
|
52
|
+
times: np.ndarray,
|
|
53
|
+
distances: np.ndarray,
|
|
54
|
+
pulse_period: float = 0.0,
|
|
55
|
+
pulse_index: np.ndarray | None = None,
|
|
59
56
|
) -> np.ndarray:
|
|
60
|
-
|
|
57
|
+
if pulse_index is not None:
|
|
58
|
+
times = times + (pulse_index * pulse_period)
|
|
59
|
+
return self._interp((distances, times))
|
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
from dataclasses import dataclass
|
|
5
5
|
from typing import NewType
|
|
6
6
|
|
|
7
|
+
import sciline as sl
|
|
7
8
|
import scipp as sc
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
"""
|
|
11
|
-
Total length of the flight path from the source to the detector.
|
|
12
|
-
"""
|
|
10
|
+
from ..nexus.types import MonitorType, RunType
|
|
13
11
|
|
|
14
12
|
|
|
15
13
|
@dataclass
|
|
@@ -107,30 +105,58 @@ When pulse-skipping, the offset of the first pulse in the stride. This is typica
|
|
|
107
105
|
zero but can be a small integer < pulse_stride. If None, a guess is made.
|
|
108
106
|
"""
|
|
109
107
|
|
|
110
|
-
RawData = NewType("RawData", sc.DataArray)
|
|
111
|
-
"""
|
|
112
|
-
Raw detector data loaded from a NeXus file, e.g., NXdetector containing NXevent_data.
|
|
113
|
-
"""
|
|
114
108
|
|
|
115
|
-
|
|
116
|
-
"""
|
|
117
|
-
Detector data with time-of-flight coordinate.
|
|
118
|
-
"""
|
|
109
|
+
class DetectorLtotal(sl.Scope[RunType, sc.Variable], sc.Variable):
|
|
110
|
+
"""Total path length of neutrons from source to detector (L1 + L2)."""
|
|
119
111
|
|
|
120
|
-
ResampledTofData = NewType("ResampledTofData", sc.DataArray)
|
|
121
|
-
"""
|
|
122
|
-
Histogrammed detector data with time-of-flight coordinate, that has been resampled.
|
|
123
112
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
overlap between subframes).
|
|
127
|
-
We thus resample the data to ensure that the bin edges are sorted.
|
|
128
|
-
It makes use of the ``to_events`` helper which generates a number of events in each
|
|
129
|
-
bin with a uniform distribution. The new events are then histogrammed using a set of
|
|
130
|
-
sorted bin edges to yield a new histogram with sorted bin edges.
|
|
113
|
+
class MonitorLtotal(sl.Scope[RunType, MonitorType, sc.Variable], sc.Variable):
|
|
114
|
+
"""Total path length of neutrons from source to monitor."""
|
|
131
115
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
116
|
+
|
|
117
|
+
class DetectorTofData(sl.Scope[RunType, sc.DataArray], sc.DataArray):
|
|
118
|
+
"""Detector data with time-of-flight coordinate."""
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
class MonitorTofData(sl.Scope[RunType, MonitorType, sc.DataArray], sc.DataArray):
|
|
122
|
+
"""Monitor data with time-of-flight coordinate."""
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class ResampledDetectorTofData(sl.Scope[RunType, sc.DataArray], sc.DataArray):
|
|
126
|
+
"""
|
|
127
|
+
Histogrammed detector data with time-of-flight coordinate, that has been resampled.
|
|
128
|
+
|
|
129
|
+
Histogrammed data that has been converted to `tof` will typically have
|
|
130
|
+
unsorted bin edges (due to either wrapping of `time_of_flight` or wavelength
|
|
131
|
+
overlap between subframes).
|
|
132
|
+
We thus resample the data to ensure that the bin edges are sorted.
|
|
133
|
+
It makes use of the ``to_events`` helper which generates a number of events in each
|
|
134
|
+
bin with a uniform distribution. The new events are then histogrammed using a set of
|
|
135
|
+
sorted bin edges to yield a new histogram with sorted bin edges.
|
|
136
|
+
|
|
137
|
+
WARNING:
|
|
138
|
+
This function is highly experimental, has limitations and should be used with
|
|
139
|
+
caution. It is a workaround to the issue that rebinning data with unsorted bin
|
|
140
|
+
edges is not supported in scipp.
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class ResampledMonitorTofData(
|
|
145
|
+
sl.Scope[RunType, MonitorType, sc.DataArray], sc.DataArray
|
|
146
|
+
):
|
|
147
|
+
"""
|
|
148
|
+
Histogrammed monitor data with time-of-flight coordinate, that has been resampled.
|
|
149
|
+
|
|
150
|
+
Histogrammed data that has been converted to `tof` will typically have
|
|
151
|
+
unsorted bin edges (due to either wrapping of `time_of_flight` or wavelength
|
|
152
|
+
overlap between subframes).
|
|
153
|
+
We thus resample the data to ensure that the bin edges are sorted.
|
|
154
|
+
It makes use of the ``to_events`` helper which generates a number of events in each
|
|
155
|
+
bin with a uniform distribution. The new events are then histogrammed using a set of
|
|
156
|
+
sorted bin edges to yield a new histogram with sorted bin edges.
|
|
157
|
+
|
|
158
|
+
WARNING:
|
|
159
|
+
This function is highly experimental, has limitations and should be used with
|
|
160
|
+
caution. It is a workaround to the issue that rebinning data with unsorted bin
|
|
161
|
+
edges is not supported in scipp.
|
|
162
|
+
"""
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
# Copyright (c) 2025 Scipp contributors (https://github.com/scipp)
|
|
3
|
+
from collections.abc import Iterable
|
|
4
|
+
|
|
5
|
+
import sciline
|
|
6
|
+
|
|
7
|
+
from ..nexus import GenericNeXusWorkflow
|
|
8
|
+
from ..utils import prune_type_vars
|
|
9
|
+
from .eto_to_tof import default_parameters, providers
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def GenericTofWorkflow(
|
|
13
|
+
*,
|
|
14
|
+
run_types: Iterable[sciline.typing.Key] | None = None,
|
|
15
|
+
monitor_types: Iterable[sciline.typing.Key] | None = None,
|
|
16
|
+
) -> sciline.Pipeline:
|
|
17
|
+
"""
|
|
18
|
+
Generic workflow for computing the neutron time-of-flight for detector and monitor
|
|
19
|
+
data.
|
|
20
|
+
This workflow builds on the ``GenericNeXusWorkflow`` and computes time-of-flight
|
|
21
|
+
from a lookup table that is created from the chopper settings, detector Ltotal and
|
|
22
|
+
the neutron time-of-arrival.
|
|
23
|
+
|
|
24
|
+
It is possible to limit which run types and monitor types
|
|
25
|
+
are supported by the returned workflow.
|
|
26
|
+
This is useful to reduce the size of the workflow and make it easier to inspect.
|
|
27
|
+
Make sure to add *all* required run types and monitor types when using this feature.
|
|
28
|
+
|
|
29
|
+
Attention
|
|
30
|
+
---------
|
|
31
|
+
Filtering by run type and monitor type does not work with nested type vars.
|
|
32
|
+
E.g., if you have a type like ``Outer[Inner[RunType]]``, this type and its
|
|
33
|
+
provider will be removed.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
run_types:
|
|
38
|
+
List of run types to include in the workflow. If not provided, all run types
|
|
39
|
+
are included.
|
|
40
|
+
Must be a possible value of :class:`ess.reduce.nexus.types.RunType`.
|
|
41
|
+
monitor_types:
|
|
42
|
+
List of monitor types to include in the workflow. If not provided, all monitor
|
|
43
|
+
types are included.
|
|
44
|
+
Must be a possible value of :class:`ess.reduce.nexus.types.MonitorType`.
|
|
45
|
+
|
|
46
|
+
Returns
|
|
47
|
+
-------
|
|
48
|
+
:
|
|
49
|
+
The workflow.
|
|
50
|
+
"""
|
|
51
|
+
wf = GenericNeXusWorkflow(run_types=run_types, monitor_types=monitor_types)
|
|
52
|
+
|
|
53
|
+
for provider in providers():
|
|
54
|
+
wf.insert(provider)
|
|
55
|
+
for key, value in default_parameters().items():
|
|
56
|
+
wf[key] = value
|
|
57
|
+
|
|
58
|
+
if run_types is not None or monitor_types is not None:
|
|
59
|
+
prune_type_vars(wf, run_types=run_types, monitor_types=monitor_types)
|
|
60
|
+
|
|
61
|
+
return wf
|
ess/reduce/utils.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
# Copyright (c) 2025 Scipp contributors (https://github.com/scipp)
|
|
3
|
+
|
|
4
|
+
from collections.abc import Iterable
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import sciline
|
|
8
|
+
|
|
9
|
+
from .nexus.types import MonitorType, RunType
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def prune_type_vars(
|
|
13
|
+
workflow: sciline.Pipeline,
|
|
14
|
+
*,
|
|
15
|
+
run_types: Iterable[sciline.typing.Key] | None,
|
|
16
|
+
monitor_types: Iterable[sciline.typing.Key] | None,
|
|
17
|
+
) -> None:
|
|
18
|
+
# Remove all nodes that use a run type or monitor types that is
|
|
19
|
+
# not listed in the function arguments.
|
|
20
|
+
excluded_run_types = excluded_type_args(RunType, run_types)
|
|
21
|
+
excluded_monitor_types = excluded_type_args(MonitorType, monitor_types)
|
|
22
|
+
excluded_types = excluded_run_types | excluded_monitor_types
|
|
23
|
+
|
|
24
|
+
graph = workflow.underlying_graph
|
|
25
|
+
to_remove = [
|
|
26
|
+
node for node in graph if excluded_types & set(getattr(node, "__args__", set()))
|
|
27
|
+
]
|
|
28
|
+
graph.remove_nodes_from(to_remove)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def excluded_type_args(
|
|
32
|
+
type_var: Any, keep: Iterable[sciline.typing.Key] | None
|
|
33
|
+
) -> set[sciline.typing.Key]:
|
|
34
|
+
if keep is None:
|
|
35
|
+
return set()
|
|
36
|
+
return set(type_var.__constraints__) - set(keep)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: essreduce
|
|
3
|
-
Version: 25.
|
|
3
|
+
Version: 25.5.0
|
|
4
4
|
Summary: Common data reduction tools for the ESS facility
|
|
5
5
|
Author: Scipp contributors
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -51,7 +51,7 @@ Classifier: Typing :: Typed
|
|
|
51
51
|
Requires-Python: >=3.10
|
|
52
52
|
Description-Content-Type: text/markdown
|
|
53
53
|
License-File: LICENSE
|
|
54
|
-
Requires-Dist: sciline>=
|
|
54
|
+
Requires-Dist: sciline>=25.04.1
|
|
55
55
|
Requires-Dist: scipp>=25.01.0
|
|
56
56
|
Requires-Dist: scippneutron>=25.02.0
|
|
57
57
|
Requires-Dist: scippnexus>=24.11.0
|
|
@@ -61,7 +61,7 @@ Requires-Dist: numba; extra == "test"
|
|
|
61
61
|
Requires-Dist: pooch; extra == "test"
|
|
62
62
|
Requires-Dist: pytest; extra == "test"
|
|
63
63
|
Requires-Dist: scipy>=1.7.0; extra == "test"
|
|
64
|
-
Requires-Dist: tof>=25.
|
|
64
|
+
Requires-Dist: tof>=25.05.0; extra == "test"
|
|
65
65
|
Dynamic: license-file
|
|
66
66
|
|
|
67
67
|
[](CODE_OF_CONDUCT.md)
|
|
@@ -6,6 +6,7 @@ ess/reduce/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
6
6
|
ess/reduce/streaming.py,sha256=TBttQV5WdSpUKh38J0pdv53seMWtUFswxd6-ltaZb_M,17403
|
|
7
7
|
ess/reduce/ui.py,sha256=zmorAbDwX1cU3ygDT--OP58o0qU7OBcmJz03jPeYSLA,10884
|
|
8
8
|
ess/reduce/uncertainty.py,sha256=LR4O6ApB6Z-W9gC_XW0ajupl8yFG-du0eee1AX_R-gk,6990
|
|
9
|
+
ess/reduce/utils.py,sha256=RBAfJRNil6JjVF-jPaxeL0ssEEfPBBQEZ3ObEorpDLo,1132
|
|
9
10
|
ess/reduce/workflow.py,sha256=sL34T_2Cjl_8iFlegujxI9VyOUwo6erVC8pOXnfWgYw,3060
|
|
10
11
|
ess/reduce/live/__init__.py,sha256=jPQVhihRVNtEDrE20PoKkclKV2aBF1lS7cCHootgFgI,204
|
|
11
12
|
ess/reduce/live/raw.py,sha256=66qV0G2rP8gK5tXuk-syTlDLE2jT3ehfmSnET7Xzfd0,24392
|
|
@@ -15,17 +16,18 @@ ess/reduce/nexus/__init__.py,sha256=59bxKkNYg8DYcSykNvH6nCa5SYchJC4SbgZEKhkNdYc,
|
|
|
15
16
|
ess/reduce/nexus/_nexus_loader.py,sha256=5N48AMJx1AaFZb6WZPPbVKUlXyFMVVtZrn7Bae57O3A,19842
|
|
16
17
|
ess/reduce/nexus/json_generator.py,sha256=ME2Xn8L7Oi3uHJk9ZZdCRQTRX-OV_wh9-DJn07Alplk,2529
|
|
17
18
|
ess/reduce/nexus/json_nexus.py,sha256=QrVc0p424nZ5dHX9gebAJppTw6lGZq9404P_OFl1giA,10282
|
|
18
|
-
ess/reduce/nexus/types.py,sha256=
|
|
19
|
-
ess/reduce/nexus/workflow.py,sha256=
|
|
19
|
+
ess/reduce/nexus/types.py,sha256=vTQD4oQ5JKBHAYy9LWFICSo-dhVi3wX5IinMgjRDtF8,9806
|
|
20
|
+
ess/reduce/nexus/workflow.py,sha256=zrBQGNLUxmvqXewe9uNUg9aP43_glfFD6nh5VGAtBK4,23456
|
|
20
21
|
ess/reduce/scripts/grow_nexus.py,sha256=hET3h06M0xlJd62E3palNLFvJMyNax2kK4XyJcOhl-I,3387
|
|
21
|
-
ess/reduce/time_of_flight/__init__.py,sha256=
|
|
22
|
-
ess/reduce/time_of_flight/eto_to_tof.py,sha256=
|
|
23
|
-
ess/reduce/time_of_flight/fakes.py,sha256=
|
|
24
|
-
ess/reduce/time_of_flight/interpolator_numba.py,sha256=
|
|
25
|
-
ess/reduce/time_of_flight/interpolator_scipy.py,sha256=
|
|
22
|
+
ess/reduce/time_of_flight/__init__.py,sha256=v86c3zNTMMqZoR9eHaK0Q-JnzsbOI6XsBGI3mgy2CiU,1469
|
|
23
|
+
ess/reduce/time_of_flight/eto_to_tof.py,sha256=ckXoSrltXdciYwipyUkF-DVtbsz2_XSLZvX2qJ_d8Bs,28238
|
|
24
|
+
ess/reduce/time_of_flight/fakes.py,sha256=0gtbSX3ZQilaM4ZP5dMr3fqbnhpyoVsZX2YEb8GgREE,4489
|
|
25
|
+
ess/reduce/time_of_flight/interpolator_numba.py,sha256=wh2YS3j2rOu30v1Ok3xNHcwS7t8eEtZyZvbfXOCtgrQ,3835
|
|
26
|
+
ess/reduce/time_of_flight/interpolator_scipy.py,sha256=_InoAPuMm2qhJKZQBAHOGRFqtvvuQ8TStoN7j_YgS4M,1853
|
|
26
27
|
ess/reduce/time_of_flight/simulation.py,sha256=cIF_nWkLQlcWUCW2_wvWBU2ocg_8CSfOnfkoqdLdUgs,2923
|
|
27
28
|
ess/reduce/time_of_flight/to_events.py,sha256=w9mHpnWd3vwN2ouob-GK_1NPrTjCaOzPuC2QuEey-m0,4342
|
|
28
|
-
ess/reduce/time_of_flight/types.py,sha256=
|
|
29
|
+
ess/reduce/time_of_flight/types.py,sha256=xhziZQaCB4XAxvVopHHp2DZSBj7PUt-xgPzEDpni05g,6321
|
|
30
|
+
ess/reduce/time_of_flight/workflow.py,sha256=-g9IyAz7sNrgL-5RZLUTlfjTb2YFej1Xig6GiC7c1bI,2156
|
|
29
31
|
ess/reduce/widgets/__init__.py,sha256=SoSHBv8Dc3QXV9HUvPhjSYWMwKTGYZLpsWwsShIO97Q,5325
|
|
30
32
|
ess/reduce/widgets/_base.py,sha256=_wN3FOlXgx_u0c-A_3yyoIH-SdUvDENGgquh9S-h5GI,4852
|
|
31
33
|
ess/reduce/widgets/_binedges_widget.py,sha256=ZCQsGjYHnJr9GFUn7NjoZc1CdsnAzm_fMzyF-fTKKVY,2785
|
|
@@ -38,9 +40,9 @@ ess/reduce/widgets/_spinner.py,sha256=2VY4Fhfa7HMXox2O7UbofcdKsYG-AJGrsgGJB85nDX
|
|
|
38
40
|
ess/reduce/widgets/_string_widget.py,sha256=iPAdfANyXHf-nkfhgkyH6gQDklia0LebLTmwi3m-iYQ,1482
|
|
39
41
|
ess/reduce/widgets/_switchable_widget.py,sha256=fjKz99SKLhIF1BLgGVBSKKn3Lu_jYBwDYGeAjbJY3Q8,2390
|
|
40
42
|
ess/reduce/widgets/_vector_widget.py,sha256=aTaBqCFHZQhrIoX6-sSqFWCPePEW8HQt5kUio8jP1t8,1203
|
|
41
|
-
essreduce-25.
|
|
42
|
-
essreduce-25.
|
|
43
|
-
essreduce-25.
|
|
44
|
-
essreduce-25.
|
|
45
|
-
essreduce-25.
|
|
46
|
-
essreduce-25.
|
|
43
|
+
essreduce-25.5.0.dist-info/licenses/LICENSE,sha256=nVEiume4Qj6jMYfSRjHTM2jtJ4FGu0g-5Sdh7osfEYw,1553
|
|
44
|
+
essreduce-25.5.0.dist-info/METADATA,sha256=yfoZMb19ayIQyCRk5_WPEuvrWGAYApWIs4Wr-69nwO8,3768
|
|
45
|
+
essreduce-25.5.0.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
|
|
46
|
+
essreduce-25.5.0.dist-info/entry_points.txt,sha256=PMZOIYzCifHMTe4pK3HbhxUwxjFaZizYlLD0td4Isb0,66
|
|
47
|
+
essreduce-25.5.0.dist-info/top_level.txt,sha256=0JxTCgMKPLKtp14wb1-RKisQPQWX7i96innZNvHBr-s,4
|
|
48
|
+
essreduce-25.5.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|