o ?Og9@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/python310/lib64/python3.10/fnmatch.pyrs   rT)maxsizetypedcCs<t|trt|d}t|}t|d}nt|}t|jS)Nz ISO-8859-1) isinstancebytesstrrrecompilematch)r Zpat_strZres_strresr r r _compile_pattern,s    rcCsjg}tj|}t|}tjtur!|D] }||r||q|S|D]}|tj|r2||q#|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 rFs rcCs2t}g}|j}dt|}}||kr]||}|d}|dkr.|r(|d|ur,||n+|dkr8|dn!|dkrR|}||krM||dkrM|d}||kr[||d kr[|d}||krs||d krs|d}||krs||d kse||kr||d n|||}d |vr|d d }ng} ||dkr|dn|d} |d | |} | dkrn| ||| | d}| d} q|||} | r| | n| dd 7<tt| dddD]*} | | dd| | dkr| | ddd| | dd| | d<| | =qd dd| D}tdd|}|d}|s$|dn5|dkr.|dn+|ddkr>d|dd}n |ddvrId |}|d|d n|t |||ks||ksdJ|} g}|j}dt| }}||kr| ||ur|| ||d7}||kr| ||us~||kr| ||usJ|d7}||kr|dnW| ||usJg} ||kr| ||ur| | ||d7}||kr| ||usd| } ||kr|d|| nt }|d|d| d|d||ks||ksJd|}d|d S)!zfTranslate a shell PATTERN to a regular expression. There is no way to quote meta-characters. r*?.[!]z\[-\\\TNcss$|] }|ddddVqdS)r&r'r%z\-N)replace).0sr r r sztranslate..z([&~|])z\\\1z(?!)^)r.r"z.*z(?=(?P.*?z))(?P=g)z(?s:z)\Z) objectrlenr*findrangejoinrsubescape _nextgroupnum)r STARraddincjZstuffZchunkskchunkZinpZfixedZgroupnumr r r rPs       ,    @         r)__doc__rrr functools__all__ itertoolsr__next__r8r lru_cacherrrrr r r r s