§
    öyIf“…  ã                   óÊ  — d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl	Z	d dl
mZ d dlmZ d dlZd dlZd dlZd d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZd dlZd dlZd dlmZ d dl m!Z! d dl m"Z" d dl m#Z# d dl m$Z$ d dl m%Z% d dl m&Z& d dl m'Z' d dl m(Z( d dl m)Z) d dl m*Z* d dl m+Z+ d dl m,Z, d dl-Z-d dl.Z.d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 dZ5 e+d e¬!¦  «        Z6eeeefZ7d"Z8d#e9d$e:fd%„Z;d&e6d$e6fd'„Z<d(e'e"d)e!f                  d&e=d*e,e>e)e*e>         e>e'ej?                 f         f         d+ed$e:f
d,„Z@d&ed$efd-„ZAd&e=d$e=fd.„ZBd&ed$dfd/„ZCd0ed1e=d$e%d2         fd3„ZDd4e$d2         d1e=d$e%e=         fd5„ZEd0ed1e=d$e%e=         fd6„ZFd7e=d$eGfd8„ZHd0ed9e,e=ef         d:e,e=ef         d$dfd;„ZId†d0ed1e=d=eGd$efd>„ZJd?ed$efd@„ZKe jL        fdAedBe!d$e!fdC„ZMd&ed$dfdD„ZNd&edEeOd$e:fdF„ZPd&edEeOd$dfdG„ZQd0ed1e=dHeGd$e%e         fdI„ZRd0ed$dfdJ„ZSd0ed1e=dHeGdEeOd$df
dK„ZTd0ed1e=dHeGdLeOd=eGd$efdM„ZUdNe=dOed$efdP„ZVdQe=d&e,e=dRf         d$e:fdS„ZWdTe=d$e(e=         fdU„ZXdVe,dRe=f         dWe,dRe=f         dXe!d$dfdY„ZY G dZ„ d[e¦  «        ZZ G d\„ d]e[¦  «        Z\eZj]        d^œd&e,e=dRf         d=e,e=eZf         d0ed_e:d$ef
d`„Z^dae=dbedcedde:d$e'e         f
de„Z_dfe'e         dbed$e:fdg„Z`eja         b                    dh¦  «        rdie=dje=d$e:fdk„Zcn
die=dje=d$e:fdl„Zcd&ed0ed$e=fdm„Zddne#e=ef         dae=d$dfdo„Zed&ed$e'e         fdp„Zfdqdrœd&ed_e:d$e)ee=f         fds„Zgdae=dbed$e:fdt„Zhd0edbed$e'e=         fdu„Zi G dv„ dwe9¦  «        Zjdx„ fd&e,e=dRf         dye"d2gekf         d$e&d2         fdz„Zld&e,e=dRf         d{e"d2ge:f         d$e%d2         fd|„Zmd&d}d$efd~„Znded€ed$e'e         fd�„Zod‚edƒed$e=fd„„Zpd?ed$e:fd…„ZqdS )‡é    N)ÚEnum)ÚEBADF)ÚELOOP)ÚENOENT)ÚENOTDIR)Úpartial)Ú
ModuleSpec)Ú
expanduser)Ú
expandvars)Úisabs)Úsep)ÚPath)ÚPurePath)Ú
ModuleType)ÚAny)ÚCallable)ÚDict)ÚIterable)ÚIterator)ÚList)ÚOptional)ÚSet)ÚTuple)ÚType)ÚTypeVar)ÚUnion)Úassert_never)Úskip)ÚPytestWarningi€ô Ú_AnyPurePath)Úbound)é   i�  Ú	exceptionÚreturnc                 ób   — t          | dd ¦  «        t          v pt          | dd ¦  «        t          v S )NÚerrnoÚwinerror)ÚgetattrÚ_IGNORED_ERRORSÚ_IGNORED_WINERRORS)r#   s    úC/var/www/piapp/venv/lib/python3.11/site-packages/_pytest/pathlib.pyÚ_ignore_errorr,   >   s6   € å�	˜7 DÑ)Ô)­_Ð<ð 	FÝ�9˜j¨$Ñ/Ô/Õ3EÐEðó    Úpathc                 ó,   — |                       d¦  «        S )Nz.lock)Újoinpath©r.   s    r+   Úget_lock_pathr2   E   s   € Ø�=Š=˜Ñ!Ô!Ð!r-   Úfunc.ÚexcinfoÚ
start_pathc                óø  ‡— t          |t          ¦  «        r|}n|d         }t          |t          ¦  «        rdS t          |t          ¦  «        s9t	          j        t          d|› dt          |¦  «        › d|› �¦  «        ¦  «         dS | t          j	        t          j
        t          j        fvrK| t          j        fvr:t	          j        t          d| › d|› dt          |¦  «        › d|› �¦  «        ¦  «         dS d	d
lŠdt          dd
fˆfd„}t          |¦  «        }|                     ¦   «         r*|j        D ]"} |t          |¦  «        ¦  «         ||k    r nŒ# |t          |¦  «        ¦  «          | |¦  «         dS )zhHandle known read-only errors during rmtree.

    The returned value is used only by our own tests.
    é   Fz(rm_rf) error removing ú
