eaiovnaovbqoebvqoeavibavo B  f@sjdZddlZddlZddlZddlZddddgZddZejdd d d d Zd dZ ddZ ddZ dS)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.) Nfilterfnmatch fnmatchcase translatecCs"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/python37/lib64/python3.7/fnmatch.pyrs  T)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    rcCspg}tj|}t|}tjtkrDxH|D]}||r(||q(Wn(x&|D]}|tj|rJ||qJW|S)z3Return the subset of the list NAMES that match PAT.)rrrr posixpathappend)namesr resultrr r r r r0s    cCst|}||dk S)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 r@sc Csdt|}}d}x||kr||}|d}|dkrB|d}q|dkrT|d}q|dkr|}||kr~||d kr~|d}||kr||d kr|d}x ||kr||d kr|d}qW||kr|d }q|||}d |kr|d d}ng}||d kr |dn|d}xB|d||}|dkr0P|||||d}|d}qW||||ddd|D}tdd|}|d}|dd krd|dd}n|ddkrd |}d||f}q|t|}qWd|S)zfTranslate a shell PATTERN to a regular expression. There is no way to quote meta-characters. r*z.*?.[!]z\[z--\z\\-css"|]}|ddddVqdS)r$z\\r&z\-N)replace).0sr r r tsztranslate..z([&~|])z\\\1^N)r,r!z%s[%s]z (?s:%s)\Z)lenr(findrjoinrsubescape) r inrcjZstuffZchunkskr r r rJsV         ) __doc__rrr functools__all__r lru_cacherrrrr r r r  s