Ë
    V.j“2  ã                   ón  — 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)é    N)Ú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    úZC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\greenlet/tests/leakcheck.pyÚignores_leakcheckr   J   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   Y   s*   € ð  €DÔÝØ7Œx�}‰}Ð6Ó7¸Ó=ˆØ€Kr   c                   ó   — e Zd Zy)ÚLeakCheckErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   r   r   b   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_objectsj   s   € Ü—>‘> !Ó$Ð$r   c                 ó"   — t        t        |«      S ©N)ÚgetattrÚgc)r#   Únames     r   Ú__getattr__z_MockGC.__getattr__l   s   € Üœ2˜tÓ$Ð$r   N)r   r   r   r$   r*   r   r   r   r   r   i   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,   q   s	   € ð ˆr   c                   ó   — e Zd Zd„ Zd„ Zy)Ú!ignores_types_in_strict_leakcheckc                 ó   — || _         y r&   )Útypes)r#   r0   s     r   Ú__init__z*ignores_types_in_strict_leakcheck.__init__|   s	   € Øˆ�
r   c                 ó(   — | j                   |_        |S r&   )r0   Úleakcheck_ignore_types)r#   r   s     r   Ú__call__z*ignores_types_in_strict_leakcheck.__call__~   s   € Ø&*§j¡jˆÔ#Øˆr   N)r   r   r   r1   r4   r   r   r   r.   r.   {   s   „ òór   r.   c                   óD   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)Ú_RefCountCheckerr   )Úuop_executorc                 óX   — || _         || _        g | _        i | _        d| _        d| _        y )Nr   F)ÚtestcaseÚfunctionÚdeltasÚ
peak_statsÚignored_typesÚneeds_setUp)r#   r9   r:   s      r   r1   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 s|j                  | j                  v ryy# t        $ r! | j                  j	                  |«      dk(  }Y Œ�w xY w)NFr   T)ÚtypeÚ_include_object_pÚ__eq__ÚAttributeErrorÚ__cmp__ÚNotImplementedÚ__dict__Úvaluesr=   ÚIGNORED_TYPESr   ÚIGNORED_TYPE_NAMES)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Ùð (ð �D×&Ñ&Ñ&Ø�t×)Ñ)Ñ)Ø�}‰} × 7Ñ 7Ñ7àð øô/ "ò Oð '+×&<Ñ&<×&DÑ&DÀSÓ&IÈQÑ&NÒ#ð	Oús   ªB+ Â+'CÃC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±ùs   ‚z%-*s%9d %+9dÚ
)ÚmaxÚappendÚjoin)r#   rR   ÚlinesÚwidthr)   ÚcountÚdeltaÚdiffs           r   Ú_report_diffz_RefCountChecker._report_diffÎ   s]   € ÙØ1àˆÜÑ7±Ó7Ó7ˆÛ"(ÑˆD�%˜Ø�L‰L˜¨5°$¸¸uÐ*EÑEÕFð #)ð �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_cacherS   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   é   éüÿÿÿrx   éÿÿÿÿzrefcount increased by rZ   rw   é   é   )r;   r(   Úgarbager   rV   Úsumrc   r`   )r#   rR   r;   rb   rO   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)
Nrx   r   FTr3   r   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)rw   Nr   )rW   Ústats     r   rY   z,_RefCountChecker.__call__.<locals>.<genexpr>:  s   è ø€ Ð'C¹F°D¨¨Q­¹Fùs   ‚z	Expected z to leak but it did not.)Úranger(   Úcollectr'   r:   r9   Úexpect_greenlet_leakr=   rS   r�   ro   rt   r;   r\   r€   r   )r#   rl   rm   rX   Úexpect_failurerR   s         r   r4   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   rI   r1   rA   rS   rc   ro   rt   r�   r4   r   r   r   r6   r6   ‚   s<   „ ð
 €MðÐò	!ò(òT>ò
òò"ò/ób_r   r6   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_LEAKCHECKSr6   )r#   rl   rm   Úmethods      €r   Úwrapperzwrap_refcount.<locals>.wrapperF  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�   B  s4   ø€ ÜˆvÐ)¨5Ô1µ_Øˆä
ˆ6ƒ]ó<ó ð<ð €Nr   )Úosr!   r(   Ú	functoolsr   r   rQ   Ú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.   r6   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Ø,Ñòô¨ô ô~_�vô ~_ó@r   