code: def from_paths(cls, path, bs=64, tfms=(None,None), trn_name='train', val_name='valid', test_name=None, test_with_labels=False, num_workers=8):
          
          assert not(tfms[0] is None or tfms[1] is None), "please provide transformations for your train and validation sets"
          trn,val = [folder_source(path, o) for o in (trn_name, val_name)]
          if test_name:
              test = folder_source(path, test_name) if test_with_labels else read_dir(path, test_name)
          else: test = None
          datasets = cls.get_ds(FilesIndexArrayDataset, trn, val, tfms, path=path, test=test)
          return cls(path, datasets, bs, num_workers, classes=trn[2])
docs: Read in images and their labels given as sub-folder names
  
          Arguments:
              path: a root path of the data (used for storing trained models, precomputed values, etc)
              bs: batch size
              tfms: transformations (for data augmentations). e.g. output of `tfms_from_model`
              trn_name: a name of the folder that contains training images.
              val_name:  a name of the folder that contains validation images.
              test_name:  a name of the folder that contains test images.
              num_workers: number of workers
  
          Returns:
              ImageClassifierData