def METHOD_NAME(data, ignore_null_cols=True):
    """Downcasts IntegerNullable, BooleanNullable types to Double, Boolean in order to support certain estimators like ARIMA, CatBoost, and LightGBM.
    Args:
        data (pd.DataFrame, pd.Series): Feature data.
        ignore_null_cols (bool): Whether to ignore downcasting columns with null values or not. Defaults to True.
    Returns:
        data: DataFrame or Series initialized with logical type information where BooleanNullable are cast as Double.
    """
    if data.ww.schema is None:
        data.ww.init()
    if isinstance(data, pd.Series):
        if ignore_null_cols and data.isna().any():
            return data
        if isinstance(data.ww.logical_type, ww.logical_types.BooleanNullable):
            data = data.ww.set_logical_type("Boolean")
        if isinstance(
            data.ww.logical_type,
            ww.logical_types.IntegerNullable,
        ) or isinstance(data.ww.logical_type, ww.logical_types.AgeNullable):
            data = data.ww.set_logical_type("Double")
        return data
    bool_nullable_cols = data.ww.select("BooleanNullable")
    int_nullable_cols = data.ww.select(["IntegerNullable", "AgeNullable"])
    non_null_columns = (
        set(data.dropna(axis=1).columns) if ignore_null_cols else set(data.columns)
    )
    new_ltypes = {
        col: "Boolean" for col in bool_nullable_cols if col in non_null_columns
    }
    new_ltypes.update(
        {col: "BooleanNullable" for col in bool_nullable_cols if col not in new_ltypes},
    )
    new_ltypes.update(
        {col: "Double" for col in int_nullable_cols if col in non_null_columns},
    )
    if new_ltypes:
        data.ww.set_types(logical_types=new_ltypes)
    return data