z: z(rm_rf) unknown function z when removing z:
r   NÚpr$   c                 ó„   •— t          j        | ¦  «        j        }t          j        | |‰j        z  ‰j        z  ¦  «         d S ©N)ÚosÚstatÚst_modeÚchmodÚS_IRUSRÚS_IWUSR)r9   Úmoder=   s     €r+   Úchmod_rwz on_rm_rf_error.<locals>.chmod_rws   s9   ø€ ÝŒw�q‰zŒzÔ!ˆÝ
Œ��D˜4œ<Ñ'¨$¬,Ñ6Ñ7Ô7Ð7Ð7Ð7r-   T)Ú
isinstanceÚBaseExceptionÚFileNotFoundErrorÚPermissionErrorÚwarningsÚwarnr   Útyper<   ÚrmdirÚremoveÚunlinkÚopenr=   Ústrr   Úis_fileÚparents)	r3   r.   r4   r5   ÚexcrC   r9   Úparentr=   s	           @r+   Úon_rm_rf_errorrT   I   sÊ  ø€ õ �'�=Ñ)Ô)ð Øˆˆà�aŒjˆõ �#Õ(Ñ)Ô)ð Øˆuå�c�?Ñ+Ô+ð ÝŒÝÐN°DÐNÐN½DÀ¹I¼IÐNÐNÈÐNÐNÑOÔOñ	
ô 	
ð 	
ð ˆuà•B”H�bœi­¬Ð3Ð3Ð3Ø�œ�zÐ!Ð!ÝŒMÝØ`°Ð`Ð`ÀTÐ`Ð`ÍdÐSVÉiÌiÐ`Ð`Ð[^Ð`Ð`ñô ñô ð ð
 ˆuð €K€K€Kð8•Cð 8˜Dð 8ð 8ð 8ð 8ð 8ð 8õ 	ˆT‰
Œ
€AØ‡y‚y�{„{ð Ø”ið 	ð 	ˆFØˆH•S˜‘[”[Ñ!Ô!Ð!à˜Ò#Ð#Ø�ð $à€H�S�‰YŒYÑÔÐà€Dˆ�J„J€JØˆ4r-   c                 ó¾   — t           j                             d¦  «        r=|                      ¦   «         } t	          t          t          | ¦  «        ¦  «        ¦  «        } | S )a0  Get the extended-length version of a path (Windows).

    On Windows, by default, the maximum length of a path (MAX_PATH) is 260
    characters, and operations on paths longer than that fail. But it is possible
    to overcome this by converting the path to "extended-length" form before
    performing the operation:
    https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#maximum-path-length-limitation

    On Windows, this function returns the extended-length absolute version of path.
    On other platforms it returns path unchanged.
    Úwin32)ÚsysÚplatformÚ
startswithÚresolver   Úget_extended_length_path_strrO   r1   s    r+   Úensure_extended_length_pathr\   †   sJ   € õ „|×Ò˜wÑ'Ô'ð =Ø�|Š|‰~Œ~ˆÝÕ0µ°T±´Ñ;Ô;Ñ<Ô<ˆØ€Kr-   c                 óŠ   — d}d}|                       ||f¦  «        r| S |                       d¦  «        r|| dd…         z   S || z   S )z1Convert a path to a Windows extended length path.z\\?\z\\?\UNC\z\\é   N)rY   )r.   Úlong_path_prefixÚunc_long_path_prefixs      r+   r[   r[   ˜   s`   € à ÐØ)ÐØ‡‚Ð(Ð*>Ð?Ñ@Ô@ð Øˆà‡‚�vÑÔð /Ø# d¨1¨2¨2¤hÑ.Ð.Ø˜dÑ"Ð"r-   c                 ó   — t          | ¦  «        } t          t          | ¬¦  «        }t          j        dk    r%t          j        t          | ¦  «        |¬¦  «         dS t          j        t          | ¦  «        |¬¦  «         dS )zNRemove the path contents recursively, even if some elements
    are read-only.)r5   )é   é   )Úonexc)ÚonerrorN)r\   r   rT   rW   Úversion_infoÚshutilÚrmtreerO   )r.   re   s     r+   Úrm_rfri   ¤   ss   € õ ' tÑ,Ô,€DÝ•n°Ð6Ñ6Ô6€GÝ
Ô˜7Ò"Ð"ÝŒ•c˜$‘i”i wÐ/Ñ/Ô/Ð/Ð/Ð/åŒ•c˜$‘i”i¨Ð1Ñ1Ô1Ð1Ð1Ð1r-   ÚrootÚprefixzos.DirEntry[str]c              #   óÀ   K  — |                      ¦   «         }t          j        | ¦  «        D ]2}|j                              ¦   «                              |¦  «        r|V — Œ3dS )zGFind all elements in root that begin with the prefix, case insensitive.N)Úlowerr<   ÚscandirÚnamerY   )rj   rk   Úl_prefixÚxs       r+   Úfind_prefixedrr   ¯   s`   è è € à�|Š|‰~Œ~€HÝŒZ˜ÑÔð ð ˆØŒ6�<Š<‰>Œ>×$Ò$ XÑ.Ô.ð 	ØˆGˆGˆGøðð r-   Úiterc              #   óT   K  — t          |¦  «        }| D ]}|j        |d…         V — ŒdS )zšReturn the parts of the paths following the prefix.

    :param iter: Iterator over path names.
    :param prefix: Expected prefix of the path names.
    N)Úlenro   )rs   rk   Úp_lenÚentrys       r+   Úextract_suffixesrx   ·   sF   è è € õ �‰KŒK€EØð !ð !ˆØŒj˜˜˜Ô Ð Ð Ð Ð ð!ð !r-   c                 ó>   — t          t          | |¦  «        |¦  «        S )z+Combine find_prefixes and extract_suffixes.)rx   rr   )rj   rk   s     r+   Úfind_suffixesrz   Â   s   € å�M¨$°Ñ7Ô7¸Ñ@Ô@Ð@r-   Ú	maybe_numc                 óD   — 	 t          | ¦  «        S # t          $ r Y dS w xY w)z0Parse number path suffixes, returns -1 on error.éÿÿÿÿ)ÚintÚ
ValueError)r{   s    r+   Ú	parse_numr€   Ç   s5   € ðÝ�9‰~Œ~ÐøÝð ð ð Øˆrˆrðøøøs   ‚ ‘
žÚtargetÚlink_toc                 óÊ   — |                       |¦  «        }	 |                     ¦   «          n# t          $ r Y nw xY w	 |                     |¦  «         dS # t          $ r Y dS w xY w)a  Helper to create the current symlink.

    It's full of race conditions that are reasonably OK to ignore
    for the context of best effort linking to the latest test run.

    The presumption being that in case of much parallelism
    the inaccuracy is going to be acceptable.
    N)r0   rM   ÚOSErrorÚ
symlink_toÚ	Exception)rj   r�   r‚   Úcurrent_symlinks       r+   Ú_force_symlinkrˆ   Ï   s�   € ð —m’m FÑ+Ô+€OðØ×ÒÑ Ô Ð Ð øÝð ð ð ØˆðøøøðØ×"Ò" 7Ñ+Ô+Ð+Ð+Ð+øÝð ð ð Øˆˆðøøøs   —, ¬
9¸9½A Á
A"Á!A"éÀ  rB   c           
      ón  — t          d¦  «        D ]�}t          t          t          t	          | |¦  «        ¦  «        d¬¦  «        }|dz   }|                      |› |› �¦  «        }	 |                     |¬¦  «         t          | |dz   |¦  «         |c S # t          $ r Y Œ�w xY wt          d|› d| › d	�¦  «        ‚)
zKCreate a directory with an increased number as suffix for the given prefix.é
   r}   ©Údefaultr7   ©rB   Úcurrentz*could not create numbered dir with prefix z in z after 10 tries)
