ó
    Ñ]j/  ã                   ó  • 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SK
JrJr  SSKJr  SSKJr  S/rS rS	 r\R*                  r S
 r " S S5      r " S S\\	R2                  5      r " S S\5      rSS jr " S S5      rg)zÒ
A Path-like interface for zipfiles.

This codebase is shared between zipfile.Path in the stdlib
and zipp in PyPI. See
https://github.com/python/importlib_metadata/wiki/Development-Methodology
for more detail.
é    Né   )Únone_asÚsave_method_args)Útext_encoding)Ú
TranslatorÚPathc                 óD   • [         R                  " [        U 5      SS5      $ )zþ
Given a path with elements separated by
posixpath.sep, generate all parents of that path.

>>> list(_parents('b/d'))
['b']
>>> list(_parents('/b/d/'))
['/b']
>>> list(_parents('b/d/f/'))
['b/d', 'b']
>>> list(_parents('b'))
[]
>>> list(_parents(''))
[]
r   N)Ú	itertoolsÚisliceÚ	_ancestry)Úpaths    ÚJ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/zipp/__init__.pyÚ_parentsr      s   € ô  ×ÒœI d›O¨Q°Ó5Ð5ó    c              #   ó  #   • U R                  [        R                  5      n U R                  [        R                  5      (       aC  U v •  [        R                  " U 5      u  pU R                  [        R                  5      (       a  MB  gg7f)a”  
Given a path with elements separated by
posixpath.sep, generate all elements of that path.

>>> list(_ancestry('b/d'))
['b/d', 'b']
>>> list(_ancestry('/b/d/'))
['/b/d', '/b']
>>> list(_ancestry('b/d/f/'))
['b/d/f', 'b/d', 'b']
>>> list(_ancestry('b'))
['b']
>>> list(_ancestry(''))
[]

Multiple separators are treated like a single.

>>> list(_ancestry('//b//d///f//'))
['//b//d///f', '//b//d', '//b']
N)ÚrstripÚ	posixpathÚsepÚsplit)r   Útails     r   r   r   .   sV   é € ð* �;‰;”y—}‘}Ó%€DØ
�+‰+”i—m‘m×
$Ñ
$ØŠ
Ü—_’_ TÓ*‰
ˆð �+‰+”i—m‘m×
$Õ
$ùs   ‚BB
ÂB
c                 óV   • [         R                  " [        U5      R                  U 5      $ )zN
Return items in minuend not in subtrahend, retaining order
with O(1) lookup.
)r
   ÚfilterfalseÚsetÚ__contains__)ÚminuendÚ
subtrahends     r   Ú_differencer   M   s!   € ô
 × Ò ¤ Z£×!=Ñ!=¸wÓGÐGr   c                   óH   ^ • \ rS rSrSr\U 4S j5       rS rU 4S jrSr	U =r
$ )ÚInitializedStateéU   z7
Mix-in to save the initialization state for pickling.
c                 ó&   >• [         TU ]  " U0 UD6  g ©N©ÚsuperÚ__init__)ÚselfÚargsÚkwargsÚ	__class__s      €r   r%   ÚInitializedState.__init__Z   s   ø€ ä‰Ò˜$Ð) &Ó)r   c                 óZ   • U R                   R                  U R                   R                  4$ r"   )Ú_saved___init__r'   r(   ©r&   s    r   Ú__getstate__ÚInitializedState.__getstate__^   s%   € Ø×#Ñ#×(Ñ(¨$×*>Ñ*>×*EÑ*EÐEÐEr   c                 ó.   >• Uu  p#[         TU ]  " U0 UD6  g r"   r#   )r&   Ústater'   r(   r)   s       €r   Ú__setstate__ÚInitializedState.__setstate__a   s   ø€ Ø‰ˆÜ‰Ò˜$Ð) &Ó)r   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r%   r.   r2   Ú__static_attributes__Ú__classcell__©r)   s   @r   r   r   U   s,   ø† ñð ô*ó ð*òF÷*ó *r   r   c                   ó¨   ^ • \ rS rSrSr\S 5       rU 4S jrS rS r	U 4S jr
\S 5       r\S	\R                  S
\R                  4S j5       rSrU =r$ )ÚCompleteDirséf   a  
A ZipFile subclass that ensures that implied directories
are always included in the namelist.

