§
    WŠtjé;  ã                  óÚ   — d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	m
Z
mZ ddlmZ ddlmZmZ dd	lmZ  G d
„ d¦  «        Zd„ Z G d„ de¦  «        Zej        fdd„Zd„ Zdd„ZdS )zsdistutils.filelist

Provides the FileList class, used for poking about the filesystem
and building lists of files.
é    )ÚannotationsN)ÚIterable)ÚLiteralÚoverloadé   )Úlog)ÚDistutilsInternalErrorÚDistutilsTemplateError©Úconvert_pathc                  ó<  — e Zd ZdZd/d0d„Zd1d„Zej        fd2d„Zd3d„Z	d4d„Z
d5d„Zd6d„Zd6d„Zd„ Zd7d„Ze	 	 	 d8d9d$„¦   «         Ze	 	 d:d;d'„¦   «         Zed;d(„¦   «         Z	 	 	 d8d<d*„Ze	 	 	 d8d9d+„¦   «         Ze	 	 d:d;d,„¦   «         Zed;d-„¦   «         Z	 	 	 d8d<d.„ZdS )=ÚFileListaÑ  A list of files built by on exploring the filesystem and filtered by
    applying various patterns to what we find there.

    Instance attributes:
      dir
        directory from which files will be taken -- only used if
        'allfiles' not supplied to constructor
      files
        list of filenames currently being built/filtered/manipulated
      allfiles
        complete list of files under consideration (ie. without any
        filtering applied)
    NÚwarnÚobjectÚdebug_printÚreturnÚNonec                ó"   — d | _         g | _        d S ©N)ÚallfilesÚfiles)Úselfr   r   s      ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/setuptools/_distutils/filelist.pyÚ__init__zFileList.__init__$   s   € ð /3ˆŒØ "ˆŒ
ˆ
ˆ
ó    r   úIterable[str]c                ó   — || _         d S r   )r   )r   r   s     r   Úset_allfileszFileList.set_allfiles*   s   € Ø ˆŒˆˆr   Údirústr | os.PathLike[str]c                ó.   — t          |¦  «        | _        d S r   )Úfindallr   )r   r   s     r   r"   zFileList.findall-   s   € Ý ™œˆŒˆˆr   Úmsgc                ó8   — ddl m} |rt          |¦  «         dS dS )z~Print 'msg' to stdout if the global DEBUG (taken from the
        DISTUTILS_DEBUG environment variable) flag is true.
        r   )ÚDEBUGN)Údistutils.debugr%   Úprint)r   r#   r%   s      r   r   zFileList.debug_print0   s7   € ð 	*Ð)Ð)Ð)Ð)Ð)àð 	Ý�#‰JŒJˆJˆJˆJð	ð 	r   ÚitemÚstrc                ó:   — | j                              |¦  «         d S r   )r   Úappend)r   r(   s     r   r+   zFileList.append;   s   € ØŒ
×Ò˜$ÑÔÐÐÐr   Úitemsc                ó:   — | j                              |¦  «         d S r   )r   Úextend)r   r,   s     r   r.   zFileList.extend>   s   € ØŒ
×Ò˜%Ñ Ô Ð Ð Ð r   c                óÖ   — t          t          t          j        j        | j        ¦  «        ¦  «        }g | _        |D ]-}| j                             t          j        j        |Ž ¦  «         Œ.d S r   )ÚsortedÚmapÚosÚpathÚsplitr   r+   Újoin)r   Úsortable_filesÚ
sort_tuples      r   ÚsortzFileList.sortA   sa   € å¥¥B¤G¤M°4´:Ñ >Ô >Ñ?Ô?ˆØˆŒ
Ø(ð 	9ð 	9ˆJØŒJ×Ò�bœgœl¨JÐ7Ñ8Ô8Ð8Ð8ð	9ð 	9r   c                ó¦   — t          t          | j        ¦  «        dz
  dd¦  «        D ])}| j        |         | j        |dz
           k    r| j        |= Œ*d S )Nr   r   éÿÿÿÿ)ÚrangeÚlenr   )r   Úis     r   Úremove_duplicateszFileList.remove_duplicatesJ   sZ   € å•s˜4œ:‘”¨Ñ*¨A¨rÑ2Ô2ð 	"ð 	"ˆAØŒz˜!Œ} ¤