ÚrangeÚmaxÚmapr€   rz   r0   Úmkdirrˆ   r†   r„   )rj   rk   rB   ÚiÚmax_existingÚ
new_numberÚnew_paths          r+   Úmake_numbered_dirr˜   å   sù   € å�2‰YŒYð 
ð 
ˆå�3�y­-¸¸fÑ*EÔ*EÑFÔFÐPRÐSÑSÔSˆØ! AÑ%ˆ
Ø—=’= FÐ!8¨JÐ!8Ð!8Ñ9Ô9ˆð	Ø�NŠN ˆNÑ%Ô%Ð%õ ˜4 ¨)Ñ!3°XÑ>Ô>Ð>ØˆOˆOˆOøõ	 ð 	ð 	ð 	ØˆDð	øøøõ ð1Øð1ð 1Øð1ð 1ð 1ñ
ô 
ð 	
s   Á#BÂ
BÂBr9   c                 óþ  — t          | ¦  «        }	 t          j        t          |¦  «        t          j        t          j        z  t          j        z  d¦  «        }t          j        ¦   «         }t          |¦  «                             ¦   «         }t          j	        ||¦  «         t          j
        |¦  «         |                     ¦   «         st          d¦  «        ‚|S # t          $ r}t          d| › �¦  «        |‚d}~ww xY w)z2Create a lock to prevent premature folder cleanup.i¤  z/lock path got renamed after successful creationzcannot create lockfile in N)r2   r<   rN   rO   ÚO_WRONLYÚO_CREATÚO_EXCLÚgetpidÚencodeÚwriteÚcloserP   r„   ÚFileExistsError)r9   Ú	lock_pathÚfdÚpidÚspidÚes         r+   Úcreate_cleanup_lockr§   ú   sâ   € å˜aÑ Ô €IðÝŒW•S˜‘^”^¥R¤[µ2´:Ñ%=ÅÄ	Ñ%IÈ5ÑQÔQˆõ Œi‰kŒkˆÝ�3‰xŒx�ŠÑ Ô ˆÝ
Œ��TÑÔÐÝ
Œ�‰ŒˆØ× Ò Ñ"Ô"ð 	MÝÐKÑLÔLÐLØÐøõ ð ?ð ?ð ?ÝÐ6°1Ð6Ð6Ñ7Ô7¸QÐ>øøøøð?øøøs   ‘AC Ã
C<Ã$C7Ã7C<r¢   Úregisterc                 ól   — t          j        ¦   «         }| |fdt          dt          ddfd„} ||¦  «        S )zFRegister a cleanup function for removing a lock, by default on atexit.r¢   Úoriginal_pidr$   Nc                 óˆ   — t          j        ¦   «         }||k    rd S 	 |                      ¦   «          d S # t          $ r Y d S w xY wr;   )r<   r�   rM   r„   )r¢   rª   Úcurrent_pids      r+   Úcleanup_on_exitz6register_cleanup_lock_removal.<locals>.cleanup_on_exit  s\   € Ý”i‘k”kˆØ˜,Ò&Ð&àˆFð	Ø×ÒÑÔÐÐÐøÝð 	ð 	ð 	ØˆDˆDð	øøøs   �3 ³
AÁ A)r<   r�   r   r~   )r¢   r¨   r¤   r­   s       r+   Úregister_cleanup_lock_removalr®     sU   € õ Œ)‰+Œ+€Cà*3Èð ð ¥4ð Å3ð ÐQUð ð ð ð ð ˆ8�OÑ$Ô$Ð$r-   c                 ó  — t          | ¦  «        } d}	 t          | ¦  «        }| j        }|                     dt	          j        ¦   «         › �¦  «        }|                      |¦  «         t          |¦  «         n;# t          $ r. Y |�(	 | 	                    ¦   «          dS # t          $ r Y dS w xY wdS w xY w	 |�(	 | 	                    ¦   «          dS # t          $ r Y dS w xY wdS # |�&	 | 	                    ¦   «          w # t          $ r Y w w xY ww xY w)z^Remove a numbered directory if its lock can be obtained and it does
    not seem to be in use.Nzgarbage-)
r\   r§   rS   r0   ÚuuidÚuuid4Úrenameri   r„   rM   )r.   r¢   rS   Úgarbages       r+   Úmaybe_delete_a_numbered_dirr´     sy  € õ ' tÑ,Ô,€DØ€IðÝ'¨Ñ-Ô-ˆ	Ø”ˆà—/’/Ð";­T¬Z©\¬\Ð";Ð";Ñ<Ô<ˆØ�Š�GÑÔÐÝˆg‰ŒˆˆøÝð ð ð ð
 	ð Ð ðØ× Ò Ñ"Ô"Ð"Ð"Ð"øÝð ð ð Ø��ðøøøð !Ð ðøøøð 	ð Ð ðØ× Ò Ñ"Ô"Ð"Ð"Ð"øÝð ð ð Ø��ðøøøð !Ð øˆ9Ð ðØ× Ò Ñ"Ô"Ð"Ð"øÝð ð ð Ø�ðøøøð !øøøsr   “A#A7 Á6C Á7
B/ÂC ÂB Â
B)Â(B)Â.B/Â/C Â6C Ã
CÃCÃD	Ã#C8Ã7D	Ã8
DÄD	ÄDÄD	Ú$consider_lock_dead_if_created_beforec                 ó’  — |                       ¦   «         rdS t          | ¦  «        }	 |                     ¦   «         sdS n# t          $ r Y dS w xY w	 |                     ¦   «         j        }||k     rGt          j        t          ¦  «        5  |                     ¦   «          	 ddd¦  «         dS # 1 swxY w Y   dS # t          $ r Y dS w xY w)zGCheck if `path` is deletable based on whether the lock file is expired.FTN)
Ú
is_symlinkr2   rP   r„   r=   Úst_mtimeÚ
contextlibÚsuppressrM   r†   )r.   rµ   ÚlockÚ	lock_times       r+   Úensure_deletabler½   :  s4  € à‡‚ÑÔð ØˆuÝ˜ÑÔ€DðØ�|Š|‰~Œ~ð 	Ø�4ð	øåð ð ð ð ˆuˆuðøøøðØ—I’I‘K”KÔ(ˆ	ð Ð;Ò;Ð;õ
 Ô$¥WÑ-Ô-ð ð Ø—’‘”�Øðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ˆuøõ ð ð ð Øˆuˆuðøøøs3   §> ¾
AÁAÁB8 ÂB+Â+B/Â2B/Â8
CÃCc                 óH   — t          | |¦  «        rt          | ¦  «         dS dS )z8Try to cleanup a folder if we can ensure it's deletable.N)r½   r´   )r.   rµ   s     r+   Útry_cleanupr¿   V  s3   € å˜ÐBÑCÔCð *Ý# DÑ)Ô)Ð)Ð)Ð)ð*ð *r-   Úkeepc           	   #   óf  K  — t          t          t          t          | |¦  «        ¦  «        d¬¦  «        }||z
  }t	          | |¦  «        }t          j        |¦  «        \  }}t          t          t          ||¦  «        ¦  «        }t          ||¦  «        D ]\  }}	|	|k    rt          |¦  «        V — ŒdS )zIList candidates for numbered directories to be removed - follows py.path.r}   rŒ   N)
