docstr: Transforms a dataset into train/test splits for few-shot learning tasks,
  based on a fixed number of samples per class for each split. This is a
  dataset transformation to be applied as a `dataset_transform` in a
  `MetaDataset`.
  
  Parameters
  ----------
  shuffle : bool (default: `True`)
      Shuffle the data in the dataset before the split.
  
  num_samples_per_class : dict, optional
      Dictionary containing the names of the splits (as keys) and the
      corresponding number of samples per class in each split (as values).
      If not `None`, then the arguments `num_train_per_class`,
      `num_test_per_class`, `num_support_per_class` and
      `num_query_per_class` are ignored.
  
  num_train_per_class : int, optional
      Number of samples per class in the training split. This corresponds
      to the number of "shots" in "k-shot learning". If not `None`, this
      creates an item `train` for each task.
  
  num_test_per_class : int, optional
      Number of samples per class in the test split. If not `None`, this
      creates an item `test` for each task.
  
  num_support_per_class : int, optional
      Alias for `num_train_per_class`. If `num_train_per_class` is not
      `None`, then this argument is ignored. If not `None`, this creates
      an item `support` for each task.
  
  num_query_per_class : int, optional
      Alias for `num_test_per_class`. If `num_test_per_class` is not
      `None`, then this argument is ignored. If not `None`, this creates
      an item `query` for each task.
  
  random_state_seed : int, optional
      seed of the np.RandomState. Defaults to '0'.
  
  Examples
  --------
  >>> transform = ClassSplitter(num_samples_per_class={
  ...     'train': 5, 'test': 15})
  >>> dataset = Omniglot('data', num_classes_per_task=5,
  ...                    dataset_transform=transform, meta_train=True)
  >>> task = dataset.sample_task()
  >>> task.keys()
  ['train', 'test']
  >>> len(task['train']), len(task['test'])
  (25, 75)
