Ë
    hKêjÏc  ã                  ó²  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	m
Z
mZmZ ddlmZ ddlmZmZmZmZmZmZmZ ddlmZ dd	lmZmZ eeej:                  e   f   Z ed
e¬«      Z	  eded¬«      Z 	  ede¬«      Z!	 ejD                  ejF                  fD � cg c]  } | r| ejD                  k7  r	 ee| «      ‘Œ c} Z$	 i Z%de&d<   	 d0d„Z'	 d1	 	 	 	 	 	 	 d2d„Z(	 d1	 	 	 	 	 	 	 d3d„Z)	 	 	 	 d4d„Z*d5d„Z+ ed«      d6d„«       Z,	 	 d6	 	 	 	 	 	 	 d7d„Z-	 	 	 	 	 	 	 	 	 	 	 	 d8d„Z.	 	 d6	 	 	 	 	 	 	 d9d„Z/	 	 	 	 	 	 	 	 	 	 	 	 d:d„Z0d;d„Z1d<d„Z2 ed«      	 	 	 	 	 	 d=d „«       Z3	 d1	 	 	 	 	 d>d!„Z4 ed"«      	 d1	 	 	 	 	 d?d#„«       Z5	 d1	 	 	 	 	 	 	 d@d$„Z6 G d%„ d&e7«      Z8 G d'„ d(e7«      Z9 ed¬)«       G d*„ d+ee!   «      «       Z: G d,„ d-e;«      Z< G d.„ d/e;«      Z=yc c} w )AzC
This module provides utility methods for dealing with path-specs.
é    )ÚannotationsN)Ú
CollectionÚIterableÚIteratorÚSequence)Ú	dataclass)ÚAnyÚCallableÚGenericÚOptionalÚTypeVarÚUnionÚcasté   )ÚPattern)ÚAnyStrÚ
deprecatedÚTPattern)ÚboundÚTPattern_coT)r   Ú	covariantÚTStrPathz1dict[str, Callable[[Union[str, bytes]], Pattern]]Ú_registered_patternsc                ób   — t        | «      }| j                  «       r|t        j                  z  }|S )a4  
	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ÚosÚsep)ÚpathÚstr_paths     úR/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/pathspec/util.pyÚappend_dir_sepr"   G   s)   € ô �‹I€Ø‡K�K„MØ
Œb�f‰fÑ€(à€ó    c                óö   — |r9| D ]3  \  }}|j                   €Œ|j                  |«      €Œ%|j                   |fc S  yd}d}| D ]2  \  }}|j                   €Œ|j                  |«      €Œ%|j                   }|}Œ4 ||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 actua
	pattern (:class:`.Pattern`).

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

	*is_reversed* (:class:`bool` or :data:`None`) is whether the order of the
	patterns has been reversed. Default is :data:`None` for :data:`False`.
	Reversing the order of the patterns is an optimization.

	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©NN©ÚincludeÚ
match_file)ÚpatternsÚfileÚis_reversedÚindexÚpatternÚout_includeÚ	out_indexs          r!   Úcheck_match_filer0   X   sž   € ñ. ð !ò "�n€eˆWØ‡o�oÑ! g×&8Ñ&8¸Ó&>Ñ&JØ�?‰?˜EÐ!Ò!ð"ð 
ð !%€+Ø!€)Ø ò �n€eˆWØ‡o�oÑ! g×&8Ñ&8¸Ó&>Ñ&JØ—/‘/€KØ�Iðð
 
�iÐ	Ðr#   c                óX  — t        |t        «      r|n
t        |«      }i }| D ]…  }|j                  €Œ|j	                  |«      }|j                  rO|D ]I  }||v r4|r||   j
                  j                  |«       Œ(|||   j
                  d<   Œ;t        |g«      ||<   ŒK Œ||D ]  }||= Œ Œ‡ |S )a¡  
	Matches the files to the patterns, and returns which patterns matched the
	files.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`.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`).
	r   )Ú