r‘   r’   r€   rz   rr   Ú	itertoolsÚteerx   Úzipr   )
rj   rk   rÀ   r•   Ú
max_deleteÚentriesÚentries2Únumbersrw   Únumbers
             r+   Úcleanup_candidatesrÊ   \  s¸   è è € å•s�9¥m°D¸&Ñ&AÔ&AÑBÔBÈBÐOÑOÔO€LØ Ñ$€JÝ˜D &Ñ)Ô)€GÝ!œ gÑ.Ô.Ñ€GˆXÝ•)Õ-¨h¸Ñ?Ô?Ñ@Ô@€GÝ˜W gÑ.Ô.ð ð ‰ˆˆvØ�ZÒÐÝ�u‘+”+ÐÐÐøðð r-   c                 óÐ   — |                       ¦   «         D ]P}|                     ¦   «         r:|                     ¦   «                              ¦   «         s|                     ¦   «          ŒQd S r;   )Úiterdirr·   rZ   ÚexistsrM   )rj   Úleft_dirs     r+   Úcleanup_dead_symlinksrÏ   h  sh   € Ø—L’L‘N”Nð "ð "ˆØ×ÒÑ Ô ð 	"Ø×#Ò#Ñ%Ô%×,Ò,Ñ.Ô.ð "Ø—’Ñ!Ô!Ð!øð"ð "r-   c                 óè   — |                       ¦   «         sdS t          | ||¦  «        D ]}t          ||¦  «         Œ|                      d¦  «        D ]}t          ||¦  «         Œt	          | ¦  «         dS )z-Cleanup for lock driven numbered directories.Nz	garbage-*)rÍ   rÊ   r¿   ÚglobrÏ   )rj   rk   rÀ   rµ   r.   s        r+   Úcleanup_numbered_dirrÒ   o  s�   € ð �;Š;‰=Œ=ð ØˆÝ" 4¨°Ñ6Ô6ð @ð @ˆÝ�DÐ>Ñ?Ô?Ð?Ð?Ø—	’	˜+Ñ&Ô&ð @ð @ˆÝ�DÐ>Ñ?Ô?Ð?Ð?å˜$ÑÔÐÐÐr-   Úlock_timeoutc                 óL  — d}t          d¦  «        D ]�}	 t          | ||¦  «        }|dk    rt          |¦  «        }t          |¦  «         |                     ¦   «         j        |z
  }	t          j        t          | |||	¦  «         |c S # t          $ r}
|
}Y d}
~
Œ†d}
~
ww xY w|€J ‚|‚)z>Create a numbered dir with a cleanup lock and remove old ones.Nr‹   r   )
r�   r˜   r§   r®   r=   r¸   Úatexitr¨   rÒ   r†   )rj   rk   rÀ   rÓ   rB   r¦   r”   r9   r¢   rµ   rR   s              r+   Úmake_numbered_dir_with_cleanuprÖ   }  sÞ   € ð 	€AÝ�2‰YŒYð ð ˆð	Ý! $¨°Ñ5Ô5ˆAà�qŠyˆyÝ/°Ñ2Ô2�	Ý-¨iÑ8Ô8Ð8ð 45·6²6±8´8Ô3DÀ|Ñ3SÐ0åŒOÝ$ØØØØ4ñô ð ð ˆHˆHˆHøõ ð 	ð 	ð 	ØˆAˆAˆAˆAˆAˆAøøøøð	øøøð ˆ=ˆ=ˆ=Ø
€Gs   •5BÂ
BÂBÂBÚinputÚrootpathc                 ó¤   — t          | ¦  «        } t          | ¦  «        } t          | ¦  «        rt          | ¦  «        S |                     | ¦  «        S r;   )r
   r   r   r   r0   )r×   rØ   s     r+   Úresolve_from_strrÚ   ž  sJ   € Ý�uÑÔ€EÝ�uÑÔ€EÝˆU�|„|ð (Ý�E‰{Œ{Ðà× Ò  Ñ'Ô'Ð'r-   Úpatternzos.PathLike[str]c                 ó¸  — t          |¦  «        }t          j                             d¦  «        }|r2t          | vr)t
          | v r |                      t
          t          ¦  «        } t          | vr|j        }nSt          |¦  «        }| 	                    ¦   «         r0t          j                             | ¦  «        sdt          j        › | › �} t          j        || ¦  «        S )a¢  A port of FNMatcher from py.path.common which works with PurePath() instances.

    The difference between this algorithm and PurePath.match() is that the
    latter matches "**" glob expressions for each part of the path, while
    this algorithm uses the whole path instead.

    For example:
        "tests/foo/bar/doc/test_foo.py" matches pattern "tests/**/doc/test*.py"
        with this algorithm, but not with PurePath.match().

    This algorithm was ported to keep backward-compatibility with existing
    settings which assume paths match according this logic.

    References:
    * https://bugs.python.org/issue29249
    * https://bugs.python.org/issue34731
    ÚwinÚ*)r   rW   rX   rY   r   Ú	posix_sepÚreplacero   rO   Úis_absoluter<   r.   r   Úfnmatch)rÛ   r.   Úiswin32ro   s       r+   Ú
fnmatch_exrä   §  sÃ   € õ$ �D‰>Œ>€DÝŒl×%Ò% eÑ,Ô,€Gàð 2•3˜gÐ%Ð%­)°wÐ*>Ð*>ð —/’/¥)­SÑ1Ô1ˆå
�'ÐÐØŒyˆˆå�4‰yŒyˆØ×ÒÑÔð 	,¥b¤g§m¢m°GÑ&<Ô&<ð 	,Ø+�"œ&Ð+ 'Ð+Ð+ˆGÝŒ?˜4 Ñ)Ô)Ð)r-   Úsc                 óˆ   ‡— |                       t          ¦  «        Šˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         S )Nc                 ó\   •— h | ](}t          j        ‰d |dz   …         ¦  «        pt           ’Œ)S )Nr7   )r   Újoin)Ú.0r”   Úpartss     €r+   ú	<setcomp>zparts.<locals>.<setcomp>Í  s4   ø€ ÐGÐGÐG°�CŒH�U˜7˜Q ™U˜7”^Ñ$Ô$Ð+­ÐGÐGÐGr-   )Úsplitr   r�   ru   )rå   rê   s    @r+   rê   rê   Ë  s:   ø€ Ø�GŠG•C‰LŒL€EØGÐGÐGÐGµU½3¸u¹:¼:Ñ5FÔ5FÐGÑGÔGÐGr-   ÚsrcÚdstÚkwargsc                 ó‚   — 	 t          j        | |fi |¤Ž dS # t          $ r}t          d|› �¦  «         Y d}~dS d}~ww xY w)zDMake a symlink, or skip the test in case symlinks are not supported.zsymlinks not supported: N)r<   Úsymlinkr„   r   )rí   rî   rï   r¦   s       r+   Úsymlink_or_skiprò   Ð  so   € ð-Ý
Œ
�3˜Ð&Ð&˜vÐ&Ð&Ð&Ð&Ð&øÝð -ð -ð -ÝÐ+¨Ð+Ð+Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øøøøð-øøøs   ‚ —
>¡9¹>c                   ó   — e Zd ZdZdZdZdZdS )Ú
ImportModez6Possible values for `mode` parameter of `import_path`.ÚprependÚappendÚ	importlibN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rõ   rö   r÷   © r-   r+   rô   rô   Ü  s#   € € € € € Ø@Ð@à€GØ€FØ€I€I€Ir-   rô   c                   ó   — e Zd ZdZdS )ÚImportPathMismatchErrora  Raised on import_path() if there is a mismatch of __file__'s.

    This can happen when `import_path` is called multiple times with different filenames that has
    the same basename but reside in packages
    (for example "/tests1/test_foo.py" and "/tests2/test_foo.py").
    N©rø   rù   rú   rû   rü   r-   r+   rþ   rþ   ä  s   € € € € € ðð ð ð r-   rþ   rŽ   Úconsider_namespace_packagesc                óØ  — t          | ¦  «        } t          |¦  «        }|                      ¦   «         st          | ¦  «        ‚|t          j        u �r	 t          | |¬¦  «        \  }}t          j        t          ¦  «        5  t          j
        |         cddd¦  «         S # 1 swxY w Y   t          || |d¬¦  «        }|�|S n# t          $ r Y nw xY wt          | |¦  «        }t          j        t          ¦  «        5  t          j
        |         cddd¦  «         S # 1 swxY w Y   t          || | j        d¬¦  «        }|€t          d|› d| › �¦  «        ‚|S 	 t          | |¬¦  «        \  }}n# t          $ r | j        | j        }}Y nw xY w|t          j        u rHt#          |¦  «        t          j        vr,t          j                             t#          |¦  «        ¦  «         nn|t          j        u rQt#          |¦  «        t          j        d         k    r-t          j                             dt#          |¦  «        ¦  «         nt+          |¦  «         t	          j        |¦  «         t          j
        |         }| j        d	k    r|S t0          j                             d