docstr_tok: ["Transforms","a","dataset","into","train\/test","splits","for","few-shot","learning","tasks",",","based","on","a","fixed","number","of","samples","per","class","for","each","split",".","This","is","a","dataset","transformation","to","be","applied","as","a","`","dataset_transform","`","in","a","`","MetaDataset","`",".","Parameters","--","--","--","--","--","shuffle",":","bool","(","default",":","`","True","`",")","Shuffle","the","data","in","the","dataset","before","the","split",".","num_samples_per_class",":","dict",",","optional","Dictionary","containing","the","names","of","the","splits","(","as","keys",")","and","the","corresponding","number","of","samples","per","class","in","each","split","(","as","values",")",".","If","not","`","None","`",",","then","the","arguments","`","num_train_per_class","`",",","`","num_test_per_class","`",",","`","num_support_per_class","`","and","`","num_query_per_class","`","are","ignored",".","num_train_per_class",":","int",",","optional","Number","of","samples","per","class","in","the","training","split",".","This","corresponds","to","the","number","of","``","shots","''","in","``","k-shot","learning","''",".","If","not","`","None","`",",","this","creates","an","item","`","train","`","for","each","task",".","num_test_per_class",":","int",",","optional","Number","of","samples","per","class","in","the","test","split",".","If","not","`","None","`",",","this","creates","an","item","`","test","`","for","each","task",".","num_support_per_class",":","int",",","optional","Alias","for","`","num_train_per_class","`",".","If","`","num_train_per_class","`","is","not","`","None","`",",","then","this","argument","is","ignored",".","If","not","`","None","`",",","this","creates","an","item","`","support","`","for","each","task",".","num_query_per_class",":","int",",","optional","Alias","for","`","num_test_per_class","`",".","If","`","num_test_per_class","`","is","not","`","None","`",",","then","this","argument","is","ignored",".","If","not","`","None","`",",","this","creates","an","item","`","query","`","for","each","task",".","random_state_seed",":","int",",","optional","seed","of","the","np.RandomState",".","Defaults","to","'","0","'",".","Examples","--","--","--","--",">",">",">","transform","=","ClassSplitter","(","num_samples_per_class=","{","...","'train","'",":","5",",","'test","'",":","15","}",")",">",">",">","dataset","=","Omniglot","(","'data","'",",","num_classes_per_task=5",",","...","dataset_transform=transform",",","meta_train=True",")",">",">",">","task","=","dataset.sample_task","(",")",">",">",">","task.keys","(",")","[","'train","'",",","'test","'","]",">",">",">","len","(","task","[","'train","'","]",")",",","len","(","task","[","'test","'","]",")","(","25",",","75",")"]
code: def __init__(
      self,
      shuffle=True,
      num_samples_per_class=None,
      num_train_per_class=None,
      num_test_per_class=None,
      num_support_per_class=None,
      num_query_per_class=None,
      random_state_seed=0,
  ):
      """
      Transforms a dataset into train/test splits for few-shot learning tasks,
      based on a fixed number of samples per class for each split. This is a
      dataset transformation to be applied as a `dataset_transform` in a
      `MetaDataset`.
  
      Parameters
      ----------
      shuffle : bool (default: `True`)
          Shuffle the data in the dataset before the split.
  
      num_samples_per_class : dict, optional
          Dictionary containing the names of the splits (as keys) and the
          corresponding number of samples per class in each split (as values).
          If not `None`, then the arguments `num_train_per_class`,
          `num_test_per_class`, `num_support_per_class` and
          `num_query_per_class` are ignored.
  
      num_train_per_class : int, optional
          Number of samples per class in the training split. This corresponds
          to the number of "shots" in "k-shot learning". If not `None`, this
          creates an item `train` for each task.
  
      num_test_per_class : int, optional
          Number of samples per class in the test split. If not `None`, this
          creates an item `test` for each task.
  
      num_support_per_class : int, optional
          Alias for `num_train_per_class`. If `num_train_per_class` is not
          `None`, then this argument is ignored. If not `None`, this creates
          an item `support` for each task.
  
      num_query_per_class : int, optional
          Alias for `num_test_per_class`. If `num_test_per_class` is not
          `None`, then this argument is ignored. If not `None`, this creates
          an item `query` for each task.
  
      random_state_seed : int, optional
          seed of the np.RandomState. Defaults to '0'.
  
      Examples
      --------
      >>> transform = ClassSplitter(num_samples_per_class={
      ...     'train': 5, 'test': 15})
      >>> dataset = Omniglot('data', num_classes_per_task=5,
      ...                    dataset_transform=transform, meta_train=True)
      >>> task = dataset.sample_task()
      >>> task.keys()
      ['train', 'test']
      >>> len(task['train']), len(task['test'])
      (25, 75)
      """
      self.shuffle = shuffle
  
      if num_samples_per_class is None:
          num_samples_per_class = OrderedDict()
          if num_train_per_class is not None:
              num_samples_per_class["train"] = num_train_per_class
          elif num_support_per_class is not None:
              num_samples_per_class["support"] = num_support_per_class
          if num_test_per_class is not None:
              num_samples_per_class["test"] = num_test_per_class
          elif num_query_per_class is not None:
              num_samples_per_class["query"] = num_query_per_class
      assert len(num_samples_per_class) > 0
  
      self._min_samples_per_class = sum(num_samples_per_class.values())
      super(ClassSplitter_, self).__init__(
          num_samples_per_class, random_state_seed
      )
  
imports: import torch
  import numpy
  from collections import OrderedDict, defaultdict
  from torchmeta.utils.data.task import Task, ConcatTask, SubsetTask
  from torchmeta.transforms.utils import apply_wrapper
label_desc: Use image node_id 1 to create a new ClassSplitter_ object from inherited base classes: Splitter with example: obj = ClassSplitter_(shuffle, num_samples_per_class, num_train_per_class, num_test_per_class, num_support_per_class, num_query_per_class, random_state_seed)