Ë
    v¹1h¼.  ã                   ó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Zd dlZej                  j                  d«      Zej                  j                  d«      xs eZej                  j                  d«      Zexs eZej                  j                  d«      Zexs ej                  j                  d«      Zej                  j                  d	«      Zej                  j                  d
«      Zd„ Zd„ Z G d„ de«      Z eed«      r G d„ de«      Z e«       e_        eZnd„ Z G d„ de«      Z G d„ de«      Zd„ Zy)é    )Úprint_functionN)ÚwrapsÚGITHUB_ACTIONSÚTRAVISÚAPPVEYORÚGREENLET_MANYLINUXÚGREENLET_SKIP_LEAKCHECKSÚ GREENLET_SKIP_FAILING_LEAKCHECKSÚ GREENLET_ONLY_FAILING_LEAKCHECKSc                 ó   — d| _         | S )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    úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/greenlet/tests/leakcheck.pyÚignores_leakcheckr   L   s   € ð !€DÔØ€Kó    c                 óV   — d| _         t        r t        j                  d«      | «      } | S )z2
    Mark that the function is known to leak.
    TzSkipping known failures)Úfails_leakcheckÚSKIP_FAILING_LEAKCHECKSÚunittestÚskipr   s    r   r   r   [   s*   € ð  €DÔÝØ7Œx�}‰}Ð6Ó7¸Ó=ˆØ€Kr   c                   ó   — e Zd Zy)ÚLeakCheckErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   r   r   d   s   „ Ør   r   Ú
getobjectsc                   ó   — e Zd Zd„ Zd„ Zy)Ú_MockGCc                 ó,   — t        j                  d«      S )Nr   )Úsysr   ©Úselfs    r   Úget_objectsz_MockGC.get_objectsl   s   € Ü—>‘> !Ó$Ð$r   c                 ó"   — t        t        |«      S ©N)ÚgetattrÚgc)r$   Únames     r   Ú__getattr__z_MockGC.__getattr__n   s   € Üœ2˜tÓ$Ð$r   N)r   r   r   r%   r+   r   r   r   r    r    k   s   „ ò	%ó	%r   r    c                 ó   — | S )a  
        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   s	   € ð ˆr   c                   ó   — e Zd Zd„ Zd„ Zy)Ú!ignores_types_in_strict_leakcheckc                 ó   — || _         y r'   )Útypes)r$   r1   s     r   Ú__init__z*ignores_types_in_strict_leakcheck.__init__~   s	   € Øˆ�
r   c                 ó(   — | j                   |_        |S r'   )r1   Úleakcheck_ignore_types)r$   r   s     r   Ú__call__z*ignores_types_in_strict_leakcheck.__call__€   s   € Ø&*§j¡jˆÔ#Øˆr   N)r   r   r   r2   r5   r   r   r   r/   r/   }   s   „ òór   r/   c                   ó@   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zy
)Ú_RefCountCheckerr   c                 óX   — || _         || _        g | _        i | _        d| _        d| _        y )Nr   F)ÚtestcaseÚfunctionÚdeltasÚ
peak_statsÚignored_typesÚneeds_setUp)r$   r9   r:   s      r   r2   z_RefCountChecker.__init__‹   s0   € Ø ˆŒØ ˆŒØˆŒØˆŒØˆÔð !ˆÕr   c                 ó€  — || u ryt        |«      }|t        | j                  «      k(  r'	 | j                  j                  |«      }|t
        ur|ry| j                  j                  «       D ]  }||u sŒ y || j                  v s|| j                  v ryy# t        $ r! | j                  j	                  |«      dk(  }Y Œww xY w)NFr   T)
