
    F\h$                         S r SSKrSSKrSSKrSSKr/ SQrS r\R                  " SSS9S 5       rS	 r	S
 r
S rS rS rg)a  Filename 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)filterfnmatchfnmatchcase	translatec                     [         R                  R                  U 5      n [         R                  R                  U5      n[        X5      $ )a  Test 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).
)ospathnormcaser   )namepats     /usr/lib/python3.13/fnmatch.pyr   r      s7     77D!D
''

3
Ct!!    i   T)maxsizetypedc                     [        U [        5      (       a$  [        U S5      n[        U5      n[        US5      nO[        U 5      n[        R
                  " U5      R                  $ )Nz
ISO-8859-1)
isinstancebytesstrr   recompilematch)r   pat_strres_strress       r   _compile_patternr   &   sN    #uc<(G$G\*n::c?   r   c                 n   / n[         R                  R                  U5      n[        U5      n[         R                  [        L a+  U  H#  nU" U5      (       d  M  UR                  U5        M%     U$ U  H@  nU" [         R                  R                  U5      5      (       d  M/  UR                  U5        MB     U$ )zJConstruct a list from those elements of the iterable NAMES that match PAT.)r   r	   r
   r   	posixpathappend)namesr   resultr   r   s        r   r   r   0   s    F
''

3
CS!E	ww)DT{{d#  M DRWW%%d+,,d#  Mr   c                 ,    [        U5      nU" U 5      SL$ )zTest whether FILENAME matches PATTERN, including case.

This is a version of fnmatch() which doesn't case-normalize
its arguments.
N)r   )r   r   r   s      r   r   r   @   s     S!E;d""r   c                 D    [        5       n[        XS5      n[        X!5      $ )z^Translate a shell PATTERN to a regular expression.

There is no way to quote meta-characters.
.)object
_translate_join_translated_parts)r   STARpartss      r   r   r   J   s"     8Ds#&E!%..r   c                    / nUR                   nS[        U 5      peXV:  Ga  X   nUS-   nUS:X  a  U(       a  US   ULa  U" U5        GOUS:X  a
  U" U5        GOUS:X  Ga  UnX:  a  X   S:X  a  US-   nX:  a  X   S:X  a  US-   nX:  a  X   S:w  a  US-   nX:  a
  X   S:w  a  M  X:  a
  U" S	5        GOXU n	S
U	;  a  U	R                  SS5      n	O/ n
X   S:X  a  US-   OUS-   n U R                  S
X5      nUS:  a  OU
R                  XU 5        US-   nUS-   nM8  XU nU(       a  U
R                  U5        OU
S==   S
-  ss'   [	        [        U
5      S-
  SS5       H1  nXS-
     S   X   S   :  d  M  XS-
     S S X   SS  -   XS-
  '   X	 M3     S
R                  S U
 5       5      n	[        R                  " SSU	5      n	US-   nU	(       d	  U" S5        OXU	S:X  a	  U" S5        OIU	S   S:X  a	  SU	SS  -   n	OU	S   S;   a  SU	-   n	U" SU	 S35        OU" [        R                  " U5      5        XV:  a  GM  XV:X  d   eU$ )Nr      *?[!]z\[-\\\      c              3   f   #    U  H'  nUR                  S S5      R                  SS5      v   M)     g7f)r2   r3   r1   z\-N)replace).0ss     r   	<genexpr>_translate.<locals>.<genexpr>   s2      %6.4 &'YYtU%;%C%CC%O%O.4s   /1z([&~|])z\\\1z(?!)r#   ^)r<   r.   )	r   lenr7   findrangejoinr   subescape)r   r'   QUESTION_MARKr   addincjstuffchunkskchunks                r   r%   r%   U   s   
C
**Cc#hq
%FaC8CG4/D	#X#XAu3aCu3aC%CFcMaC %CFcMvE
ae#!MM$6EF"v}!!A#AHHS!/q5!cAh/aCaC   !HEe,r
c)
"3v;q=!R8!A#;r?VYq\9*01+cr*:VYqr]*JFQ3K &	 9  HH %6.4%6 6E z7E:aCKc\HQx3 #eABiqZ/ $u!E7!%		! %@ 6M6Jr   c                    / nUR                   nS[        U 5      pTXE:  a$  X   ULa  U" X   5        US-  nXE:  a	  X   ULa  M  XE:  a  X   UL d   eUS-  nXE:X  a	  U" S5        OwX   ULd   e/ nXE:  a-  X   ULa&  UR                  X   5        US-  nXE:  a	  X   ULa  M&  SR                  U5      nXE:X  a  U" S5        U" U5        OU" SU S35        XE:  a  M  XE:X  d   eSR                  U5      nSU S3$ )	Nr   r*   z.* z(?>.*?)z(?s:z)\Z)r   r=   r@   )inpr'   r   rD   rE   rF   fixeds          r   r&   r&      s#   
C
**Cc#hq
%CF$&CF	Q %CF$& %v~~	Q6IvT!!!ed*LL FA ed* 6IJ&q!"! %" 6M6
''#,C3%sr   )__doc__r   r   r   	functools__all__r   	lru_cacher   r   r   r   r%   r&    r   r   <module>rW      s^   
 
  	 
;"& U$/! 0! #/EP#r   