jaxspec 0.3.3__py3-none-any.whl → 0.3.4__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.
- jaxspec/analysis/results.py +29 -16
- jaxspec/data/__init__.py +2 -0
- jaxspec/fit/_fitter.py +6 -1
- jaxspec/model/additive.py +17 -21
- jaxspec/model/multiplicative.py +54 -3
- {jaxspec-0.3.3.dist-info → jaxspec-0.3.4.dist-info}/METADATA +3 -3
- {jaxspec-0.3.3.dist-info → jaxspec-0.3.4.dist-info}/RECORD +10 -10
- {jaxspec-0.3.3.dist-info → jaxspec-0.3.4.dist-info}/WHEEL +0 -0
- {jaxspec-0.3.3.dist-info → jaxspec-0.3.4.dist-info}/entry_points.txt +0 -0
- {jaxspec-0.3.3.dist-info → jaxspec-0.3.4.dist-info}/licenses/LICENSE.md +0 -0
jaxspec/analysis/results.py
CHANGED
|
@@ -168,7 +168,8 @@ class FitResult:
|
|
|
168
168
|
e_max: float,
|
|
169
169
|
unit: Unit = u.photon / u.cm**2 / u.s,
|
|
170
170
|
register: bool = False,
|
|
171
|
-
n_points: int =
|
|
171
|
+
n_points: int = 5,
|
|
172
|
+
n_grid: int = 1_000,
|
|
172
173
|
) -> ArrayLike:
|
|
173
174
|
"""
|
|
174
175
|
Compute the unfolded photon flux in a given energy band. The flux is then added to
|
|
@@ -179,23 +180,26 @@ class FitResult:
|
|
|
179
180
|
e_max: The upper bound of the energy band in observer frame.
|
|
180
181
|
unit: The unit of the photon flux.
|
|
181
182
|
register: Whether to register the flux with the other posterior parameters.
|
|
182
|
-
n_points: The number of points to use for computing the unfolded spectrum.
|
|
183
|
+
n_points: The number of points per bin to use for computing the unfolded spectrum.
|
|
184
|
+
n_grid: The number of grid points to use for computing the unfolded spectrum.
|
|
183
185
|
|
|
184
186
|
!!! warning
|
|
185
187
|
Computation of the folded flux is not implemented yet. Feel free to open an
|
|
186
188
|
[issue](https://github.com/renecotyfanboy/jaxspec/issues) in the GitHub repository.
|
|
187
189
|
"""
|
|
188
190
|
|
|
191
|
+
energy_grid = np.linspace(e_min, e_max, n_grid)
|
|
192
|
+
|
|
189
193
|
@jax.jit
|
|
190
194
|
@jnp.vectorize
|
|
191
195
|
def vectorized_flux(*pars):
|
|
192
196
|
parameters_pytree = jax.tree.unflatten(pytree_def, pars)
|
|
193
197
|
return self.model.photon_flux(
|
|
194
|
-
parameters_pytree,
|
|
195
|
-
)
|
|
198
|
+
parameters_pytree, energy_grid[:-1], energy_grid[1:], n_points=n_points
|
|
199
|
+
)
|
|
196
200
|
|
|
197
201
|
flat_tree, pytree_def = jax.tree.flatten(self.input_parameters)
|
|
198
|
-
flux = vectorized_flux(*flat_tree)
|
|
202
|
+
flux = vectorized_flux(*flat_tree).sum(axis=-1) # Sum over all bins
|
|
199
203
|
conversion_factor = float((u.photon / u.cm**2 / u.s).to(unit))
|
|
200
204
|
value = np.asarray(flux * conversion_factor)
|
|
201
205
|
|
|
@@ -220,7 +224,8 @@ class FitResult:
|
|
|
220
224
|
e_max: float,
|
|
221
225
|
unit: Unit = u.erg / u.cm**2 / u.s,
|
|
222
226
|
register: bool = False,
|
|
223
|
-
n_points: int =
|
|
227
|
+
n_points: int = 5,
|
|
228
|
+
n_grid: int = 1_000,
|
|
224
229
|
) -> ArrayLike:
|
|
225
230
|
"""
|
|
226
231
|
Compute the unfolded energy flux in a given energy band. The flux is then added to
|
|
@@ -231,26 +236,29 @@ class FitResult:
|
|
|
231
236
|
e_max: The upper bound of the energy band in observer frame.
|
|
232
237
|
unit: The unit of the energy flux.
|
|
233
238
|
register: Whether to register the flux with the other posterior parameters.
|
|
234
|
-
n_points: The number of points to use for computing the unfolded spectrum.
|
|
239
|
+
n_points: The number of points per bin to use for computing the unfolded spectrum.
|
|
240
|
+
n_grid: The number of grid points to use for computing the unfolded spectrum.
|
|
235
241
|
|
|
236
242
|
!!! warning
|
|
237
243
|
Computation of the folded flux is not implemented yet. Feel free to open an
|
|
238
244
|
[issue](https://github.com/renecotyfanboy/jaxspec/issues) in the GitHub repository.
|
|
239
245
|
"""
|
|
240
246
|
|
|
247
|
+
energy_grid = np.linspace(e_min, e_max, n_grid)
|
|
248
|
+
|
|
241
249
|
@jax.jit
|
|
242
250
|
@jnp.vectorize
|
|
243
251
|
def vectorized_flux(*pars):
|
|
244
252
|
parameters_pytree = jax.tree.unflatten(pytree_def, pars)
|
|
245
253
|
return self.model.energy_flux(
|
|
246
|
-
parameters_pytree,
|
|
247
|
-
)
|
|
254
|
+
parameters_pytree, energy_grid[:-1], energy_grid[1:], n_points=n_points
|
|
255
|
+
)
|
|
248
256
|
|
|
249
257
|
flat_tree, pytree_def = jax.tree.flatten(self.input_parameters)
|
|
250
|
-
flux = vectorized_flux(*flat_tree)
|
|
258
|
+
flux = vectorized_flux(*flat_tree).sum(axis=-1) # Sum over all bins
|
|
251
259
|
conversion_factor = float((u.keV / u.cm**2 / u.s).to(unit))
|
|
252
260
|
value = np.asarray(flux * conversion_factor)
|
|
253
|
-
|
|
261
|
+
# TODO : ADD TESTS WITH BACKGROUND
|
|
254
262
|
if register:
|
|
255
263
|
self.inference_data.posterior[f"mod/~/energy_flux_{e_min:.1f}_{e_max:.1f}"] = (
|
|
256
264
|
xr.DataArray(
|
|
@@ -276,7 +284,8 @@ class FitResult:
|
|
|
276
284
|
cosmology: Cosmology = Planck18,
|
|
277
285
|
unit: Unit = u.erg / u.s,
|
|
278
286
|
register: bool = False,
|
|
279
|
-
n_points=
|
|
287
|
+
n_points: int = 5,
|
|
288
|
+
n_grid: int = 1_000,
|
|
280
289
|
) -> ArrayLike:
|
|
281
290
|
"""
|
|
282
291
|
Compute the luminosity of the source specifying its redshift. The luminosity is then added to
|
|
@@ -290,8 +299,12 @@ class FitResult:
|
|
|
290
299
|
cosmology: Chosen cosmology.
|
|
291
300
|
unit: The unit of the luminosity.
|
|
292
301
|
register: Whether to register the flux with the other posterior parameters.
|
|
302
|
+
n_points: The number of points per bin to use for computing the unfolded spectrum.
|
|
303
|
+
n_grid: The number of grid points to use for computing the unfolded spectrum.
|
|
293
304
|
"""
|
|
294
305
|
|
|
306
|
+
energy_grid = np.linspace(e_min, e_max, n_grid)
|
|
307
|
+
|
|
295
308
|
if not observer_frame:
|
|
296
309
|
raise NotImplementedError()
|
|
297
310
|
|
|
@@ -312,13 +325,13 @@ class FitResult:
|
|
|
312
325
|
parameters_pytree = jax.tree.unflatten(pytree_def, pars)
|
|
313
326
|
return self.model.energy_flux(
|
|
314
327
|
parameters_pytree,
|
|
315
|
-
|
|
316
|
-
|
|
328
|
+
energy_grid[:-1] * (1 + redshift),
|
|
329
|
+
energy_grid[1:] * (1 + redshift),
|
|
317
330
|
n_points=n_points,
|
|
318
|
-
)
|
|
331
|
+
)
|
|
319
332
|
|
|
320
333
|
flat_tree, pytree_def = jax.tree.flatten(self.input_parameters)
|
|
321
|
-
flux = vectorized_flux(*flat_tree) * (u.keV / u.cm**2 / u.s)
|
|
334
|
+
flux = vectorized_flux(*flat_tree).sum(axis=-1) * (u.keV / u.cm**2 / u.s)
|
|
322
335
|
value = np.asarray(
|
|
323
336
|
(flux * (4 * np.pi * cosmology.luminosity_distance(redshift) ** 2)).to(unit)
|
|
324
337
|
)
|
jaxspec/data/__init__.py
CHANGED
|
@@ -6,5 +6,7 @@ from .observation import Observation
|
|
|
6
6
|
|
|
7
7
|
u.add_enabled_aliases({"counts": u.count})
|
|
8
8
|
u.add_enabled_aliases({"channel": u.dimensionless_unscaled})
|
|
9
|
+
u.add_enabled_aliases({"ADU": u.dimensionless_unscaled}) # Appears in SIXTE outputs
|
|
10
|
+
|
|
9
11
|
# Arbitrary units are found in .rsp files , let's hope it is compatible with what we would expect as the rmf x arf
|
|
10
12
|
# u.add_enabled_aliases({"au": u.dimensionless_unscaled})
|
jaxspec/fit/_fitter.py
CHANGED
|
@@ -15,6 +15,7 @@ from numpyro.infer import AIES, ESS, MCMC, NUTS, SVI, Predictive, Trace_ELBO
|
|
|
15
15
|
from numpyro.infer.autoguide import AutoMultivariateNormal
|
|
16
16
|
|
|
17
17
|
from ..analysis.results import FitResult
|
|
18
|
+
from ..model.background import SubtractedBackground
|
|
18
19
|
from ._bayesian_model import BayesianModel
|
|
19
20
|
|
|
20
21
|
|
|
@@ -58,7 +59,11 @@ class BayesianModelFitter(BayesianModel, ABC):
|
|
|
58
59
|
log_likelihood["obs/~/all"] = concatenate(
|
|
59
60
|
[ll for k, ll in log_likelihood.items() if "obs" in k], axis=1
|
|
60
61
|
)
|
|
61
|
-
|
|
62
|
+
|
|
63
|
+
# Subtracted background is not fitted so there is no likelihood
|
|
64
|
+
if self.background_model is not None and not isinstance(
|
|
65
|
+
self.background_model, SubtractedBackground
|
|
66
|
+
):
|
|
62
67
|
log_likelihood["bkg/~/all"] = concatenate(
|
|
63
68
|
[ll for k, ll in log_likelihood.items() if "bkg" in k], axis=1
|
|
64
69
|
)
|
jaxspec/model/additive.py
CHANGED
|
@@ -34,8 +34,10 @@ class Powerlaw(AdditiveComponent):
|
|
|
34
34
|
self.alpha = nnx.Param(1.7)
|
|
35
35
|
self.norm = nnx.Param(1e-4)
|
|
36
36
|
|
|
37
|
-
def
|
|
38
|
-
return
|
|
37
|
+
def integrated_continuum(self, e_low, e_high):
|
|
38
|
+
return (
|
|
39
|
+
self.norm / (1 - self.alpha) * (e_high ** (1 - self.alpha) - e_low ** (1 - self.alpha))
|
|
40
|
+
)
|
|
39
41
|
|
|
40
42
|
|
|
41
43
|
class Additiveconstant(AdditiveComponent):
|
|
@@ -166,28 +168,22 @@ class Gauss(AdditiveComponent):
|
|
|
166
168
|
self.sigma = nnx.Param(1e-2)
|
|
167
169
|
self.norm = nnx.Param(1.0)
|
|
168
170
|
|
|
169
|
-
def
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
def integrated_continuum(self, e_low, e_high):
|
|
172
|
+
upper = jsp.stats.norm.cdf(
|
|
173
|
+
e_high,
|
|
174
|
+
loc=jnp.asarray(self.El),
|
|
175
|
+
scale=jnp.asarray(self.sigma),
|
|
174
176
|
)
|
|
175
177
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
e_high,
|
|
181
|
-
loc=jnp.asarray(self.El),
|
|
182
|
-
scale=jnp.asarray(self.sigma),
|
|
183
|
-
)
|
|
184
|
-
- jsp.stats.norm.cdf(
|
|
185
|
-
e_low,
|
|
186
|
-
loc=jnp.asarray(self.El),
|
|
187
|
-
scale=jnp.asarray(self.sigma),
|
|
188
|
-
) #/ (1 - jsp.special.erf(- self.El / (self.sigma * jnp.sqrt(2))))
|
|
178
|
+
lower = jsp.stats.norm.cdf(
|
|
179
|
+
e_low,
|
|
180
|
+
loc=jnp.asarray(self.El),
|
|
181
|
+
scale=jnp.asarray(self.sigma),
|
|
189
182
|
)
|
|
190
|
-
|
|
183
|
+
|
|
184
|
+
factor = 2 / (1 - jsp.special.erf(-self.El / (self.sigma * jnp.sqrt(2))))
|
|
185
|
+
|
|
186
|
+
return self.norm * (upper - lower) * factor
|
|
191
187
|
|
|
192
188
|
|
|
193
189
|
class Cutoffpl(AdditiveComponent):
|
jaxspec/model/multiplicative.py
CHANGED
|
@@ -49,7 +49,9 @@ class Expfac(MultiplicativeComponent):
|
|
|
49
49
|
self.E_c = nnx.Param(1.0)
|
|
50
50
|
|
|
51
51
|
def factor(self, energy):
|
|
52
|
-
return jnp.where(
|
|
52
|
+
return jnp.where(
|
|
53
|
+
energy >= self.E_c, 1.0 + self.A * jnp.exp(-self.f * energy), 1.0
|
|
54
|
+
)
|
|
53
55
|
|
|
54
56
|
|
|
55
57
|
class Tbabs(MultiplicativeComponent):
|
|
@@ -91,6 +93,49 @@ class Tbabs(MultiplicativeComponent):
|
|
|
91
93
|
return jnp.exp(-self.nh * sigma)
|
|
92
94
|
|
|
93
95
|
|
|
96
|
+
class zTbabs(MultiplicativeComponent):
|
|
97
|
+
r"""
|
|
98
|
+
The redshifted Tuebingen-Boulder ISM absorption model. See `Tbabs` for more details.
|
|
99
|
+
From Xspec manual:
|
|
100
|
+
This model assumes that 20% of the hydrogen is molecular
|
|
101
|
+
and that there is NO MATERIAL IN GRAINS.
|
|
102
|
+
|
|
103
|
+
$$
|
|
104
|
+
\mathcal{M}(E) = \exp^{-N_{\text{H}}\sigma(E)}
|
|
105
|
+
$$
|
|
106
|
+
|
|
107
|
+
!!! abstract "Parameters"
|
|
108
|
+
* $N_{\text{H}}$ (`nh`) $\left[\frac{\text{atoms}~10^{22}}{\text{cm}^2}\right]$ : Equivalent hydrogen column density
|
|
109
|
+
* $z$ (`z`) $\left[\text{dimensionless}\right]$ : Redshift
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
!!! note
|
|
113
|
+
Abundances and cross-sections $\sigma$ can be found in Wilms et al. (2000).
|
|
114
|
+
|
|
115
|
+
"""
|
|
116
|
+
|
|
117
|
+
def __init__(self):
|
|
118
|
+
table = Table.read(table_manager.fetch("xsect_tbabs_wilm.fits"))
|
|
119
|
+
self._energy = np.asarray(table["ENERGY"], dtype=np.float64)
|
|
120
|
+
self._sigma = np.asarray(table["SIGMA"], dtype=np.float64)
|
|
121
|
+
self.nh = nnx.Param(1.0)
|
|
122
|
+
self.z = nnx.Param(1.0)
|
|
123
|
+
|
|
124
|
+
def factor(self, energy):
|
|
125
|
+
z = jnp.asarray(self.z)
|
|
126
|
+
sigma = jnp.exp(
|
|
127
|
+
jnp.interp(
|
|
128
|
+
jnp.log(energy) + jnp.log1p(z),
|
|
129
|
+
jnp.log(self._energy),
|
|
130
|
+
jnp.log(self._sigma),
|
|
131
|
+
left="extrapolate",
|
|
132
|
+
right="extrapolate",
|
|
133
|
+
)
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
return jnp.exp(-self.nh * sigma)
|
|
137
|
+
|
|
138
|
+
|
|
94
139
|
class Phabs(MultiplicativeComponent):
|
|
95
140
|
r"""
|
|
96
141
|
A photoelectric absorption model.
|
|
@@ -215,7 +260,9 @@ class Zedge(MultiplicativeComponent):
|
|
|
215
260
|
|
|
216
261
|
def factor(self, energy):
|
|
217
262
|
return jnp.where(
|
|
218
|
-
energy <= self.Ec,
|
|
263
|
+
energy <= self.Ec,
|
|
264
|
+
1.0,
|
|
265
|
+
jnp.exp(-self.D * (energy * (1 + self.z) / self.Ec) ** 3),
|
|
219
266
|
)
|
|
220
267
|
|
|
221
268
|
|
|
@@ -246,7 +293,11 @@ class Tbpcf(MultiplicativeComponent):
|
|
|
246
293
|
def factor(self, energy):
|
|
247
294
|
sigma = jnp.exp(
|
|
248
295
|
jnp.interp(
|
|
249
|
-
energy,
|
|
296
|
+
energy,
|
|
297
|
+
self._energy,
|
|
298
|
+
jnp.log(self._sigma),
|
|
299
|
+
left="extrapolate",
|
|
300
|
+
right="extrapolate",
|
|
250
301
|
)
|
|
251
302
|
)
|
|
252
303
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jaxspec
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: jaxspec is a bayesian spectral fitting library for X-ray astronomy.
|
|
5
5
|
Project-URL: Homepage, https://github.com/renecotyfanboy/jaxspec
|
|
6
6
|
Project-URL: Documentation, https://jaxspec.readthedocs.io/en/latest/
|
|
@@ -8,7 +8,7 @@ Author-email: sdupourque <sdupourque@irap.omp.eu>
|
|
|
8
8
|
License-Expression: MIT
|
|
9
9
|
License-File: LICENSE.md
|
|
10
10
|
Requires-Python: <3.13,>=3.10
|
|
11
|
-
Requires-Dist: arviz<0.
|
|
11
|
+
Requires-Dist: arviz<0.24.0,>=0.17.1
|
|
12
12
|
Requires-Dist: astropy<8,>=6.0.0
|
|
13
13
|
Requires-Dist: catppuccin<3,>=2.3.4
|
|
14
14
|
Requires-Dist: chainconsumer<2,>=1.1.2
|
|
@@ -20,7 +20,7 @@ Requires-Dist: matplotlib<4,>=3.8.0
|
|
|
20
20
|
Requires-Dist: mendeleev<1.2,>=0.15
|
|
21
21
|
Requires-Dist: networkx~=3.1
|
|
22
22
|
Requires-Dist: numpy<3.0.0
|
|
23
|
-
Requires-Dist: numpyro<0.
|
|
23
|
+
Requires-Dist: numpyro<0.21,>=0.17.0
|
|
24
24
|
Requires-Dist: pandas<3,>=2.2.0
|
|
25
25
|
Requires-Dist: pooch<2,>=1.8.2
|
|
26
26
|
Requires-Dist: scipy<1.16
|
|
@@ -2,8 +2,8 @@ jaxspec/__init__.py,sha256=Sbn02lX6Y-zNXk17N8dec22c5jeypiS0LkHmGfz7lWA,126
|
|
|
2
2
|
jaxspec/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
jaxspec/analysis/_plot.py,sha256=0xEz-e_xk7XvU6PUfbNwxaWg1-SxAF2XAqhkxWEhIFs,6239
|
|
4
4
|
jaxspec/analysis/compare.py,sha256=g2UFhmR9Zt-7cz5gQFOB6lXuklXB3yTyUvjTypOzoSY,725
|
|
5
|
-
jaxspec/analysis/results.py,sha256=
|
|
6
|
-
jaxspec/data/__init__.py,sha256=
|
|
5
|
+
jaxspec/analysis/results.py,sha256=nZ7JORgA6YYei8hRHmGvhUmnSpd11FfryP-E7UVVT9s,28650
|
|
6
|
+
jaxspec/data/__init__.py,sha256=9fZRyB3eXdEi_ZsTcHT64xH3kW3jQFD0XS5eIAD0RDo,501
|
|
7
7
|
jaxspec/data/instrument.py,sha256=weiPcEll1jZM6lqhxpF1aPIRwvaP6bygSB8jLBABXto,4815
|
|
8
8
|
jaxspec/data/obsconf.py,sha256=bkYuD6mJgj8QmRaDVhcnXwUukVdo20xllzaI57prHag,10056
|
|
9
9
|
jaxspec/data/observation.py,sha256=7FHJm1jHEEFyrqxg3COsGmfdh5dg-5XnfKCp1yb5fNY,7411
|
|
@@ -18,15 +18,15 @@ jaxspec/experimental/tabulated.py,sha256=H0llUiso2KGH4xUzTUSVPy-6I8D3wm707lU_Z1P
|
|
|
18
18
|
jaxspec/fit/__init__.py,sha256=OaS0-Hkb3Hd-AkE2o-KWfoWMX0NSCPY-_FP2znHf9l0,153
|
|
19
19
|
jaxspec/fit/_bayesian_model.py,sha256=7c2Twgz06QV1S9DdctdVk5YT1v7P-ln100bWXAvv7Go,15179
|
|
20
20
|
jaxspec/fit/_build_model.py,sha256=pNZVuVfwOq3Pg23opH7xRv28DsSkQZpvy2Z-1hQSfNs,3219
|
|
21
|
-
jaxspec/fit/_fitter.py,sha256=
|
|
21
|
+
jaxspec/fit/_fitter.py,sha256=lkLFvwqE6NGpBk4i8gdTHGD8QQahCp9OgJS96j7N6FA,10383
|
|
22
22
|
jaxspec/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
23
|
jaxspec/model/_graph_util.py,sha256=hPvHYmAxb7P3nyIecaZ7RqWOjwcZ1WvUByt_yNANiaY,4552
|
|
24
24
|
jaxspec/model/abc.py,sha256=vvHM4teepc8VLqbpAtqf1b55oF00R_Lo_6nrBO5KmmQ,14793
|
|
25
|
-
jaxspec/model/additive.py,sha256=
|
|
25
|
+
jaxspec/model/additive.py,sha256=MGHqJ4Ai2kPkMrZOLom4vTNyeg2oczpg4A9Rv5JdU34,20366
|
|
26
26
|
jaxspec/model/background.py,sha256=VLSrU0YCW9GSHCtaEdcth-sp74aPyEVSizIMFkTpM7M,7759
|
|
27
27
|
jaxspec/model/instrument.py,sha256=1zLZgHmBZs8RLKTMT3Wu4bCx6JnxBUjhRIpYG2rLaZM,2947
|
|
28
28
|
jaxspec/model/list.py,sha256=uC9rLEEeph10q6shat86WLACVuTSx73RGMl8Ij0jqQY,875
|
|
29
|
-
jaxspec/model/multiplicative.py,sha256=
|
|
29
|
+
jaxspec/model/multiplicative.py,sha256=L4zyCrYU364Cwb2bDJc9ydSc_EMzNQ21zNWIM8EbLKE,9793
|
|
30
30
|
jaxspec/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
31
|
jaxspec/scripts/debug.py,sha256=qhyDtX4G5UdChmTLCM-5Wti4XZU-sU5S-wDb6TZjrvM,292
|
|
32
32
|
jaxspec/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -35,8 +35,8 @@ jaxspec/util/integrate.py,sha256=7GwBSagmDzsF3P53tPs-oakeq0zHEwmZZS2zQlXngbE,463
|
|
|
35
35
|
jaxspec/util/misc.py,sha256=O3qorCL1Y2X1BS2jdd36C1eDHK9QDXTSOr9kj3uqcJo,654
|
|
36
36
|
jaxspec/util/online_storage.py,sha256=wwpowxmDgAqKzeUwmGUIxttA4VKUoR270Ew-F_0DrkE,2493
|
|
37
37
|
jaxspec/util/typing.py,sha256=ZQM_l68qyYnIBZPz_1mKvwPMx64jvVBD8Uj6bx9sHv0,140
|
|
38
|
-
jaxspec-0.3.
|
|
39
|
-
jaxspec-0.3.
|
|
40
|
-
jaxspec-0.3.
|
|
41
|
-
jaxspec-0.3.
|
|
42
|
-
jaxspec-0.3.
|
|
38
|
+
jaxspec-0.3.4.dist-info/METADATA,sha256=VzNrPKy8_5ReZk5REcwADXU-m8QpiICd-Gx9ow_1X2w,4045
|
|
39
|
+
jaxspec-0.3.4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
40
|
+
jaxspec-0.3.4.dist-info/entry_points.txt,sha256=4ffU5AImfcEBxgWTqopQll2YffpFldOswXRh16pd0Dc,72
|
|
41
|
+
jaxspec-0.3.4.dist-info/licenses/LICENSE.md,sha256=2q5XoWzddts5IqzIcgYYMOL21puU3MfO8gvT3Ype1eQ,1073
|
|
42
|
+
jaxspec-0.3.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|