code: def make_stream(name: str, exps: Iterable[CLExperience]) -> CLStream:
      """Internal utility used to create a stream.
  
      Uses the correct class for generators, sized generators, and lists.
  
      :param new_name: The name of the new stream.
      :param exps: sequence of experiences.
      """
      s_wrapped: CLStream
      if isinstance(
          exps, List
      ):  # Maintain indexing/slicing functionalities
          return EagerCLStream(name=name, exps=exps)
      elif hasattr(exps, "__len__"):  # Sized stream
          return SizedCLStream(name=name, exps_iter=exps)
      else:  # Plain iterator
          return CLStream(name=name, exps_iter=exps)
  
imports: from abc import abstractmethod, ABC
  from contextlib import contextmanager
  from copy import copy
  from enum import Enum
  from types import GeneratorType
  from typing import Any, Dict, Generator, Iterator, List, Iterable, Optional, Sequence, Tuple, TypeVar, Union, Generic, overload
  from typing_extensions import final
  import numpy
  from avalanche.benchmarks.utils.dataset_utils import slice_alike_object_to_indices
label_desc: Use image node_id 1 for calling a global function with example usage: make_stream(name, exps) and returns: EagerCLStream, SizedCLStream, CLStream