code: def fit_mle(self,
                  init_vals,
                  print_res=True,
                  method="BFGS",
                  loss_tol=1e-06,
                  gradient_tol=1e-06,
                  maxiter=1000,
                  ridge=None,
                  *args):
          
          msg = "This model class' fit_mle method has not been constructed."
          raise NotImplementedError(msg)
docs: Parameters
          ----------
          init_vals : 1D ndarray.
              The initial values to start the optimizatin process with. There
              should be one value for each utility coefficient, outside intercept
              parameter, shape parameter, and nest parameter being estimated.
          print_res : bool, optional.
              Determines whether the timing and initial and final log likelihood
              results will be printed as they they are determined.
          method : str, optional.
              Should be a valid string which can be passed to
              scipy.optimize.minimize. Determines the optimization algorithm
              which is used for this problem.
          loss_tol : float, optional.
              Determines the tolerance on the difference in objective function
              values from one iteration to the next which is needed to determine
              convergence. Default == 1e-06.
          gradient_tol : float, optional.
              Determines the tolerance on the difference in gradient values from
              one iteration to the next which is needed to determine convergence.
              Default == 1e-06.
          ridge : int, float, long, or None, optional.
              Determines whether or not ridge regression is performed. If an int,
              float or long is passed, then that scalar determines the ridge
              penalty for the optimization. Default == None.
  
          Returns
          -------
          None. Saves estimation results to the model instance.