§
    ïyIf˜X  ã                   óZ  — d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z
mZ ddlmZ ddlmZ ddlmZmZmZm	Z	mZmZmZmZmZmZmZmZmZmZmZ ddlmZ ej         d	k    ree!ee!         f         Z"n
ee!ef         Z" ed
e"¬¦  «        Z#	 d„ ej$        ej%        fD ¦   «         Z&	 i Z'	 dej(        de!fd„Z)deee*ef                  de!deee+         ee*         f         fd„Z,	 d9dee         dee!         dee+         dee!df         fd„Z-dee         deee*ef                  fd„Z.dede+fd„Z/	 	 d:de"deee0gdf                  dee+         ded         fd„Z1de!d e!d!ee!e!f         dee0gdf         de+ded         fd"„Z2	 	 d:de"deee0gdf                  dee+         dee!         fd#„Z3d:d$„Z4d%e!deegef         fd&„Z5dee         de!de+fd'„Z6dee         dee!         dee!         fd(„Z7	 d9de"d)ee	e!                  de!fd*„Z8	 d9dee"         d)ee	e!                  dee!ee"         f         fd+„Z9	 d9d%e!d,eegef         d-ee+         ddfd.„Z: G d/„ d0e;¦  «        Z< G d1„ d2e;¦  «        Z= ed3¬4¦  «         G d5„ d6ee#         ¦  «        ¦   «         Z> G d7„ de?¦  «        Z@ G d8„ de?¦  «        ZAdS );zC
This module provides utility methods for dealing with path-specs.
é    N)Ú
CollectionÚIterable)Ú	dataclass)ÚPathLike)ÚAnyÚAnyStrÚCallabler   ÚDictÚGenericr   ÚIteratorÚListÚOptionalÚSequenceÚSetÚTupleÚTypeVarÚUnioné   )ÚPattern)é   é	   ÚTStrPath)Úboundc                 ó6   — g | ]}|r|t           j        k    ¯|‘ŒS © )Ú	posixpathÚsep)Ú.0Ú__seps     úA/var/www/piapp/venv/lib/python3.11/site-packages/pathspec/util.pyú
<listcomp>r!   1   s9   € ð ð ð à
Ø	ðð •y”}Ò$Ð$ð à$Ð$Ð$ó    ÚpathÚreturnc                 ój   — t          | ¦  «        }|                      ¦   «         r|t          j        z  }|S )a5  
	Appends the path separator to the path if the path is a directory.
	This can be used to aid in distinguishing between directories and
	files on the file-system by relying on the presence of a trailing path
	separator.

	*path* (:class:`pathlib.Path`) is the path to use.

	Returns the path (:class:`str`).
	)ÚstrÚis_dirÚosr   )r#   Ústr_paths     r    Úappend_dir_sepr*   D   s0   € õ �‰IŒI€Ø‡K‚K�M„Mð Ø
�bŒfÑ€(à€r"   ÚpatternsÚfilec                 ól   — d}d}| D ]*\  }}|j         �|                     |¦  «        �	|j         }|}Œ+||fS )aö  
	Check the file against the patterns.

	*patterns* (:class:`~collections.abc.Iterable`) yields each indexed pattern
	(:class:`tuple`) which contains the pattern index (:class:`int`) and actual
	pattern (:class:`~pathspec.pattern.Pattern`).

	*file* (:class:`str`) is the normalized file path to be matched
	against *patterns*.

	Returns a :class:`tuple` containing whether to include *file* (:class:`bool`
	or :data:`None`), and the index of the last matched pattern (:class:`int` or
	:data:`None`).
	N©ÚincludeÚ
match_file)r+   r,   Úout_includeÚ	out_indexÚindexÚpatterns         r    Úcheck_match_filer5   V   sT   € ð$  $€Ø €Øð ð �^€UˆGØ„_Ð  W×%7Ò%7¸Ñ%=Ô%=Ð%IØ”€;Ø€9øà�YÐÐr"   ÚfilesÚall_matchesÚMatchDetailc                 óX  — t          |t          ¦  «        r|nt          |¦  «        }i }| D ]~}|j        �u|                     |¦  «        }|j        rQ|D ]M}||v r4|r!||         j                             |¦  «         Œ)|||         j        d<   Œ:t          |g¦  «        ||<   ŒNŒv|D ]}||= ŒŒ|S )a²  
	Matches the files to the patterns, and returns which patterns matched
	the files.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`~pathspec.pattern.Pattern`)
	contains the patterns to use.

	*files* (:class:`~collections.abc.Iterable` of :class:`str`) contains
	the normalized file paths to be matched against *patterns*.

	*all_matches* (:class:`bool` or :data:`None`) is whether to return all
	matches patterns (:data:`True`), or only the last matched pattern
	(:data:`False`). Default is :data:`None` for :data:`False`.

	Returns the matched files (:class:`dict`) which maps each matched file
	(:class:`str`) to the patterns that matched in order (:class:`.MatchDetail`).
	Nr   )Ú
