Source code for firecrown.models.cluster.integrator.scipy_integrator

"""The SciPy integrator module.

This module holds the scipy implementation of the integrator classes
"""

from typing import Callable

import numpy as np
import numpy.typing as npt
from scipy.integrate import nquad

from firecrown.models.cluster.integrator.integrator import Integrator


[docs]class ScipyIntegrator(Integrator): """The scipy implementation of the Integrator base class using nquad.""" def __init__( self, relative_tolerance: float = 1e-4, absolute_tolerance: float = 1e-12 ) -> None: super().__init__() self._relative_tolerance = relative_tolerance self._absolute_tolerance = absolute_tolerance
[docs] def integrate( self, func_to_integrate: Callable[ [npt.NDArray[np.float64], npt.NDArray[np.float64]], npt.NDArray[np.float64] ], ) -> float: """Integrate the provided integrand argument with SciPy.""" val = nquad( func_to_integrate, ranges=self.integral_bounds, args=self.extra_args, opts={ "epsabs": self._absolute_tolerance, "epsrel": self._relative_tolerance, }, )[0] assert isinstance(val, float) return val