d¦  «        }|dk    rÄ|j        }|€t9          ||| ¦  «        ‚|                     d¦  «        r
|dd…         }|                     t0          j        d	z   ¦  «        r%|dt?          t0          j        d	z   ¦  «         …         }	 tA          t#          | ¦  «        |¦  «        }	n# tB          $ r d}	Y nw xY w|	st9          ||| ¦  «        ‚|S )aq  
    Import and return a module from the given path, which can be a file (a module) or
    a directory (a package).

    :param path:
        Path to the file to import.

    :param mode:
        Controls the underlying import mechanism that will be used:

        * ImportMode.prepend: the directory containing the module (or package, taking
          `__init__.py` files into account) will be put at the *start* of `sys.path` before
          being imported with `importlib.import_module`.

        * ImportMode.append: same as `prepend`, but the directory will be appended
          to the end of `sys.path`, if not already in `sys.path`.

        * ImportMode.importlib: uses more fine control mechanisms provided by `importlib`
          to import the module, which avoids having to muck with `sys.path` at all. It effectively
          allows having same-named test modules in different places.

    :param root:
        Used as an anchor when mode == ImportMode.importlib to obtain
        a unique name for the module being imported so it can safely be stored
        into ``sys.modules``.

    :param consider_namespace_packages:
        If True, consider namespace packages when resolving module names.

    :raises ImportPathMismatchError:
        If after importing the given `path` and the module `__file__`
        are different. Only raised in `prepend` and `append` modes.
    ©r   NF©Úinsert_modulesTzCan't find module z at location r   ú__init__.pyÚPY_IGNORE_IMPORTMISMATCHÚ Ú1)z.pycz.pyor}   )"r   rô   rÍ   ÚImportErrorr÷   Ú resolve_pkg_root_and_module_namer¹   rº   ÚKeyErrorrW   ÚmodulesÚ_import_module_using_specÚCouldNotResolvePathErrorÚmodule_name_from_pathrS   Ústemrö   rO   r.   rõ   Úinsertr   Úimport_modulero   r<   ÚenvironÚgetÚ__file__rþ   Úendswithr   ru   Ú_is_samerF   )
r.   rB   rj   r   Úpkg_rootÚmodule_nameÚmodÚignoreÚmodule_fileÚis_sames
             r+   Úimport_pathr  í  s  € õP �‰:Œ:€DÝ�dÑÔ€Dà�;Š;‰=Œ=ð  Ý˜$ÑÔÐà�zÔ#Ð#Ñ#ð	Ý$DØÐ2Mð%ñ %ô %Ñ!ˆH�kõ Ô$¥XÑ.Ô.ð 0ð 0Ý”{ ;Ô/ð0ð 0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0õ ,Ø˜T 8¸Eðñ ô ˆCð ˆØ�
ð øõ (ð 	ð 	ð 	ØˆDð	øøøõ ,¨D°$Ñ7Ô7ˆÝÔ ¥Ñ*Ô*ð 	,ð 	,Ý”;˜{Ô+ð	,ð 	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,õ (Ø˜˜tœ{¸4ð
ñ 
ô 
ˆð ˆ;ÝÐS°;ÐSÐSÈTÐSÐSÑTÔTÐTØˆ
ð7Ý @ØÐ.Ið!
ñ !
ô !
Ñˆ�+�+øõ $ð 7ð 7ð 7Ø $¤¨T¬Y�+ˆˆˆð7øøøð �zÔ Ð Ð Ýˆx‰=Œ=¥¤Ð(Ð(ÝŒH�OŠO�C ™MœMÑ*Ô*Ð*øØ	•Ô#Ð	#Ð	#Ýˆx‰=Œ=�CœH QœKÒ'Ð'ÝŒH�OŠO˜A�s 8™}œ}Ñ-Ô-Ð-øå�TÑÔÐåÔ˜KÑ(Ô(Ð(å
Œ+�kÔ
"€CØ„y�MÒ!Ð!Øˆ
åŒZ�^Š^Ð6¸Ñ;Ô;€FØ�‚}€}Ø”lˆØÐÝ)¨+°{ÀDÑIÔIÐIà×ÒÐ 0Ñ1Ô1ð 	+Ø% c r cÔ*ˆKØ×Ò¥¤¨Ñ 6Ñ7Ô7ð 	HØ%Ð&F­#­b¬f°}Ñ.DÑ*EÔ*EÐ(FÐ&FÔGˆKð	Ý�s 4™yœy¨+Ñ6Ô6ˆGˆGøÝ ð 	ð 	ð 	ØˆGˆGˆGð	øøøð ð 	JÝ)¨+°{ÀDÑIÔIÐIà€JsZ   ÁC Á?BÂB"Â%B"Ã
CÃCÃ:DÄDÄ DÅE+ Å+FÆFÌ'M ÍMÍMr  Úmodule_pathÚmodule_locationr  c                ó   — t           j        D ]8}|                     | t          |¦  «        g¦  «        }t	          ||¦  «        r n.Œ9t
          j                             | t          |¦  «        ¦  «        }t	          ||¦  «        �r
|€J ‚|                      d¦  «        \  }}}d}	|rpt           j	         
                    |¦  «        }	|	€O|j        dk    r|j        j        n|j        }
|
dz                       ¦   «         r|
dz  n|
}t          |||
|¬¦  «        }	t
          j                             |¦  «        }|t           j	        | <   |j                             |¦  «         |	�t%          |	||¦  «         |rt'          t           j	        | ¦  «         |S dS )a9  
    Tries to import a module by its canonical name, path to the .py file, and its
    parent location.

    :param insert_modules:
        If True, will call insert_missing_modules to create empty intermediate modules
        for made-up module names (when importing test files not reachable from sys.path).
    Nú.r  r  )rW   Ú	meta_pathÚ	find_specrO   Úspec_matches_module_pathr÷   ÚutilÚspec_from_file_locationÚ
