a DOgF)@sdZgdZddlZdZdZdZeeZdZedd Zd Z d Z eee eZ dd d Z ddl ZddlmZiZGdddZeGdddZdS)anA collection of string constants. Public module variables: whitespace -- a string containing all ASCII whitespace ascii_lowercase -- a string containing all ASCII lowercase letters ascii_uppercase -- a string containing all ASCII uppercase letters ascii_letters -- a string containing all ASCII letters digits -- a string containing all ASCII decimal digits hexdigits -- a string containing all ASCII hexadecimal digits octdigits -- a string containing all ASCII octal digits punctuation -- a string containing all ASCII punctuation characters printable -- a string containing all ASCII characters considered printable ) ascii_lettersascii_lowercaseascii_uppercasecapwordsdigits hexdigits octdigits printable punctuation whitespace FormatterTemplateNz abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789ZabcdefZABCDEF01234567z !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~cCs|pddd||DS)acapwords(s [,sep]) -> string Split the argument into words using split, capitalize each word using capitalize, and join the capitalized words using join. If the optional second argument sep is absent or None, runs of whitespace characters are replaced by a single space and leading and trailing whitespace are removed, otherwise sep is used to split and join the words.  css|]}|VqdSN) capitalize).0xr/usr/lib64/python3.9/string.py 0zcapwords..)joinsplit)sseprrrr%s r)ChainMapcsZeZdZdZdZdZdZejZ fddZ ddZ d d Z e fd d Ze fd dZZS)r z.A string class for supporting $-substitutions.$z(?a:[_a-z][_a-z0-9]*)Nc srtd|jvr|j}nzC) | # Escape sequence of two delimiters (?PzJ) | # delimiter and a Python identifier {(?Pz)} | # delimiter and a braced identifier (?P) # Other ill-formed delimiter exprs ) ) super__init_subclass____dict__r!_reescape delimiter idpatternbraceidpatterncompileflagsVERBOSE)clsr!delimidbid __class__rrr#Es     zTemplate.__init_subclass__cCs ||_dSr)template)selfr3rrr__init__WszTemplate.__init__cCsd|d}|jd|jdd}|s.d}d}n"|td|dd}t|}td||fdS)NinvalidT)keependsz.Invalid placeholder in string: line %d, col %d)startr3 splitlineslenr ValueError)r4moilinescolnolinenorrr_invalid\s zTemplate._invalidc s:tur|n|rt|fdd}j|jS)Ncsd|dp|d}|dur(t|S|ddur<jS|ddurT|tdjdSNnamedbracedescapedr6z#Unrecognized named group in pattern)groupstrr'rDr>r!r?rFmappingr4rrconvertns  z$Template.substitute..convert_sentinel_dict _ChainMapr!subr3r4rMkwsrNrrLr substitutehs   zTemplate.substitutec s:tur|n|rt|fdd}j|jS)Ncs|dp|d}|durFzt|WStyD|YS0|ddurZjS|ddurp|StdjdSrE)rIrJKeyErrorr'r>r!rKrLrrrNs z)Template.safe_substitute..convertrOrSrrLrsafe_substitute{s   zTemplate.safe_substitute)__name__ __module__ __qualname____doc__r'r(r)r% IGNORECASEr+r#r5rDrPrUrW __classcell__rrr1rr 9s  r c@sVeZdZddZddZdddZdd Zd d Zd d ZddZ ddZ ddZ dS)r cOs||||Sr)vformat)r4 format_stringargskwargsrrrformatszFormatter.formatcCs.t}|||||d\}}|||||S)N)set_vformatcheck_unused_args)r4r_r`ra used_argsresult_rrrr^szFormatter.vformatr c Cs|dkrtdg}||D]\}} } } |r8||| dur| dkrj|durXtdt|} |d7}n| r|r~tdd}|| ||\} } || || | } |j| ||||d|d\} }|| | | qd ||fS)Nr zMax string recursion exceededr9FzJcannot switch from manual field specification to automatic field numberingr8)auto_arg_index) r>parseappendrJisdigit get_fieldadd convert_fieldre format_fieldr)r4r_r`rargrecursion_depthrjrh literal_text field_name format_spec conversionobjarg_usedrrrres6     zFormatter._vformatcCst|tr||S||SdSr) isinstanceint)r4keyr`rarrr get_values zFormatter.get_valuecCsdSrr)r4rgr`rarrrrfszFormatter.check_unused_argscCs t||Sr)rb)r4valuerurrrrqszFormatter.format_fieldcCsN|dur |S|dkrt|S|dkr,t|S|dkrrb)r4r}rvrrrrpszFormatter.convert_fieldcCs t|Sr)_stringformatter_parser)r4r_rrrrkszFormatter.parsec CsJt|\}}||||}|D] \}}|r8t||}q ||}q ||fSr)rformatter_field_name_splitr|getattr) r4rtr`rafirstrestrwis_attrr@rrrrn s   zFormatter.get_fieldN)r ) rXrYrZrbr^rer|rfrqrprkrnrrrrr s 6 r )N)r[__all__rr rrrrrrr rrrer% collectionsrrQrPr r#r rrrrs$   Y