¨1¨q©5Ô 1Ò1Ð1Ø”J˜q�Møð	"ð 	"r   c                ó  — |                      ¦   «         }|d         }d x}x}}|dv r;t          |¦  «        dk     rt          d|› d�¦  «        ‚d„ |dd …         D ¦   «         }n§|dv rPt          |¦  «        d	k     rt          d|› d
�¦  «        ‚t          |d         ¦  «        }d„ |dd …         D ¦   «         }nS|dv r<t          |¦  «        dk    rt          d|› d�¦  «        ‚t          |d         ¦  «        }nt          d|› d�¦  «        ‚||||fS )Nr   )ÚincludeÚexcludeúglobal-includeúglobal-excludeé   ú'z#' expects <pattern1> <pattern2> ...c                ó,   — g | ]}t          |¦  «        ‘ŒS © r   ©Ú.0Úws     r   ú
<listcomp>z1FileList._parse_template_line.<locals>.<listcomp>]   ó   € Ð;Ð;Ð;¨A� Q™œÐ;Ð;Ð;r   r   )úrecursive-includeúrecursive-excludeé   z)' expects <dir> <pattern1> <pattern2> ...c                ó,   — g | ]}t          |¦  «        ‘ŒS rG   r   rH   s     r   rK   z1FileList._parse_template_line.<locals>.<listcomp>d   rL   r   )ÚgraftÚprunez ' expects a single <dir_pattern>zunknown action ')r4   r<   r
   r   )r   ÚlineÚwordsÚactionÚpatternsr   Údir_patterns          r   Ú_parse_template_linezFileList._parse_template_lineR   se  € Ø—