isinstanceÚCollectionTypeÚlistr/   Úmatchr+   Úappendr8   )	r+   r6   r7   Ú	all_filesÚreturn_filesr4   Úresult_filesÚresult_filer,   s	            r    Údetailed_match_filesrC   r   sî   € õ, ! ­Ñ7Ô7ÐHˆUˆU½TÀ%¹[¼[€Ø€Øð ð €WØ„_Ð Ø—-’- 	Ñ*Ô*€<Ø„oð à#ð 9ð 9ˆØ�|Ð#Ð#Ø	ð 7Ø�KÔ Ô)×0Ò0°Ñ9Ô9Ð9Ð9à/6€|�KÔ Ô)¨!Ñ,Ð,å"-¨w¨iÑ"8Ô"8€l�;ÑÐð9ð ð ð ˆØ	�dÐ	Ð	øàÐr"   c                 ó4   — d„ t          | ¦  «        D ¦   «         S )a&  
	Filters out null-patterns.

	*patterns* (:class:`Iterable` of :class:`.Pattern`) contains the
	patterns.

	Returns a :class:`list` containing each indexed pattern (:class:`tuple`) which
	contains the pattern index (:class:`int`) and the actual pattern
	(:class:`~pathspec.pattern.Pattern`).
	c                 ó*   — g | ]\  }}|j         ®||f‘ŒS ©N©r/   )r   Ú__indexÚ__pats      r    r!   z*_filter_check_patterns.<locals>.<listcomp>­   s3   € ð 	ð 	ð 	á€gˆuØ
„]Ðð ˆEÐàÐÐr"   )Ú	enumerate©r+   s    r    Ú_filter_check_patternsrL       s+   € ð	ð 	å! (Ñ+Ô+ð	ñ 	ô 	ð r"   Úvaluec                 óf   — t          | t          ¦  «        ot          | t          t          f¦  «         S )z˜
	Check whether the value is an iterable (excludes strings).

	*value* is the value to check,

	Returns whether *value* is a iterable (:class:`bool`).
	)r:   ÚIterableTyper&   Úbytes)rM   s    r    Ú_is_iterablerQ   ´   s*   € õ 	�5�,Ñ'Ô'ÐOµ
¸5Å3ÍÀ,Ñ0OÔ0OÐ,OÐOr"   ÚrootÚon_errorÚfollow_linksÚ	TreeEntryc              #   óÆ   K  — |�"t          |¦  «        st          d|›d�¦  «        ‚|€d}t          t          j                             | ¦  «        di ||¦  «        E d{V —† dS )a  
	Walks the specified directory for all files and directories.

	*root* (:class:`str` or :class:`os.PathLike`) is the root directory to
	search.

	*on_error* (:class:`~collections.abc.Callable` or :data:`None`)
	optionally is the error handler for file-system exceptions. It will be
	called with the exception (:exc:`OSError`). Reraise the exception to
	abort the walk. Default is :data:`None` to ignore file-system
	exceptions.

	*follow_links* (:class:`bool` or :data:`None`) optionally is whether
	to walk symbolic links that resolve to directories. Default is
	:data:`None` for :data:`True`.

	Raises :exc:`RecursionError` if recursion is detected.

	Returns an :class:`~collections.abc.Iterator` yielding each file or
	directory entry (:class:`.TreeEntry`) relative to *root*.
	Nz	on_error:ú is not callable.TÚ )ÚcallableÚ	TypeErrorÚ_iter_tree_entries_nextr(   r#   Úabspath©rR   rS   rT   s      r    Úiter_tree_entriesr^   ¿   s|   è è € ð4 Ð¥¨(Ñ!3Ô!3ÐÝÐ;˜hÐ;Ð;Ð;Ñ<Ô<Ð<àÐØ€,å#¥B¤G§O¢O°DÑ$9Ô$9¸2¸rÀ8È\ÑZÔZÐZÐZÐZÐZÐZÐZÐZÐZÐZr"   Ú	root_fullÚdir_relÚmemoc           	   #   ó°  K  — t           j                             | |¦  «        }t           j                             |¦  «        }||vr|||<   nt	          |||         |¬¦  «        ‚t          j        |¦  «        5 }|D �]>}t           j                             ||j        ¦  «        }		 |                     d¬¦  «        }
n$# t          $ r}|� ||¦  «         Y d}~Œ\d}~ww xY w| 	                    ¦   «         r:	 |                     ¦   «         }n&# t          $ r}|� ||¦  «         Y d}~Œªd}~ww xY w|
}| 
                    |¬¦  «        r3t          |j        |	|