isinstancer   Úlistr'   Úmatchr)   ÚappendÚMatchDetail)	r)   ÚfilesÚall_matchesÚ	all_filesÚreturn_filesr-   Úresult_filesÚresult_filer*   s	            r!   Údetailed_match_filesr=   „   sÅ   € ô, ! ¬
Ô3‰U¼¸e»€Ø(*€Øò €WØ‡_�_Ñ Ø—-‘- 	Ó*€<Ø‡o‚oà#ò 9ˆØ�|Ñ#á	Ø�KÑ ×)Ñ)×0Ñ0°Õ9à/6€|�KÑ ×)Ñ)¨!Ò,ä"-¨w¨iÓ"8€l�;Òñ9ð ò ˆØ	�dÑ	ñð#ð( 	Ðr#   c                óf   — t        | «      D ��cg c]  \  }}|j                  �||f‘Œ c}}S c c}}w )a&  
	Filters out null-patterns.

	*patterns* (:class:`~collections.abc.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:`.Pattern`).
	)Ú	enumerater'   )r)   Ú__indexÚ__pats      r!   Ú_filter_check_patternsrB   ³   s<   € ô " (Ó+÷	á€gˆuØ
‡]�]Ðð ˆEÒó	ð ùó 	s   �-c                óT   — t        | t        «      xr 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 an iterable (:class:`bool`).
	)r2   r   r   Úbytes)Úvalues    r!   Ú_is_iterablerF   Ç   s$   € ô 	�5œ(Ó#ÒK¬J°u¼sÄE¸lÓ,KÐ(KÐKr#   zGpathspec.util.iter_tree() is deprecated. Use iter_tree_files() instead.c                ó   — t        | ||¬«      S )z`
	.. version-deprecated:: 0.10.0
		This is an alias for the :func:`.iter_tree_files` function.
	)Úon_errorÚfollow_links)Úiter_tree_files©ÚrootrH   rI   s      r!   Ú	iter_treerM   Ò   s   € ô 	˜ x¸lÔKÐKr#   c              #  ó¸   K  — |�t        |«      st        d|›d�«      ‚|€d}t        t        j                  j                  | «      di ||«      E d{  –—†  y7 Œ­w)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*.
	Nú	on_error:ú is not callable.TÚ )ÚcallableÚ	TypeErrorÚ_iter_tree_entries_nextr   r   ÚabspathrK   s      r!   Úiter_tree_entriesrV   Ý   sX   è ø€ ð0 Ð¤¨(Ô!3Ü�I˜h˜\Ð):Ð;Ó<Ð<àÐØ€,ä#¤B§G¡G§O¡O°DÓ$9¸2¸rÀ8È\ÓZ×ZÒZúó   ‚AAÁAÁAc           	   #  óx  K  — t         j                  j                  | |«      }t         j                  j                  |«      }||vr|||<   nt	        |||   |¬«      ‚t        j
                  |«      5 }|D ]â  }t         j                  j                  ||j                  «      }		 |j                  d¬«      }
|j                  «       r	 |j                  «       }n|
}|j                  |¬«      r2t        |j                  |	|
|«      –— t        | |	|||«      E d{  –—†  Œ¨|j                  «       s|j                  «       sŒÉt        |j                  |	|
|«      –— Œä 	 ddd«       ||= y# t        $ r}|� ||«       Y d}~�Œd}~ww xY w# t        $ r}|� ||«       Y d}~�Œ,d}~ww xY w7 Œ‘# 1 sw Y   ||= yxY w­w)ap  
	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   Ú	TreeEntryrT   Úis_file)Ú	root_fullÚdir_relÚmemorH   rI   Údir_fullÚdir_realÚ	scan_iterÚnode_entÚnode_relÚ
