docs: def _crps_cdf_single(x, cdf_or_dist, xmin=None, xmax=None, tol=1e-6):
      """
      See crps_cdf for docs.
      """
      # TODO: this function is pretty slow.  Look for clever ways to speed it up.
  
      # allow for directly passing in scipy.stats distribution objects.
      cdf = getattr(cdf_or_dist, 'cdf', cdf_or_dist)
      assert callable(cdf)
  
      # if bounds aren't given, discover them
      if xmin is None or xmax is None:
          # Note that infinite values for xmin and xmax are valid, but
          # it slows down the resulting quadrature significantly.
          xmin, xmax = _discover_bounds(cdf)
  
      # make sure the bounds haven't clipped the cdf.
      if (tol is not None) and (cdf(xmin) >= tol) or (cdf(xmax) <= (1. - tol)):
          raise ValueError('CDF does not meet tolerance requirements at %s '
                           'extreme(s)! Consider using function defaults '
                           'or using infinities at the bounds. '
                           % ('lower' if cdf(xmin) >= tol else 'upper'))
  
      # CRPS = int_-inf^inf (F(y) - H(x))**2 dy
      #      = int_-inf^x F(y)**2 dy + int_x^inf (1 - F(y))**2 dy
      def lhs(y):
          # left hand side of CRPS integral
          return np.square(cdf(y))
      # use quadrature to integrate the lhs
      lhs_int, lhs_tol = integrate.quad(lhs, xmin, x)
      # make sure the resulting CRPS will be with tolerance
      if (tol is not None) and (lhs_tol >= 0.5 * tol):
          raise ValueError('Lower integral did not evaluate to within tolerance! '
                           'Tolerance achieved: %f , Value of integral: %f \n'
                           'Consider setting the lower bound to -np.inf.' %
                           (lhs_tol, lhs_int))
  
      def rhs(y):
          # right hand side of CRPS integral
          return np.square(1. - cdf(y))
      rhs_int, rhs_tol = integrate.quad(rhs, x, xmax)
      # make sure the resulting CRPS will be with tolerance
      if (tol is not None) and (rhs_tol >= 0.5 * tol):
          raise ValueError('Upper integral did not evaluate to within tolerance! \n'
                           'Tolerance achieved: %f , Value of integral: %f \n'
                           'Consider setting the upper bound to np.inf or if '
                           'you already have, set warn_level to `ignore`.' %
                           (rhs_tol, rhs_int))
  
      return lhs_int + rhs_int