ó
    Eñi(  ã            	      óè  • % S r SSKJr  SSKJr  SSKrSSKrSSKrSSKJr  SSKJ	r	  SSK
r
SSKJr  SSKrSSKJr  SS	KJr  SS
KJr  SSKr\R&                  S:¼  a  SSKJr  \R,                  R.                  rS2S jr " S S\R4                  5      r\R8                  rS\S'   S3S jrS3S jr S4S jr!S5S6S jjr"S7S jr#SSS.       S8S jjr$S9S jr%\&" S5       V s0 s H  o \&" SS5      ;  d  M  U SU S 3_M     sn r'\'RQ                  \)" S 5      S!\)" S"5      S#\)" S$5      S%05        S:S& jr*S' r+S( r,S;S) jr-S<S* jr.S=S+ jr/\R&                  S,:¼  a  SS-KJ0r0  OS>S. jr0 " S/ S05      r1S?S1 jr2gs  sn f )@z?Python version compatibility code and random general utilities.é    )Úannotations)ÚCallableN)Ú	Parameter)Ú	Signature)ÚPath)ÚAny)ÚFinal)ÚNoReturn©é   é   )ÚFormatc                ó   • [        U 5      $ )zBInternal wrapper to prepare lazy proxies for legacy_path instances)ÚLEGACY_PATH)Úpaths    ÚK/home/mande/repo/quber/.venv/lib/python3.13/site-packages/_pytest/compat.pyÚlegacy_pathr   #   s   € ä�tÓÐó    c                  ó   • \ rS rSrSrSrg)Ú
NotSetTypeé+   r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚtokenÚ__static_attributes__r   r   r   r   r   +   s   † ØƒEr   r   r	   ÚNOTSETc                óV   • [         R                  " U 5      =(       d    [        U SS5      $ )ab  Return True if func is a coroutine function (a function defined with async
def syntax, and doesn't contain yield), or a function decorated with
@asyncio.coroutine.

Note: copied and modified from Python 3.5's builtin coroutines.py to avoid
importing asyncio directly, which in turns also initializes the "logging"
module as a side-effect (see issue #8).
Ú_is_coroutineF)ÚinspectÚiscoroutinefunctionÚgetattr©Úfuncs    r   r#   r#   1   s#   € ô ×&Ò& tÓ,×U´¸¸oÈuÓ0UÐUr   c                óR   • [        U 5      =(       d    [        R                  " U 5      $ )zVReturn True if the given function seems to be an async function or
an async generator.)r#   r"   Úisasyncgenfunctionr%   s    r   Úis_async_functionr)   =   s   € ô ˜tÓ$×H¬×(BÒ(BÀ4Ó(HÐHr   c                óœ   • [         R                  S:¼  a#  [        R                  " U [        R
                  S9$ [        R                  " U 5      $ )z0Return signature without evaluating annotations.r   )Úannotation_format)ÚsysÚversion_infor"   Ú	signaturer   ÚSTRING©Úobjs    r   r.   r.   C   s8   € ä
×Ñ˜7Ó"Ü× Ò  ¼¿¹ÑFÐFÜ×Ò˜SÓ!Ð!r   c                óô   • [        U 5      n [        [        R                  " U 5      5      nU R                  R
                  nUb   UR                  U5      nU SUS-    3$ U SUS-    3$ ! [         a     Nf = f)NÚ:é   )Úget_real_funcr   r"   ÚgetfileÚ__code__Úco_firstlinenoÚrelative_toÚ
ValueError)ÚfunctionÚcurdirÚfnÚlinenoÚrelfns        r   Úgetlocationr@   J   s‰   € Ü˜XÓ&€HÜ	Œg�oŠo˜hÓ'Ó	(€BØ×Ñ×-Ñ-€FØÑð	+Ø—N‘N 6Ó*ˆEð �W˜A˜f q™j˜\Ð*Ð*ØˆT��6˜A‘:�,ÐÐøô	 ó 	Ùð	ús   ÁA* Á*
A7Á6A7c                óœ  • [        U SS5      nU(       d  g[        [        R                  R                  S5      S[	        5       5      n[        [        R                  R                  S5      S[	        5       5      n[        U Vs/ s H8  nUR                  (       a  M  UR                  UL d  UR                  UL d  M6  UPM:     sn5      $ s  snf )z>Return number of arguments used up by mock arguments (if any).Ú	patchingsNr   ÚmockÚDEFAULTzunittest.mock)r$   r,   ÚmodulesÚgetÚobjectÚlenÚattribute_nameÚnew)r;   rB   Úmock_sentinelÚut_mock_sentinelÚps        r   Únum_mock_patch_argsrN   X   s¨   € ä˜ +¨tÓ4€IÞØäœCŸK™KŸO™O¨FÓ3°YÄÃÓI€MÜœsŸ{™{Ÿ™¨Ó?ÀÌFËHÓUÐäñ ó	
â�Ø×#Õ#ó ð —‘˜-Ò'¨1¯5©5Ð4DÐ+D÷ Ùñ	
óð ùò	
s   ÂC	ÂC	Â<C	Ú )ÚnameÚclsc               óÎ  •  [        U 5      R                  R                  5       n[        S W 5       5      nU(       d  U R                  n[        S	 U 5       5      (       d4  U(       a-  [        [        R                  " X!SS
9[        5      (       d  USS n[        U S5      (       a  U[        U 5      S nU$ ! [        [        4 a  nSSKJn  U" SU < SU 3SS9   SnANºSnAff = f)aü  Return the names of a function's mandatory arguments.

Should return the names of all function arguments that:
* Aren't bound to an instance or type as in instance or class methods.
* Don't have default values.
* Aren't bound with functools.partial.
* Aren't replaced with mocks.

The cls arguments indicate that the function should be treated as a bound
method even though it's not unless the function is a static method.

The name parameter should be the original name in which the function was collected.
r   )Úfailz!Could not determine arguments of z: F)ÚpytraceNc              3  óð   #   • U  Hl  nUR                   [        R                  L d  UR                   [        R                  L d  M?  UR                  [        R
                  L d  M^  UR                  v •  Mn     g 7f©N©Úkindr   ÚPOSITIONAL_OR_KEYWORDÚKEYWORD_ONLYÚdefaultÚemptyrP   ©Ú.0rM   s     r   Ú	<genexpr>Ú"getfuncargnames.<locals>.<genexpr>‘   sX   é € ð âˆAà�F‰F”i×5Ñ5Ò5Ø�v‰vœ×/Ñ/Ð/ó	 	ð �I‰IœŸ™Ð(ó 	ˆ�ŽÚùs   ‚>A6ÁA6Á#A6c              3  óX   #   • U  H   oR                   [        R                  L v •  M"     g 7frV   )rX   r   ÚPOSITIONAL_ONLYr]   s     r   r_   r`       s   é € ÐGºJ°q�v‰vœ×2Ñ2Õ2ºJùs   ‚(*)r[   r4   Ú__wrapped__)r.   Ú
parametersÚvaluesr:   Ú	TypeErrorÚ_pytest.outcomesrS   Útupler   ÚanyÚ
isinstancer"   Úgetattr_staticÚstaticmethodÚhasattrrN   )r;   rP   rQ   rd   ÚerS   Ú	arg_namess          r   Úgetfuncargnamesrp   k   sé   € ð8
Ü˜xÓ(×3Ñ3×:Ñ:Ó<ˆ
ô ñ áóó €Iö Ø× Ñ ˆô
 ÑG¹JÓG×GÑGö 	ÜÜ×"Ò" 3°dÑ;¼\÷
ñ 
ð ˜a˜b�Mˆ	äˆx˜×'Ñ'ØÔ1°(Ó;Ð=Ð>ˆ	ØÐøôG œ	Ð"ó 
Ý)áØ/°©|¸2¸a¸SÐAØ÷	
ûð
ús   ‚#B6 Â6C$ÃCÃC$c                óh   • [        S [        U 5      R                  R                  5        5       5      $ )Nc              3  óØ   #   • U  H`  nUR                   [        R                  [        R                  4;   d  M3  UR                  [        R
                  Ld  MR  UR                  v •  Mb     g 7frV   rW   r]   s     r   r_   Ú(get_default_arg_names.<locals>.<genexpr>³   sQ   é € ð â8ˆAØ�6‰6”i×5Ñ5´y×7MÑ7MÐNÑNó 	ð �I‰IœYŸ_™_Ð,ó 	ˆ�ŽÚ8ùs   ‚2A*¸A*ÁA*)rh   r.   rd   re   )r;   s    r   Úget_default_arg_namesrt   ¯   s2   € ô ñ ä˜8Ó$×/Ñ/×6Ñ6Ô8óó ð r   é€   é    é   z\xÚ02xÚ	z\tÚz\rÚ
z\nc                ó¼   • [        U [        5      (       a  U R                  SS5      nO U R                  S5      R                  S5      nUR	                  [
        5      $ )aá  If val is pure ASCII, return it as an str, otherwise, escape
bytes objects into a sequence of escaped bytes:

b'\xc3\xb4\xc5\xd6' -> r'\xc3\xb4\xc5\xd6'

and escapes strings into a sequence of escaped unicode ids, e.g.:

r'4\nV\U00043efa\x0eMXWB\x1e\u3028\u15fd\xcd\U0007d944'

Note:
   The obvious "v.decode('unicode-escape')" will return
   valid UTF-8 unicode if it finds them in bytes, but we
   want to return escaped bytes for any byte, even if they match
   a UTF-8 string.
ÚasciiÚbackslashreplaceÚunicode_escape)rj   ÚbytesÚdecodeÚencodeÚ	translateÚ$_non_printable_ascii_translate_table)ÚvalÚrets     r   Úascii_escapedr‡   Ã   sL   € ô  �#”u×ÑØ�j‰j˜Ð"4Ó5‰à�j‰jÐ)Ó*×1Ñ1°'Ó:ˆØ�=‰=Ô=Ó>Ð>r   c                óˆ   • [         R                  " U 5      n [        U [        R                  5      (       a  U R
                  n U $ )zwGet the real function object of the (possibly) wrapped object by
:func:`functools.wraps`, or :func:`functools.partial`.)r"   Úunwraprj   Ú	functoolsÚpartialr&   r0   s    r   r5   r5   Ú   s3   € ô �.Š.˜Ó
€Cä�#”y×(Ñ(×)Ñ)Ø�h‰hˆØ€Jr   c                ó@   •  U R                   $ ! [         a    U s $ f = frV   )Ú__func__ÚAttributeErrorr%   s    r   Ú	getimfuncr�   ä   s%   € ðØ�}‰}ÐøÜó ØŠðús   ‚ Žœc                óD   • SSK Jn   [        XU5      $ ! U a    Us $ f = f)a:  Like getattr but return default upon any Exception or any OutcomeException.

Attribute access can potentially fail for 'evil' Python objects.
See issue #214.
It catches OutcomeException because of #2490 (issue #580), new outcomes
are derived from BaseException instead of Exception (for more details
check #2707).
r   )ÚTEST_OUTCOME)rg   r‘   r$   )rG   rP   r[   r‘   s       r   Úsafe_getattrr’   ë   s-   € õ .ðÜ�v WÓ-Ð-øØó ØŠðús   ˆ ”žc                óP   •  [         R                  " U 5      $ ! [         a     gf = f)z0Ignore any exception via isinstance on Python 3.F)r"   ÚisclassÚ	Exceptionr0   s    r   Úsafe_isclassr–   ü   s(   € ðÜ�Š˜sÓ#Ð#øÜó Ùðús   ‚ ˜
%¤%c                 ó”   • [         R                  S:X  d  [         R                  S:X  a  gSn [        R                  " 5       nX:w  a  U$ S$ )zŽReturn the current process's real user id or None if it could not be
determined.

:return: The user id or None if it could not be determined.
Úwin32Ú
emscriptenNéÿÿÿÿ)r,   ÚplatformÚosÚgetuid)ÚERRORÚuids     r   Úget_user_idr      sA   € ô ‡|�|�wÓ¤#§,¡,°,Ó">ð ð ˆÜ�iŠi‹kˆØ“lˆsÐ,¨Ð,r   )r   é   )Úassert_neverc                óD   •  SU  S[        U 5      R                   S35       e)NzUnhandled value: z (Ú))Útyper   )Úvalues    r   r¢   r¢     s'   € ØJÐ)¨%¨°´4¸³;×3GÑ3GÐ2HÈÐJÓJˆur   c                  ó6   • \ rS rSrSrSS jrS	S jrS	S jrSrg)
ÚCallableBooli!  a  
A bool-like object that can also be called, returning its true/false value.

Used for backwards compatibility in cases where something was supposed to be a method
but was implemented as a simple attribute by mistake (see `TerminalReporter.isatty`).

Do not use in new code.
c                ó   • Xl         g rV   ©Ú_value)Úselfr¦   s     r   Ú__init__ÚCallableBool.__init__+  s   € Ø�r   c                ó   • U R                   $ rV   rª   ©r¬   s    r   Ú__bool__ÚCallableBool.__bool__.  ó   € Ø�{‰{Ðr   c                ó   • U R                   $ rV   rª   r°   s    r   Ú__call__ÚCallableBool.__call__1  r³   r   rª   N)r¦   ÚboolÚreturnÚNone©r¸   r·   )	r   r   r   r   Ú__doc__r­   r±   rµ   r   r   r   r   r¨   r¨   !  s   † ñôô÷r   r¨   c                 ó.   • SS/n [        S U  5       5      $ )z0Check if we're currently running on a CI system.ÚCIÚBUILD_NUMBERc              3  ó`   #   • U  H$  n[         R                  R                  U5      v •  M&     g 7frV   )rœ   ÚenvironrF   )r^   Úvars     r   r_   Ú running_on_ci.<locals>.<genexpr>:  s    é € Ð7ªh sŒr�z‰z�~‰~˜c×"Ð"ªhùs   ‚,.)ri   )Úenv_varss    r   Úrunning_on_cirÄ   5  s   € ð �nÐ%€HÜÑ7©hÓ7Ó7Ð7r   )r   zstr | os.PathLike[str]r¸   r   )r&   rG   r¸   r·   )r1   úCallable[..., Any]r¸   r   rV   )r<   zstr | os.PathLike[str] | Noner¸   Ústr)r¸   Úint)r;   zCallable[..., object]rP   rÆ   rQ   ztype | Noner¸   útuple[str, ...])r;   rÅ   r¸   rÈ   )r…   zbytes | strr¸   rÆ   )rG   r   rP   rÆ   r[   r   r¸   r   )r1   rG   r¸   r·   )r¸   z
int | None)r¦   r
   r¸   r
   rº   )3r»   Ú
__future__r   Úcollections.abcr   ÚenumrŠ   r"   r   r   rœ   Úpathlibr   r,   Útypingr   r	   r
   Úpyr-   Úannotationlibr   r   Úlocalr   r   ÚEnumr   r   r   Ú__annotations__r#   r)   r.   r@   rN   rp   rt   Úranger„   ÚupdateÚordr‡   r5   r�   r’   r–   r    r¢   r¨   rÄ   )Úis   0r   Ú<module>r×      s…  ðâ Eå "å $Û Û Û Ý Ý Û 	Ý Û 
Ý Ý Ý ã 	ð ×Ñ�wÓÝ$ð �g‰g�n‰n€ôô�—‘ô à× Ñ €ˆÓ  ô	VôIô"ö ôð, Øñ	AØ#ðAð ðAð 
ð	Að
 õAôH	ñ $ Cœjó(Ú(˜±U¸2¸s³^Ñ,CÓ€AˆˆQˆsˆG€}Ò™jñ(Ð $ð %× +Ñ +ÙˆƒY�‘s˜4“y %©¨T«°EÐ:ôô
?ò.òôô"ô-ð* ×Ñ�wÓÞ#ôK÷ñ õ(8ùòu(s   ÃE/Ã2E/