rpartitionr  r  ro   rS   rP   r  Úmodule_from_specÚloaderÚexec_moduleÚsetattrÚinsert_missing_modules)r  r  r   r  Úmeta_importerÚspecÚparent_module_nameÚ_ro   Úparent_moduleÚ
parent_dirÚparent_module_pathr  s                r+   r  r  k  sÅ  € õ œð Uð UˆØ×&Ò& {µS¸Ñ5IÔ5IÐ4JÑKÔKˆÝ# D¨+Ñ6Ô6ð 	ØˆEð	õ Œ~×5Ò5°kÅ3À{ÑCSÔCSÑTÔTˆå  kÑ2Ô2ñ 'ØÐÐÐð '2×&<Ò&<¸SÑ&AÔ&AÑ#Ð˜A˜tØ.2ˆØð 	ÝœKŸOšOÐ,>Ñ?Ô?ˆMØÐ$ð #Ô'¨=Ò8Ð8ð  Ô&Ô-Ð-à$Ô+ð ð # ]Ñ2×;Ò;Ñ=Ô=ð$�J Ñ.Ð.à#ð #õ
 !:Ø&Ø&ØØ#1ð	!ñ !ô !�õ Œn×-Ò-¨dÑ3Ô3ˆØ#&�Œ�KÑ ØŒ×Ò Ñ$Ô$Ð$ð Ð$Ý�M 4¨Ñ-Ô-Ð-àð 	=Ý"¥3¤;°Ñ<Ô<Ð<Øˆ
àˆ4r-   Úmodule_specc                 óH   — | �| j         €dS t          | j         ¦  «        |k    S )zPReturn true if the given ModuleSpec can be used to import the given module path.NF)Úoriginr   )r5  r  s     r+   r%  r%  «  s-   € ð Ð˜kÔ0Ð8Øˆuå�Ô"Ñ#Ô# {Ò2Ð2r-   rÝ   Úf1Úf2c                 ó‚   — t          | ¦  «        t          |¦  «        k    pt          j                             | |¦  «        S r;   )r   r<   r.   Úsamefile©r8  r9  s     r+   r  r  ¹  s0   € Ý�B‰xŒx�4 ™8œ8Ò#Ð?¥r¤w×'7Ò'7¸¸BÑ'?Ô'?Ð?r-   c                 óB   — t           j                             | |¦  «        S r;   )r<   r.   r;  r<  s     r+   r  r  ¾  s   € ÝŒw×Ò  BÑ'Ô'Ð'r-   c                 óT  — |                       d¦  «        } 	 |                      |¦  «        }|j        }n# t          $ r | j        dd…         }Y nw xY wt	          |¦  «        dk    r|d         dk    r
|dd…         }t          d„ |D ¦   «         ¦  «        }d                     |¦  «        S )	zÚ
    Return a dotted module name based on the given path, anchored on root.

    For example: path="projects/src/tests/test_foo.py" and root="/projects", the
    resulting module name will be "src.tests.test_foo".
    r  r7   Nr^   r}   Ú__init__c              3   óB   K  — | ]}|                      d d¦  «        V — ŒdS )r"  r1  N)rà   )ré   rq   s     r+   ú	<genexpr>z(module_name_from_path.<locals>.<genexpr>Ü  s0   è è € Ð?Ð?¨q�q—y’y  cÑ*Ô*Ð?Ð?Ð?Ð?Ð?Ð?r-   r"  )Úwith_suffixÚrelative_torê   r   ru   Útuplerè   )r.   rj   Úrelative_pathÚ
path_partss       r+   r  r  Â  sË   € ð ×Ò˜BÑÔ€Dð)Ø×(Ò(¨Ñ.Ô.ˆð #Ô(ˆ
ˆ
øõ ð $ð $ð $ð ”Z   ”^ˆ
ˆ
ˆ
ð$øøøõ ˆ:�„˜!ÒÐ 
¨2¤°*Ò <Ð <Ø   ”_ˆ
õ
 Ð?Ð?°JÐ?Ñ?Ô?Ñ?Ô?€Jà�8Š8�JÑÔÐs   —4 ´AÁAr  c                 óà  — |                      d¦  «        }|rÖ|                     d¦  «        \  }}}|r�|                      |¦  «        }|€O	 t          j        st
          ‚t          j        |¦  «        }n!# t
          $ r t          |d¬¦  «        }Y nw xY w|| |<   t          ||¦  «        st          ||| |         ¦  «         |                     d¦  «         d                     |¦  «        }|°ÔdS dS )aM  
    Used by ``import_path`` to create intermediate modules when using mode=importlib.

    When we want to import a module as "src.tests.test_foo" for example, we need
    to create empty modules "src" and "src.tests" after inserting "src.tests.test_foo",
    otherwise "src.tests.test_foo" is not importable by ``__import__``.
    r"  Nz6Empty module created by pytest's importmode=importlib.)Údocr}   )rì   r(  r  rW   r#  ÚModuleNotFoundErrorr÷   r  r   Úhasattrr,  Úpoprè   )r  r  Úmodule_partsr0  r1  Ú
child_namer2  s          r+   r-  r-  á  s:  € ð ×$Ò$ SÑ)Ô)€LØ
ð -Ø,7×,BÒ,BÀ3Ñ,GÔ,GÑ)Ð˜A˜zØð 	IØ#ŸKšKÐ(:Ñ;Ô;ˆMØÐ$ðõ
 œ=ð 2Ý1Ð1Ý$-Ô$;Ð<NÑ$OÔ$O�M�MøÝ*ð ð ð Ý$.Ø#ØTð%ñ %ô %�M�M�Mðøøøð
 /<�Ð*Ñ+õ ˜=¨*Ñ5Ô5ð IÝ˜ z°7¸;Ô3GÑHÔHÐHà×Ò˜ÑÔÐØ—h’h˜|Ñ,Ô,ˆð5 ð -ð -ð -ð -ð -s   Á'A3 Á3BÂBc                 óÚ   — d}t          j        | f| j        ¦  «        D ]L}|                     ¦   «         r6|dz                       ¦   «         s n|j                             ¦   «         s n|}ŒM|S )z¥Return the Python package path by looking for the last
    directory upwards which still contains an __init__.py.

    Returns None if it can not be determined.
    Nr  )rÂ   ÚchainrQ   Úis_dirrP   ro   Úisidentifier)r.   ÚresultrS   s      r+   Úresolve_package_pathrS    s|   € ð €FÝ”/ 4 '¨4¬<Ñ8Ô8ð ð ˆØ�=Š=‰?Œ?ð 	Ø˜]Ñ*×3Ò3Ñ5Ô5ð Ø�Ø”;×+Ò+Ñ-Ô-ð Ø�ØˆFøØ€Mr-   Fr  c                ó  — d}t          | ¦  «        }|�|j        }|r?|�|n| j        }|g|j        ¢R D ](}t          || ¦  «        }|rt	          || ¦  «        r|} nŒ)|�t          || ¦  «        }|r||fS t          d| › �¦  «        ‚)a¥  
    Return the path to the directory of the root package that contains the
    given Python file, and its module name:

        src/
            app/
                __init__.py
                core/
                    __init__.py
                    models.py

    Passing the full path to `models.py` will yield Path("src") and "app.core.models".

    If consider_namespace_packages is True, then we additionally check upwards in the hierarchy
    for namespace packages:

    https://packaging.python.org/en/latest/guides/packaging-namespace-packages

    Raises CouldNotResolvePathError if the given path does not belong to a package (missing any __init__.py files).
    NzCould not resolve for )rS  rS   rQ   Úcompute_module_nameÚis_importabler  )r.   r   r  Úpkg_pathÚstartÚ	candidater  s          r+   r
  r
    sÉ   € ð.  $€HÝ# DÑ)Ô)€HØÐØ”?ˆØ"ð Ø$Ð0��°d´kˆØÐ0 %¤-Ð0Ð0ð 	ð 	ˆIÝ-¨i¸Ñ>Ô>ˆKØð �}¨[¸$Ñ?Ô?ð à$�Ø�øàÐÝ)¨(°DÑ9Ô9ˆØð 	)Ø˜[Ð(Ð(å