|¦  «        V — t          | |	|||¦  «        E d{V —† Œý|                     ¦   «         s| 	                    ¦   «         rt          |j        |	|
|¦  «        V — �Œ@	 ddd¦  «         n# 1 swxY w Y   ||= dS )aq  
	Scan the directory for all descendant files.

	*root_full* (:class:`str`) the absolute path to the root directory.

	*dir_rel* (:class:`str`) the path to the directory to scan relative to
	*root_full*.

	*memo* (:class:`dict`) keeps track of ancestor directories
	encountered. Maps each ancestor real path (:class:`str`) to relative
	path (:class:`str`).

	*on_error* (:class:`~collections.abc.Callable` or :data:`None`)
	optionally is the error handler for file-system exceptions.

	*follow_links* (:class:`bool`) is whether to walk symbolic links that
	resolve to directories.

	Yields each entry (:class:`.TreeEntry`).
	)Ú	real_pathÚ
first_pathÚsecond_pathF)Úfollow_symlinksN)r(   r#   ÚjoinÚrealpathÚRecursionErrorÚscandirÚnameÚstatÚOSErrorÚ
is_symlinkr'   rU   r[   Úis_file)r_   r`   ra   rS   rT   Údir_fullÚdir_realÚ	scan_iterÚnode_entÚnode_relÚ
node_lstatÚeÚ	node_stats                r    r[   r[   â   s}  è è € õ6 ŒG�LŠL˜ GÑ,Ô,€ÝŒG×Ò˜XÑ&Ô&€ð
 �DÐÐØ€$€x�.€.å °d¸8´nÐRYÐZÑZÔZÐZå„j�ÑÔð !D˜iàð Dñ D€hÝŒg�lŠl˜7 H¤MÑ2Ô2€8ðØ—’¨u�Ñ5Ô5€J€JøÝ
ð ð ð ØÐØ€Xˆa�[„[€[Ø€H€H€H€Høøøøðøøøð
 ×ÒÑÔð 	ðØ—’‘”€Y€YøÝð ð ð ØÐØ€hˆq�k„k€kØ€X€X€X€Xøøøøðøøøð
 €Ià‡o‚o l€oÑ3Ô3ð 	Dõ �H”M 8¨Z¸Ñ
CÔ
CÐCÐCÐCå& y°(¸DÀ(ÈLÑYÔYÐYÐYÐYÐYÐYÐYÐYÐYà×ÒÑÔð D˜h×1Ò1Ñ3Ô3ð Då
�H”M 8¨Z¸Ñ
CÔ
CÐCÐCÐCùð?Dð!Dð !Dð !Dñ !Dô !Dð !Dð !Dð !Dð !Dð !Dð !Døøøð !Dð !Dð !Dð !DðP 
ˆ(€^€^€^sg   Á8+GÂ$B;Â:GÂ;
CÃCÃGÃCÃGÃ4D	ÄGÄ	
D*ÄD%Ä GÄ%D*Ä*BGÇGÇGc              #   óp   K  — t          | ||¬¦  «        D ] }|                     |¦  «        s	|j        V — Œ!dS )aû  
	Walks the specified directory for all files.

	*root* (:class:`str` or :class:`os.PathLike`) is the root directory to
	search for files.

	*on_error* (:class:`~collections.abc.Callable` or :data:`None`)
	optionally is the error handler for file-system exceptions. It will be
	called with the exception (:exc:`OSError`). Reraise the exception to
	abort the walk. Default is :data:`None` to ignore file-system
	exceptions.

	*follow_links* (:class:`bool` or :data:`None`) optionally is whether
	to walk symbolic links that resolve to directories. Default is
	:data:`None` for :data:`True`.

	Raises :exc:`RecursionError` if recursion is detected.

	Returns an :class:`~collections.abc.Iterator` yielding the path to
	each file (:class:`str`) relative to *root*.
	©rS   rT   N)r^   r'   r#   )rR   rS   rT   Úentrys       r    Úiter_tree_filesr{   3  sS   è è € õ4   ¨xÀlÐSÑSÔSð ð €UØ	�Š�lÑ	#Ô	#ð Ø	ŒÐÐÐøðð r"   c                 ó^   — t          j        dt          d¬¦  «         t          | ||¬¦  «        S )zg
	DEPRECATED: The :func:`.iter_tree` function is an alias for the
	:func:`.iter_tree_files` function.
	zCutil.iter_tree() is deprecated. Use util.iter_tree_files() instead.é   ©Ú
stacklevelry   )ÚwarningsÚwarnÚDeprecationWarningr{   r]   s      r    Ú	iter_treerƒ   R  s<   € õ
 
„ØGÝ 1ð&ñ &ô &ð &õ 	˜ x¸lÐKÑKÔKÐKr"   rk   c                 ó   — t           |          S )zú
	Lookups a registered pattern factory by name.

	*name* (:class:`str`) is the name of the pattern factory.

	Returns the registered pattern factory (:class:`~collections.abc.Callable`).
	If no pattern factory is registered, raises :exc:`KeyError`.
	)Ú_registered_patterns)rk   s    r    Úlookup_patternr†   ]  s   € õ 	˜TÔ"Ð"r"   c                 óZ   — d}| D ]%}|j         �|                     |¦  «        �|j         }Œ&|S )a7  
	Matches the file to the patterns.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`~pathspec.pattern.Pattern`)
	contains the patterns to use.

	*file* (:class:`str`) is the normalized file path to be matched
	against *patterns*.

	Returns :data:`True` if *file* matched; otherwise, :data:`False`.
	Fr.   )r+   r,   Úmatchedr4   s       r    r0   r0   i  s@   € ð €Øð ð €WØ„_Ð  W×%7Ò%7¸Ñ%=Ô%=Ð%IØŒ_€7øà€r"   c                 óæ   — t          j        t          › dt          › d�t          d¬¦  «         d„ | D ¦   «         }t	          ¦   «         }|D ]'}t          ||¦  «        r|                     |¦  «         Œ(|S )aè  
	DEPRECATED: This is an old function no longer used. Use the
	:func:`~pathspec.util.match_file` function with a loop for better results.

	Matches the files to the patterns.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`~pathspec.pattern.Pattern`)
	contains the patterns to use.

	*files* (:class:`~collections.abc.Iterable` of :class:`str`) contains
	the normalized file paths to be matched against *patterns*.

	Returns the matched files (:class:`set` of :class:`str`).
	z".match_files() is deprecated. Use z-.match_file() with a loop for better results.r}   r~   c                 ó    — g | ]}|j         ®	|‘ŒS rF   rG   )r   rI   s     r    r!   zmatch_files.<locals>.<listcomp>”  s   € ÐJÐJÐJ˜5°´Ð0I�Ð0IÐ0IÐ0Ir"   )r€   r�   Ú__name__r‚   Úsetr0   Úadd)r+   r6   Úuse_patternsr@   r,   s        r    Úmatch_filesr�   }  s›   € õ$ 