>>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt']))
['foo/', 'foo/bar/']
>>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt', 'foo/bar/']))
['foo/']
c                 ó–   • [         R                  R                  [        [        U 5      5      nS U 5       n[        [        X 5      5      $ )Nc              3   óF   #   • U  H  o[         R                  -   v •  M     g 7fr"   )r   r   )Ú.0Úps     r   Ú	<genexpr>Ú-CompleteDirs._implied_dirs.<locals>.<genexpr>t   s   é € Ð6ªg¨”y—}‘}Ö$ªgùs   ‚!)r
   ÚchainÚfrom_iterableÚmapr   Ú_deduper   )ÚnamesÚparentsÚas_dirss      r   Ú_implied_dirsÚCompleteDirs._implied_dirsq   s7   € ä—/‘/×/Ñ/´´H¸eÓ0DÓEˆÙ6©gÓ6ˆÜ”{ 7Ó2Ó3Ð3r   c                 óZ   >• [         TU ]  5       nU[        U R                  U5      5      -   $ r"   )r$   ÚnamelistÚlistrM   )r&   rJ   r)   s     €r   rP   ÚCompleteDirs.namelistw   s+   ø€ Ü‘Ñ Ó"ˆØ”t˜D×.Ñ.¨uÓ5Ó6Ñ6Ð6r   c                 ó4   • [        U R                  5       5      $ r"   )r   rP   r-   s    r   Ú	_name_setÚCompleteDirs._name_set{   s   € Ü�4—=‘=“?Ó#Ð#r   c                 ó`   • U R                  5       nUS-   nX;  =(       a    X2;   nU(       a  U$ U$ )z`
If the name represents a directory, return that name
as a directory (with the trailing slash).
Ú/)rT   )r&   ÚnamerJ   ÚdirnameÚ	dir_matchs        r   Úresolve_dirÚCompleteDirs.resolve_dir~   s6   € ð
 —‘Ó ˆØ˜‘*ˆØÑ%×:¨'Ñ*:ˆ	Þ#ˆwÐ-¨Ð-r   c                 óÀ   >•  [         TU ]  U5      $ ! [         aA    UR                  S5      (       a  XR	                  5       ;  a  e [
        R                  " US9s $ f = f)z&
Supplement getinfo for implied dirs.
rW   )Úfilename)r$   ÚgetinfoÚKeyErrorÚendswithrT   ÚzipfileÚZipInfo)r&   rX   r)   s     €r   r_   ÚCompleteDirs.getinfoˆ   sS   ø€ ð	2Ü‘7‘? 4Ó(Ð(øÜó 	2Ø—=‘= ×%Ñ%¨·^±^Ó5EÓ)EØÜ—?’?¨DÑ1Ò1ð	2ús   ƒ ’AAÁAc                 óº   • [        U[        5      (       a  U$ [        U[        R                  5      (       d  U " U5      $ SUR                  ;  a  [        n Xl        U$ )zT
Given a source (filename or zipfile), return an
appropriate CompleteDirs subclass.
Úr)Ú
isinstancer>   rb   ÚZipFileÚmoder)   )ÚclsÚsources     r   ÚmakeÚCompleteDirs.make“   sO   € ô �fœl×+Ñ+ØˆMä˜&¤'§/¡/×2Ñ2Ù�v“;Ðð �f—k‘kÓ!ÜˆCàÔØˆr   ÚzfÚreturnc                 óv   • U R                  UR                  5       5       H  nUR                  US5        M     U$ )zq
Given a writable zip file zf, inject directory entries for
any directories implied by the presence of children.
r   )rM   rP   Úwritestr)rj   rn   rX   s      r   ÚinjectÚCompleteDirs.inject¦   s2   € ð ×%Ñ% b§k¡k£mÖ4ˆDØ�K‰K˜˜cÖ"ñ 5àˆ	r   r4   )r5   r6   r7   r8   r9   ÚstaticmethodrM   rP   rT   r[   r_   Úclassmethodrl   rb   rh   rr   r:   r;   r<   s   @r   r>   r>   f   sn   ø† ñð ñ4ó ð4õ
7ò$ò.õ	2ð ñó ðð$ ð˜Ÿ™ð ¨G¯O©Oó ó ör   r>   c                   ó€   ^ • \ rS rSrSrS r\R                  U 4S j5       rS r	\R                  U 4S j5       r
SrU =r$ )Ú
FastLookupé±   zJ
ZipFile subclass to ensure implicit
dirs exist and are resolved rapidly.
c                 ó   • U R                   $ r"   )Ú	_namelistr-   s    r   rP   ÚFastLookup.namelist·   s   € Ø�~‰~Ðr   c                 ó    >• [         TU ]  5       $ r"   )r$   rP   ©r&   r)   s    €r   rz   ÚFastLookup._namelistº   s   ø€ ä‰wÑÓ!Ð!r   c                 ó   • U R                   $ r"   )Ú_name_set_propr-   s    r   rT   ÚFastLookup._name_set¾   s   € Ø×"Ñ"Ð"r   c                 ó    >• [         TU ]  5       $ r"   )r$   rT   r}   s    €r   r€   ÚFastLookup._name_set_propÁ   s   ø€ ä‰wÑ Ó"Ð"r   r4   )r5   r6   r7   r8   r9   rP   Ú	functoolsÚcached_propertyrz   rT   r€   r:   r;   r<   s   @r   rw   rw   ±   sF   ø† ñò
ð ×Ñô"ó ð"ò#ð ×Ñô#ó ö#r   rw   c                 ó˜   • [         R                  R                  S:H  nU=(       a    [         R                  S:  nSU-   n[	        X5      X4$ )NÚpypy)é   é   é   r‰   )ÚsysÚimplementationrX   Úpypy_version_infor   )Úencodingr'   r(   Úis_pypyÚis_old_pypiÚstack_levels         r   Ú_extract_text_encodingr’   Æ   sH   € ä× Ñ ×%Ñ%¨Ñ/€Gð ×@œc×3Ñ3°jÑ@€KØ�k‘/€KÜ˜Ó/°Ð=Ð=r   c                   ó  • \ rS rSrSrSrS"S jrS rS rS#SS.S	 jjr	S
 r
