def get_mnl_point_est(orig_model_obj,
                      new_df,
                      boot_id_col,
                      num_params,
                      mnl_spec,
                      mnl_names,
                      mnl_init_vals,
                      mnl_fit_kwargs):
    """
    Calculates the MLE for the desired MNL model.

    Parameters
    ----------
    orig_model_obj : An MNDC_Model instance.
        The object corresponding to the desired model being bootstrapped.
    new_df : pandas DataFrame.
        The pandas dataframe containing the data to be used to estimate the
        MLE of the MNL model for the current bootstrap sample.
    boot_id_col : str.
        Denotes the new column that specifies the bootstrap observation ids for
        choice model estimation.
    num_params : non-negative int.
        The number of parameters in the MLE of the `orig_model_obj`.
    mnl_spec : OrderedDict or None.
        If `orig_model_obj` is not a MNL model, then `mnl_spec` should be an
        OrderedDict that contains the specification dictionary used to estimate
        the MNL model that will provide starting values for the final estimated
        model. If `orig_model_obj` is a MNL model, then `mnl_spec` may be None.
    mnl_names : OrderedDict or None.
        If `orig_model_obj` is not a MNL model, then `mnl_names` should be an
        OrderedDict that contains the name dictionary used to initialize the
        MNL model that will provide starting values for the final estimated
        model. If `orig_model_obj` is a MNL, then `mnl_names` may be None.
    mnl_init_vals : 1D ndarray or None.
        If `orig_model_obj` is not a MNL model, then `mnl_init_vals` should be
        a 1D ndarray. `mnl_init_vals` should denote the initial values used to
        estimate the MNL model that provides starting values for the final
        desired model. If `orig_model_obj` is a MNL model, then `mnl_init_vals`
        may be None.
    mnl_fit_kwargs : dict or None.
        If `orig_model_obj` is not a MNL model, then `mnl_fit_kwargs` should be
        a dict. `mnl_fit_kwargs` should denote the keyword arguments used when
        calling the `fit_mle` function of the MNL model that will provide
        starting values to the desired choice model. If `orig_model_obj` is a
        MNL model, then `mnl_fit_kwargs` may be None.

    Returns
    -------
    mnl_point : dict.
        The dictionary returned by `scipy.optimize` after estimating the
        desired MNL model.
    mnl_obj : An MNL model instance.
        The model object used to estimate the desired MNL model.
    """
    # Get specification and name dictionaries for the mnl model, for the case
    # where the model being bootstrapped is an MNL model. In this case, the
    # the mnl_spec and the mnl_names that are passed to the function are
    # expected to be None.
    if orig_model_obj.model_type == model_type_to_display_name["MNL"]:
        mnl_spec = orig_model_obj.specification
        mnl_names = orig_model_obj.name_spec
        if mnl_init_vals is None:
            mnl_init_vals = np.zeros(num_params)
        if mnl_fit_kwargs is None:
            mnl_fit_kwargs = {}

    # Alter the mnl_fit_kwargs to ensure that we only perform point estimation
    mnl_fit_kwargs["just_point"] = True
    # Use BFGS by default to estimate the MNL since it works well for the MNL.
    if "method" not in mnl_fit_kwargs:
        mnl_fit_kwargs["method"] = "BFGS"

    # Initialize the mnl model object for the given bootstrap sample.
    mnl_obj = pl.create_choice_model(data=new_df,
                                     alt_id_col=orig_model_obj.alt_id_col,
                                     obs_id_col=boot_id_col,
                                     choice_col=orig_model_obj.choice_col,
                                     specification=mnl_spec,
                                     model_type="MNL",
                                     names=mnl_names)

    # Get the MNL point estimate for the parameters of this bootstrap sample.
    mnl_point = mnl_obj.fit_mle(mnl_init_vals, **mnl_fit_kwargs)
    return mnl_point, mnl_obj
Calculates the MLE for the desired MNL model.

    Parameters
    ----------
    orig_model_obj : An MNDC_Model instance.
        The object corresponding to the desired model being bootstrapped.
    new_df : pandas DataFrame.
        The pandas dataframe containing the data to be used to estimate the
        MLE of the MNL model for the current bootstrap sample.
    boot_id_col : str.
        Denotes the new column that specifies the bootstrap observation ids for
        choice model estimation.
    num_params : non-negative int.
        The number of parameters in the MLE of the `orig_model_obj`.
    mnl_spec : OrderedDict or None.
        If `orig_model_obj` is not a MNL model, then `mnl_spec` should be an
        OrderedDict that contains the specification dictionary used to estimate
        the MNL model that will provide starting values for the final estimated
        model. If `orig_model_obj` is a MNL model, then `mnl_spec` may be None.
    mnl_names : OrderedDict or None.
        If `orig_model_obj` is not a MNL model, then `mnl_names` should be an
        OrderedDict that contains the name dictionary used to initialize the
        MNL model that will provide starting values for the final estimated
        model. If `orig_model_obj` is a MNL, then `mnl_names` may be None.
    mnl_init_vals : 1D ndarray or None.
        If `orig_model_obj` is not a MNL model, then `mnl_init_vals` should be
        a 1D ndarray. `mnl_init_vals` should denote the initial values used to
        estimate the MNL model that provides starting values for the final
        desired model. If `orig_model_obj` is a MNL model, then `mnl_init_vals`
        may be None.
    mnl_fit_kwargs : dict or None.
        If `orig_model_obj` is not a MNL model, then `mnl_fit_kwargs` should be
        a dict. `mnl_fit_kwargs` should denote the keyword arguments used when
        calling the `fit_mle` function of the MNL model that will provide
        starting values to the desired choice model. If `orig_model_obj` is a
        MNL model, then `mnl_fit_kwargs` may be None.

    Returns
    -------
    mnl_point : dict.
        The dictionary returned by `scipy.optimize` after estimating the
        desired MNL model.
    mnl_obj : An MNL model instance.
        The model object used to estimate the desired MNL model.