def __init__(
        self: TCLStream,
        name: str,
        exps_iter: Iterable[TCLExperience],
        benchmark: "Optional[CLScenario[TCLStream]]" = None,
        set_stream_info: bool = True,
    ):
        """
        Creates an instance of a experience stream.

        :param name: The name of the stream.
        :param exps_iter: The iterable from which experiences will be obtained.
        :param benchmark: The benchmarks defining this stream.
        :param set_stream_info: If True, will set the `current_experience` and
            `origin_stream` fields on experience objects before returning them.
            Defaults to True.
        """
        self.name: str = name
        """
        The name of the stream (for instance: "train", "test", "valid", ...).
        """

        self.exps_iter: Iterable[TCLExperience] = exps_iter
        """
        The iterable from which experiences will be obtained.
        """

        self.benchmark: "CLScenario[TCLStream]" = benchmark
        """
        A reference to the benchmark.
        """

        self.set_stream_info: bool = set_stream_info
        """
        If True, will set the `current_experience` and `origin_stream` 
        fields on experience objects before returning them.
        """

        if isinstance(self.exps_iter, GeneratorType):
            # Prevent issues when iterating the stream more than once
            self.exps_iter = GeneratorMemo(self.exps_iter)

        Creates an instance of a experience stream.

        :param name: The name of the stream.
        :param exps_iter: The iterable from which experiences will be obtained.
        :param benchmark: The benchmarks defining this stream.
        :param set_stream_info: If True, will set the `current_experience` and
            `origin_stream` fields on experience objects before returning them.
            Defaults to True.
        
avalanche/benchmarks/scenarios/generic_scenario.py