„Ýð  ð  µð  ð  ð  å 1ð&ñ &ô &ð &ð
 KÐJ HÐJÑJÔJ€å‘”€Øð ð €TÝ�˜dÑ#Ô#ð Ø×Ò�DÑÔÐøàÐr"   Ú
separatorsc                 ó  — |€t           }t          j        | ¦  «        }|D ]"}|                     |t          j        ¦  «        }Œ#|                     d¦  «        r|dd…         }n|                     d¦  «        r
|dd…         }|S )ay  
	Normalizes the file path to use the POSIX path separator (i.e.,
	``"/"``), and make the paths relative (remove leading ``"/"``).

	*file* (:class:`str` or :class:`os.PathLike`) is the file path.

	*separators* (:class:`~collections.abc.Collection` of :class:`str`; or
	``None``) optionally contains the path separators to normalize.
	This does not need to include the POSIX path separator (``"/"``),
	but including it will not affect the results. Default is ``None``
	for ``NORMALIZE_PATH_SEPS``. To prevent normalization, pass an
	empty container (e.g., an empty tuple ``()``).

	Returns the normalized file path (:class:`str`).
	Nú/r   z./r}   )ÚNORMALIZE_PATH_SEPSr(   ÚfspathÚreplacer   r   Ú
startswith)r,   r�   Ú	norm_filer   s       r    Únormalize_filer˜   ž  s”   € ð( ÐÝ"€*õ ”)˜D‘/”/€àð 4ð 4€SØ×Ò ¥Y¤]Ñ3Ô3€)€)à×Ò˜ÑÔð à˜˜˜Œm€)€)à×Ò˜4Ñ Ô ð à˜˜˜Œm€)àÐr"   c                 óº   — t          j        dt          d¬¦  «         i }| D ]9}t          ||¬¦  «        }||v r||                              |¦  «         Œ3|g||<   Œ:|S )aš  
	DEPRECATED: This function is no longer used. Use the :func:`.normalize_file`
	function with a loop for better results.

	Normalizes the file paths to use the POSIX path separator.

	*files* (:class:`~collections.abc.Iterable` of :class:`str` or
	:class:`os.PathLike`) contains the file paths to be normalized.

	*separators* (:class:`~collections.abc.Collection` of :class:`str`; or
	:data:`None`) optionally contains the path separators to normalize.
	See :func:`normalize_file` for more information.

	Returns a :class:`dict` mapping each normalized file path (:class:`str`)
	to the original file paths (:class:`list` of :class:`str` or
	:class:`os.PathLike`).
	z_util.normalize_files() is deprecated. Use util.normalize_file() with a loop for better results.r}   r~   )r�   )r€   r�   r‚   r˜   r>   )r6   r�   Ú