ÚtypeÚ_include_object_pÚ__eq__ÚAttributeErrorÚ__cmp__ÚNotImplementedÚ__dict__Úvaluesr=   ÚIGNORED_TYPES)r$   ÚobjÚkindÚexact_method_equalsÚxs        r   rA   z"_RefCountChecker._include_object_p–   sÕ   € ð
 �$‰;ØÜ�C‹yˆð ”4˜×.Ñ.Ó/Ò/ðOà&*×&<Ñ&<×&CÑ&CÀCÓ&HÐ#ð #¬.Ñ8Ñ=PØð —‘×%Ñ%Ó'ò 	ˆAØ�aŠxÙð	ð
 �4×%Ñ%Ñ%¨°×1CÑ1CÑ)CØàøô% "ò Oð '+×&<Ñ&<×&DÑ&DÀSÓ&IÈQÑ&NÒ#ð	Oús   ªB Â'B=Â<B=c                 óZ   — t        j                  d | j                  | j                  ¬«      S )N)Úlimitr<   Úfilter)ÚobjgraphÚgrowthr<   rA   r#   s    r   Ú_growthz_RefCountChecker._growth»   s$   € Ü�‰ T°d·o±oØ&*×&<Ñ&<ô>ð 	>r   c                 óœ   — |syg }t        d„ |D «       «      }|D ]  \  }}}|j                  d||||fz  «       Œ  dj                  |«      }|S )Nz<Unable to calculate growth>c              3   ó:   K  — | ]  \  }}}t        |«      –— Œ y ­wr'   )Úlen)Ú.0r*   Ú_s      r   ú	<genexpr>z0_RefCountChecker._report_diff.<locals>.<genexpr>Ä   s   è ø€ Ò7¡* $¨¨1”C˜—IÑ7ùs   ‚z%-*s%9d %+9dú
)ÚmaxÚappendÚjoin)r$   rQ   ÚlinesÚwidthr*   ÚcountÚdeltaÚdiffs           r   Ú_report_diffz_RefCountChecker._report_diff¿   sd   € ÙØ1àˆÜÑ7°Ô7Ó7ˆØ"(ò 	GÑˆD�%˜Ø�L‰L˜¨5°$¸¸uÐ*EÑEÕFð	Gð �y‰y˜ÓˆØˆr   c                 óš  — t        j                  «       }t        j                  «        | j                  r+| j                  j                  «        d| j                  _        	  | j                  | j                  g|¢­i |¤Ž | j                  j                  «        | j                  j                  «        d| j                  _        d| _        |rt        j                  «        y y # | j                  j                  «        | j                  j                  «        d| j                  _        d| _        |rt        j                  «        w w xY w)NFT)r)   Ú	isenabledÚdisabler>   r9   ÚsetUpÚskipTearDownr:   ÚtearDownÚ
doCleanupsÚenable)r$   ÚargsÚkwargsÚ
gc_enableds       r   Ú	_run_testz_RefCountChecker._run_testÌ   sê   € Ü—\‘\“^ˆ
Ü
�
‰
Œà×ÒØ�M‰M×ÑÔ!Ø).ˆD�M‰MÔ&ð	ØˆD�M‰M˜$Ÿ-™-Ð9¨$Ò9°&Ò9à�M‰M×"Ñ"Ô$Ø�M‰M×$Ñ$Ô&Ø)-ˆD�M‰MÔ&Ø#ˆDÔÙÜ—	‘	•ð øð	 �M‰M×"Ñ"Ô$Ø�M‰M×$Ñ$Ô&Ø)-ˆD�M‰MÔ&Ø#ˆDÔÙÜ—	‘	•ð ús   Á! C% Ã%A%E
c                 óî   — dt         j                  v r!t         j                  d   j                  «        dt         j                  v r!t         j                  d   j                  «        | j                  «       S )NÚurlparsezurllib.parse)r"   ÚmodulesÚclear_cacherR   r#   s    r   Ú_growth_afterz_RefCountChecker._growth_afterÝ   sR   € ð œŸ™Ñ$Ü�K‰K˜
Ñ#×/Ñ/Ô1ØœSŸ[™[Ñ(Ü�K‰K˜Ñ'×3Ñ3Ô5à�|‰|‹~Ðr   c                 ót  — | j                   }|syt        j                  rt        dt        j                  ›�«      ‚|dd  ddgk(  rt	        |«      dv ry|dd  g d¢k(  ryt	        |«      d	k\  rt        |d
d  «      dk(  ryt	        |«      dk\  r@|d   dkD  r8|d   |d   k(  r-|d   |d   k(  r"| j                  |«      }t        d|›d|›�«      ‚t        |dd  «      dk  s(t        |d
d  «      dk  s|d
d  j                  d«      dk\  rd}nd}t	        |«      |k\  r t        d|›d| j                  |«      ›�«      ‚y)NTz Generated uncollectable garbage éþÿÿÿr   )é   é   Féýÿÿÿ)r   r   r   é   éüÿÿÿrw   éÿÿÿÿzrefcount increased by rY   rv   é   é   )r;   r)   Úgarbager   rU   Úsumrb   r_   )r$   rQ   r;   ra   rN   s        r   Ú_check_deltasz_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                 ó4  — t        d«      D ]  }t        j                  «        Œ t        | j                  dd«      }|rd| j
                  _        t        | j                  dd«      | _        | j                  «       }	 | j                  |«      r_| j                  ||«       | j                  «       }| j                  j                  t        d„ |D «       «      «       | j                  |«      rŒ_|rt        d| j                  ›d	�«      ‚y # t        $ r |s‚ Y y w xY w)
