ó
    ÷Þ j-5  ã                   ó¢  • S SK r S SKrS SKrS SKJr  S SKrS SKr\ R                  R                  S5      r	\ R                  R                  S5      =(       d    \	r
\ R                  R                  S5      r\
=(       d    \r\ R                  R                  S5      r\=(       d    \ R                  R                  S5      r\ R                  R                  S5      r\ R                  R                  S	5      rS
 rS rS rS r " S S\5      r\" \S5      (       a   " S S\5      r\" 5       \l        \rOS r " S S\5      r " S S\5      rS rg)é    N)ÚwrapsÚGITHUB_ACTIONSÚTRAVISÚAPPVEYORÚGREENLET_MANYLINUXÚGREENLET_SKIP_LEAKCHECKSÚ GREENLET_SKIP_FAILING_LEAKCHECKSÚ GREENLET_ONLY_FAILING_LEAKCHECKSc                 ó   • SU l         U $ )aÇ  
Ignore the given object during leakchecks.

Can be applied to a method, in which case the method will run, but
will not be subject to leak checks.

If applied to a class, the entire class will be skipped during leakchecks. This
is intended to be used for classes that are very slow and cause problems such as
test timeouts; typically it will be used for classes that are subclasses of a base
class and specify variants of behaviour (such as pool sizes).
T)Úignore_leakcheck©Úfuncs    ÚR/var/www/html/gaurav/venv/lib/python3.13/site-packages/greenlet/tests/leakcheck.pyÚignores_leakcheckr   J   s   € ð !€DÔØ€Kó    c                 ó   ^ ^• U U4S jnU$ )zò
Return a decorator that marks the function to be ignored during
leakchecks (see `ignores_leakcheck`) when *condition* is true.

*message* describes why the leakcheck is ignored. When *condition*
is false, the function is returned unchanged.
c                 ó:   >• T(       a  [        U 5      n TU l        U $ ©N)r   Úignore_leakcheck_reason)r   Ú	conditionÚmessages    €€r   Ú	decoratorÚ'ignores_leakcheck_if.<locals>.decoratora   s   ø€ ÞÜ$ TÓ*ˆDØ+2ˆDÔ(Øˆr   © )r   r   r   s   `` r   Úignores_leakcheck_ifr   Y   s   ù€ öð
 Ðr   c                 ób   • SU l         [        (       a  [        R                  " S5      " U 5      n U $ )z*
Mark that the function is known to leak.
TzSkipping known failures)Úfails_leakcheckÚSKIP_FAILING_LEAKCHECKSÚunittestÚskipr   s    r   r   r   h   s+   € ð  €DÔßÒÜ�}Š}Ð6Ô7¸Ó=ˆØ€Kr   c                 óJ   • [         R                  SS S::  a  [        U 5      $ U $ )zX
Mark the function as known to leak (fails refcount leakchecks) on Python 3.14 or less.
Né   )é   é   )ÚsysÚversion_infor   r   s    r   Ú fails_leakcheck_on_py314_or_lessr'   q   s)   € ô ×Ñ˜˜Ð˜wÓ&Ü˜tÓ$Ð$Ø€Kr   c                   ó   • \ rS rSrSrg)ÚLeakCheckErroréy   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   r   r   r)   r)   y   s   † Úr   r)   Ú
getobjectsc                   ó    • \ rS rSrS rS rSrg)Ú_MockGCé€   c                 ó.   • [         R                  " S5      $ )Nr   )r%   r0   ©Úselfs    r   Úget_objectsÚ_MockGC.get_objects�   s   € Ü—>’> !Ó$Ð$r   c                 ó"   • [        [        U5      $ r   )ÚgetattrÚgc)r6   Únames     r   Ú__getattr__Ú_MockGC.__getattr__ƒ   s   € Üœ2˜tÓ$Ð$r   r   N)r+   r,   r-   r.   r7   r=   r/   r   r   r   r2   r2   €   s   † ò	%õ	%r   r2   c                 ó   • U $ )zß
Decorator for a function that is known to fail when running
strict (``sys.getobjects()``) leakchecks.