norm_filesr#   r—   s        r    Únormalize_filesr›   Æ  s‹   € õ* 
„ð$å 1ð&ñ &ô &ð &ð
 €Øð "ð "€TÝ˜T¨jÐ9Ñ9Ô9€)Ø�*ÐÐØˆiÔ×Ò Ñ%Ô%Ð%Ð%à ˜6€:ˆiÑÐàÐr"   Úpattern_factoryÚoverridec                 óú   — t          | t          ¦  «        st          d| ›d�¦  «        ‚t          |¦  «        st          d|›d�¦  «        ‚| t          v r|st          | t          |          ¦  «        ‚|t          | <   dS )aE  
	Registers the specified pattern factory.

	*name* (:class:`str`) is the name to register the pattern factory
	under.

	*pattern_factory* (:class:`~collections.abc.Callable`) is used to
	compile patterns. It must accept an uncompiled pattern (:class:`str`)
	and return the compiled pattern (:class:`.Pattern`).

	*override* (:class:`bool` or :data:`None`) optionally is whether to
	allow overriding an already registered pattern under the same name
	(:data:`True`), instead of raising an :exc:`AlreadyRegisteredError`
	(:data:`False`). Default is :data:`None` for :data:`False`.
	zname:z is not a string.zpattern_factory:rW   N)r:   r&   rZ   rY   r…   ÚAlreadyRegisteredError)rk   rœ   r�   s      r    Úregister_patternr    ë  s“   € õ( 	�4�ÑÔð 5ÝÐ3˜$Ð3Ð3Ð3Ñ4Ô4Ð4å�Ñ!Ô!ð KÝÐI _ÐIÐIÐIÑJÔJÐJàÕ Ð Ð ¨Ð Ý˜tÕ%9¸$Ô%?Ñ@Ô@Ð@à-Õ�dÑÐÐr"   c                   ó¨   ‡ — e Zd ZdZdedeegef         ddfˆ fd„Ze	defd„¦   «         Z
e	defd„¦   «         Ze	deegef         fd	„¦   «         Zˆ xZS )
rŸ   z|
	The :exc:`AlreadyRegisteredError` exception is raised when a pattern
	factory is registered under a name already in use.
	rk   rœ   r$   Nc                 óZ   •— t          t          | ¦  «                             ||¦  «         dS )zÜ
		Initializes the :exc:`AlreadyRegisteredError` instance.

		*name* (:class:`str`) is the name of the registered pattern.

		*pattern_factory* (:class:`~collections.abc.Callable`) is the
		registered pattern factory.
		N)ÚsuperrŸ   Ú__init__)Úselfrk   rœ   Ú	__class__s      €r    r¤   zAlreadyRegisteredError.__init__  s,   ø€ õ Õ Ñ%Ô%×.Ò.¨t°_ÑEÔEÐEÐEÐEr"   c                 óD   — d                      | j        | j        ¬¦  «        S )ú4
		*message* (:class:`str`) is the error message.
		zG{name!r} is already registered for pattern factory:{pattern_factory!r}.)rk   rœ   )Úformatrk   rœ   ©r¥   s    r    ÚmessagezAlreadyRegisteredError.message   s.   € ð
 
