docstr: 主要就模仿了 tqdm bar 的创建，为了和 FRichProgress 的接口尽量统一，将 desc 重名为了 description，以及 disable 专为了
  visible 。
  
  :param description:
  :param total:
  :param leave:
  :param ncols:
  :param mininterval:
  :param maxinterval:
  :param miniters:
  :param ascii:
  :param visible:
  :param unit:
  :param unit_scale:
  :param dynamic_ncols:
  :param smoothing:
  :param bar_format:
  :param initial:
  :param postfix:
  :param unit_divisor:
  :param write_bytes:
  :param lock_args:
  :param nrows:
  :param colour:
  :param gui:
  :param kwargs:
  :return:
docstr_tok: ["\u4e3b\u8981\u5c31\u6a21\u4eff\u4e86","tqdm","bar","\u7684\u521b\u5efa\uff0c\u4e3a\u4e86\u548c","FRichProgress","\u7684\u63a5\u53e3\u5c3d\u91cf\u7edf\u4e00\uff0c\u5c06","desc","\u91cd\u540d\u4e3a\u4e86","description\uff0c\u4ee5\u53ca","disable","\u4e13\u4e3a\u4e86","visible","\u3002",":","param","description",":",":","param","total",":",":","param","leave",":",":","param","ncols",":",":","param","mininterval",":",":","param","maxinterval",":",":","param","miniters",":",":","param","ascii",":",":","param","visible",":",":","param","unit",":",":","param","unit_scale",":",":","param","dynamic_ncols",":",":","param","smoothing",":",":","param","bar_format",":",":","param","initial",":",":","param","postfix",":",":","param","unit_divisor",":",":","param","write_bytes",":",":","param","lock_args",":",":","param","nrows",":",":","param","colour",":",":","param","gui",":",":","param","kwargs",":",":","return",":"]
code: def add_task(
      self,
      description=None,
      total=None,
      leave=False,
      ncols=None,
      mininterval=0.1,
      maxinterval=10.0,
      miniters=None,
      ascii=None,
      visible=True,
      unit="it",
      unit_scale=False,
      dynamic_ncols=False,
      smoothing=0.3,
      bar_format=None,
      initial=0,
      postfix=None,
      unit_divisor=1000,
      write_bytes=None,
      lock_args=None,
      nrows=None,
      colour=None,
      gui=False,
      **kwargs,
  ):
      """
      主要就模仿了 tqdm bar 的创建，为了和 FRichProgress 的接口尽量统一，将 desc 重名为了 description，以及 disable 专为了
      visible 。
  
      :param description:
      :param total:
      :param leave:
      :param ncols:
      :param mininterval:
      :param maxinterval:
      :param miniters:
      :param ascii:
      :param visible:
      :param unit:
      :param unit_scale:
      :param dynamic_ncols:
      :param smoothing:
      :param bar_format:
      :param initial:
      :param postfix:
      :param unit_divisor:
      :param write_bytes:
      :param lock_args:
      :param nrows:
      :param colour:
      :param gui:
      :param kwargs:
      :return:
      """
      if not _module_available("tqdm"):
          raise ModuleNotFoundError("Package tqdm is not installed.")
      elif not _compare_version("tqdm", operator.ge, "4.57"):
          raise RuntimeError(
              f"Package tqdm>=4.57 is needed, instead of {_get_version('tqdm')}."
          )
  
      from .rich_progress import f_rich_progress
  
      assert (
          not f_rich_progress.not_empty()
      ), "Cannot use tqdm before rich finish loop."
  
      if hasattr(self, "orig_out_err"):
          file = self.orig_out_err[0]
      else:
          file = sys.stdout
  
      bar = tqdm(
          iterable=None,
          desc=description,
          total=total,
          leave=leave,
          file=file,
          ncols=ncols,
          mininterval=mininterval,
          maxinterval=maxinterval,
          miniters=miniters,
          ascii=ascii,
          disable=not visible,
          unit=unit,
          unit_scale=unit_scale,
          dynamic_ncols=dynamic_ncols,
          smoothing=smoothing,
          bar_format=bar_format,
          initial=initial,
          position=len(self.bars),
          postfix=postfix,
          unit_divisor=unit_divisor,
          write_bytes=write_bytes,
          lock_args=lock_args,
          nrows=nrows,
          colour=colour,
          gui=gui,
          **kwargs,
      )
      _uuid = str(uuid.uuid1())
      self.bars[_uuid] = bar
      if not hasattr(self, "orig_out_err") and not is_notebook():
          from tqdm.contrib import DummyTqdmFile
  
          self.orig_out_err = sys.stdout, sys.stderr
          sys.stdout, sys.stderr = map(DummyTqdmFile, self.orig_out_err)
  
      return _uuid
  
imports: import uuid
  import sys
  from ...envs.utils import _module_available, _compare_version, _get_version
  from ...envs import get_global_rank
  from .utils import is_notebook
  from ..log import logger
  import operator
label_desc: Use image node_id 2 for calling the TqdmProgress obj's underlying member method code with example usage: obj.add_task(description, total, leave, ncols, mininterval, maxinterval, miniters, ascii, visible, unit, unit_scale, dynamic_ncols, smoothing, bar_format, initial, postfix, unit_divisor, write_bytes, lock_args, nrows, colour, gui) and returns: _uuid