\S 5       r\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 rS rS rS rS rS rS rS rS rS r \ r!\S  5       r"S!r#g)$r   éÐ   uû  
A :class:`importlib.resources.abc.Traversable` interface for zip files.

Implements many of the features users enjoy from
:class:`pathlib.Path`.

Consider a zip file with this structure::

    .
    â”œâ”€â”€ a.txt
    â””â”€â”€ b
        â”œâ”€â”€ c.txt
        â””â”€â”€ d
            â””â”€â”€ e.txt

>>> data = io.BytesIO()
>>> zf = zipfile.ZipFile(data, 'w')
>>> zf.writestr('a.txt', 'content of a')
>>> zf.writestr('b/c.txt', 'content of c')
>>> zf.writestr('b/d/e.txt', 'content of e')
>>> zf.filename = 'mem/abcde.zip'

Path accepts the zipfile object itself or a filename

>>> path = Path(zf)

From there, several path operations are available.

Directory iteration (including the zip file itself):

>>> a, b = path.iterdir()
>>> a
Path('mem/abcde.zip', 'a.txt')
>>> b
Path('mem/abcde.zip', 'b/')

name property:

>>> b.name
'b'

join with divide operator:

>>> c = b / 'c.txt'
>>> c
Path('mem/abcde.zip', 'b/c.txt')
>>> c.name
'c.txt'

Read text:

>>> c.read_text(encoding='utf-8')
'content of c'

existence:

>>> c.exists()
True
>>> (b / 'missing.txt').exists()
False

Coercion to string:

>>> import os
>>> str(c).replace(os.sep, posixpath.sep)
'mem/abcde.zip/b/c.txt'

At the root, ``name``, ``filename``, and ``parent``
resolve to the zipfile.

>>> str(path)
'mem/abcde.zip'
>>> path.name
'abcde.zip'
>>> path.filename == pathlib.Path('mem/abcde.zip')
True
>>> str(path.parent)
'mem'

