def get_frozen_paths(
    params: Params,
    freeze_fun: Optional[Callable[[Tuple[AnyKey, ...], Array], str]],
) -> Tuple[List[AnyKey], ...]:
    """
    Return a tuple of sequences of keys pointing to the frozen parameters only.

    Parameters
    ----------
    params
    freeze_fun: Callable[[Tuple[AnyKey, ...], Array], str]
        A freeze function. It takes in input a path and its correspondent array of parameters, and it returns
        "trainable" or "frozen". If "frozen", the path corresponding to those parameters will not be returned.
        If the function is `None`, all parameters are marked as trainable.

    Returns
    -------
    Tuple[List[AnyKey], ...]
        A tuple of sequences of keys pointing to the frozen parameters only.
    """
    return get_paths_with_label(
        params, freeze_fun, "frozen", allowed_labels=["frozen", "trainable"]
    )

    Return a tuple of sequences of keys pointing to the frozen parameters only.

    Parameters
    ----------
    params
    freeze_fun: Callable[[Tuple[AnyKey, ...], Array], str]
        A freeze function. It takes in input a path and its correspondent array of parameters, and it returns
        "trainable" or "frozen". If "frozen", the path corresponding to those parameters will not be returned.
        If the function is `None`, all parameters are marked as trainable.

    Returns
    -------
    Tuple[List[AnyKey], ...]
        A tuple of sequences of keys pointing to the frozen parameters only.
    
fortuna/utils/freeze.py