node_lstatÚeÚ	node_stats                r!   rT   rT   þ   s   è ø€ ô4 �G‰G�L‰L˜ GÓ,€Ü�G‰G×Ñ˜XÓ&€ð �DÑØ€$€x‚.ä °d¸8±nÐRYÔZÐZä‡j�j�Óð !D˜iàò D€hÜ�g‰g�l‰l˜7 H§M¡MÓ2€8ðØ—‘¨u�Ó5€Jð ×ÑÔðØ—‘“�Yð €Ià‡o�o l€oÔ3ô �H—M‘M 8¨Z¸Ó
CÒCä& y°(¸DÀ(ÈLÓY×YÑYà×ÑÔ˜h×1Ñ1Õ3ä
�H—M‘M 8¨Z¸Ó
CÓCñ?D÷!DðP 
ˆ(�^øôA ò ØÐÙˆa„[Ýûðûô ò ØÐÙˆq„kÝûðúð Zø÷;!DðP 
ˆ(�^üs…   ‚A0F:Á20F+Â#E'Â5F+ÃFÃAF+ÄF)Ä%F+Ä>F+ÅF:Å'	FÅ0
F Å:F+Æ FÆF+Æ	F&Æ
F!ÆF+Æ!F&Æ&F+Æ+F7Æ0
F:c              #  ó¸   K  — |�t        |«      st        d|›d�«      ‚|€d}t        t        j                  j                  | «      di ||«      E d{  –—†  y7 Œ­w)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*.
	NrO   rP   TrQ   )rR   rS   Ú_iter_tree_files_nextr   r   rU   rK   s      r!   rJ   rJ   M  sX   è ø€ ð2 Ð¤¨(Ô!3Ü�I˜h˜\Ð):Ð;Ó<Ð<àÐØ€,ä!¤"§'¡'§/¡/°$Ó"7¸¸RÀÈ<ÓX×XÒXúrW   c           	   #  ó6  K  — t         j                  j                  | |«      }t         j                  j                  |«      }||vr|||<   nt	        |||   |¬«      ‚t        j
                  |«      5 }|D ]ƒ  }t         j                  j                  ||j                  «      }	|j                  |¬«      rt        | |	|||«      E d{  –—†  ŒW|j                  «       r|	–— Œl|rŒo|j                  «       sŒ€|	–— Œ… 	 ddd«       ||= y7 ŒA# 1 sw Y   ||= yxY w­w)am  
	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 file path (:class:`str`).
	rY   r]   N)r   r   r_   r`   ra   rb   rc   r   ru   rh   rf   )
ri   rj   rk   rH   rI   rl   rm   rn   ro   rp   s
             r!   ru   ru   o  sþ   è ø€ ô4 �G‰G�L‰L˜ GÓ,€Ü�G‰G×Ñ˜XÓ&€ð �DÑØ€$€x‚.ä °d¸8±nÐRYÔZÐZä‡j�j�Óð ˜iàò €hÜ�g‰g�l‰l˜7 H§M¡MÓ2€8à‡o�o l€oÔ3ô % Y°¸$ÀÈ,ÓW×WÑWà×ÑÔà
ƒNâ˜X×0Ñ0Õ2à
ƒNñ÷ð. 
ˆ(�^ð Xø÷ð. 
ˆ(�^üs=   ‚A0DÁ2AD
ÃDÃD
Ã$D
Ã5D
Ã<DÄD
Ä
DÄ
Dc                ó   — t         |    S )zû
	Looks up 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`.
	)r   )rc   s    r!   Úlookup_patternrx   ­  s   € ô 	˜TÑ"Ð"r#   c                ón   — d}| D ]-  }|j                   €Œ|j                  |«      €Œ"|j                   }Œ/ |S )a&  
	Matches the file to the patterns.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`.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*   Úmatchedr-   s       r!   r(   r(   ¹  sB   € ð €Øò €WØ‡_�_Ñ  W×%7Ñ%7¸Ó%=Ñ%IØ�_‰_�7ðð 	€r#   z[pathspec.util.match_files() is deprecated. Use match_file() with a loop for better results.c                ó¦   — | D �cg c]  }|j                   €Œ|‘Œ }}t        «       }|D ]   }t        ||«      sŒ|j                  |«       Œ" |S c c}w )aØ  
	.. version-deprecated:: 0.10.0
		This function is no longer used. Use the :func:`.match_file` function with a
		loop for better results.

	Matches the files to the patterns.

	*patterns* (:class:`~collections.abc.Iterable` of :class:`.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`).
	)r'   Úsetr(   Úadd)r)   r7   rA   Úuse_patternsr:   r*   s         r!   Úmatch_filesr   Í  s\   € ð. %-ÖJ˜5°·±Ñ0I’ÐJ€ÐJä“€Øò €TÜ�˜dÕ#Ø×Ñ�DÕðð 	Ðùò Ks
   …A—Ac                óü   — |€t         }|€J |«       ‚t        j                  | «      }|D ]"  }|j                  |t        j
                  «      }Œ$ |j                  d«      r|dd }|S |j                  d«      r|dd }|S )a‚  
	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
	:data:`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 :data:`.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./é   )ÚNORMALIZE_PATH_SEPSr   ÚfspathÚreplaceÚ	posixpathr   Ú
startswith)r*   Ú
separatorsÚ	norm_filer   s       r!   Únormalize_filerŠ   î  s˜   € ð( ÐÜ"€*àÐÐ* 
Ó*Ðô —)‘)˜D“/€àò 4€SØ×Ñ ¤Y§]¡]Ó3�)ð4ð ×Ñ˜Ôà˜˜ˆm€)ð 	Ðð	 ×Ñ˜4Ô à˜˜ˆm€)àÐr#   zcpathspec.util.normalize_files() is deprecated. Use normalize_file() with a loop for better results.c                óp   — i }| D ].  }t        ||¬«      }||v r||   j                  |«       Œ)|g||<   Œ0 |S )a±  
	.. version-deprecated:: 0.10.0
		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`).
	)rˆ   )rŠ   r5   )r7   rˆ   Ú
