class_docstr: Provide an opt-producer and CLI argument parser.
  
  Pseudo-extension of ``argparse`` which sets a number of parameters
  for the ParlAI framework. More options can be added specific to other
  modules by passing this object and calling ``add_arg()`` or
  ``add_argument()`` on it.
  
  For an example, see ``parlai.core.dict.DictionaryAgent.add_cmdline_args``.
  
  :param add_parlai_args:
      (default True) initializes the default arguments for ParlAI
      package, including the data download paths and task arguments.
  :param add_model_args:
      (default False) initializes the default arguments for loading
      models, including initializing arguments from that model.
class_docstr_tok: ["Provide","an","opt-producer","and","CLI","argument","parser",".","Pseudo-extension","of","``","argparse","``","which","sets","a","number","of","parameters","for","the","ParlAI","framework",".","More","options","can","be","added","specific","to","other","modules","by","passing","this","object","and","calling","``","add_arg","(",")","``","or","``","add_argument","(",")","``","on","it",".","For","an","example",",","see","``","parlai.core.dict.DictionaryAgent.add_cmdline_args","``",".",":","param","add_parlai_args",":","(","default","True",")","initializes","the","default","arguments","for","ParlAI","package",",","including","the","data","download","paths","and","task","arguments",".",":","param","add_model_args",":","(","default","False",")","initializes","the","default","arguments","for","loading","models",",","including","initializing","arguments","from","that","model","."]
docstr: Set the value for opt['datapath'] and opt['download_path'].
  
  Sets the value for opt['datapath'] and opt['download_path'], correctly
  respecting environmental variables and the default.
docstr_tok: ["Set","the","value","for","opt","[","'datapath","'","]","and","opt","[","'download_path","'","]",".","Sets","the","value","for","opt","[","'datapath","'","]","and","opt","[","'download_path","'","]",",","correctly","respecting","environmental","variables","and","the","default","."]
code: def _infer_datapath(self, opt):
      """
      Set the value for opt['datapath'] and opt['download_path'].
  
      Sets the value for opt['datapath'] and opt['download_path'], correctly
      respecting environmental variables and the default.
      """
      # set environment variables
      # Priority for setting the datapath (same applies for download_path):
      # --datapath -> os.environ['PARLAI_DATAPATH'] -> <self.parlai_home>/data
      if opt.get("datapath"):
          os.environ["PARLAI_DATAPATH"] = opt["datapath"]
      elif os.environ.get("PARLAI_DATAPATH") is None:
          DEFAULT_DATAPATH = None
          try:
              # internal fbcode-wide default
              import parlai_fb
  
              DEFAULT_DATAPATH = parlai_fb.DEFAULT_DATAPATH
          except ImportError:
              pass
          if not DEFAULT_DATAPATH:
              # TODO: switch to ~/.parlai/
              DEFAULT_DATAPATH = os.path.join(self.parlai_home, "data")
          os.environ["PARLAI_DATAPATH"] = DEFAULT_DATAPATH
  
      opt["datapath"] = os.environ["PARLAI_DATAPATH"]
  
      return opt
  
imports: import argparse
  import importlib
  import os
  import sys
  import datetime
  import parlai
  import parlai.utils.logging
  from parlai.core.build_data import modelzoo_path
  from parlai.core.loader import load_teacher_module, load_agent_module, load_world_module
  from parlai.tasks.tasks import ids_to_tasks
  from parlai.core.opt import Opt
  from parlai.utils.io import PathManager
  from typing import List, Optional
label_desc: Use image node_id 19 for calling the ParlaiParser obj's underlying member method code with example usage: obj._infer_datapath(opt) and returns: opt