docs: def dichotomy(self, f, kmin=2, kmax=12, raise_no_convergence=True,):
          """
          Compute the coefficients for a function f by dichotomy.
          kmin, kmax: log2 of number of interpolation points to try
          raise_no_convergence: whether to raise an exception if the dichotomy does not converge
          """
  
          for k in range(kmin, kmax):
              N = pow(2, k)
  
              sampled = self.sample_function(f, N)
              coeffs = self.polyfit(sampled)
  
              # 3) Check for negligible coefficients
              #    If within bound: get negligible coeffs and bread
              bnd = self._threshold(np.max(np.abs(coeffs)))
  
              last = abs(coeffs[-2:])
              if np.all(last <= bnd):
                  break
          else:
              if raise_no_convergence:
                  raise self.NoConvergence(last, bnd)
          return coeffs