norm_filesr   r‰   s        r!   Únormalize_filesr�     sS   € ð4 )+€Øò "€TÜ˜T¨jÔ9€)Ø�*ÑØˆiÑ×Ñ Õ%à ˜6€:ˆiÒð"ð 	Ðr#   c                óÂ   — t        | t        «      st        d| ›d�«      ‚t        |«      st        d|›d�«      ‚| t        v r|st        | t        |    «      ‚|t        | <   y)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=rP   N)r2   r   rS   rR   r   ÚAlreadyRegisteredError)rc   Úpattern_factoryÚoverrides      r!   Úregister_patternr’   =  sk   € ô& 	�4œÔÜ�U�T�IÐ.Ð/Ó0Ð0ä�Ô!ÜÐ%�_Ð(Ð(9Ð:Ó;Ð;àÔ Ñ ©Ü˜tÔ%9¸$Ñ%?Ó@Ð@à-Ô�dÒr#   c                  óf   ‡ — e Zd ZdZ	 	 	 	 	 	 dˆ fd„Zedd„«       Zedd„«       Zed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.
	c                ó&   •— t         ‰| �  ||«       y)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©ÚsuperÚ__init__)Úselfrc   r�   Ú	__class__s      €r!   r—   zAlreadyRegisteredError.__init__b  s   ø€ ô �'Ñ�4˜Õ)r#   c                ó:   — | j                   ›d| j                  ›d�S )ú4
		*message* (:class:`str`) is the error message.
		z+ is already registered for pattern factory=ú.)rc   r�   ©r˜   s    r!   ÚmessagezAlreadyRegisteredError.messageq  s(   € ð ‡i�i€]Ð=Ø
×ÑÐ˜Qð ðr#   c                ó    — | j                   d   S )zB
		*name* (:class:`str`) is the name of the registered pattern.
		r   ©Úargsr�   s    r!   rc   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_factory‚  ó   € ð 
