def customize_base_cfg( cfgname, cfgopt_strs, base_cfg, cfgtype, alias_keys=None, valid_keys=None, offset=0, strict=True, ): """ DEPRICATE """ import re cfg = base_cfg.copy() # Parse dict out of a string # ANYTHING_NOT_BRACE = r'[^\[\]]*\]' ANYTHING_NOT_PAREN_OR_BRACE = r'[^()\[\]]*[\]\)]' cfgstr_options_list = re.split( r',\s*' + ut.negative_lookahead(ANYTHING_NOT_PAREN_OR_BRACE), cfgopt_strs ) # cfgstr_options_list = cfgopt_strs.split(',') cfg_options = ut.parse_cfgstr_list( cfgstr_list=cfgstr_options_list, smartcast=True, oldmode=False ) # Hack for q/d-prefix specific configs remove_prefix_hack(cfg, cfgtype, cfg_options, alias_keys) # Remap keynames based on aliases if alias_keys is not None: # Use new standard keys and remove old aliased keys for key in set(alias_keys.keys()): if key in cfg_options: cfg_options[alias_keys[key]] = cfg_options[key] del cfg_options[key] # Ensure that nothing bad is being updated if strict: parsed_keys = cfg_options.keys() if valid_keys is not None: ut.assert_all_in(parsed_keys, valid_keys, 'keys specified not in valid set') else: ut.assert_all_in( parsed_keys, cfg.keys(), 'keys specified not in default options' ) # Finalize configuration dict cfg.update(cfg_options) cfg['_cfgtype'] = cfgtype cfg['_cfgname'] = cfgname cfg_combo = ut.all_dict_combinations(cfg) # if len(cfg_combo) > 1: for combox, cfg_ in enumerate(cfg_combo, start=offset): # cfg_['_cfgname'] += ';' + str(combox) cfg_['_cfgindex'] = combox for cfg_ in cfg_combo: if len(cfgopt_strs) > 0: cfg_['_cfgstr'] = cfg_['_cfgname'] + ut.NAMEVARSEP + cfgopt_strs else: cfg_['_cfgstr'] = cfg_['_cfgname'] return cfg_combo
def modify_code_indent_formatdict(code, locals_): # Parse out search and replace locations in code ncl1 = ut.negative_lookbehind('{') ncl2 = ut.negative_lookahead('{') ncr1 = ut.negative_lookbehind('}') ncr2 = ut.negative_lookahead('}') left = ncl1 + '{' + ncl2 right = ncr1 + '}' + ncr2 fmtpat = left + ut.named_field('key', '[^}]*') + right spacepat = ut.named_field('indent', '^\s+') pattern = spacepat + fmtpat import re seen_ = set([]) for m in re.finditer(pattern, code, flags=re.MULTILINE): indent = (m.groupdict()['indent']) key = (m.groupdict()['key']) if key in locals_ and key not in seen_: seen_.add(key) locals_[key] = ut.indent_rest(locals_[key], indent)
def customize_base_cfg(cfgname, cfgopt_strs, base_cfg, cfgtype, alias_keys=None, valid_keys=None, offset=0, strict=True): """ DEPRICATE """ import re cfg = base_cfg.copy() # Parse dict out of a string #ANYTHING_NOT_BRACE = r'[^\[\]]*\]' ANYTHING_NOT_PAREN_OR_BRACE = r'[^()\[\]]*[\]\)]' cfgstr_options_list = re.split( r',\s*' + ut.negative_lookahead(ANYTHING_NOT_PAREN_OR_BRACE), cfgopt_strs) #cfgstr_options_list = cfgopt_strs.split(',') cfg_options = ut.parse_cfgstr_list( cfgstr_list=cfgstr_options_list, smartcast=True, oldmode=False) # Hack for q/d-prefix specific configs remove_prefix_hack(cfg, cfgtype, cfg_options, alias_keys) # Remap keynames based on aliases if alias_keys is not None: # Use new standard keys and remove old aliased keys for key in set(alias_keys.keys()): if key in cfg_options: cfg_options[alias_keys[key]] = cfg_options[key] del cfg_options[key] # Ensure that nothing bad is being updated if strict: parsed_keys = cfg_options.keys() if valid_keys is not None: ut.assert_all_in(parsed_keys, valid_keys, 'keys specified not in valid set') else: ut.assert_all_in(parsed_keys, cfg.keys(), 'keys specified not in default options') # Finalize configuration dict cfg.update(cfg_options) cfg['_cfgtype'] = cfgtype cfg['_cfgname'] = cfgname cfg_combo = ut.all_dict_combinations(cfg) #if len(cfg_combo) > 1: for combox, cfg_ in enumerate(cfg_combo, start=offset): #cfg_['_cfgname'] += ';' + str(combox) cfg_['_cfgindex'] = combox for cfg_ in cfg_combo: if len(cfgopt_strs) > 0: cfg_['_cfgstr'] = cfg_['_cfgname'] + ut.NAMEVARSEP + cfgopt_strs else: cfg_['_cfgstr'] = cfg_['_cfgname'] return cfg_combo
import utool as ut import re vim = 0 SLASH = re.escape('\\') LCURL = re.escape(r'{') RCURL = re.escape(r'}') NOT_LCURL = '[^}]' NOPREV_LCURL = ut.negative_lookbehind(r'{', vim=1) ANY_NONGREEDY = '.' + ut.nongreedy_kleene_star(vim=vim) NONEXT_BSLASH = ut.negative_lookahead(SLASH, vim=vim) def GROUP(x): return '(' + x + ')' title = 'section' #tks = [ # ('section', 's'), # ('subsection', 't'), # ('subsubsection', 'u'), ##] #print('--langdef=tex') #print('--langmap=tex:.tex') # --regex-tex=/\\label\{([^}]*)\}/\1/l,label/ # --regex-tex=/\\label\{([^}]*)\}/\1/l,label/ # --regex-tex=/^\s*\\section\{([^}]*)\}/\1/s,section/
def customize_base_cfg(cfgname, cfgopt_strs, base_cfg, cfgtype, alias_keys=None, valid_keys=None, offset=0, strict=True): """ Args: cfgname (str): config name cfgopt_strs (str): mini-language defining key variations base_cfg (dict): specifies the default cfg to customize cfgtype (?): alias_keys (None): (default = None) valid_keys (None): if base_cfg is not specied, this defines the valid keys (default = None) offset (int): (default = 0) strict (bool): (default = True) Returns: list: cfg_combo - list of config dicts defining customized configs based on cfgopt_strs. customized configs always are given an _cfgindex, _cfgstr, and _cfgname key. CommandLine: python -m ibeis.expt.cfghelpers --exec-_customize_base_cfg Example: >>> # DISABLE_DOCTEST >>> from ibeis.expt.cfghelpers import * # NOQA >>> cfgname = 'default' >>> cfgopt_strs = 'dsize=1000,per_name=[1,2]' >>> base_cfg = '?' >>> cfgtype = '?' >>> alias_keys = None >>> valid_keys = None >>> offset = 0 >>> strict = True >>> cfg_combo = customize_base_cfg(cfgname, cfgopt_strs, base_cfg, cfgtype, alias_keys, valid_keys, offset, strict) >>> result = ('cfg_combo = %s' % (str(cfg_combo),)) >>> print(result) """ cfg = base_cfg.copy() # Parse dict out of a string #ANYTHING_NOT_BRACE = r'[^\[\]]*\]' ANYTHING_NOT_PAREN_OR_BRACE = r'[^()\[\]]*[\]\)]' cfgstr_options_list = re.split( r',\s*' + ut.negative_lookahead(ANYTHING_NOT_PAREN_OR_BRACE), cfgopt_strs) #cfgstr_options_list = cfgopt_strs.split(',') cfg_options = ut.parse_cfgstr_list( cfgstr_list=cfgstr_options_list, smartcast=True, oldmode=False) # Hack for q/d-prefix specific configs remove_prefix_hack(cfg, cfgtype, cfg_options, alias_keys) # Remap keynames based on aliases if alias_keys is not None: # Use new standard keys and remove old aliased keys for key in set(alias_keys.keys()): if key in cfg_options: cfg_options[alias_keys[key]] = cfg_options[key] del cfg_options[key] # Ensure that nothing bad is being updated if strict: parsed_keys = cfg_options.keys() if valid_keys is not None: ut.assert_all_in(parsed_keys, valid_keys, 'keys specified not in valid set') else: ut.assert_all_in(parsed_keys, cfg.keys(), 'keys specified not in default options') # Finalize configuration dict cfg.update(cfg_options) cfg['_cfgtype'] = cfgtype cfg['_cfgname'] = cfgname cfg_combo = ut.all_dict_combinations(cfg) #if len(cfg_combo) > 1: for combox, cfg_ in enumerate(cfg_combo, start=offset): #cfg_['_cfgname'] += ';' + str(combox) cfg_['_cfgindex'] = combox for cfg_ in cfg_combo: if len(cfgopt_strs) > 0: cfg_['_cfgstr'] = cfg_['_cfgname'] + NAMEVARSEP + cfgopt_strs else: cfg_['_cfgstr'] = cfg_['_cfgname'] return cfg_combo