’
‘”ˆØ�q”ˆà'+Ð+ˆÐ+�3˜àÐOÐOÐOÝ�5‰zŒz˜AŠ~ˆ~Ý,ØC˜ÐCÐCÐCñô ð ð <Ð;°°q°r°r´Ð;Ñ;Ô;ˆHˆHØÐAÐAÐAÝ�5‰zŒz˜AŠ~ˆ~Ý,ØI˜ÐIÐIÐIñô ð õ ˜u QœxÑ(Ô(ˆCØ;Ð;°°q°r°r´Ð;Ñ;Ô;ˆHˆHØÐ)Ð)Ð)Ý�5‰zŒz˜QŠˆÝ,Ø@˜Ð@Ð@Ð@ñô ð õ ' u¨Q¤xÑ0Ô0ˆKˆKå(Ð)E¸FÐ)EÐ)EÐ)EÑFÔFÐFà˜ # {Ð3Ð3r   rS   c                ó�  — |                       |¦  «        \  }}}}|dk    r^|                      dd                     |¦  «        z   ¦  «         |D ].}|                      |d¬¦  «        st	          j        d|¦  «         Œ/d S |dk    r^|                      dd                     |¦  «        z   ¦  «         |D ].}|                      |d¬¦  «        st	          j        d	|¦  «         Œ/d S |d
k    r^|                      dd                     |¦  «        z   ¦  «         |D ].}|                      |d¬¦  «        st	          j        d|¦  «         Œ/d S |dk    r^|                      dd                     |¦  «        z   ¦  «         |D ].}|                      |d¬¦  «        st	          j        d|¦  «         Œ/d S |dk    rr|                      d                     |d                     |¦  «        ¦  «        ¦  «         |D ]1}|                      ||¬¦  «        sd}t	          j        |||¦  «         Œ2d S |dk    rp|                      d                     |d                     |¦  «        ¦  «        ¦  «         |D ]/}|                      ||¬¦  «        st	          j        d||¦  «         Œ0d S |dk    rH|                      d|z   ¦  «         |                      d |¬¦  «        st	          j        d|¦  «         d S d S |dk    rH|                      d|z   ¦  «         |                      d |¬¦  «        st	          j        d|¦  «         d S d S t          d|› d�¦  «        ‚) Nr@   zinclude ú T)Úanchorz%warning: no files found matching '%s'rA   zexclude z9warning: no previously-included files found matching '%s'rB   zglobal-include Fz>warning: no files found matching '%s' anywhere in distributionrC   zglobal-exclude zRwarning: no previously-included files matching '%s' found anywhere in distributionrM   zrecursive-include {} {})Úprefixz:warning: no files found matching '%s' under directory '%s'rN   zrecursive-exclude {} {}zNwarning: no previously-included files matching '%s' found under directory '%s'rQ   zgraft z+warning: no directories found matching '%s'rR   zprune z6no previously-included directories found matching '%s'z$this cannot happen: invalid action 'rE   )	rX   r   r5   Úinclude_patternr   ÚwarningÚexclude_patternÚformatr	   )r   rS   rU   rV   r   rW   Úpatternr#   s           r   Úprocess_template_linezFileList.process_template_linep   sI  € ð 04×/HÒ/HÈÑ/NÔ/NÑ,ˆ�˜3 ð
 �YÒÐØ×Ò˜Z¨#¯(ª(°8Ñ*<Ô*<Ñ<Ñ=Ô=Ð=Ø#ð Rð R�Ø×+Ò+¨G¸DÐ+ÑAÔAð RÝ”KÐ GÈÑQÔQÐQøðRð Rð �yÒ Ð Ø×Ò˜Z¨#¯(ª(°8Ñ*<Ô*<Ñ<Ñ=Ô=Ð=Ø#ð ð �Ø×+Ò+¨G¸DÐ+ÑAÔAð Ý”KØSØñô ð øðð ð Ð'Ò'Ð'Ø×ÒÐ.°·²¸(Ñ1CÔ1CÑCÑDÔDÐDØ#ð ð �Ø×+Ò+¨G¸EÐ+ÑBÔBð Ý”Kð7ð  ñô ð øðð ð Ð'Ò'Ð'Ø×ÒÐ.°·²¸(Ñ1CÔ1CÑCÑDÔDÐDØ#ð ð �Ø×+Ò+¨G¸EÐ+ÑBÔBð Ý”KðBð  ñô ð øðð ð Ð*Ò*Ð*Ø×ÒÐ6×=Ò=¸cÀ3Ç8Â8ÈHÑCUÔCUÑVÔVÑWÔWÐWØ#ð 3ð 3�Ø×+Ò+¨G¸CÐ+Ñ@Ô@ð 3ØV�CÝ”K  W¨cÑ2Ô2Ð2øð3ð 3ð
 Ð*Ò*Ð*Ø×ÒÐ6×=Ò=¸cÀ3Ç8Â8ÈHÑCUÔCUÑVÔVÑWÔWÐWØ#ð 	ð 	�Ø×+Ò+¨G¸CÐ+Ñ@Ô@ð Ý”Kð>ð  Øñô ð øð	ð 	ð �wÒÐØ×Ò˜X¨Ñ3Ñ4Ô4Ð4Ø×'Ò'¨°[Ð'ÑAÔAð XÝ”ÐIÈ;ÑWÔWÐWÐWÐWðXð Xð �wÒÐØ×Ò˜X¨Ñ3Ñ4Ô4Ð4Ø×'Ò'¨°[Ð'ÑAÔAð Ý”ØMØñô ð ð ð ðð õ )Ø@°vÐ@Ð@Ð@ñô ð r   TFra   r[   Úboolr\   ú