If the zipfile has no filename, such attributes are not
valid and accessing them will raise an Exception.

>>> zf.filename = None
>>> path.name
Traceback (most recent call last):
...
TypeError: ...

>>> path.filename
Traceback (most recent call last):
...
TypeError: ...

>>> path.parent
Traceback (most recent call last):
...
TypeError: ...

# workaround python/cpython#106763
>>> pass
z>{self.__class__.__name__}({self.root.filename!r}, {self.at!r})c                 óD   • [         R                  U5      U l        X l        g)a   
Construct a Path from a ZipFile or filename.

Note: When the source is an existing ZipFile object,
its type (__class__) will be mutated to a
specialized type. If the caller wishes to retain the
original type, the caller should either create a
separate ZipFile object or pass a filename.
N)rw   rl   ÚrootÚat)r&   r–   r—   s      r   r%   ÚPath.__init__9  s   € ô —O‘O DÓ)ˆŒ	Ø�r   c                 ó¢   • U R                   UR                   La  [        $ U R                  U R                  4UR                  UR                  4:H  $ )z=
>>> Path(zipfile.ZipFile(io.BytesIO(), 'w')) == 'foo'
False
)r)   ÚNotImplementedr–   r—   )r&   Úothers     r   Ú__eq__ÚPath.__eq__F  s?   € ð
 �>‰> §¡Ò0Ü!Ð!Ø—	‘	˜4Ÿ7™7Ð#¨¯
©
°E·H±HÐ'=Ñ=Ð=r   c                 óD   • [        U R                  U R                  45      $ r"   )Úhashr–   r—   r-   s    r   Ú__hash__ÚPath.__hash__O  s   € Ü�T—Y‘Y §¡Ð(Ó)Ð)r   N©Úpwdc                ór  • U R                  5       (       a  [        U 5      eUS   nUS:X  a   U R                  5       (       d  [        U 5      eU R                  R                  U R                  XRS9nSU;   a  U(       d  U(       a  [        S5      eU$ [        U0 UD6u  psn[        R                  " Xg/UQ70 UD6$ )zŠ
Open this entry as text or binary following the semantics
of ``pathlib.Path.open()`` by passing arguments through
to io.TextIOWrapper().
r   rf   r¢   Úbz*encoding args invalid for binary operation)Úis_dirÚIsADirectoryErrorÚexistsÚFileNotFoundErrorr–   Úopenr—   Ú
ValueErrorr’   ÚioÚTextIOWrapper)r&   ri   r£   r'   r(   Úzip_modeÚstreamrŽ   s           r   rª   Ú	Path.openR  s¥   € ð �;‰;�=‰=Ü# DÓ)Ð)Ø˜‘7ˆØ�s‹? 4§;¡;§=¡=Ü# DÓ)Ð)Ø—‘—‘ §¡¨�Ð;ˆØ�$‹;Þ–vÜ Ð!MÓNÐNØˆMä!7¸Ð!HÀÑ!HÑˆ˜Ü×Ò ÐB°4ÒB¸6ÑBÐBr   c                 ó|   • U R                   (       a   [        R                  " U R                   5      $ U R                  $ r"   )r—   ÚpathlibÚPurePosixPathr^   r-   s    r   Ú_baseÚ
Path._basef  s&   € Ø15··Œw×$Ò$ T§W¡WÓ-ÐK¸d¿m¹mÐKr   c                 ó6   • U R                  5       R                  $ r"   )r´   rX   r-   s    r   rX   Ú	Path.namei  ó   € à�z‰z‹|× Ñ Ð r   c                 ó6   • U R                  5       R                  $ r"   )r´   Úsuffixr-   s    r   rº   ÚPath.suffixm  s   € à�z‰z‹|×"Ñ"Ð"r   c                 ó6   • U R                  5       R                  $ r"   )r´   Úsuffixesr-   s    r   r½   ÚPath.suffixesq  s   € à�z‰z‹|×$Ñ$Ð$r   c                 ó6   • U R                  5       R                  $ r"   )r´   Ústemr-   s    r   rÀ   Ú	Path.stemu  r¸   r   c                 óˆ   • [         R                  " U R                  R                  5      R	                  U R
                  5      $ r"   )r²   r   r–   r^   Újoinpathr—   r-   s    r   r^   ÚPath.filenamey  s*   € ä�|Š|˜DŸI™I×.Ñ.Ó/×8Ñ8¸¿¹ÓAÐAr   c                 ó¢   • [        U0 UD6u  p1nU R                  " SU/UQ70 UD6 nUR                  5       sS S S 5        $ ! , (       d  f       g = f)Nrf   )r’   rª   Úread)r&   r'   r(   rŽ   Ústrms        r   Ú	read_textÚPath.read_text}  sE   € Ü!7¸Ð!HÀÑ!HÑˆ˜Ø�YŠY�s˜HÐ6 tÒ6¨vÒ6¸$Ø—9‘9“;÷ 7×6×6ús   ¦A Á 
