threeML / astromodels

Spatial and spectral models for astrophysics
BSD 3-Clause "New" or "Revised" License
43 stars 44 forks source link

Incorrect Numba typing on some CPU architectures in template_model.py #172

Closed rwiller closed 2 years ago

rwiller commented 2 years ago

On some CPU architectures (i.e. my laptop with Ivy Bridge processor) the grid interpolation of a table model results in a numba typing error.

Traceback (most recent call last): File "3ML_table_XSPEC_820.py", line 184, in best_fit_parameters, likelihood_values =jl.fit() File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/classicMLE/joint_likelihood.py", line 324, in fit compute_covar=compute_covariance File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/minimizer/minimization.py", line 632, in minimize internal_best_fit_values, function_minimum = self._minimize() File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/minimizer/minuit_minimizer.py", line 193, in _minimize self._last_migrad_results = self.minuit.migrad() File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/iminuit/minuit.py", line 683, in migrad fm = migrad(ncall, self._tolerance) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/classicMLE/joint_likelihood.py", line 974, in minus_log_like_profile this_log_like = dataset.inner_fit() File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/plugins/SpectrumLike.py", line 1796, in inner_fit return self.get_log_like() File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/plugins/SpectrumLike.py", line 1790, in get_log_like precalc_fluxes=precalc_fluxes) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/utils/spectrum/spectrum_likelihood.py", line 249, in get_current_value model_counts = self._spectrum_plugin.get_model(precalc_fluxes=precalc_fluxes) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/plugins/SpectrumLike.py", line 1877, in get_model precalc_fluxes=precalc_fluxes) self._observed_spectrum.exposure File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/plugins/DispersionSpectrumLike.py", line 125, in _evaluate_model return self._response.convolve(precalc_fluxes=precalc_fluxes) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/utils/OGIP/response.py", line 247, in convolve fluxes = self._integral_function( File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/plugins/SpectrumLike.py", line 2045, in integral diff_fluxes_edges = differential_flux(e_edges) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/threeML/plugins/SpectrumLike.py", line 1970, in differential_flux 0, energies, tag=self._tag File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/core/model.py", line 1090, in get_point_source_fluxes return list(self._point_sources.values())[id](energies, tag=tag) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/sources/point_source.py", line 189, in call results = numpy.array([component.shape(x) for component in list(self.components.values())]) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/sources/point_source.py", line 189, in results = numpy.array([component.shape(x) for component in list(self.components.values())]) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/functions/function.py", line 1638, in call return self.evaluate(self._np_operator, self._f1, self._f2, x) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/functions/function.py", line 1377, in _cf_evaluate_func_func return np_operator(f1(args), f2(args)) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/functions/function.py", line 944, in call return self.fast_call(x) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/core/memoization.py", line 58, in memoizer return method(instance, x, args, *kwargs) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/functions/function.py", line 1034, in fast_call return self.evaluate(x, values) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/functions/template_model.py", line 732, in evaluate return K * self._interpolate(x, scale, args) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/functions/template_model.py", line 767, in _interpolate for i in range(self._energies.shape[0]) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/functions/template_model.py", line 767, in for i in range(self._energies.shape[0]) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/astromodels/functions/template_model.py", line 64, in call return eval_linear(self._grid, self._values, v) File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/numba/core/dispatcher.py", line 420, in _compile_for_args error_rewrite(e, 'typing') File "/home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/numba/core/dispatcher.py", line 361, in error_rewrite raise e.with_traceback(None) numba.core.errors.TypingError: Failed in nopython mode pipeline (step: nopython frontend) non-precise type pyobject During: typing of argument at /home/rwiller/miniconda3/envs/threeML/lib/python3.7/site-packages/interpolation/splines/eval_splines.py (195)

File "../../../miniconda3/envs/threeML/lib/python3.7/site-packages/interpolation/splines/eval_splines.py", line 195: def eval_linear(*args):

"""Do I get a docstring ?"""
return _eval_linear(*args)
^

This error may have been caused by the following argument(s):