@@ -936,42 +936,12 @@ class runopt:
936936 Represents the metadata about the specific run option
937937 """
938938
939- class AutoAlias (IntEnum ):
940- snake_case = 0x1
941- SNAKE_CASE = 0x2
942- camelCase = 0x4
943-
944- @staticmethod
945- def convert_to_camel_case (alias : str ) -> str :
946- words = re .split (r"[_\-\s]+|(?<=[a-z])(?=[A-Z])" , alias )
947- words = [w for w in words if w ] # Remove empty strings
948- if not words :
949- return ""
950- return words [0 ].lower () + "" .join (w .capitalize () for w in words [1 :])
951-
952- @staticmethod
953- def convert_to_snake_case (alias : str ) -> str :
954- alias = re .sub (r"[-\s]+" , "_" , alias )
955- alias = re .sub (r"([a-z0-9])([A-Z])" , r"\1_\2" , alias )
956- alias = re .sub (r"([A-Z]+)([A-Z][a-z])" , r"\1_\2" , alias )
957- return alias .lower ()
958-
959- @staticmethod
960- def convert_to_const_case (alias : str ) -> str :
961- return runopt .AutoAlias .convert_to_snake_case (alias ).upper ()
962-
963- class alias (str ):
964- pass
965-
966- class deprecated (str ):
967- pass
968-
969939 default : CfgVal
970940 opt_type : Type [CfgVal ]
971941 is_required : bool
972942 help : str
973- aliases : set [ alias ] | None = None
974- deprecated_aliases : set [ deprecated ] | None = None
943+ aliases : list [ str ] | None = None
944+ deprecated_aliases : list [ str ] | None = None
975945
976946 @property
977947 def is_type_list_of_str (self ) -> bool :
@@ -1257,85 +1227,23 @@ def cfg_from_json_repr(self, json_repr: str) -> Dict[str, CfgVal]:
12571227 cfg [key ] = val
12581228 return cfg
12591229
1260- def _generate_aliases (
1261- self , auto_alias : int , aliases : set [str ]
1262- ) -> set [runopt .alias ]:
1263- generated_aliases = set ()
1264- for alias in aliases :
1265- if auto_alias & runopt .AutoAlias .camelCase :
1266- generated_aliases .add (runopt .AutoAlias .convert_to_camel_case (alias ))
1267- if auto_alias & runopt .AutoAlias .snake_case :
1268- generated_aliases .add (runopt .AutoAlias .convert_to_snake_case (alias ))
1269- if auto_alias & runopt .AutoAlias .SNAKE_CASE :
1270- generated_aliases .add (runopt .AutoAlias .convert_to_const_case (alias ))
1271- return generated_aliases
1272-
1273- def _get_primary_key_and_aliases (
1274- self ,
1275- cfg_key : list [str | int ] | str ,
1276- ) -> tuple [str , set [runopt .alias ], set [runopt .deprecated ]]:
1277- """
1278- Returns the primary key and aliases for the given cfg_key.
1279- """
1280- if isinstance (cfg_key , str ):
1281- return cfg_key , set (), set ()
1282-
1283- if len (cfg_key ) == 0 :
1284- raise ValueError ("cfg_key must be a non-empty list" )
1285-
1286- if isinstance (cfg_key [0 ], runopt .alias ) or isinstance (
1287- cfg_key [0 ], runopt .deprecated
1288- ):
1289- warnings .warn (
1290- "The main name of the run option should be the head of the list." ,
1291- UserWarning ,
1292- stacklevel = 2 ,
1293- )
1294- primary_key = None
1295- auto_alias = 0x0
1296- aliases = set [runopt .alias ]()
1297- deprecated_aliases = set [runopt .deprecated ]()
1298- for name in cfg_key :
1299- if isinstance (name , runopt .alias ):
1300- aliases .add (name )
1301- elif isinstance (name , runopt .deprecated ):
1302- deprecated_aliases .add (name )
1303- elif isinstance (name , int ):
1304- auto_alias = auto_alias | name
1305- else :
1306- if primary_key is not None :
1307- raise ValueError (
1308- f" Given more than one primary key: { primary_key } , { name } . Please use runopt.alias type for aliases. "
1309- )
1310- primary_key = name
1311- if primary_key is None or primary_key == "" :
1312- raise ValueError (
1313- "Missing cfg_key. Please provide one other than the aliases."
1314- )
1315- if auto_alias != 0x0 :
1316- aliases_to_generate_for = aliases | {primary_key }
1317- additional_aliases = self ._generate_aliases (
1318- auto_alias , aliases_to_generate_for
1319- )
1320- aliases .update (additional_aliases )
1321- return primary_key , aliases , deprecated_aliases
1322-
13231230 def add (
13241231 self ,
1325- cfg_key : str | list [ str | int ] ,
1232+ cfg_key : str ,
13261233 type_ : Type [CfgVal ],
13271234 help : str ,
13281235 default : CfgVal = None ,
13291236 required : bool = False ,
1237+ aliases : Optional [list [str ]] = None ,
1238+ deprecated_aliases : Optional [list [str ]] = None ,
13301239 ) -> None :
13311240 """
13321241 Adds the ``config`` option with the given help string and ``default``
13331242 value (if any). If the ``default`` is not specified then this option
13341243 is a required option.
13351244 """
1336- primary_key , aliases , deprecated_aliases = self ._get_primary_key_and_aliases (
1337- cfg_key
1338- )
1245+ aliases = aliases or []
1246+ deprecated_aliases = deprecated_aliases or []
13391247 if required and default is not None :
13401248 raise ValueError (
13411249 f"Required option: { cfg_key } must not specify default value. Given: { default } "
@@ -1346,12 +1254,20 @@ def add(
13461254 f"Option: { cfg_key } , must be of type: { type_ } ."
13471255 f" Given: { default } ({ type (default ).__name__ } )"
13481256 )
1349- opt = runopt (default , type_ , required , help , aliases , deprecated_aliases )
1257+
1258+ opt = runopt (
1259+ default ,
1260+ type_ ,
1261+ required ,
1262+ help ,
1263+ list (set (aliases )),
1264+ list (set (deprecated_aliases )),
1265+ )
13501266 for alias in aliases :
1351- self ._alias_to_key [alias ] = primary_key
1267+ self ._alias_to_key [alias ] = cfg_key
13521268 for deprecated_alias in deprecated_aliases :
1353- self ._alias_to_key [deprecated_alias ] = primary_key
1354- self ._opts [primary_key ] = opt
1269+ self ._alias_to_key [deprecated_alias ] = cfg_key
1270+ self ._opts [cfg_key ] = opt
13551271
13561272 def update (self , other : "runopts" ) -> None :
13571273 self ._opts .update (other ._opts )
0 commit comments