class_docstr: Common API for video dataset access
  
  Args:
      data_path (string): image directory of dataset
      train_list (string): training list file directory of dataset
      test_list (string): test list file directory of dataset
      image_modality (string): image type (RGB or Optical Flow)
      frames_per_segment (int): length of each action sample (the unit is number of frame)
      n_classes (int): number of class
      transform_kind (string): types of video transforms
      seed (int): seed value set manually
class_docstr_tok: ["Common","API","for","video","dataset","access","Args",":","data_path","(","string",")",":","image","directory","of","dataset","train_list","(","string",")",":","training","list","file","directory","of","dataset","test_list","(","string",")",":","test","list","file","directory","of","dataset","image_modality","(","string",")",":","image","type","(","RGB","or","Optical","Flow",")","frames_per_segment","(","int",")",":","length","of","each","action","sample","(","the","unit","is","number","of","frame",")","n_classes","(","int",")",":","number","of","class","transform_kind","(","string",")",":","types","of","video","transforms","seed","(","int",")",":","seed","value","set","manually"]
docstr: Get the train and validation dataset with the fixed random split. This is used for joint input like RGB and
  optical flow, which will call `get_train_valid` twice. Fixing the random seed here can keep the seeds for twice
  the same.
docstr_tok: ["Get","the","train","and","validation","dataset","with","the","fixed","random","split",".","This","is","used","for","joint","input","like","RGB","and","optical","flow",",","which","will","call","`","get_train_valid","`","twice",".","Fixing","the","random","seed","here","can","keep","the","seeds","for","twice","the","same","."]
code: def get_train_valid(self, valid_ratio):
      """Get the train and validation dataset with the fixed random split. This is used for joint input like RGB and
      optical flow, which will call `get_train_valid` twice. Fixing the random seed here can keep the seeds for twice
      the same."""
      train_dataset = self.get_train()
      ntotal = len(train_dataset)
      ntrain = int((1 - valid_ratio) * ntotal)
      return torch.utils.data.random_split(
          train_dataset,
          [ntrain, ntotal - ntrain],
          generator=torch.Generator().manual_seed(self._seed),
      )
  
imports: import os
  from copy import deepcopy
  from enum import Enum
  import torch
  import kale.prepdata.video_transform
  from kale.loaddata.dataset_access import DatasetAccess
  from kale.loaddata.video_datasets import BasicVideoDataset, EPIC
label_desc: Use image node_id 2 for calling the VideoDatasetAccess obj's underlying member method code with example usage: obj.get_train_valid(valid_ratio) and returns: torch