code: def _root_amplitude_brentq(counts, bkg, model, root_fn=_f_cash_root):
      
  
      # Compute amplitude bounds and assert counts > 0
      amplitude_min, amplitude_max = _amplitude_bounds(counts, bkg, model)
  
      if not np.sum(counts) > 0:
          return amplitude_min, 0
  
      args = (counts, bkg, model)
  
      if root_fn(0.0, *args) < 0:
          return 0.0, 1
  
      with warnings.catch_warnings():
          warnings.simplefilter("ignore")
          try:
              result = brentq(root_fn, amplitude_min, amplitude_max, args=args,
                              maxiter=MAX_NITER, full_output=True, rtol=1E-4)
              return result[0], result[1].iterations
          except (RuntimeError, ValueError):
              # Where the root finding fails NaN is set as amplitude
              return np.nan, MAX_NITER
docs: Fit amplitude by finding roots using Brent algorithm.
  
      See Appendix A Stewart (2009).
  
      Parameters
      ----------
      counts : `~numpy.ndarray`
          Slice of count map.
      bkg : `~numpy.ndarray`
          Slice of background map.
      model : `~numpy.ndarray`
          Model template to fit.
  
      Returns
      -------
      amplitude : float
          Fitted flux amplitude.
      niter : int
          Number of function evaluations needed for the fit.