def extract_default_init_vals(orig_model_obj, mnl_point_series, num_params):
    """
    Get the default initial values for the desired model type, based on the
    point estimate of the MNL model that is 'closest' to the desired model.

    Parameters
    ----------
    orig_model_obj : an instance or sublcass of the MNDC class.
        Should correspond to the actual model that we want to bootstrap.
    mnl_point_series : pandas Series.
        Should denote the point estimate from the MNL model that is 'closest'
        to the desired model.
    num_params : int.
        Should denote the number of parameters being estimated (including any
        parameters that are being constrained during estimation).

    Returns
    -------
    init_vals : 1D ndarray of initial values for the MLE of the desired model.
    """
    # Initialize the initial values
    init_vals = np.zeros(num_params, dtype=float)
    # Figure out which values in mnl_point_series are the index coefficients
    no_outside_intercepts = orig_model_obj.intercept_names is None
    if no_outside_intercepts:
        init_index_coefs = mnl_point_series.values
        init_intercepts = None
    else:
        init_index_coefs =\
            mnl_point_series.loc[orig_model_obj.ind_var_names].values
        init_intercepts =\
            mnl_point_series.loc[orig_model_obj.intercept_names].values

    # Add any mixing variables to the index coefficients.
    if orig_model_obj.mixing_vars is not None:
        num_mixing_vars = len(orig_model_obj.mixing_vars)
        init_index_coefs = np.concatenate([init_index_coefs,
                                           np.zeros(num_mixing_vars)],
                                          axis=0)

    # Account for the special transformation of the index coefficients that is
    # needed for the asymmetric logit model.
    if orig_model_obj.model_type == model_type_to_display_name["Asym"]:
        multiplier = np.log(len(np.unique(orig_model_obj.alt_IDs)))
        # Cast the initial index coefficients to a float dtype to ensure
        # successful broadcasting
        init_index_coefs = init_index_coefs.astype(float)
        # Adjust the scale of the index coefficients for the asymmetric logit.
        init_index_coefs /= multiplier

    # Combine the initial interept values with the initial index coefficients
    if init_intercepts is not None:
        init_index_coefs =\
            np.concatenate([init_intercepts, init_index_coefs], axis=0)

    # Add index coefficients (and mixing variables) to the total initial array
    num_index = init_index_coefs.shape[0]
    init_vals[-1 * num_index:] = init_index_coefs

    # Note that the initial values for the transformed nest coefficients and
    # the shape parameters is zero so we don't have to change anything
    return init_vals
Get the default initial values for the desired model type, based on the
    point estimate of the MNL model that is 'closest' to the desired model.

    Parameters
    ----------
    orig_model_obj : an instance or sublcass of the MNDC class.
        Should correspond to the actual model that we want to bootstrap.
    mnl_point_series : pandas Series.
        Should denote the point estimate from the MNL model that is 'closest'
        to the desired model.
    num_params : int.
        Should denote the number of parameters being estimated (including any
        parameters that are being constrained during estimation).

    Returns
    -------
    init_vals : 1D ndarray of initial values for the MLE of the desired model.