class_docstr: Multi-task Configurator designed for SimpleAPI
  
  For simplicity, we assume that certain properties are constant across all tasks:
    batch sizes and eval_subset_num.
  Any more complex, and the user is better off writing the config entirely on their own.
  
  Required:
      train_batch_size
  
  (Task config) Need one of:
      task_config_base_path
      task_config_path_dict
  
  (Eval batch size) Need one of:
      eval_batch_multiplier
      eval_batch_size
  
  (Task cache) Need one of:
      task_cache_base_path
      task_cache_config_dict
  
  (Computing max steps) Need one of:
      epochs
      max_steps
      (Set to 0 if not training)
  
  (Task name list) Specify at least one of:
      train_task_name_list
      train_val_task_name_list
      val_task_name_list
      test_task_name_list
  
  Optional:
      gradient_accumulation_steps
      eval_subset_num
      num_gpus
      train_examples_cap
      warmup_steps_proportion
class_docstr_tok: ["Multi-task","Configurator","designed","for","SimpleAPI","For","simplicity",",","we","assume","that","certain","properties","are","constant","across","all","tasks",":","batch","sizes","and","eval_subset_num",".","Any","more","complex",",","and","the","user","is","better","off","writing","the","config","entirely","on","their","own",".","Required",":","train_batch_size","(","Task","config",")","Need","one","of",":","task_config_base_path","task_config_path_dict","(","Eval","batch","size",")","Need","one","of",":","eval_batch_multiplier","eval_batch_size","(","Task","cache",")","Need","one","of",":","task_cache_base_path","task_cache_config_dict","(","Computing","max","steps",")","Need","one","of",":","epochs","max_steps","(","Set","to","0","if","not","training",")","(","Task","name","list",")","Specify","at","least","one","of",":","train_task_name_list","train_val_task_name_list","val_task_name_list","test_task_name_list","Optional",":","gradient_accumulation_steps","eval_subset_num","num_gpus","train_examples_cap","warmup_steps_proportion"]
code: def parse_task_name_list(cls, task_name_list_arg):
      if task_name_list_arg is None:
          return []
      elif isinstance(task_name_list_arg, str):
          return task_name_list_arg.split(",")
      elif isinstance(task_name_list_arg, list):
          return task_name_list_arg
      else:
          raise TypeError(type(task_name_list_arg))
  
file_path: jiant/jiant/proj/main/scripts/configurator.py
imports: import math
  import os
  import torch
  import jiant.utils.zconf
  import jiant.utils.python.io
  import jiant.utils.python.datastructures
label_desc: Use image node_id 1 for calling the SimpleAPIMultiTaskConfigurator obj's underlying member method code with example usage: obj.parse_task_name_list(cls, task_name_list_arg) and returns: list, task_name_list_arg, task_name_list_arg