S×	YÒ	YØŒ	ØÔ'ð 
Zñ 
ô 
ð r"   c                 ó   — | j         d         S )zB
		*name* (:class:`str`) is the name of the registered pattern.
		r   ©Úargsrª   s    r    rk   zAlreadyRegisteredError.name*  s   € ð
 
Œ�1ŒÐr"   c                 ó   — | j         d         S )za
		*pattern_factory* (:class:`~collections.abc.Callable`) is the
		registered pattern factory.
		r   r­   rª   s    r    rœ   z&AlreadyRegisteredError.pattern_factory1  ó   € ð 
Œ�1ŒÐr"   )r‹   Ú
__module__Ú__qualname__Ú__doc__r&   r	   r   r   r¤   Úpropertyr«   rk   rœ   Ú__classcell__©r¦   s   @r    rŸ   rŸ     sù   ø€ € € € € ðð ð
FàðFð ˜V˜H gÐ-Ô.ðFð ð	Fð Fð Fð Fð Fð Fð ð�cð ð ð ñ „(ðð ð�3ð ð ð ñ „(ðð ð˜h¨ x°Ð'8Ô9ð ð ð ñ „(ðð ð ð ð r"   rŸ   c                   ó¤   ‡ — e Zd ZdZdedededdfˆ fd„Zedefd„¦   «         Zedefd	„¦   «         Zedefd
„¦   «         Z	edefd„¦   «         Z
ˆ xZS )ri   zN
	The :exc:`RecursionError` exception is raised when recursion is
	detected.
	rc   rd   re   r$   Nc                 ó\   •— t          t          | ¦  «                             |||¦  «         dS )a+  
		Initializes the :exc:`RecursionError` instance.

		*real_path* (:class:`str`) is the real path that recursion was
		encountered on.

		*first_path* (:class:`str`) is the first path encountered for
		*real_path*.

		*second_path* (:class:`str`) is the second path encountered for
		*real_path*.
		N)r£   ri   r¤   )r¥   rc   rd   re   r¦   s       €r    r¤   zRecursionError.__init__@  s-   ø€ õ$ �˜ÑÔ×&Ò& y°*¸kÑJÔJÐJÐJÐJr"   c                 ó   — | j         d         S )zx
		*first_path* (:class:`str`) is the first path encountered for
		:attr:`self.real_path <RecursionError.real_path>`.
		r   r­   rª   s    r    rd   zRecursionError.first_pathT  r°   r"   c                 óP   — d                      | j        | j        | j        ¬¦  «        S )r¨   zDReal path {real!r} was encountered at {first!r} and then {second!r}.)ÚrealÚfirstÚsecond)r©   rc   rd   re   rª   s    r    r«   zRecursionError.message\  s3   € ð
 
P×	VÒ	VØŒØ	ŒØ
Ô
ð 
Wñ 
ô 
ð r"   c                 ó   — | j         d         S )zV
		*real_path* (:class:`str`) is the real path that recursion was
		encountered on.
		r   r­   rª   s    r    rc   zRecursionError.real_pathg  r°   r"   c                 ó   — | j         d         S )zz
		*second_path* (:class:`str`) is the second path encountered for
		:attr:`self.real_path <RecursionError.real_path>`.
		r}   r­   rª   s    r    re   zRecursionError.second_patho  r°   r"   )r‹   r±   r²   r³   r&   r¤   r´   rd   r«   rc   re   rµ   r¶   s   @r    ri   ri   :  s  ø€ € € € € ðð ð