Ac                 óz   • U R                  S5       nUR                  5       sS S S 5        $ ! , (       d  f       g = f)NÚrb)rª   rÆ   )r&   rÇ   s     r   Ú
read_bytesÚPath.read_bytes‚  s"   € Ø�Y‰Y�tŒ_ Ø—9‘9“;÷ �_�_ús   ’,¬
:c                 ó˜   • [         R                  " UR                  R                  S5      5      U R                  R                  S5      :H  $ ©NrW   )r   rY   r—   r   )r&   r   s     r   Ú	_is_childÚPath._is_child†  s2   € Ü× Ò  §¡§¡°Ó!4Ó5¸¿¹¿¹ÈÓ9LÑLÐLr   c                 ó:   • U R                  U R                  U5      $ r"   )r)   r–   )r&   r—   s     r   Ú_nextÚ
Path._next‰  s   € Ø�~‰~˜dŸi™i¨Ó,Ð,r   c                 óh   • U R                   (       + =(       d    U R                   R                  S5      $ rÏ   )r—   ra   r-   s    r   r¦   ÚPath.is_dirŒ  s"   € Ø—7‘7Œ{×3˜dŸg™g×.Ñ.¨sÓ3Ð3r   c                 óZ   • U R                  5       =(       a    U R                  5       (       + $ r"   )r¨   r¦   r-   s    r   Úis_fileÚPath.is_file�  s   € Ø�{‰{‹}×2 T§[¡[£]Ô!2Ð2r   c                 óP   • U R                   U R                  R                  5       ;   $ r"   )r—   r–   rT   r-   s    r   r¨   ÚPath.exists’  s   € Ø�w‰w˜$Ÿ)™)×-Ñ-Ó/Ñ/Ð/r   c                 óÊ   • U R                  5       (       d  [        S5      e[        U R                  U R                  R                  5       5      n[        U R                  U5      $ )NzCan't listdir a file)r¦   r«   rH   rÓ   r–   rP   ÚfilterrÐ   )r&   Úsubss     r   ÚiterdirÚPath.iterdir•  sG   € Ø�{‰{�}‰}ÜÐ3Ó4Ð4Ü�4—:‘:˜tŸy™y×1Ñ1Ó3Ó4ˆÜ�d—n‘n dÓ+Ð+r   c                 ó`   • [         R                  " U R                  5      R                  U5      $ r"   )r²   r³   r—   Úmatch)r&   Úpath_patterns     r   râ   Ú
Path.match›  s"   € Ü×$Ò$ T§W¡WÓ-×3Ñ3°LÓAÐAr   c                 ó–   • U R                   R                  U R                  5      nUR                  S-	  n[        R
                  " U5      $ )z(
Return whether this path is a symlink.
é   )r–   r_   r—   Úexternal_attrÚstatÚS_ISLNK)r&   Úinfori   s      r   Ú
is_symlinkÚPath.is_symlinkž  s;   € ð �y‰y× Ñ  §¡Ó)ˆØ×!Ñ! RÑ'ˆÜ�|Š|˜DÓ!Ð!r   c                 óP  • U(       d  [        SU< 35      e[        R                  " U R                  5      n[	        SS9n[        R
                  " X#R                  U5      -   5      R                  n[        U R                  [        X@R                  R                  5       5      5      $ )NzUnacceptable pattern: rW   )Úseps)r«   ÚreÚescaper—   r   ÚcompileÚ	translateÚ	fullmatchrH   rÓ   rÝ   r–   rP   )r&   ÚpatternÚprefixÚtrÚmatchess        r   ÚglobÚ	Path.glob¦  sw   € ÞÜÐ5°g±[ÐAÓBÐBä—’˜4Ÿ7™7Ó#ˆÜ˜SÑ!ˆÜ—*’*˜V§l¡l°7Ó&;Ñ;Ó<×FÑFˆÜ�4—:‘:œv g¯y©y×/AÑ/AÓ/CÓDÓEÐEr   c                 ó*   • U R                  SU 35      $ )Nz**/)rø   )r&   rô   s     r   ÚrglobÚ