"Ð#B¸DÐ#BÐ#BÑ
CÔ
CÐCr-   c                 óž   — 	 t           j                             | ¦  «        }t          ||¦  «        S # t          t
          t          f$ r Y dS w xY w)aú  
    Return if the given module path could be imported normally by Python, akin to the user
    entering the REPL and importing the corresponding module name directly, and corresponds
    to the module_path specified.

    :param module_name:
        Full module name that we want to check if is importable.
        For example, "app.models".

    :param module_path:
        Full path to the python module/package we want to check if is importable.
        For example, "/projects/src/app/models.py".
    F)r÷   r&  r$  r%  r	  r   ÚImportWarning)r  r  r/  s      r+   rV  rV  D  s[   € ð	;õ
 Œ~×'Ò'¨Ñ4Ô4ˆõ (¨¨kÑ:Ô:Ð:øõ �¥]Ð3ð ð ð Øˆuˆuðøøøs   ‚1 ±AÁAc                 ó<  — 	 |                      d¦  «        }n# t          $ r Y dS w xY w	 |                     | ¦  «        }n# t          $ r Y dS w xY wt          |j        ¦  «        }|sdS |d         dk    r|                     ¦   «          d                     |¦  «        S )z8Compute a module name based on a path and a root anchor.r  Nr}   r?  r"  )rB  r   rC  Úlistrê   rK  rè   )rj   r  Úpath_without_suffixÚrelativeÚnamess        r+   rU  rU  ^  sÄ   € ðØ)×5Ò5°bÑ9Ô9ÐÐøÝð ð ð àˆtˆtðøøøðØ&×2Ò2°4Ñ8Ô8ˆˆøÝð ð ð Øˆtˆtðøøøå�”Ñ Ô €EØð ØˆtØˆR„y�JÒÐØ�	Š	‰ŒˆØ�8Š8�E‰?Œ?Ðs   ‚ ˜
&¥&ªA  Á 
AÁAc                   ó   — e Zd ZdZdS )r  z<Custom exception raised by resolve_pkg_root_and_module_name.Nrÿ   rü   r-   r+   r  r  r  s   € € € € € ØFÐFÐFÐFr-   r  c                 ó   — | j         S r;   )ro   )rw   s    r+   ú<lambda>rc  x  s   € ÀUÄZ€ r-   Úsort_keyc                 ó>  — g }t          j        | ¦  «        5 }|D ]T}	 |                     ¦   «          n'# t          $ r}t	          |¦  «        rY d}~Œ6‚ d}~ww xY w|                     |¦  «         ŒU	 ddd¦  «         n# 1 swxY w Y   |                     |¬¦  «         |S )zŸScan a directory recursively, in breadth-first order.

    The returned entries are sorted according to the given key.
    The default is to sort by name.
    N)Úkey)r<   rn   rP   r„   r,   rö   Úsort)r.   rd  rÆ   rå   rw   Úerrs         r+   rn   rn   v  s  € ð €GÝ	Œ�DÑ	Ô	ð 
"˜Qð ð 	"ð 	"ˆEðØ—’‘”��øÝð ð ð Ý  Ñ%Ô%ð Ø�H�H�H�HØøøøøðøøøð �NŠN˜5Ñ!Ô!Ð!Ð!ð	"ð
"ð 
"ð 
"ñ 
"ô 
"ð 
"ð 
"ð 
"ð 
"ð 
"ð 
"øøøð 
"ð 
"ð 
"ð 
"ð ‡L‚L�X€LÑÔÐØ€Ns<   —A<�2±A<²
A¼AÁA<ÁAÁAÁA<Á<B ÂB Úrecursec              #   ó¶   K  — t          | ¦  «        }|E d{V —† |D ]<}|                     ¦   «         r& ||¦  «        rt          |j        |¦  «        E d{V —† Œ=dS )z´Walk a directory recursively, in breadth-first order.

    The `recurse` predicate determines whether a directory is recursed.

    Entries at each directory level are sorted.
    N)rn   rP  Úvisitr.   )r.   ri  rÆ   rw   s       r+   rk  rk  �  sˆ   è è € õ �d‰mŒm€GØÐÐÐÐÐÐÐØð 2ð 2ˆØ�<Š<‰>Œ>ð 	2˜g˜g e™nœnð 	2Ý˜UœZ¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øð2ð 2r-   zUnion[str, os.PathLike[str]]c                 óZ   — t          t          j                             | ¦  «        ¦  «        S )z¶Convert a path to an absolute path using os.path.abspath.

    Prefer this over Path.resolve() (see #6523).
    Prefer this over Path.absolute() (not public, doesn't normalize).
    )r   r<   r.   Úabspathr1   s    r+   Úabsolutepathrn  Ÿ  s    € õ •”—’ Ñ%Ô%Ñ&Ô&Ð&r-   Úpath1Úpath2c                 ó¶   — 	 t          t          j                             t	          | ¦  «        t	          |¦  «        f¦  «        ¦  «        S # t
          $ r Y dS w xY w)zŸReturn the common part shared with the other path, or None if there is
    no common part.

    If one path is relative and one is absolute, returns None.
    N)r   r<   r.   Ú
commonpathrO   r   )ro  rp  s     r+   rr  rr  ¨  sX   € ðÝ•B”G×&Ò&­¨E©
¬
µC¸±J´JÐ'?Ñ@Ô@ÑAÔAÐAøÝð ð ð Øˆtˆtðøøøs   ‚AA
 Á