�‰�1‰Ðr#   )rc   r   r�   ú&Callable[[Union[str, bytes]], Pattern]ÚreturnÚNone©r¥   r   )r¥   r¤   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r—   Úpropertyrž   rc   r�   Ú__classcell__©r™   s   @r!   r�   r�   \  se   ø„ ñð
*àð*ð :ð*ð õ	*ð òó ðð òó ðð òó ôr#   r�   c                  ó|   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 dˆ fd„Zedd„«       Zedd„«       Zedd„«       Zedd„«       Z	ˆ xZ
S )	ra   zM
	The :exc:`RecursionError` exception is raised when recursion is detected.
	c                ó(   •— t         ‰| �  |||«       y)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*.
		Nr•   )r˜   rZ   r[   r\   r™   s       €r!   r—   zRecursionError.__init__�  s   ø€ ô  �'Ñ�9˜j¨+Õ6r#   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!   r[   zRecursionError.first_path¢  r£   r#   c                óV   — d| j                   ›d| j                  ›d| j                  ›d�S )r›   z
Real path z was encountered at z
 and then rœ   rY   r�   s    r!   rž   zRecursionError.messageª  s:   € ð �—‘Ð!Ð!5°d·o±oÐ5Hð IØ×ÑÐ" !ð%ðr#   c                ó    — | j                   d   S )zV
		*real_path* (:class:`str`) is the real path that recursion was
		encountered on.
		r   r    r�   s    r!   rZ   zRecursionError.real_path´  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!   r\   zRecursionError.second_path¼  r£   r#   )rZ   r   r[   r   r\   r   r¥   r¦   r§   )r¨   r©   rª   r«   r—   r¬   r[   rž   rZ   r\   r­   r®   s   @r!   ra   ra   ‹  sƒ   ø„ ñð7àð7ð ð7ð ð	7ð
 õ7ð$ òó ðð òó ðð òó ðð òó ôr#   ra   )Úfrozenc                  ó8   — e Zd ZU dZdZded<   	 ded<   	 ded<   y	)
ÚCheckResultze
	The :class:`CheckResult` class contains information about the file and which
	pattern matched it.
	)r*   r'   r,   r   r*   úOptional[bool]r'   zOptional[int]r,   N)r¨   r©   rª   r«   Ú	__slots__Ú__annotations__© r#   r!   r·   r·   Å  s4   … ñð€ð ƒðð Óðð
 	Óðr#   r·   c                  ó   — e Zd ZdZdZdd„Zy)r6   z>
	The :class:`.MatchDetail` class contains information about
	©r)   c                ó   — || _         y)zÎ
		Initialize the :class:`.MatchDetail` instance.

		*patterns* (:class:`~collections.abc.Sequence` of :class:`.Pattern`)
		contains the patterns that matched the file in the order they were encountered.
		Nr½   )r˜   r)   s     r!   r—   zMatchDetail.__init__í  s   € ð €$„-ðr#   N)r)   zSequence[Pattern]r¥   r¦   )r¨   r©   rª   r«   r¹   r—   r»   r#   r!   r6   r6   å  s   „ ñð
 €ôr#   r6   c                  óV   — e Zd ZdZdZ	 	 	 	 	 	 	 	 	 	 d	d„Zd
dd„Zd
dd„Zdd„Zd
dd„Z	y)rg   zP
	The :class:`TreeEntry` class contains information about a file-system entry.
	©Ú_lstatrc   r   Ú_statc                óB   — || _         	 || _        	 || _        	 || _        y)aM  
		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˜   rc   r   Úlstatrd   s        r!   r—   zTreeEntry.__init__  s:   € ð( !&€$„+ðð €$„)ðð €$„)ðð  $€$„*ðr#   Nc                ó|   — |€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`).
		T)rÂ   rÁ   rd   ÚS_ISDIRÚst_mode©r˜   rI   rs   s      r!   r   zTreeEntry.is_dir-  ó5   € ð ÐØ€<á(ˆd�jŠj¨d¯k©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`).
		T)rÂ   rÁ   rd   ÚS_ISREGrÇ   rÈ   s      r!   rh   zTreeEntry.is_file=  rÉ   r#   c                óT   — t        j                  | j                  j                  «      S )zC
		Returns whether the entry is a symbolic link (:class:`bool`).
		)rd   ÚS_ISLNKrÁ   rÇ   r�   s    r!   rf   zTreeEntry.is_symlinkM  s   € ô 
�‰�d—k‘k×)Ñ)Ó	*Ð*r#   c                ó>   — |€d}|r| j                   S | 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`).
		T)rÂ   rÁ   )r˜   rI   s     r!   rd   zTreeEntry.statS  s$   € ð ÐØ€<á#ˆ�‰Ð4¨¯©Ð4r#   )