Nrw   r   FTr4   r   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)rv   Nr   )rV   Ústats     r   rX   z,_RefCountChecker.__call__.<locals>.<genexpr>+  s   è ø€ Ò'C°D¨¨Q­Ñ'Cùs   ‚z	Expected z to leak but it did not.)Úranger)   Úcollectr(   r:   r9   Úexpect_greenlet_leakr=   rR   r€   rn   rs   r;   r[   r   r   )r$   rk   rl   rW   Úexpect_failurerQ   s         r   r5   z_RefCountChecker.__call__  sú   € Ü�q“ò 	ˆAÜ�J‰J�Lð	ô ! §¡Ð0AÀ5ÓIˆÙØ15ˆD�M‰MÔ.Ü$ T§]¡]Ð4LÈbÓQˆÔð —‘“ˆð	_Ø×$Ñ$ VÔ,Ø—‘˜t VÔ,à×+Ñ+Ó-�à—‘×"Ñ"¤3Ñ'C¸FÔ'CÓ#DÔEð ×$Ñ$ VÕ,ñ Ý$ÈdÏmËmÐ%]Ó^Ð^ð øô	 ò 	Ù!Øñ "ð	ús   Á<A/D ÄDÄDN)r   r   r   rH   r2   rA   rR   rb   rn   rs   r€   r5   r   r   r   r7   r7   „   s4   „ ð
 €Mò	!ò#òJ>ò
òò"ò/ób_r   r7   c                 óX   ‡ — t        ‰ dd«      st        r‰ S t        ‰ «      ˆ fd„«       }|S )Nr   Fc                 ó¾   •— t        | dd«      rt        j                  d«      ‚t        r"t        ‰dd«      st        j                  d«      ‚ t	        | ‰«      ||«      S )Nr   Fz$This class ignored during leakchecksr   z(Only running tests that fail leakchecks.)r(   r   ÚSkipTestÚONLY_FAILING_LEAKCHECKSr7   )r$   rk   rl   Úmethods      €r   Úwrapperzwrap_refcount.<locals>.wrapper7  sZ   ø€ ä�4Ð+¨UÔ3Ü×#Ñ#Ð$JÓKÐKÝ"¬7°6Ð;LÈeÔ+TÜ×#Ñ#Ð$NÓOÐOØ-Ô  fÓ-¨d°FÓ;Ð;r   )r(   ÚSKIP_LEAKCHECKSr   )rŒ   r�   s   ` r   Úwrap_refcountr�   3  s4   ø€ ÜˆvÐ)¨5Ô1µ_Øˆä
ˆ6ƒ]ó<ó ð<ð €Nr   )Ú
__future__r   Úosr"   r)   Ú	functoolsr   r   rP   ÚenvironÚgetÚRUNNING_ON_GITHUB_ACTIONSÚRUNNING_ON_TRAVISÚRUNNING_ON_APPVEYORÚRUNNING_ON_CIÚRUNNING_ON_MANYLINUXrŽ   r   r‹   r   r   ÚAssertionErrorr   ÚhasattrÚobjectr    r-   r/   r7   r�   r   r   r   ú<module>r�      s&  ðõ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Ø,Ñòô¨ô ôm_�vô m_ó^r   