KàðKð ðKð ð	Kð
 ðKð Kð Kð Kð Kð Kð( ð˜ð ð ð ñ „(ðð ð�cð ð ð ñ „(ðð ð˜ð ð ð ñ „(ðð ð˜#ð ð ð ñ „(ðð ð ð ð r"   ri   T)Úfrozenc                   óR   — e Zd ZU dZdZeed<   	 ee         ed<   	 ee	         ed<   dS )ÚCheckResultze
	The :class:`CheckResult` class contains information about the file and which
	pattern matched it.
	)r,   r/   r3   r,   r/   r3   N)
r‹   r±   r²   r³   Ú	__slots__r   Ú__annotations__r   ÚboolÚintr   r"   r    rÂ   rÂ   x  s`   € € € € € € ðð ð€ð €€�ðð �4Œ.ÐÐÑðð
 	�ŒÐÐÑðð r"   rÂ   c                   ó2   — e Zd ZdZdZdee         ddfd„ZdS )r8   z>
	The :class:`.MatchDetail` class contains information about
	rK   r+   r$   Nc                 ó   — || _         dS )zá
		Initialize the :class:`.MatchDetail` instance.

		*patterns* (:class:`~collections.abc.Sequence` of :class:`~pathspec.pattern.Pattern`)
		contains the patterns that matched the file in the order they were
		encountered.
		NrK   )r¥   r+   s     r    r¤   zMatchDetail.__init__   s   € ð €$„-ðð r"   )r‹   r±   r²   r³   rÃ   r   r   r¤   r   r"   r    r8   r8   ˜  sL   € € € € € ðð ð
 €ð˜h wÔ/ð °Dð ð ð ð ð ð r"   c            
       ó¶   — e Zd ZdZdZdededej        dej        ddf
d	„Zdd
e	e
         de
fd„Zdd
e	e
         de
fd„Zde
fd„Zdd
e	e
         dej        fd„ZdS )rU   zR
	The :class:`.TreeEntry` class contains information about a file-system
	entry.
	©Ú_lstatrk   r#   Ú_statrk   r#   Úlstatrl   r$   Nc                 óD   — || _         	 || _        	 || _        	 || _        dS )aP  
		Initialize the :class:`.TreeEntry` instance.

		*name* (:class:`str`) is the base name of the entry.

		*path* (:class:`str`) is the relative path of the entry.

		*lstat* (:class:`os.stat_result`) is the stat result of the direct
		entry.

		*stat* (:class:`os.stat_result`) is the stat result of the entry,
		potentially linked.
		NrÊ   )r¥   rk   r#   rÍ   rl   s        r    r¤   zTreeEntry.__init__º  s?   € ð* !&€$„+ðð
 €$„)ðð €$„)ðð  $€$„*ðð r"   rT   c                 ó\   — |€d}|r| j         n| j        }t          j        |j        ¦  «        S )a<  
		Get whether the entry is a directory.

		*follow_links* (:class:`bool` or :data:`None`) is whether to follow
		symbolic links. If this is :data:`True`, a symlink to a directory
		will result in :data:`True`. Default is :data:`None` for :data:`True`.

		Returns whether the entry is a directory (:class:`bool`).
		NT)rÌ   rË   rl   ÚS_ISDIRÚst_mode©r¥   rT   rw   s      r    r'   zTreeEntry.is_dirå  ó4   € ð ÐØ€<à(Ð9ˆdŒjˆj¨d¬k€)Ý	Œ�iÔ'Ñ	(Ô	(Ð(r"   c                 ó\   — |€d}|r| j         n| j        }t          j        |j        ¦  «        S )aE  
		Get whether the entry is a regular file.

		*follow_links* (:class:`bool` or :data:`None`) is whether to follow
		symbolic links. If this is :data:`True`, a symlink to a regular file
		will result in :data:`True`. Default is :data:`None` for :data:`True`.

		Returns whether the entry is a regular file (:class:`bool`).
		NT)rÌ   rË   rl   ÚS_ISREGrÑ   rÒ   s      r    ro   zTreeEntry.is_fileõ  rÓ   r"   c                 ó>   — t          j        | j        j        ¦  «        S )zC
		Returns whether the entry is a symbolic link (:class:`bool`).
		)rl   ÚS_ISLNKrË   rÑ   rª   s    r    rn   zTreeEntry.is_symlink  s   € õ 
Œ�d”kÔ)Ñ	*Ô	*Ð*r"   c                 ó*   — |€d}|r| j         n| j        S )a9  
		Get the cached stat result for the entry.

		*follow_links* (:class:`bool` or :data:`None`) is whether to follow
		symbolic links. If this is :data:`True`, the stat result of the
		linked file will be returned. Default is :data:`None` for :data:`True`.

		Returns that stat result (:class:`os.stat_result`).
		NT)rÌ   rË   )r¥   rT   s     r    rl   zTreeEntry.stat  s"   € ð ÐØ€<à#Ð	4ˆŒˆ¨¬Ð4r"   rF   )r‹   r±   r²   r³   rÃ   r&   r(   Ústat_resultr¤   r   rÅ   r'   ro   rn   rl   r   r"   r    rU   rU   ±  s  € € € € € ðð ð 1€ð)àð)ð 	ð)ð 
Œð	)ð
 	Œð)ð ð)ð )ð )ð )ðV)ð ) ¨¤ð )¸$ð )ð )ð )ð )ð )ð ) ¨$¤ð )¸4ð )ð )ð )ð )ð +˜ð +ð +ð +ð +ð5ð 5˜h tœnð 5¸¼ð 5ð 5ð 5ð 5ð 5ð 5r"   rF   )NN)Br³   r(   Úos.pathÚpathlibr   rl   Úsysr€   Úcollections.abcr   r;   r   rO   Údataclassesr   r   Útypingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r4   r   Úversion_infor&   ÚStrPathr   r   Úaltsepr“   r…   ÚPathr*   rÆ   rÅ   r5   rC   rL   rQ   rm   r^   r[   r{   rƒ   r†   r0   r�   r˜   r›   r    Ú	ExceptionrŸ   ri   rÂ   Úobjectr8   rU   r   r"   r    ú<module>ræ      s  ððð ð 