This type of leakcheck finds all objects, even those, such as
strings, which are not tracked by the garbage collector.
r   r   s    r   Úfails_strict_leakcheckr@   ˆ   s	   € ð ˆr   c                   ó    • \ rS rSrS rS rSrg)Ú!ignores_types_in_strict_leakchecké’   c                 ó   • Xl         g r   ©Útypes)r6   rF   s     r   Ú__init__Ú*ignores_types_in_strict_leakcheck.__init__“   s   € Ø�
r   c                 ó(   • U R                   Ul        U$ r   )rF   Úleakcheck_ignore_types)r6   r   s     r   Ú__call__Ú*ignores_types_in_strict_leakcheck.__call__•   s   € Ø&*§j¡jˆÔ#Øˆr   rE   N)r+   r,   r-   r.   rG   rK   r/   r   r   r   rB   rB   ’   s   † òõr   rB   c                   óL   • \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rSrg)Ú_RefCountCheckeré™   r   )Úuop_executorc                 óT   • Xl         X l        / U l        0 U l        SU l        SU l        g )Nr   F)ÚtestcaseÚfunctionÚdeltasÚ
peak_statsÚignored_typesÚneeds_setUp)r6   rR   rS   s      r   rG   Ú_RefCountChecker.__init__¬   s,   € Ø ŒØ ŒØˆŒØˆŒØˆÔð !ˆÕr   c                 óÌ  • XL a  g[        U5      nU[        U R                  5      :X  a-   U R                  R                  U5      nU[
        La  U(       a  gU R                  R                  5        H	  nXL d  M	    g   X R                  ;   d)  X R                  ;   d  UR                  U R                  ;   a  gg! [         a!    U R                  R	                  U5      S:H  n Nœf = f)NFr   T)ÚtypeÚ_include_object_pÚ__eq__ÚAttributeErrorÚ__cmp__ÚNotImplementedÚ__dict__ÚvaluesrV   ÚIGNORED_TYPESr+   ÚIGNORED_TYPE_NAMES)r6   ÚobjÚkindÚexact_method_equalsÚxs        r   r[   Ú"_RefCountChecker._include_object_p·   sÝ   € ð
 Š;ØÜ�C‹yˆð ”4˜×.Ñ.Ó/Ó/ðOà&*×&<Ñ&<×&CÑ&CÀCÓ&HÐ#ð #¬.Ò8Ö=PØð —‘×%Ñ%Ö'ˆAØŒxÙñ (ð ×&Ñ&Ó&Ø×)Ñ)Ó)Ø�}‰} × 7Ñ 7Ó7àð øô/ "ó Oð '+×&<Ñ&<×&DÑ&DÀSÓ&IÈQÑ&NÒ#ð	Oús   «B8 Â8(C#Ã"C#c                 óV   • [         R                  " S U R                  U R                  S9$ )N)ÚlimitrU   Úfilter)ÚobjgraphÚgrowthrU   r[   r5   s    r   Ú_growthÚ_RefCountChecker._growthá   s$   € Ü�Š T°d·o±oØ&*×&<Ñ&<ñ>ð 	>r   c                 ó¤   • U(       d  g/ n[        S U 5       5      nU H  u  pEnUR                  SX4XV4-  5        M     SR                  U5      nU$ )Nz<Unable to calculate growth>c              3   ó>   #   • U H  u  n  n[        U5      v •  M     g 7fr   )Úlen)Ú.0r<   Ú_s      r   Ú	<genexpr>Ú0_RefCountChecker._report_diff.<locals>.<genexpr>ê   s   é € Ð7±¡* $¨¨1”C˜—I�I²ùs   ‚z%-*s%9d %+9dÚ
)ÚmaxÚappendÚjoin)r6   rm   ÚlinesÚwidthr<   ÚcountÚdeltaÚdiffs           r   Ú_report_diffÚ_RefCountChecker._report_diffå   sW   € ÞØ1àˆÜÑ7±Ó7Ó7ˆÛ"(ÑˆD˜Ø�L‰L˜¨5¸Ð*EÑEÖFñ #)ð �y‰y˜ÓˆØˆr   c                 óÀ  • [         R                  " 5       n[         R                  " 5         U R                  (       a+  U R                  R                  5         SU R                  l         U R                  " U R                  /UQ70 UD6  U R                  R                  5         U R                  R                  5         SU R                  l        SU l        U(       a  [         R                  " 5         g g ! U R                  R                  5         U R                  R                  5         SU R                  l        SU l        U(       a  [         R                  " 5         f f = f)NFT)r;   Ú	isenabledÚdisablerW   rR   ÚsetUpÚskipTearDownrS   ÚtearDownÚ
doCleanupsÚenable)r6   ÚargsÚkwargsÚ
gc_enableds       r   Ú	_run_testÚ_RefCountChecker._run_testò   sè   € Ü—\’\“^ˆ
Ü
�
Š
Œà××Ø�M‰M×ÑÔ!Ø).ˆD�M‰MÔ&ð	Ø�MŠM˜$Ÿ-™-Ð9¨$Ò9°&Ò9à�M‰M×"Ñ"Ô$Ø�M‰M×$Ñ$Ô&Ø)-ˆD�M‰MÔ&Ø#ˆDÔÞÜ—	’	•ð øð	 �M‰M×"Ñ"Ô$Ø�M‰M×$Ñ$Ô&Ø)-ˆD�M‰MÔ&Ø#ˆDÔÞÜ—	’	•ð ús   Á( C2 Ã2A+Ec                 óö   • S[         R                  ;   a!  [         R                  S   R                  5         S[         R                  ;   a!  [         R                  S   R                  5         U R                  5       $ )NÚurlparsezurllib.parse)r%   ÚmodulesÚclear_cachern   r5   s    r   Ú_growth_afterÚ_RefCountChecker._growth_after  sR   € ð œŸ™Ó$Ü�K‰K˜
Ñ#×/Ñ/Ô1ØœSŸ[™[Ó(Ü�K‰K˜Ñ'×3Ñ3Ô5à�|‰|‹~Ðr   c                 ó®  • U R                   nU(       d  g[        R                  (       a  [        S[        R                  < 35      eUSS  SS/:X  a  [	        U5      S;   a  gUSS  / SQ:X  a  g[	        U5      S	:¼  a  [        US
S  5      S:X  a  g[	        U5      S:¼  aE  US   S:”  a<  US   US   :X  a0  US   US   :X  a$  U R                  U5      n[        SU< SU< 35      e[        USS  5      S::  d*  [        US
S  5      S::  d  US
S  R                  S5      S:¼  a  SnOSn[	        U5      U:¼  a"  [        SU< SU R                  U5      < 35      eg)NTz Generated uncollectable garbage éþÿÿÿr   )r"   r#   Féýÿÿÿ)r   r   r   é   éüÿÿÿr#   éÿÿÿÿzrefcount increased by rw   r"   é   é   )rT   r;   Úgarbager)   rr   Úsumr€   r}   )r6   rm   rT   r   rj   s        r   Ú_check_deltasÚ_RefCountChecker._check_deltas  sZ  € ð
 —‘ˆÞàä�:�:Ý ÌÏËÐ!UÓVÐVð �"�#ˆ;˜1˜a˜&Ó ¤S¨£[°FÓ%:Øà�"�#ˆ;š)Ó#Øäˆv‹;˜!Ó¤ F¨2¨3 KÓ 0°AÓ 5Øäˆv‹;˜!Ó  r¡
¨Q£°6¸"±:ÀÈÁÓ3KÐPVÐWYÑPZÐ^dÐegÑ^hÓPhØ×$Ñ$ VÓ,ˆDÝ Ã6Ê4Ð!PÓQÐQô ˆv�b�cˆ{Ó˜qÓ ¤C¨¨r¨s¨Ó$4¸Ó$9¸VÀBÀC¸[×=NÑ=NÈqÓ=QÐUVÓ=Và‰EàˆEÜˆv‹;˜%ÓÝ Û$*Ø$(×$5Ñ$5°fÕ$=ð"?ó @ð @ð
 r   c                 óp  • [        S5       H  n[        R                  " 5         M     [        U R                  SS5      nU(       a  SU R
                  l        [        U R                  SS5      U l        U R                  5       n U R                  U5      (       ad  U R                  X5        U R                  5       nU R                  R                  [        S U 5       5      5        U R                  U5      (       a  Md  U(       a  [        SU R                  < S	35      eg ! [         a    U(       d  e  g f = f)
Nr#   r   FTrJ   r   c              3   ó(   #   • U H	  oS    v •  M     g7f)r"   Nr   )rs   Ústats     r   ru   Ú,_RefCountChecker.__call__.<locals>.<genexpr>Q  s   é € Ð'C¹F°D¨Q®ºFùs   ‚z	Expected z to leak but it did not.)Úranger;   Úcollectr:   rS   rR   Úexpect_greenlet_leakrV   rn   rŸ   r�   r“   rT   ry   rž   r)   )r6   rŠ   r‹   rt   Úexpect_failurerm   s         r   rK   Ú_RefCountChecker.__call__>  sù   € Ü�q–ˆAÜ�JŠJŽLñ ô ! §¡Ð0AÀ5ÓIˆÞØ15ˆD�M‰MÔ.Ü$ T§]¡]Ð4LÈbÓQˆÔð —‘“ˆð	_Ø×$Ñ$ V×,Ñ,Ø—‘˜tÔ,à×+Ñ+Ó-�à—‘×"Ñ"¤3Ñ'C¹FÓ'CÓ#DÔEð ×$Ñ$ V×,Ó,ö Ý$ÈdÏmÌmÐ%]Ó^Ð^ð øô	 ó 	Þ!Øñ "ð	ús   ÂA8D  Ä D5Ä4D5)rT   rS   rV   rW   rU   rR   N)r+   r,   r-   r.   rb   rc   rG   r[   rn   r€   r�   r“   rŸ   rK   r/   r   r   r   rN   rN   ™   s<   † ð
 €MðÐò	!ò(òT>ò
òò"ò/õb_r   rN   c                 ó   ^ • [        T SS5      (       d  [        (       aK  [        T SS 5      nU(       a5  [        (       d*  [        ST R                  < SU< 3[        R
                  S9  T $ [        T 5      U 4S j5       nU$ )Nr   Fr   zIgnoring leakchecks for z: )Úfilec                 óÞ   >• [        U SS5      (       a  [        R                  " S5      e[        (       a(  [        TSS5      (       d  [        R                  " S5      e[	        U T5      " X5      $ )Nr   Fz$This class ignored during leakchecksr   z(Only running tests that fail leakchecks.)r:   r   ÚSkipTestÚONLY_FAILING_LEAKCHECKSrN   )r6   rŠ   r‹   Úmethods      €r   ÚwrapperÚwrap_refcount.<locals>.wrapperc  s^   ø€ ä�4Ð+¨U×3Ñ3Ü×#Ò#Ð$JÓKÐKß"Ò"¬7°6Ð;LÈe×+TÑ+TÜ×#Ò#Ð$NÓOÐOÜ  fÔ-¨dÓ;Ð;r   )r:   ÚSKIP_LEAKCHECKSÚprintr+   r%   Ústderrr   )r¯   Úreasonr°   s   `  r   Úwrap_refcountr¶   Y  sl   ø€ ÜˆvÐ)¨5×1Ñ1·_²_Ü˜Ð!:¸DÓAˆÞŸ/š/ÝØ4:·O´OÂVÐLÜ—Z‘Zòð ˆä
ˆ6ƒ]ô<ó ð<ð €Nr   )Úosr%   r;   Ú	functoolsr   r   rl   ÚenvironÚgetÚRUNNING_ON_GITHUB_ACTIONSÚRUNNING_ON_TRAVISÚRUNNING_ON_APPVEYORÚRUNNING_ON_CIÚRUNNING_ON_MANYLINUXr²   r   r®   r   r   r   r'   ÚAssertionErrorr)   ÚhasattrÚobjectr2   r@   rB   rN   r¶   r   r   r   Ú<module>rÃ      s0  ðó0 
Û 
Û 	å Û ó ðB ŸJ™JŸN™NÐ+;Ó<Ð Ø—J‘J—N‘N 8Ó,×IÐ0IÐ Ø—j‘j—n‘n ZÓ0Ð Ø!×8Ð%8€Ø—z‘z—~‘~Ð&:Ó;Ð Ø&×T¨"¯*©*¯.©.Ð9SÓ*T€ØŸ*™*Ÿ.™.Ð)KÓLÐ ØŸ*™*Ÿ.™.Ð)KÓLÐ òòòòô	�^ô 	ñ ˆ3�×Ñô%�&ô %ñ
 “)€H„KØ,Ñòô¨ô ô~_�vô ~_ó@r   