str | NoneÚis_regexúLiteral[False]c                ó   — d S r   rG   ©r   ra   r[   r\   re   s        r   r]   zFileList.include_patternÈ   ó	   € ð ˆsr   ústr | re.Pattern[str]úLiteral[True]c               ó   — d S r   rG   rh   s        r   r]   zFileList.include_patternÐ   ó	   € ð ˆsr   c                ó   — d S r   rG   rh   s        r   r]   zFileList.include_patternÙ   ri   r   ústr | re.Patternc                óF  — d}t          ||||¦  «        }|                      d|j        › d�¦  «         | j        €|                      ¦   «          | j        D ]K}|                     |¦  «        r4|                      d|z   ¦  «         | j                             |¦  «         d}ŒL|S )a—  Select strings (presumably filenames) from 'self.files' that
        match 'pattern', a Unix-style wildcard (glob) pattern.  Patterns
        are not quite the same as implemented by the 'fnmatch' module: '*'
        and '?'  match non-special characters, where "special" is platform-
        dependent: slash on Unix; colon, slash, and backslash on
        DOS/Windows; and colon on Mac OS.

        If 'anchor' is true (the default), then the pattern match is more
        stringent: "*.py" will match "foo.py" but not "foo/bar.py".  If
        'anchor' is false, both of these will match.

        If 'prefix' is supplied, then only filenames starting with 'prefix'
        (itself a pattern) and ending with 'pattern', with anything in between
        them, will match.  'anchor' is ignored in this case.

        If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and
        'pattern' is assumed to be either a string containing a regex or a
        regex object -- no translation is done, the regex is just compiled
        and used as-is.

        Selected strings will be added to self.files.

        Return True if files are found, False otherwise.
        Fz"include_pattern: applying regex r'rE   Nz adding T)Útranslate_patternr   ra   r   r"   Úsearchr   r+   )r   ra   r[   r\   re   Úfiles_foundÚ
pattern_reÚnames           r   r]   zFileList.include_patterná   s¹   € ð@ ˆÝ& w°¸ÀÑIÔIˆ
Ø×ÒÐS¸jÔ>PÐSÐSÐSÑTÔTÐTð Œ=Ð Ø�LŠL‰NŒNˆNà”Mð 	#ð 	#ˆDØ× Ò  Ñ&Ô&ð #Ø× Ò  ¨dÑ!2Ñ3Ô3Ð3Ø”
×!Ò! $Ñ'Ô'Ð'Ø"�øØÐr   c                ó   — d S r   rG   rh   s        r   r_   zFileList.exclude_pattern  ri   r   c               ó   — d S r   rG   rh   s        r   r_   zFileList.exclude_pattern  rm   r   c                ó   — d S r   rG   rh   s        r   r_   zFileList.exclude_pattern!  ri   r   c                óV  — d}t          ||||¦  «        }|                      d|j        › d�¦  «         t          t	          | j        ¦  «        dz
  dd¦  «        D ]O}|                     | j        |         ¦  «        r-|                      d| j        |         z   ¦  «         | j        |= d}ŒP|S )a  Remove strings (presumably filenames) from 'files' that match
        'pattern'.  Other parameters are the same as for
        'include_pattern()', above.
        The list 'self.files' is modified in place.
        Return True if files are found, False otherwise.
        Fz"exclude_pattern: applying regex r'rE   r   r:   z
 removing T)rq   r   ra   r;   r<   r   rr   )r   ra   r[   r\   re   rs   rt   r=   s           r   r_   zFileList.exclude_pattern)  s·   € ð ˆÝ& w°¸ÀÑIÔIˆ