€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø 
€
€
€
Ø €€€ðð ð ð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð"
ð 
ð 
ð 
ð 
ð 
ð Ô�vÒÐØ��h˜s”mÐ#Ô$€€à��h�Ô€àˆ7�: WÐ-Ñ-Ô-€ððð àŒv�r”yÐ!ðñ ô Ð ð
ð Ð ðð˜œð ¨#ð ð ð ð ð$Ø�E˜#˜w˜,Ô'Ô(ðà
ðð ˆ8�DŒ>˜8 Cœ=Ð(Ô)ðð ð ð ð>  $ð+ð +Ø�GÔð+à�Œð+ð �tŒnð+ð 
ˆ#ˆ}Ð
Ôð	+ð +ð +ð +ð\Ø�GÔðà	ˆ%��W�Ô
Ôðð ð ð ð(P˜ð P ð Pð Pð Pð Pð 26Ø $ð [ð  [Øð [à�H˜g˜Y¨˜_Ô-Ô.ð [ð ˜Œ~ð [ð ˆkÔð	 [ð  [ð  [ð  [ðFNØðNà
ðNð ˆC�ˆH„~ðNð �W�I˜t�OÔ$ð	Nð
 ðNð ˆkÔðNð Nð Nð Nðf 26Ø $ðð Øðà�H˜g˜Y¨˜_Ô-Ô.ðð ˜Œ~ðð ˆc„]ð	ð ð ð ð>Lð Lð Lð Lð	#˜ð 	# ¨6¨(°GÐ*;Ô!<ð 	#ð 	#ð 	#ð 	#ð˜ 'Ô*ð °#ð ¸$ð ð ð ð ð(Ø�GÔðà�Œðð 	ˆ„Xðð ð ð ðF *.ð%ð %Øð%à�j ”oÔ&ð%ð 	ð%ð %ð %ð %ðT *.ð"ð "Ø�Ôð"à�j ”oÔ&ð"ð 
ˆ#ˆt�GŒ}Ð
Ôð"ð "ð "ð "ðP !ð.ð .Ø
ð.à˜F˜8 WÐ,Ô-ð.ð �DŒ>ð.ð 
ð	.ð .ð .ð .ð@,ð ,ð ,ð ,ð ,˜Yñ ,ô ,ð ,ð^;ð ;ð ;ð ;ð ;�Yñ ;ô ;ð ;ð| €�$ÐÑÔðð ð ð ð �'˜(Ô#ñ ô ñ Ôðð>ð ð ð ð �&ñ ô ð ð2g5ð g5ð g5ð g5ð g5�ñ g5ô g5ð g5ð g5ð g5r"   