a DOgt@s|dZddlZddlZddlZddlZgdZddlmZejZ [ddZ ej ddd d d Z d d Z ddZddZdS)aFilename matching with shell patterns. fnmatch(FILENAME, PATTERN) matches according to the local convention. fnmatchcase(FILENAME, PATTERN) always takes case in account. The functions operate by translating the pattern into a regular expression. They cache the compiled regular expressions for speed. The function translate(PATTERN) returns a regular expression corresponding to PATTERN. (It does not compile it.) N)filterfnmatch fnmatchcase translate)countcCs"tj|}tj|}t||S)aTest whether FILENAME matches PATTERN. Patterns are Unix shell style: * matches everything ? matches any single character [seq] matches any character in seq [!seq] matches any char not in seq An initial period in FILENAME is not special. Both FILENAME and PATTERN are first case-normalized if the operating system requires it. If you don't want this, use fnmatchcase(FILENAME, PATTERN). )ospathnormcaser)namepatr ,/opt/alt/python39/lib64/python3.9/fnmatch.pyrs  rT)maxsizetypedcCs<t|tr(t|d}t|}t|d}nt|}t|jS)Nz ISO-8859-1) isinstancebytesstrrrecompilematch)r Zpat_strZres_strresr r r _compile_pattern,s    rcCshg}tj|}t|}tjtur@|D]}||r&||q&n$|D]}|tj|rD||qD|S)zJConstruct a list from those elements of the iterable NAMES that match PAT.)rrr r posixpathappend)namesr resultrr r r r r6s   rcCst|}||duS)zTest whether FILENAME matches PATTERN, including case. This is a version of fnmatch() which doesn't case-normalize its arguments. N)r)r r rr r r rFsrcCs t}g}|j}dt|}}||kr||}|d}|dkrZ|rP|d|urX||q|dkrl|dq|dkr|}||kr||dkr|d}||kr||d kr|d}||kr||d kr|d}q||kr|d q|||}d |vr|d d }ng} ||dkr"|dn|d} |d| |} | dkrFql| ||| | d}| d} q*| |||ddd| D}tdd|}|d}|ddkrd|dd}n|ddvrd |}|d|d q|t|q|} g}|j}dt| }}||krL| ||urL|| ||d7}q||kr|d7}||krt|dqg} ||kr| ||ur| | ||d7}qxd| } ||kr|d|| n"t } |d| d| d| dqLd|}d|dS) zfTranslate a shell PATTERN to a regular expression. There is no way to quote meta-characters. r*?.[!]z\[z--\\\-css"|]}|ddddVqdS)r%r&r(z\-N)replace).0sr r r ~sztranslate..z([&~|])z\\\1^N)r.r"z.*z(?=(?P.*?z))(?P=g)z(?s:z)\Z) objectrlenr*findjoinrsubescape _nextgroupnum)r STARraddincjZstuffZchunkskZinpZfixedZgroupnumr r r rPs                     r)__doc__rrr functools__all__ itertoolsr__next__r7r lru_cacherrrrr r r r s