def potential_from_grid(self, grid, tabulate_bins=1000):
        """
        Calculate the potential at a given set of arc-second gridded coordinates.

        Parameters
        ----------
        grid : grids.RegularGrid
            The grid of (y,x) arc-second coordinates the deflection angles are computed on.
        tabulate_bins : int
            The number of bins to tabulate the inner integral of this profile.
        """

        @jit_integrand
        def deflection_integrand(x, kappa_radius, scale_radius, inner_slope):
            return (x + kappa_radius / scale_radius) ** (inner_slope - 3) * ((1 - np.sqrt(1 - x ** 2)) / x)

        eta_min, eta_max, minimum_log_eta, maximum_log_eta, bin_size = self.tabulate_integral(grid, tabulate_bins)

        potential_grid = np.zeros(grid.shape[0])

        deflection_integral = np.zeros((tabulate_bins,))

        for i in range(tabulate_bins):
            eta = 10. ** (minimum_log_eta + (i - 1) * bin_size)

            integral = \
                quad(deflection_integrand, a=0.0, b=1.0, args=(eta, self.scale_radius, self.inner_slope),
                     epsrel=EllipticalGeneralizedNFW.epsrel)[0]

            deflection_integral[i] = ((eta / self.scale_radius) ** (2 - self.inner_slope)) * (
                    (1.0 / (3 - self.inner_slope)) *
                    special.hyp2f1(3 - self.inner_slope, 3 - self.inner_slope, 4 - self.inner_slope,
                                   - (eta / self.scale_radius)) + integral)

        for i in range(grid.shape[0]):
            potential_grid[i] = (2.0 * self.kappa_s * self.axis_ratio) * \
                                quad(self.potential_func, a=0.0, b=1.0, args=(grid[i, 0], grid[i, 1],
                                                                              self.axis_ratio, minimum_log_eta,
                                                                              maximum_log_eta, tabulate_bins,
                                                                              deflection_integral),
                                     epsrel=EllipticalGeneralizedNFW.epsrel)[0]

        return potential_grid
def potential_from_grid(self, grid, tabulate_bins=1000):
        """
        Calculate the potential at a given set of arc-second gridded coordinates.

        Parameters
        ----------
        grid : grids.RegularGrid
            The grid of (y,x) arc-second coordinates the deflection angles are computed on.
        tabulate_bins : int
            The number of bins to tabulate the inner integral of this profile.
        """

        @jit_integrand
        def deflection_integrand(x, kappa_radius, scale_radius, inner_slope):
            return (x + kappa_radius / scale_radius) ** (inner_slope - 3) * ((1 - np.sqrt(1 - x ** 2)) / x)

        eta_min, eta_max, minimum_log_eta, maximum_log_eta, bin_size = self.tabulate_integral(grid, tabulate_bins)

        potential_grid = np.zeros(grid.shape[0])

        deflection_integral = np.zeros((tabulate_bins,))

        for i in range(tabulate_bins):
            eta = 10. ** (minimum_log_eta + (i - 1) * bin_size)

            integral = \
                quad(deflection_integrand, a=0.0, b=1.0, args=(eta, self.scale_radius, self.inner_slope),
                     epsrel=EllipticalGeneralizedNFW.epsrel)[0]

            deflection_integral[i] = ((eta / self.scale_radius) ** (2 - self.inner_slope)) * (
                    (1.0 / (3 - self.inner_slope)) *
                    special.hyp2f1(3 - self.inner_slope, 3 - self.inner_slope, 4 - self.inner_slope,
                                   - (eta / self.scale_radius)) + integral)

        for i in range(grid.shape[0]):
            potential_grid[i] = (2.0 * self.kappa_s * self.axis_ratio) * \
                                quad(self.potential_func, a=0.0, b=1.0, args=(grid[i, 0], grid[i, 1],
                                                                              self.axis_ratio, minimum_log_eta,
                                                                              maximum_log_eta, tabulate_bins,
                                                                              deflection_integral),
                                     epsrel=EllipticalGeneralizedNFW.epsrel)[0]

        return potential_grid
def potential_from_grid ( self , grid , tabulate_bins = 1000 ) : @ jit_integrand def deflection_integrand ( x , kappa_radius , scale_radius , inner_slope ) : return ( x + kappa_radius / scale_radius ) ** ( inner_slope - 3 ) * ( ( 1 - np . sqrt ( 1 - x ** 2 ) ) / x ) eta_min , eta_max , minimum_log_eta , maximum_log_eta , bin_size = self . tabulate_integral ( grid , tabulate_bins ) potential_grid = np . zeros ( grid . shape [ 0 ] ) deflection_integral = np . zeros ( ( tabulate_bins , ) ) for i in range ( tabulate_bins ) : eta = 10. ** ( minimum_log_eta + ( i - 1 ) * bin_size ) integral = quad ( deflection_integrand , a = 0.0 , b = 1.0 , args = ( eta , self . scale_radius , self . inner_slope ) , epsrel = EllipticalGeneralizedNFW . epsrel ) [ 0 ] deflection_integral [ i ] = ( ( eta / self . scale_radius ) ** ( 2 - self . inner_slope ) ) * ( ( 1.0 / ( 3 - self . inner_slope ) ) * special . hyp2f1 ( 3 - self . inner_slope , 3 - self . inner_slope , 4 - self . inner_slope , - ( eta / self . scale_radius ) ) + integral ) for i in range ( grid . shape [ 0 ] ) : potential_grid [ i ] = ( 2.0 * self . kappa_s * self . axis_ratio ) * quad ( self . potential_func , a = 0.0 , b = 1.0 , args = ( grid [ i , 0 ] , grid [ i , 1 ] , self . axis_ratio , minimum_log_eta , maximum_log_eta , tabulate_bins , deflection_integral ) , epsrel = EllipticalGeneralizedNFW . epsrel ) [ 0 ] return potential_grid
Calculate the potential at a given set of arc-second gridded coordinates.

        Parameters
        ----------
        grid : grids.RegularGrid
            The grid of (y,x) arc-second coordinates the deflection angles are computed on.
        tabulate_bins : int
            The number of bins to tabulate the inner integral of this profile.
Calculate the potential at a given set of arc - second gridded coordinates .