def ConConUnconfounded(
    *,
    train_transform: Optional[Any] = _default_train_transform,
    eval_transform: Optional[Any] = _default_eval_transform,
    dataset_root: Optional[Union[str, Path]] = None,
) -> CLScenario:
    """
    Creates a ConCon Unconfounded benchmark.

    If the dataset is not present in the computer, this method will
    automatically download and store it.

    The returned benchmark will only contain one task, where no task-specific
    confounders are present.

    The benchmark instance returned by this method will have two fields,
    `train_stream` and `test_stream`, which can be iterated to obtain
    training and test :class:`Experience`. Each Experience contains the
    `dataset` and the associated task label.

    :param dataset_root: The root directory of the dataset.
    :param train_transform: The training transform to use.
    :param eval_transform: The evaluation transform to use.

    :returns: The ConCon Unconfounded benchmark.
    """
    train_dataset = []
    test_dataset = []

    train_dataset.append(
        ConConDataset("unconfounded", 0, root=dataset_root, train=True)
    )
    test_dataset.append(
        ConConDataset("unconfounded", 0, root=dataset_root, train=False)
    )

    train_dataset[0] = _as_taskaware_supervised_classification_dataset(
        train_dataset[0], transform=train_transform
    )

    test_dataset[0] = _as_taskaware_supervised_classification_dataset(
        test_dataset[0], transform=eval_transform
    )

    return benchmark_from_datasets(train=train_dataset, test=test_dataset)

    Creates a ConCon Unconfounded benchmark.

    If the dataset is not present in the computer, this method will
    automatically download and store it.

    The returned benchmark will only contain one task, where no task-specific
    confounders are present.

    The benchmark instance returned by this method will have two fields,
    `train_stream` and `test_stream`, which can be iterated to obtain
    training and test :class:`Experience`. Each Experience contains the
    `dataset` and the associated task label.

    :param dataset_root: The root directory of the dataset.
    :param train_transform: The training transform to use.
    :param eval_transform: The evaluation transform to use.

    :returns: The ConCon Unconfounded benchmark.
    
avalanche/benchmarks/classic/concon.py