code: def _compute_mle(self):
          
          min_y = np.min(self._interp.y)
          if self._interp.y[0] == min_y:
              self._mle = self._interp.x[0]
          elif self._interp.y[-1] == min_y:
              self._mle = self._interp.x[-1]
          else:
              argmin_y = np.argmin(self._interp.y)
              ix0 = max(argmin_y - 4, 0)
              ix1 = min(argmin_y + 4, len(self._interp.x) - 1)
  
              while np.sign(self._interp.derivative(self._interp.x[ix0])) == \
                      np.sign(self._interp.derivative(self._interp.x[ix1])):
                  ix0 += 1
  
              self._mle = scipy.optimize.brentq(self._interp.derivative,
                                                self._interp.x[ix0],
                                                self._interp.x[ix1],
                                                xtol=1e-10 *
                                                np.median(self._interp.x))
docs: Compute the maximum likelihood estimate.
  
          Calls `scipy.optimize.brentq` to find the roots of the derivative.