def METHOD_NAME(df=None, value_name=None, var_name=None):
    var_name = "year" if var_name is None else var_name
    value_name = "values" if value_name is None else value_name
    assert isinstance(df, pd.core.frame.DataFrame), f"df must be a DataFrame"
    assert isinstance(var_name, str), f"var_name must a be string"
    assert isinstance(value_name, str), f"value_name must be a string"
    df.columns = df.columns.astype(str)
    id_vars = [val for val in list(df.columns) if not is_numeric(val)]
    value_vars = [val for val in list(df.columns) if is_numeric(val)]
    df_long = df.melt(
        id_vars=id_vars, value_vars=value_vars, var_name=var_name, value_name=value_name
    )
    df_long[var_name] = df_long[var_name].astype(float)
    return df_long