AÁAÚ	directoryÚdestc                 ó’  — t          | t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚|| k    rt          j        S t	          | |¦  «        }|st          |¦  «        S |                      |¦  «        }|                     |¦  «        }t          j        j        g t          j	        gt          |j        ¦  «        z  ¢|j        ¢R Ž S )zåReturn a string which is a relative path from directory to dest such
    that directory/bestrelpath == dest.

    The paths must be either both absolute or both relative.

    If no such path can be determined, returns dest.
    )rD   r   r<   Úcurdirrr  rO   rC  r.   rè   Úpardirru   rê   )rs  rt  ÚbaseÚreldirectoryÚreldests        r+   Úbestrelpathr{  ´  sÑ   € õ �i¥Ñ&Ô&Ð&Ð&Ð&Ý�d�DÑ!Ô!Ð!Ð!Ð!ØˆyÒÐÝŒyÐå�i Ñ&Ô&€Dð ð Ý�4‰yŒyÐØ×(Ò(¨Ñ.Ô.€LØ×Ò˜tÑ$Ô$€GÝŒ7Œ<ð åŒ9ˆ+�˜LÔ.Ñ/Ô/Ñ
/ðð 
Œð	ð ð ð r-   c                 ó\   — 	 |                       ¦   «         S # t          t          f$ r Y dS w xY w)zTLike Path.exists(), but account for input arguments that might be too long (#11394).F)rÍ   r   r„   )r9   s    r+   Úsafe_existsr}  Ñ  s>   € ðØ�xŠx‰zŒzÐøÝ�Ð ð ð ð ð ˆuˆuðøøøs   ‚ –+ª+)r‰   )rrÕ   r¹   Úenumr   r&   r   r   r   r   râ   Ú	functoolsr   Úimportlib.machineryr	   Úimportlib.utilr÷   rÂ   r<   Úos.pathr
   r   r   r   Úpathlibr   r   Ú	posixpathrß   rg   rW   Útypesr   Útypingr   r   r   r   r   r   r   r   r   r   r   r   r°   rH   Ú_pytest.compatr   Ú_pytest.outcomesr   Ú_pytest.warning_typesr   ÚLOCK_TIMEOUTr    r)   r*   r†   Úboolr,   r2   rO   rE   ÚTracebackTyperT   r\   r[   ri   rr   rx   rz   r~   r€   rˆ   r˜   r§   r¨   r®   r´   Úfloatr½   r¿   rÊ   rÏ   rÒ   rÖ   rÚ   rä   rê   rò   rô   r	  rþ   rõ   r  r  r%  rX   rY   r  r  r-  rS  r
  rV  rU  r  Úobjectrn   rk  rn  rr  r{  r}  rü   r-   r+   ú<module>r�     sü  ðØ €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø €€€Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø !Ð !Ð !Ð !Ð !Ð !Ø /Ð /Ð /Ð /Ð /Ð /ð  €ð ˆw�~¨XÐ6Ñ6Ô6€ð ˜7 E¨5Ð1€ðÐ ð˜Yð ¨4ð ð ð ð ð"˜ð "¨ð "ð "ð "ð "ð:Ø
�8˜C ˜HÔ%Ô
&ð:à
ð:ð ØØˆd�=Ô! =°(¸5Ô;NÔ2OÐOÔPð	Rôð:ð ð:ð 
ð:ð :ð :ð :ðz dð ¨tð ð ð ð ð$	# sð 	#¨sð 	#ð 	#ð 	#ð 	#ð2�ð 2˜ð 2ð 2ð 2ð 2ð˜ð  cð ¨hÐ7IÔ.Jð ð ð ð ð!˜8Ð$6Ô7ð !Àð !ÈÐRUÌð !ð !ð !ð !ðA˜ð A cð A¨h°s¬mð Að Að Að Að
˜ð  ð ð ð ð ðØ
ðØ˜c 8˜mÔ,ðØ7<¸SÀ$¸YÔ7Gðà	ðð ð ð ð,
ð 
˜Dð 
¨#ð 
°Sð 
ÀTð 
ð 
ð 
ð 
ð*˜4ð  Dð ð ð ð ð$ &,¤_ð%ð %Øð%Ø"ð%àð%ð %ð %ð %ð& dð ¨tð ð ð ð ð8˜4ð Àuð ÐQUð ð ð ð ð8*�dð *À%ð *ÈDð *ð *ð *ð *ð	˜Tð 	¨3ð 	°cð 	¸hÀt¼nð 	ð 	ð 	ð 	ð" ð "¨ð "ð "ð "ð "ð Ø
ð Øð Ø#&ð ØNSð à	ð ð  ð  ð  ðØ
ðàðð ðð ð	ð
 ðð 
ðð ð ð ðB(˜Cð (¨4ð (°Dð (ð (ð (ð (ð!*˜ð !* 5¨Ð.@Ð)@Ô#Að !*Àdð !*ð !*ð !*ð !*ðHHˆSð H�S˜”Xð Hð Hð Hð Hð
	-Ø	Ð! 3Ð&Ô	'ð	-à	Ð! 3Ð&Ô	'ð	-ð ð	-ð 
ð		-ð 	-ð 	-ð 	-ðð ð ð ð �ñ ô ð ðð ð ð ð ˜kñ ô ð ð $.Ô#5ð{ð {ð {Ø
�Ð'Ð'Ô
(ð{ð ��Z�Ô
 ð{ð ð	{ð
 "&ð{ð ð{ð {ð {ð {ð|=Øð=Ø#'ð=Ø:>ð=ØSWð=àˆjÔð=ð =ð =ð =ð@3Ø˜*Ô%ð3Ø48ð3à	ð3ð 3ð 3ð 3ð „<×Ò˜5Ñ!Ô!ð (ð@�Sð @˜cð @ dð @ð @ð @ð @ð @ð
(�Sð (˜cð ( dð (ð (ð (ð (ð  ð  ¨Dð  °Sð  ð  ð  ð  ð>#- D¨¨j¨Ô$9ð #-Èð #-ÐPTð #-ð #-ð #-ð #-ðL˜tð ¨°¬ð ð ð ð ð$ 8=ð)Dð )Dð )DØ
ð)DØ04ð)Dà
ˆ4�ˆ9Ôð)Dð )Dð )Dð )DðX;˜sð ;°ð ;¸$ð ;ð ;ð ;ð ;ð4˜dð °ð ¸(À3¼-ð ð ð ð ð(Gð Gð Gð Gð G˜yñ Gô Gð Gð 8PÐ7Oðð Ø
�Ð'Ð'Ô
(ðàÐ*Ð+¨VÐ3Ô4ðð 
Ð
Ôðð ð ð ð22Ø
�Ð'Ð'Ô
(ð2Ø3;Ð=OÐ<PÐRVÐ<VÔ3Wð2àÐ Ô!ð2ð 2ð 2ð 2ð 'Ð5ð '¸$ð 'ð 'ð 'ð 'ð	�dð 	 4ð 	¨H°T¬Nð 	ð 	ð 	ð 	ð˜4ð  tð °ð ð ð ð ð:�4ð ˜Dð ð ð ð ð ð r-   