rc   r   r   r   rÄ   úos.stat_resultrd   rÏ   r¥   r¦   ©N)rI   r¸   r¥   Úbool)r¥   rÑ   )rI   r¸   r¥   rÏ   )
r¨   r©   rª   r«   r¹   r—   r   rh   rf   rd   r»   r#   r!   rg   rg   ý  sX   „ ñð
 1€ð&àð&ð 	ð&ð 
ð	&ð
 	ð&ð ó&ôP)ô )ó +õ5r#   rg   )r   zpathlib.Pathr¥   r   rÐ   )r)   zIterable[tuple[int, Pattern]]r*   r   r+   r¸   r¥   z$tuple[Optional[bool], Optional[int]])r)   úIterable[Pattern]r7   úIterable[str]r8   r¸   r¥   zdict[str, MatchDetail])r)   rÒ   r¥   zlist[tuple[int, Pattern]])rE   r	   r¥   rÑ   r%   )rL   ÚStrPathrH   ú#Optional[Callable[[OSError], None]]rI   r¸   r¥   úIterator['TreeEntry'])ri   r   rj   r   rk   údict[str, str]rH   rÕ   rI   rÑ   r¥   rÖ   )rL   rÔ   rH   rÕ   rI   r¸   r¥   úIterator[str])ri   r   rj   r   rk   r×   rH   rÕ   rI   rÑ   r¥   rØ   )rc   r   r¥   zCallable[[AnyStr], Pattern])r)   rÒ   r*   r   r¥   rÑ   )r)   rÒ   r7   rÓ   r¥   zset[str])r*   rÔ   rˆ   úOptional[Collection[str]]r¥   r   )r7   zIterable[StrPath]rˆ   rÙ   r¥   zdict[str, list[StrPath]])rc   r   r�   z<Union[Callable[[Union[str, bytes]], Pattern], type[Pattern]]r‘   r¸   r¥   r¦   )>r«   Ú
__future__r   r   Úos.pathÚpathlibr†   rd   Úcollections.abcr   r   r   r   Údataclassesr   Útypingr	   r
   r   r   r   r   r   r-   r   Ú_typingr   r   r   ÚPathLikerÔ   r   r   r   r   Úaltseprƒ   r   rº   r"   r0   r=   rB   rF   rM   rV   rT   rJ   ru   rx   r(   r   rŠ   r�   r’   Ú	Exceptionr�   ra   r·   Úobjectr6   rg   )Ú__seps   0r!   ú<module>ræ      s¯  ðòõ #ã 	Û Û Û Û ÷ó õ
÷÷ ñ õ
÷ð ��R—[‘[ Ñ%Ð%Ñ
&€á�: WÔ-€ðñ
 �m¨7¸dÔC€ðñ
 �: WÔ-€ðð �v‰v�r—y‘yÐ!öà
Ù	ˆe�y—}‘}Ò$ñ €cˆ5ÕòÐ ð
ð KMÐ ÐGÓ Lðóð(  $ð) Ø(ð) à
ð) ð ð) ð *ó	) ð^  $ð,Øð,àð,ð ð,ð ó	,ð^Øðàóó(Lñ ØJóòLóðLð 26Ø $ð[Øð[à.ð[ð ð[ð ó	[ðBLØðLà
ðLð ðLð /ð	Lð
 ðLð óLðb 26Ø $ðYØðYà.ðYð ðYð ó	YðD;Øð;à
ð;ð ð;ð /ð	;ð
 ð;ð ó;ó|	#óñ( ðóðØðàðð òó	ðð> *.ð'Øð'à&ð'ð 	ó'ñT ðóð *.ðØðà&ðð òó	ððH !ð.Ø
ð.àNð.ð ð.ð 
ó	.ô>,˜Yô ,ô^7�Yô 7ñt �$Ôô�'˜(Ñ#ó ó ðô>�&ô ô0c5�õ c5ùòSs   Â !G