
    F\hM                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	/ SQr
SSSSS.S jrSSSSS.S jr S&S jrS&S	 jrS&S
 jrSrS rS rS&S jrS rS rS&S jrS rS rS r\R4                  " S5      r\R4                  " S5      rS rS rS rS r Sr!\RD                  \#" \SS5      -  r$\%" 5       r&SSSS.S jr'\RP                  " SS 9S'S! j5       r) " S" S#5      r* " S$ S%\*5      r+g)(zFilename globbing utility.    N)globiglobescape	translateFroot_dirdir_fd	recursiveinclude_hiddenc          
      *    [        [        XX#US95      $ )a  Return a list of paths matching a pathname pattern.

The pattern may contain simple shell-style wildcards a la
fnmatch. Unlike fnmatch, filenames starting with a
dot are special cases that are not matched by '*' and '?'
patterns by default.

If `include_hidden` is true, the patterns '*', '?', '**'  will match hidden
directories.

If `recursive` is true, the pattern '**' will match any files and
zero or more directories and subdirectories.
r   )listr   )pathnamer   r	   r
   r   s        /usr/lib/python3.13/glob.pyr   r      s     h&%35 6 6    c          	      x   [         R                  " SX5        [         R                  " SXX5        Ub  [        R                  " U5      nOU SS n[	        XX#SUS9nU (       a  U(       a@  [        U SS 5      (       a-   [        U5      nU(       a  [        R                  " U4U5      nU$ U$ ! [         a     U$ f = f)ap  Return an iterator which yields the paths matching a pathname pattern.

The pattern may contain simple shell-style wildcards a la
fnmatch. However, unlike fnmatch, filenames starting with a
dot are special cases that are not matched by '*' and '?'
patterns.

If recursive is true, the pattern '**' will match any files and
zero or more directories and subdirectories.
z	glob.globzglob.glob/2Nr   Fr      )
sysauditosfspath_iglob_isrecursivenext	itertoolschainStopIteration)r   r   r	   r
   r   itss          r   r   r   "   s     IIk8/IImX(C99X&BQ<	Fu-