Ø×ÒÐS¸jÔ>PÐSÐSÐSÑTÔTÐTÝ•s˜4œ:‘”¨Ñ*¨B°Ñ3Ô3ð 	#ð 	#ˆAØ× Ò  ¤¨A¤Ñ/Ô/ð #Ø× Ò  °´
¸1´Ñ!=Ñ>Ô>Ð>Ø”J˜q�MØ"�øØÐr   )NN)r   r   r   r   r   r   )r   r   r   r   )r   r    r   r   )r#   r   r   r   )r(   r)   r   r   )r,   r   r   r   )r   r   )rS   r)   r   r   ©TNF)
ra   r)   r[   rc   r\   rd   re   rf   r   rc   )TN)
ra   rj   r[   rc   r\   rd   re   rk   r   rc   )
ra   ro   r[   rc   r\   rd   re   rc   r   rc   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r2   Úcurdirr"   r   r+   r.   r8   r>   rX   rb   r   r]   r_   rG   r   r   r   r      s:  € € € € € ðð ð#ð #ð #ð #ð #ð!ð !ð !ð !ð 57´Ið %ð %ð %ð %ð %ðð ð ð ð ð  ð  ð  ð!ð !ð !ð !ð9ð 9ð 9ð 9ð"ð "ð "ð "ð4ð 4ð 4ð<Uð Uð Uð Uðp ð Ø!Ø#(ðð ð ð ñ „Xðð ð Ø!ð	ð ð ð ñ „Xðð ðð ð ñ „Xðð Ø!Øð-ð -ð -ð -ð -ð^ ð Ø!Ø#(ðð ð ð ñ „Xðð ð Ø!ð	ð ð ð ñ „Xðð ðð ð ñ „Xðð Ø!Øðð ð ð ð ð ð r   r   c                ó´   — t                                t          j        | d¬¦  «        ¦  «        }d„ |D ¦   «         }t          t          j        j        |¦  «        S )z%
    Find all files under 'path'
    T)Úfollowlinksc              3  óh   K  — | ]-\  }}}|D ]$}t           j                             ||¦  «        V — Œ%Œ.d S r   )r2   r3   r5   )rI   ÚbaseÚdirsr   Úfiles        r   ú	<genexpr>z#_find_all_simple.<locals>.<genexpr>I  s^   è è € ð ð Ù%6 T¨4°ÐQVðð ØIM�Œ�Š�T˜4Ñ Ô ðð ð ð ð ð ð r   )Ú_UniqueDirsÚfilterr2   Úwalkr3   Úisfile)r3   Ú
all_uniqueÚresultss      r   Ú_find_all_simpler�   D  sZ   € õ ×#Ò#¥B¤G¨D¸dÐ$CÑ$CÔ$CÑDÔD€Jðð Ø:Dðñ ô €Gõ •"”'”. 'Ñ*Ô*Ð*r   c                  ó.   — e Zd ZdZd„ Zed„ ¦   «         ZdS )r‡   z†
    Exclude previously-seen dirs from walk results,
    avoiding infinite recursion.
    Ref https://bugs.python.org/issue44497.
    c                ó˜   — |\  }}}t          j        |¦  «        }|j        |j        f}|| v }|r|dd…= |                      |¦  «         | S )z®
        Given an item from an os.walk result, determine
        if the item represents a unique dir for this instance
        and if not, prevent further traversal.
        N)r2   ÚstatÚst_devÚst_inoÚadd)r   Ú	walk_itemrƒ   r„   r   r�   Ú	candidateÚfounds           r   Ú__call__z_UniqueDirs.__call__V  sb   € ð &Ñˆˆd�EÝŒw�t‰}Œ}ˆØ”K ¤Ð,ˆ	Ø˜TÐ!ˆØð 	Ø�Q�Q�Q�Ø�Š�ÑÔÐØˆyÐr   c                ó2   — t           | ¦   «         |¦  «        S r   )rˆ   )Úclsr,   s     r   rˆ   z_UniqueDirs.filtere  s   € å�c�c‘e”e˜UÑ#Ô#Ð#r   N)r{   r|   r}   r~   r—   Úclassmethodrˆ   rG   r   r   r‡   r‡   O  sH   € € € € € ðð ðð ð ð ð$ð $ñ „[ð$ð $ð $r   r‡   r   r    c                óÈ   — t          | ¦  «        }| t          j        k    r5t          j        t          j        j        | ¬¦  «        }t          ||¦  «        }t          |¦  «        S )zŒ
    Find all files under 'dir' and return the list of full filenames.
    Unless dir is '.', return full filenames with dir prepended.
    )Ústart)	r�   r2   r   Ú	functoolsÚpartialr3   Úrelpathr1   Úlist)r   r   Úmake_rels      r   r"   r"   j  sR   € õ
 ˜SÑ!Ô!€EØ
