This module implements algorithms for the numerical integration of real valued functions. For scalar functions the goal is to numerically evaluate the integral $$ I(f, a, b) = \int_{a}^{b}f(t)dt $$ where the integration interval is allowed to be unbounded.

Implements the double exponential quadrature algorithm described in Bailey06. Takes as
input the scalar integrand function `f`

, the integration interval (`a`

, `b`

) and a positive value `stop`

. The integration
stops when the maximum number of integration points has been used or when doubling the number of integration points results in an absolute change in the numerical
evaluation of the integral which is smaller than `stop`

. The function returns the numerical evaluation of the integral and the last absolute change in such
evaluation (which corresponds to the last doubling of the integration points).

The quadratic order of convergence in the number of integration points used requires `f`

to be analytic over the integration interval and `f`

is
allowed to be unbounded on the extremes of integration. The double exponential method has been shown in
Bailey05 to be competitive with other numerical quadrature methods for most integrand
functions.