code: def _F(self, X, b, c = 0.001):
          
  
          if b == 1:
              b = 1 + c
  
          prefac = (b - 1) ** -2
  
          if isinstance(X, np.ndarray):
  
              X[np.where(X == 1)] = 1 - c
  
              output = np.empty_like(X)
  
              inds1 = np.where(np.absolute(X - b)<c)
              output[inds1] = prefac*(-2 - b + (1 + b + b ** 2) * self._nfw_func(b)) * (1 + b) ** -1
  
              inds2 = np.where(np.absolute(X - b)>=c)
  
              output[inds2] = prefac * ((X[inds2] ** 2 - 1) ** -1 * (1 - b -
                                      (1 - b * X[inds2] ** 2) * self._nfw_func(X[inds2])) - \
                                          self._nfw_func(X[inds2] * b ** -1))
  
          else:
  
              if X == 1:
                  X = 1-c
  
              if np.absolute(X - b)<c:
                  output = prefac * (-2 - b + (1 + b + b ** 2) * self._nfw_func(b)) * (1 + b) ** -1
  
              else:
                  output = prefac * ((X ** 2 - 1) ** -1 * (1 - b -
                                      (1 - b * X ** 2) * self._nfw_func(X)) - \
                                          self._nfw_func(X * b ** -1))
  
          return output
docs: analytic solution of the projection integral
  
          :param x: a dimensionless quantity, either r/rs or r/rc
          :type x: float >0