Path.rglob¯  s   € Ø�y‰y˜3˜w˜i˜Ó)Ð)r   c                 ón   • [         R                  " [        U 5      [        UR                  " U6 5      5      $ r"   )r   ÚrelpathÚstrrÃ   )r&   r›   Úextras      r   Úrelative_toÚPath.relative_to²  s'   € Ü× Ò ¤ T£¬C°·²ÀÐ0FÓ,GÓHÐHr   c                 ó¨   • [        U R                  R                  S5      nU R                  (       a   [        R
                  " XR                  5      $ U$ )Nz	:zipfile:)r   r–   r^   r—   r   Újoin)r&   r–   s     r   Ú__str__ÚPath.__str__µ  s6   € Ü�t—y‘y×)Ñ)¨;Ó7ˆØ04··Œy�~Š~˜d§G¡GÓ,ÐA¸TÐAr   c                 ó4   • U R                   R                  U S9$ )Nr-   )Ú_Path__reprÚformatr-   s    r   Ú__repr__ÚPath.__repr__¹  s   € Ø�{‰{×!Ñ! tÐ!Ð,Ð,r   c                 ó˜   • [         R                  " U R                  /UQ76 nU R                  U R                  R                  U5      5      $ r"   )r   r  r—   rÓ   r–   r[   )r&   r›   Únexts      r   rÃ   ÚPath.joinpath¼  s7   € Ü�~Š~˜dŸg™gÐ.¨Ò.ˆØ�z‰z˜$Ÿ)™)×/Ñ/°Ó5Ó6Ð6r   c                 óè   • U R                   (       d  U R                  R                  $ [        R                  " U R                   R                  S5      5      nU(       a  US-  nU R                  U5      $ rÏ   )r—   r^   Úparentr   rY   r   rÓ   )r&   Ú	parent_ats     r   r  ÚPath.parentÂ  sR   € à�w�wØ—=‘=×'Ñ'Ð'Ü×%Ò% d§g¡g§n¡n°SÓ&9Ó:ˆ	ÞØ˜ÑˆIØ�z‰z˜)Ó$Ð$r   )r—   r–   )Ú )rf   )$r5   r6   r7   r8   r9   r  r%   rœ   r    rª   r´   ÚpropertyrX   rº   r½   rÀ   r^   rÈ   rÌ   rÐ   rÓ   r¦   rØ   r¨   rß   râ   rë   rø   rû   r  r  r
  rÃ   Ú__truediv__r  r:   r4   r   r   r   r   Ð   s  † ñdðL N€Fôò>ò*ðC¨ö Cò(Lð ñ!ó ð!ð ñ#ó ð#ð ñ%ó ð%ð ñ!ó ð!ð ñBó ðBòò
òMò-ò4ò3ò0ò,òBò"òFò*òIòBò-ò7ð €Kàñ%ó ó%r   r"   )r9   r„   r¬   r
   r²   r   rï   rè   r‹   rb   Ú
_functoolsr   r   Úcompat.py310r   rø   r   Ú__all__r   r   ÚdictÚfromkeysrI   r   r   rh   r>   rw   r’   r   r4   r   r   Ú<module>r     s’   ðñó Û 	Û Û Û Û 	Û Û 
Û ç 1Ý 'Ý àˆ(€ò6ò&+ð6 �-‰-€Ø /òH÷*ñ *ô"HÐ# W§_¡_ô HôV#�ô #ô*>÷y%ò y%r   