�bŒiÒÐÝÔ$¥R¤W¤_¸CÐ@Ñ@Ô@ˆÝ�H˜eÑ$Ô$ˆÝ�‰;Œ;Ðr   c                ó¢   — t          j        | ¦  «        }t          j        }t          j        dk    rd}d|› d�}t	          j        d||¦  «        }|S )zæTranslate a shell-like glob pattern to a regular expression; return
    a string containing the regex.  Differs from 'fnmatch.translate()' in
    that '*' does not match "special characters" (which are
    platform-specific).
    ú\z\\\\z\1[^ú]z((?<!\\)(\\\\)*)\.)ÚfnmatchÚ	translater2   ÚsepÚreÚsub)ra   rt   r§   Úescapeds       r   Ú
glob_to_rer«   v  sV   € õ Ô" 7Ñ+Ô+€Jõ Œ&€CÝ	„v�‚~€~ð ˆØ�cˆnˆnˆn€GÝ”Ð-¨w¸
ÑCÔC€JØÐr   TFc                ó0  — |r+t          | t          ¦  «        rt          j        | ¦  «        S | S t	          d¦  «                             d¦  «        \  }}}| r<t	          | ¦  «        }|                     |¦  «        r|                     |¦  «        sJ ‚nd}|�Ðt	          |¦  «        }|                     |¦  «        r|                     |¦  «        sJ ‚|t          |¦  «        t          |¦  «        t          |¦  «        z
  …         }t          j
        }	t          j
        dk    rd}	|t          |¦  «        t          |¦  «        t          |¦  «        z
  …         }|› d|› |	› d|› |› �}n|r|› d|t          |¦  «        d…         › �}t          j        |¦  «        S )a  Translate a shell-like wildcard pattern to a compiled regular
    expression.  Return the compiled regex.  If 'is_regex' true,
    then 'pattern' is directly compiled to a regex (if it's a string)
    or just returned as-is (assumes it's a regex object).
    Ú_Ú Nr£   z\\z\Az.*)Ú
isinstancer)   r¨   Úcompiler«   Ú	partitionÚ
startswithÚendswithr<   r2   r§   )
ra   r[   r\   re   rœ   r­   Úendrt   Ú	prefix_rer§   s
             r   rq   rq   �  s£  € ð ð Ý�g�sÑ#Ô#ð 	Ý”:˜gÑ&Ô&Ð&àˆNõ ˜s‘O”O×-Ò-¨cÑ2Ô2�M€Eˆ1ˆcàð Ý Ñ(Ô(ˆ
Ø×$Ò$ UÑ+Ô+ÐH°
×0CÒ0CÀCÑ0HÔ0HÐHÐHÐHÐHàˆ
àÐÝ˜vÑ&Ô&ˆ	Ø×#Ò# EÑ*Ô*ÐF¨y×/AÒ/AÀ#Ñ/FÔ/FÐFÐFÐFØ�c %™jœj­3¨y©>¬>½CÀ¹H¼HÑ+DÐDÔEˆ	ÝŒfˆÝŒ6�TŠ>ˆ>ØˆCØ¥ E¡
¤
­S°©_¬_½sÀ3¹x¼xÑ-GÐ GÔHˆ
ØÐEÐE )ÐE¨SÐEÐE°JÐEÀÐEÐEˆ
ˆ
àð 	AØ"Ð@Ð@ jµ°U±´°°Ô&>Ð@Ð@ˆJåŒ:�jÑ!Ô!Ð!r   )r   r    rz   )r~   Ú
__future__r   r¥   r�   r2   r¨   Úcollections.abcr   Útypingr   r   Ú_logr   Úerrorsr	   r
   Úutilr   r   r�   Úsetr‡   r   r"   r«   rq   rG   r   r   ú<module>r½      sg  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø $Ð $Ð $Ð $Ð $Ð $Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $à Ð Ð Ð Ð Ð Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ Ð Ð Ð Ð Ð ðið ið ið ið iñ iô ið ið^	+ð +ð +ð$ð $ð $ð $ð $�#ñ $ô $ð $ð6 +-¬)ð 	ð 	ð 	ð 	ð 	ðð ð ð.""ð ""ð ""ð ""ð ""ð ""r   