def METHOD_NAME(base: pd.DataFrame, sort: Dict[str, bool] = None, search: Dict = None, filters: Dict[str, List[str]] = None) -> pd.DataFrame:
    # Make a deep copy in order to not mutate the original df which serves as our baseline.
    df = base.copy()
    if sort:
        # Reverse values since default sort of Wave table is different from Pandas.
        ascending = [not v for v in list(sort.values())]
        df = df.sort_values(by=list(sort.keys()), ascending=ascending)
    # Filter out all rows that do not contain searched string in `text` cell.
    if search:
        search_val = search['value'].lower()
        # Filter dataframe by search value case insensitive.
        df = df[df.apply(lambda r: any(search_val in str(r[col]).lower() for col in search['cols']), axis=1)]
    # Filter out rows that do not contain filtered column value.
    if filters:
        # We want only rows that have no filters applied or their col value matches active filters.
        query = ' & '.join([f'({not bool(filters)} | {col} in {filters})' for col, filters in filters.items()])
        df = df.query(query)
    return df