text: # coding=utf-8
  import numpy as np
  import sklearn.model_selection as ms
  from torch.utils.data import DataLoader
  
  import datautil.imgdata.util as imgutil
  from datautil.imgdata.imgdataload import ImageDataset
  from datautil.mydataloader import InfiniteDataLoader
  
  
  def get_img_dataloader(args):
      rate = 0.2
      trdatalist, tedatalist = [], []
      names = args.img_dataset[args.dataset]
      args.domain_num = len(names)
      for i in range(len(names)):
          if i in args.test_envs:
              tedatalist.append(ImageDataset(args.dataset, args.task, args.data_dir,
                                names[i], i, transform=imgutil.image_test(args.dataset), test_envs=args.test_envs))
          else:
              tmpdatay = ImageDataset(args.dataset, args.task, args.data_dir,
                                      names[i], i, transform=imgutil.image_train(args.dataset), test_envs=args.test_envs).labels
              l = len(tmpdatay)
              if args.split_style == 'strat':
                  lslist = np.arange(l)
                  stsplit = ms.StratifiedShuffleSplit(
                      2, test_size=rate, train_size=1-rate, random_state=args.seed)
                  stsplit.get_n_splits(lslist, tmpdatay)
                  indextr, indexte = next(stsplit.split(lslist, tmpdatay))
              else:
                  indexall = np.arange(l)
                  np.random.seed(args.seed)
                  np.random.shuffle(indexall)
                  ted = int(l*rate)
                  indextr, indexte = indexall[ted:], indexall[:ted]
              tstep_per_epoch = int(len(indextr)/args.batch_size)
              if tstep_per_epoch < args.step_per_epoch:
                  args.step_per_epoch = tstep_per_epoch
              trdatalist.append(ImageDataset(args.dataset, args.task, args.data_dir,
                                names[i], i, transform=imgutil.image_train(args.dataset), indices=indextr, test_envs=args.test_envs))
              tedatalist.append(ImageDataset(args.dataset, args.task, args.data_dir,
                                names[i], i, transform=imgutil.image_test(args.dataset), indices=indexte, test_envs=args.test_envs))
  
      train_loaders = [InfiniteDataLoader(
          dataset=env,
          weights=None,
          batch_size=args.batch_size,
          num_workers=args.N_WORKERS)
          for env in trdatalist]
  
      eval_loaders = [DataLoader(
          dataset=env,
          batch_size=64,
          num_workers=args.N_WORKERS,
          drop_last=False,
          shuffle=False)
          for env in trdatalist+tedatalist]
  
      return train_loaders, eval_loaders
  