docs: def _F(self, x, p):
  
          """
          solution of the projection integal (kappa)
          arctanh / arctan function
          :param x: r/Rs
          :param p: r_core / Rs
          :return:
          """
          prefactor = 0.5 * (1 + p ** 2) ** -1 * p
  
          if isinstance(x, np.ndarray):
  
              inds0 = np.where(x * p == 1)
              inds1 = np.where(x * p < 1)
              inds2 = np.where(x * p > 1)
  
              func = np.ones_like(x)
  
              func[inds0] = self._u(x[inds0]) ** -1 * (np.pi + 2 * p * np.arctanh(self._u(x[inds0]) ** -1))
  
              func[inds1] = self._u(x[inds1]) ** -1 * (np.pi + 2 * p * np.arctanh(self._u(x[inds1]) ** -1)) - \
                            (2 * p * self._g(x[inds1], p) ** -1 * np.arctanh(self._g(x[inds1], p)))
  
              func[inds2] = self._u(x[inds2]) ** -1 * (np.pi + 2 * p * np.arctanh(self._u(x[inds2]) ** -1)) - \
                            (2 * p * self._f(x[inds2], p) ** -1 * np.arctan(self._f(x[inds2], p)))
  
              return prefactor * func
  
          else:
  
              if x * p == 1:
                  func = self._u(x) ** -1 * (np.pi + 2 * p * np.arctanh(self._u(x) ** -1))
              elif x * p < 1:
                  func = self._u(x) ** -1 * (np.pi + 2 * p * np.arctanh(self._u(x) ** -1)) - \
                         (2 * p * self._g(x, p) ** -1 * np.arctanh(self._g(x, p)))
              else:
                  func = self._u(x) ** -1 * (np.pi + 2 * p * np.arctanh(self._u(x) ** -1)) - \
                         (2 * p * self._f(x, p) ** -1 * np.arctan(self._f(x, p)))
  
              return prefactor * func