code: def benchmark_from_datasets(
      **dataset_streams: Sequence[TCLDataset],
  ) -> CLScenario:
      """Creates a benchmark given a list of datasets for each stream.
  
      Each dataset will be considered as a separate experience.
      Contents of the datasets must already be set, including task labels.
      Transformations will be applied if defined.
  
      Avalanche benchmarks usually provide at least a train and test stream,
      but this generator is fully generic.
  
      To use this generator, you must convert your data into an Avalanche Dataset.
  
      :param dataset_streams: A dictionary with stream-name as key and
          list-of-datasets as values, where stream-name is the name of the stream,
          while list-of-datasets is a list of Avalanche datasets, where
          list-of-datasets[i] contains the data for experience i.
      """
      exps_streams = []
      for stream_name, data_s in dataset_streams.items():
          for dd in data_s:
              if not isinstance(dd, AvalancheDataset):
                  raise ValueError("datasets must be AvalancheDatasets")
          des = [
              DatasetExperience(dataset=dd, current_experience=eid)
              for eid, dd in enumerate(data_s)
          ]
          s = EagerCLStream(stream_name, des)
          exps_streams.append(s)
      return CLScenario(exps_streams)
  
imports: import random
  from avalanche.benchmarks.utils.data import AvalancheDataset
  import torch
  from itertools import tee
  from typing import Callable, Generator, Generic, List, Sequence, TypeVar, Union, Tuple, Optional, Iterable, Dict
  from .generic_scenario import EagerCLStream, CLScenario, CLExperience, make_stream
  from ..utils import TaskAwareSupervisedClassificationDataset
label_desc: Use image node_id 1 for calling a global function with example usage: benchmark_from_datasets() and returns: CLScenario