/By\(2A,%?%?	RA__aT2. I2I  	I	s   =*B+ +
B98B9c           	   #     #    [         R                  R                  U 5      u  pg[        U 5      (       dN  U(       a   eU(       a  [	        [        X5      U5      (       a  U v   g [        [        X5      U5      (       a  U v   g U(       d?  U(       a$  [        U5      (       a  [        XX$US9 S h  vN   g [        XX$US9 S h  vN   g X`:w  a  [        U5      (       a  [        XaX#SUS9nOU/n[        U5      (       a%  U(       a  [        U5      (       a  [        n	O[        n	O[        n	U H=  nU	" [        X5      XrUUS9 H$  n
[         R                  R                  Xj5      v   M&     M?     g  N N7f)Nr   T)r   pathsplit	has_magic_lexists_join_isdirr   _glob2_glob1r   _glob0join)r   r   r	   r
   dironlyr   dirnamebasenamedirsglob_in_dirnames              r   r   r   ?   sM    h/GX{h16::
 	 eH.77h//h&,:< < <
 	 h&-;= = = y11gD%35 yh// K Kh 8(G.<>D'',,w--> +<=s%   B,E0.E,/E0E.B*E0.E0c                     [        XU5      nU(       d  [        U5      (       d	  S U 5       n[        R                  " XQ5      $ )Nc              3   J   #    U  H  n[        U5      (       a  M  Uv   M     g 7fN)	_ishidden).0xs     r   	<genexpr>_glob1.<locals>.<genexpr>o   s     6Eq1Es   #	#)_listdirr4   fnmatchfilter)r,   patternr	   r+   r   namess         r   r(   r(   l   s4    Wg.Ei006E6>>%))r   c                 z    U(       a   [        [        X5      U5      (       a  U/$  / $ [        X5      (       a  U/$ / $ r3   )r$   r%   r&   )r,   r-   r	   r+   r   s        r   r)   r)   r   sE    E',f55: 6 I '"":Ir   z{name} is deprecated and will be removed in Python {remove}. Use glob.glob and pass a directory to its root_dir argument instead.c                 N    SS K nUR                  S[        SS9  [        XS S5      $ )Nr   z
glob.glob0      removeF)warnings_deprecated_deprecated_function_messager)   r,   r<   rE   s      r   glob0rI      *    'CGT'D%00r   c                 N    SS K nUR                  S[        SS9  [        XS S5      $ )Nr   z
glob.glob1r@   rC   F)rE   rF   rG   r(   rH   s      r   glob1rL      rJ   r   c              #      #    [        U5      (       d   eU (       a  [        X5      (       a  US S v   [        XUUS9 S h  vN   g  N7f)Nr   r   )r   r&   	_rlistdir)r,   r<   r	   r+   r   s        r   r'   r'      sH         fW--bqk'(68 8 8s   ?A	AA	c              #     #     S nS nUbK  U (       a  [         R                  " U [        US9=p5OUn[        U [        5      (       a  [         R
                  nOJU (       a  U nO@[        U [        5      (       a  [	        [         R                  S5      nO[         R                  n [         R                  " U5       nU HI  n U(       a  UR                  5       (       a)  Ub  U" UR                  5      v   M9  UR                  v   MI  MK     S S S 5        Ub  [         R                  " U5        g g ! [         a     M}  f = f! , (       d  f       N:= f! Ub  [         R                  " U5        f f = f! [         a     g f = f7f)Nr	   ASCII)r   open_dir_open_flags
isinstancebytesfsencodecurdirscandiris_dirr0   OSErrorclose)r,   r	   r+   fdrV   argr   entrys           r   _iterdirr_      s0    777OFKKS'5));;C''		7+C))C	CBE&%,,..'3&.uzz&: :&+jj 0	 +9   ! ~  #  ! ~  s   E;BE+ !E 7D;>3D*1D;3D*D;E E+ (E;*
D84D;7D88D;;
E	E E((E+ +
E85E;7E88E;c                     [         R                  " [        XU5      5       n[        U5      sS S S 5        $ ! , (       d  f       g = fr3   )
contextlibclosingr_   r   )r,   r	   r+   r   s       r   r9   r9      s-    			HWg>	?2Bx 
@	?	?s	   6
Ac              #      #    [        XU5      nU HS  nU(       d  [        U5      (       a  M  Uv   U (       a  [        X5      OUn[        XaUUS9 H  n[        XW5      v   M     MU     g 7f)Nr   )r9   r4   r%   rN   )r,   r	   r+   r   r=   r6   r!   ys           r   rN   rN      sY     Wg.E1G(/5$QDtW.<>Ak!>	 s
   'A)<A)c                     Uc  [         R                  R                  U 5      $  [         R                  " XS9  g! [        [
        4 a     gf = f)NrP   TF)r   r!   lexistslstatrZ   
ValueError)r   r	   s     r   r$   r$      sI    ~wwx((
)  Z  s   9 AAc                     Uc  [         R                  R                  U 5      $  [         R                  " XS9n[        R                  " UR
                  5      $ ! [        [        4 a     gf = f)NrP   F)r   r!   isdirstatS_ISDIRst_moderZ   rh   )r   r	   sts      r   r&   r&      s[    ~ww}}X&&(WWX- ||BJJ'' Z  s   A A+*A+c                 r    U (       a  U(       d  U =(       d    U$ [         R                  R                  X5      $ r3   )r   r!   r*   )r,   r-   s     r   r%   r%      s%    ("("77<<**r   z([*?[])s   ([*?[])c                     [        U [        5      (       a  [        R                  U 5      nUS L$ [        R                  U 5      nUS L$ r3   )rT   rU   magic_check_bytessearchmagic_check)r   matchs     r   r#   r#      sI    !U!((+  ""1%r   c                     U S   S;   $ )Nr   )..    r!   s    r   r4   r4      s    7n$$r   c                 @    [        U [        5      (       a  U S:H  $ U S:H  $ )Ns   ****)rT   rU   )r<   s    r   r   r      s$    '5!!%$r   c                     [         R                  R                  U 5      u  p[        U [        5      (       a  [
        R                  SU 5      n X-   $ [        R                  SU 5      n X-   $ )z#Escape all special characters.
    s   [\1]z[\1])r   r!   
splitdriverT   rU   rq   subrs   )r   drives     r   r   r      s_    
 gg((2OE(E""$((8<  ??7H5r   ) rv   z..O_DIRECTORYr
   r   sepsc                &   U(       dn  [         R                  R                  (       a5  [         R                  R                  [         R                  R                  4nO[         R                  R                  nSR	                  [        [        R                  U5      5      n[        U5      S:  a  SU S3OUnSU S3nU(       a  U S3nU U 3nSU S3n	S	n
OSU S
U S3nU U 3nSU S3n	U	 SU S3n
/ n[        R                  " XP5      n[        U5      S-
  n[        U5       H  u  pUS:X  a  UR                  X:  a  UOU5        M%  U(       a>  US:X  a8  X:  a   XS-      S:w  a  UR                  U	5        MU  MW  UR                  U
5        Mj  U(       aJ  U(       d  US   S;   a  UR                  S5        UR                  [        R                  " X S3U5      5        X:  d  M  UR                  U5        M     SR	                  U5      nSU S3$ )a  Translate a pathname with shell wildcards to a regular expression.

If `recursive` is true, the pattern segment '**' will match any number of
path segments.

If `include_hidden` is true, wildcards can match path segments beginning
with a dot ('.').

If a sequence of separator characters is given to `seps`, they will be
used to split the pattern into segments and match path separators. If not
given, os.path.sep and os.path.altsep (where available) are used.
r      []z[^+z(?:.+z)?z.*z.]*z(?:z)*r{   r   z*?z(?!\.)z(?s:z)\Z)r   r!   altsepsepr*   maprer   lenr"   	enumerateappendextendr:   
_translate)patr
   r   r   escaped_sepsany_sepnot_sepone_last_segmentone_segmentany_segmentsany_last_segmentsresultspartslast_part_idxidxpartress                    r   r   r     s    77>>GGKK0D77;;D773ryy$/0L%(Y],q!G<."G%Ya=)*7)4wir* ~Ry:)*7)4[M,+nC0@/ADGHHW"EJNMu%	3;NN#*=;CST44<"q>T)NN<0 * 01%$q'T/NN9-w11$)1wOP"w' &  '''
C3%sr   i   )maxsizec                     U(       a  [         R                  O[         R                  n[        XSUS9n[         R                  " XTS9R
                  $ )zOCompile given glob pattern to a re.Pattern object (observing case
sensitivity).Tr   )flags)r   NOFLAG
IGNORECASEr   compilert   )r   r   case_sensitiver
   r   regexs         r   _compile_patternr   B  s8     (BIIR]]Ect#NE::e)///r   c                       \ rS rSrSrSS jr\R                  " S5      r\R                  " SS5      r	\
S 5       r\
S 5       r\
S	 5       rS
 rS rS rS rS rS rSS jrSrg)_GlobberiK  z?Class providing shell-style pattern matching and globbing.
    c                 4    Xl         X l        X0l        X@l        g r3   )r   r   case_pedanticr
   )selfr   r   r   r
   s        r   __init___Globber.__init__O  s    ,*"r   rg   joinpathr   c                 J    [         R                  " U R                  5       5      $ )zEmulates os.scandir(), which returns an object that can be used as
a context manager. This method is called by walk() and glob().
)ra   nullcontextiterdirry   s    r   rX   _Globber.scandirZ  s    
 %%dlln55r   c                 >    U R                  U R                  U-   5      $ )z(Appends text to the given path.
        )with_segments	_raw_path)r!   texts     r   concat_path_Globber.concat_patha  s     !!$..4"788r   c                     U $ )z=Returns the path of an entry yielded from scandir().
        rx   )r^   s    r   parse_entry_Globber.parse_entryg  s	     r   c                 X    [        XR                  U R                  U R                  5      $ r3   )r   r   r   r
   )r   r   s     r   r   _Globber.compileo  s    XXt/B/BDNNSSr   c                 N   U(       d  U R                   $ UR                  5       nU R                  (       a  US:X  a  U R                  nOWU[        ;   a  U R
                  nO@U R                  (       d#  [        R                  U5      c  U R                  nOU R                  nU" X!5      $ )zReturns a function that selects from a given path, walking and
filtering according to the glob-style pattern parts in *parts*.
r{   )select_existspopr
   recursive_selector_special_partsspecial_selectorr   rs   rr   literal_selectorwildcard_selector)r   r   r   selectors       r   r   _Globber.selectorr  s     %%%yy{>>ddl..H^#,,H##(:(:4(@(H,,H--H$$r   c                 B   ^ ^^ T R                  U5      mSUUU 4S jjnU$ )zLReturns a function that selects special children of the given path.
        c                 V   > TR                  TR                  U 5      T5      n T" X5      $ r3   r   	add_slashr!   existsr   select_nextr   s     r   select_special1_Globber.special_selector.<locals>.select_special  s)    ##DNN4$8$?Dt,,r   F)r   )r   r   r   r   r   s   ``  @r   r   _Globber.special_selector  s%     mmE*	- 	- r   c                   ^ ^^ U(       a[  [         R                  US   5      cB  TT R                  UR                  5       -   -  mU(       a  [         R                  US   5      c  MB  T R	                  U5      mSUUU 4S jjnU$ )zHReturns a function that selects a literal descendant of a path.
        c                 T   > TR                  TR                  U 5      T5      n T" U SS9$ )NFr   r   r   s     r   select_literal1_Globber.literal_selector.<locals>.select_literal  s+    ##DNN4$8$?DtE22r   r   )rs   rr   r   r   r   )r   r   r   r   r   s   ``  @r   r   _Globber.literal_selector  sp     **595=DHHuyy{**D **595= mmE*	3 	3 r   c                    ^ ^^^ US:X  a  SOT R                  U5      m[        U5      mT(       a  T R                  U5      mSUUUU 4S jjnU$ )zWReturns a function that selects direct children of a given path,
filtering by pattern.
r   Nc              3     >#     T	R                  U 5       n[        U5      nS S S 5        W Hl  nTb  T" UR                  5      (       d  M  T(       a   UR                  5       (       d  M>   T	R                  U5      nT(       a  T" USS9 S h  vN   Mh  Uv   Mn     g ! , (       d  f       N= f! [         a     M  f = f N1! [         a     g f = f7f)NTr   )rX   r   r0   rY   rZ   r   )
r!   r   
scandir_itentriesr^   
entry_pathdir_onlyrt   r   r   s
         r   select_wildcard3_Globber.wildcard_selector.<locals>.select_wildcard  s     - \\$':":.G (
 %E}ejj(9(9#)',||~~$, (6 &*%5%5e%<
#'2:d'KKK",, % (' $+ ) () L  ss   CC BC CCB.(%CB?C
B+'C .
B<8C;B<<C
CCCCr   )r   boolr   )r   r   r   r   r   rt   r   s   `   @@@r   r   _Globber.wildcard_selector  sG    
 d);;--.K	- 	-, r   c                   ^ ^^^^^ U(       a+  US   S:X  a"  UR                  5         U(       a  US   S:X  a  M"  T R                  [        LmT(       aJ  U(       aC  US   [        ;  a6  UT R                  UR                  5       -   -  nU(       a  US   [        ;  a  M6  US:X  a  SOT R                  U5      m[        U5      mT R                  U5      mSUUUU 4S jjnUUUUU 4S jmU$ )zfReturns a function that selects a given path and all its children,
recursively, filtering by pattern.
r   r{   Nc              3      >#    TR                  U 5      n [        [        U 5      5      nTb  T" [        U 5      U5      (       a  T" X5       S h  vN   U /nU(       a  T" X25       S h  vN   U(       a  M  g g  N) N7fr3   )r   r   str)r!   r   	match_posstackrt   r   select_recursive_stepr   s       r   select_recursive5_Globber.recursive_selector.<locals>.select_recursive  sn     >>$'DCII}c$i ; ;&t444FE0BBB % 5 Cs*   AA<A8A<(A:)A<6A<:A<c              3     >#    U R                  5       n TR                  U5       n[        U5      nS S S 5        W H  nSn UR                  T	S9(       a  SnU(       d	  T(       a  M,  TR                  U5      nT
b  T
" [        U5      U5      (       a  T(       a  T" USS9 S h  vN   OUv   U(       d  M{  U R                  U5        M     g ! , (       d  f       N= f! [         a     Nf = f NI! [         a     g f = f7f)NF)follow_symlinksTr   )r   rX   r   rY   rZ   r   r   r   )r   r   r!   r   r   r^   rY   r   r   r   rt   r   r   s           r   r   :_Globber.recursive_selector.<locals>.select_recursive_step  s     99;D5 \\$':":.G (
 %E"F <<<H%)F XX%)%5%5e%<
 =E#j/9,M,M'+6z$+O O O '1 0!6!LL4% % (' #  !P  sy   D C0 CC0 D CD (<D $C.%D 7D 
CC0 
C+(D *C++D 0
C=:D <C==D r   )r   r
   _no_recurse_symlinksr   r   r   r   r   )	r   r   r   r   r   r   rt   r   r   s	   `   @@@@@r   r   _Globber.recursive_selector  s    
 b	T)IIK b	T) ..0DDE"I^;599;.. E"I^; $,,t*<;mmE*	C 	C	5 	5<  r   c              #   p   #    U(       a  Uv   g U R                  U5        Uv   g! [         a     gf = f7f)z-Yields the given path, if it exists.
        N)rg   rZ   )r   r!   r   s      r   r   _Globber.select_exists   s8       J

4 
 s   6& 6
3636)r   r   r
   r   N)FFr   )__name__
__module____qualname____firstlineno____doc__r   operatormethodcallerrg   r   staticmethodrX   r   r   r   r   r   r   r   r   r   __static_attributes__rx   r   r   r   r   K  s    # !!'*E%%j"5I6 6 9 9
  T%"" D> @r   r   c                       \ rS rSr\" \R                  5      r\" \R                  5      r\R                  " S5      r
\R                  r\R                  S:X  a  \S 5       rSrg\S 5       rSrg)_StringGlobberi  r!   ntc                 t    [         R                  R                  U 5      S   nU(       a	  US   S;   a  U $ U  S3$ )Nr   r   z\/\)r   r!   	splitroot)r   tails     r   r   _StringGlobber.add_slash  s:    77$$X.q1D48u,Zr?"r   c                 0    U (       a	  U S   S:X  a  U $ U  S3$ )Nr   /rx   )r   s    r   r   r    s!    x|s2Zq>!r   rx   N)r   r   r   r   r   r   rg   rX   r   
attrgetterr   addr   r0   r   r   rx   r   r   r   r     sh    "E2::&G%%f-K,,K	ww$		# 
	# 
	" 
	"r   r   r   )T),r   ra   r   r   r:   	functoolsr   r   rk   r   __all__r   r   r   r(   r)   rG   rI   rL   r'   r_   r9   rN   r$   r&   r%   r   rs   rq   r#   r4   r   r   r   O_RDONLYgetattrrS   objectr   r   	lru_cacher   r   r   rx   r   r   <module>r     s8      	 	      
 3#DE6$ !%TU<  '.Z*	G 
1
18 D
"		(+ jj#JJz* %
 !++M1 ==x  !&e$ 4n S!0 "0A AH"X "r   