docs: def parse_cfgstr_name_options(cfgstr):
      r"""
      Args:
          cfgstr (str):
  
      Returns:
          tuple: (cfgname, cfgopt_strs, subx)
  
      CommandLine:
          python -m utool.util_gridsearch --test-parse_cfgstr_name_options
  
      Example:
          >>> # ENABLE_DOCTEST
          >>> from utool.util_gridsearch import *  # NOQA
          >>> import utool as ut
          >>> cfgstr = 'default' + NAMEVARSEP + 'myvar1=myval1,myvar2=myval2'
          >>> (cfgname, cfgopt_strs, subx) = parse_cfgstr_name_options(cfgstr)
          >>> result = ('(cfgname, cfg_optstrs, subx) = %s' % (ut.repr2((cfgname, cfgopt_strs, subx)),))
          >>> print(result)
          (cfgname, cfg_optstrs, subx) = ('default', 'myvar1=myval1,myvar2=myval2', None)
  
      Example:
          >>> # ENABLE_DOCTEST
          >>> from utool.util_gridsearch import *  # NOQA
          >>> import utool as ut
          >>> cfgstr = 'default[0:1]' + NAMEVARSEP + 'myvar1=myval1,myvar2=myval2'
          >>> (cfgname, cfgopt_strs, subx) = parse_cfgstr_name_options(cfgstr)
          >>> result = ('(cfgname, cfg_optstrs, subx) = %s' % (ut.repr2((cfgname, cfgopt_strs, subx)),))
          >>> print(result)
          (cfgname, cfg_optstrs, subx) = ('default', 'myvar1=myval1,myvar2=myval2', slice(0, 1, None))
  
      Example:
          >>> # ENABLE_DOCTEST
          >>> from utool.util_gridsearch import *  # NOQA
          >>> import utool as ut
          >>> cfgstr = 'default[0]' + NAMEVARSEP + 'myvar1=myval1,myvar2=myval2'
          >>> (cfgname, cfgopt_strs, subx) = parse_cfgstr_name_options(cfgstr)
          >>> result = ('(cfgname, cfg_optstrs, subx) = %s' % (ut.repr2((cfgname, cfgopt_strs, subx)),))
          >>> print(result)
          (cfgname, cfg_optstrs, subx) = ('default', 'myvar1=myval1,myvar2=myval2', [0])
      """
      import utool as ut
      cfgname_regex = ut.named_field('cfgname', r'[^\[:]*')  # name is optional
      subx_regex = r'\[' + ut.named_field('subx', r'[^\]]*') + r'\]'
      cfgopt_regex = re.escape(NAMEVARSEP) + ut.named_field('cfgopt', '.*')
      regex_str = cfgname_regex + ('(%s)?' % (subx_regex,)) + ('(%s)?' % (cfgopt_regex,))
      match = re.match(regex_str, cfgstr)
      assert match is not None, 'parsing of cfgstr failed'
      groupdict = match.groupdict()
      cfgname = groupdict['cfgname']
      if cfgname == '':
          cfgname = 'default'
      cfgopt_strs = groupdict.get('cfgopt', None)
      subx_str = groupdict.get('subx', None)
      if cfgopt_strs is None:
          cfgopt_strs = ''
      subx = ut.fuzzy_subset(subx_str)
      return cfgname, cfgopt_strs, subx