+
    ÃìÜj-5  ã                   ó¬  € ^ RI t ^ RIt^ RIt^ RIHt ^ RIt^ RIt] P                  P                  R4      t	] P                  P                  R4      ;'       g    ]	t
] P                  P                  R4      t]
;'       g    ]t] P                  P                  R4      t];'       g    ] P                  P                  R4      t] P                  P                  R4      t] P                  P                  R	4      tR
 tR tR tR t ! R R]4      t]! ]R4      '       d    ! R R]4      t]! 4       ]n        ]tMR t ! R R]4      t ! R R]4      tR tR# )é    N)ÚwrapsÚGITHUB_ACTIONSÚTRAVISÚAPPVEYORÚGREENLET_MANYLINUXÚGREENLET_SKIP_LEAKCHECKSÚ GREENLET_SKIP_FAILING_LEAKCHECKSÚ GREENLET_ONLY_FAILING_LEAKCHECKSc                ó   € RV n         V # )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/opt/render/project/src/.venv/lib/python3.14/site-packages/greenlet/tests/leakcheck.pyÚignores_leakcheckr   J   s   € ð !€DÔØ€Kó    c                ó   a a€ V V3R lpV# )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                 ó<   <€ S'       d   \        V 4      p SV n        V # ©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   ff r   Úignores_leakcheck_ifr   Y   s   ù€ öð
 Ðr   c                ód   € RV n         \        '       d   \        P                  ! R4      ! V 4      p V # )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                óT   € \         P                  R,          R8:  d   \        V 4      # V # )zX
Mark the function as known to leak (fails refcount leakchecks) on Python 3.14 or less.
:Né   N)é   é   )ÚsysÚversion_infor   r   s   &r   Ú fails_leakcheck_on_py314_or_lessr'   q   s'   € ô ×Ñ˜Õ˜wÔ&Ü˜tÓ$Ð$Ø€Kr   c                   ó   € ] tR t^ytRtR# )ÚLeakCheckErrorr   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   r   r   r)   r)   y   s   † Ûr   r)   Ú
getobjectsc                   ó,   a € ] tR t^€t o R tR tRtV tR# )Ú_MockGCc                ó.   € \         P                  ! ^ 4      # )r   )r%   r/   ©Úselfs   &r   Úget_objectsÚ_MockGC.get_objects�   s   € Ü—>’> !Ó$Ð$r   c                ó"   € \        \        V4      # r   )ÚgetattrÚgc)r4   Únames   &&r   Ú__getattr__Ú_MockGC.__getattr__ƒ   s   € Üœ2˜tÓ$Ð$r   r   N)r*   r+   r,   r-   r5   r;   r.   Ú__classdictcell__©Ú__classdict__s   @r   r1   r1   €   s   ø‡ € ò	%÷	%ð 	%r   r1   c                ó   € V # )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_leakcheckrA   ˆ   s	   € ð ˆr   c                   ó,   a € ] tR t^’t o R tR tRtV tR# )Ú!ignores_types_in_strict_leakcheckc                ó   € Wn         R # r   ©Útypes)r4   rF   s   &&r   Ú__init__Ú*ignores_types_in_strict_leakcheck.__init__“   s   € ØŽ
r   c                ó(   € V P                   Vn        V# r   )rF   Úleakcheck_ignore_types)r4   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>   s   @r   rC   rC   ’   s   ø‡ € ò÷ð r   rC   c                   óX   a € ] tR t^™t o RtRtR tR tR tR t	R t
R tR tR tR	tV tR
# )Ú_RefCountCheckerc                óV   € Wn         W n        . V n        / V n        RV n        R V n        R# )FNr   )ÚtestcaseÚfunctionÚdeltasÚ
peak_statsÚignored_typesÚneeds_setUp)r4   rP   rQ   s   &&&r   rG   Ú_RefCountChecker.__init__¬   s,   € Ø ŒØ ŒØˆŒØˆŒØˆÔð !ˆÖr   c                óè  € WJ d   R # \        V4      pV\        V P                  4      8X  d1    V P                  P                  V4      pV\
        Jd   V'       d   R # V P                  P                  4        F  pWJ g   K
   R # 	  W P                  9   g,   W P                  9   g   VP                  V P                  9   d   R # R#   \         d"    T P                  P	                  T4      ^ 8H  p L§i ; i)FT)ÚtypeÚ_include_object_pÚ__eq__ÚAttributeErrorÚ__cmp__ÚNotImplementedÚ__dict__ÚvaluesrT   ÚIGNORED_TYPESr*   ÚIGNORED_TYPE_NAMES)r4   ÚobjÚkindÚexact_method_equalsÚxs   &&   r   rY   Ú"_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   ®C Ã)C1Ã0C1c                ó\   € \         P                  ! R V P                  V P                  R7      # )N)ÚlimitrS   Úfilter)ÚobjgraphÚgrowthrS   rY   r3   s   &r   Ú_growthÚ_RefCountChecker._growthá   s$   € Ü�Š T°d·o±oØ&*×&<Ñ&<ô>ð 	>r   c                ó°   € V'       g   R # . p\        R V 4       4      pV F   w  rEpVP                  RW4WV3,          4       K"  	  RP                  V4      pV# )z<Unable to calculate growth>c              3   ó@   "  € T F  w  p p\        V4      x € K  	  R # 5i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)r4   rk   Ú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                óÊ  € \         P                  ! 4       p\         P                  ! 4        V P                  '       d,   V P                  P                  4        R V P                  n         V P                  ! V P                  .VO5/ VB  V P                  P                  4        V P                  P                  4        RV P                  n        RV n        V'       d   \         P                  ! 4        R# R#   T P                  P                  4        T P                  P                  4        RT P                  n        RT n        T'       d   \         P                  ! 4        i i ; i)FTN)r9   Ú	isenabledÚdisablerU   rP   ÚsetUpÚskipTearDownrQ   ÚtearDownÚ
doCleanupsÚenable)r4   Ú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   Á) C6 Ã6A,E"c                ó
  € R \         P                  9   d&   \         P                  R ,          P                  4        R\         P                  9   d&   \         P                  R,          P                  4        V P                  4       # )Úurlparsezurllib.parse)r%   ÚmodulesÚclear_cacherl   r3   s   &r   Ú_growth_afterÚ_RefCountChecker._growth_after  sR   € ð œŸ™Ô$Ü�K‰K˜
Õ#×/Ñ/Ô1ØœSŸ[™[Ô(Ü�K‰K˜Õ'×3Ñ3Ô5à�|‰|‹~Ðr   c                óþ  € V P                   pV'       g   R # \        P                  '       d   \        R\        P                  : 24      hVRR ^ ^ .8X  d   \	        V4      R9   d   R# VRR . R	O8X  d   R# \	        V4      ^8¼  d   \        VR
R 4      ^ 8X  d   R# \	        V4      ^8¼  d]   VR,          ^ 8”  dO   VR,          VR,          8X  d:   VR,          VR,          8X  d%   V P                  V4      p\        RV: RV: 24      h\        VRR 4      ^ 8:  g-   \        VR
R 4      ^ 8:  g   VR
R P                  ^ 4      ^8¼  d   ^pM^p\	        V4      V8¼  d#   \        RV: RV P                  V4      : 24      hR # )Tz Generated uncollectable garbage NFzrefcount increased by ru   éþÿÿÿ)r"   r#   éýÿÿÿ)r   r   r   éüÿÿÿéÿÿÿÿ)rR   r9   Úgarbager)   rp   Úsumr~   r{   )r4   rk   rR   r}   rh   s   &&   r   Ú_check_deltasÚ_RefCountChecker._check_deltas  s\  € ð
 —‘ˆßáä�:�:ˆ:Ý ÌÏËÐ!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                óT  € \        ^4       F  p\        P                  ! 4        K  	  \        V P                  RR4      pV'       d   RV P
                  n        \        V P                  RR	4      V n        V P                  4       p V P                  V4      '       dO   V P                  W4       V P                  4       pV P                  P                  \        R V 4       4      4       Ke   V'       d   \        RV P                  : R24      hR#   \         d    T'       g   h  R# i ; i)
r#   r   FTrJ   c              3   ó2   "  € T F  q^,          x € K  	  R# 5i)r"   Nr   )rq   Ústats   & r   rs   Ú,_RefCountChecker.__call__.<locals>.<genexpr>Q  s   é € Ð'C¹F°D¨Q¯ª»Fùs   ‚z	Expected z to leak but it did not.Nr   )Úranger9   Úcollectr8   rQ   rP   Úexpect_greenlet_leakrT   rl   rš   r‹   r‘   rR   rw   r™   r)   )r4   rˆ   r‰   rr   Úexpect_failurerk   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ð -÷ Ý$ÈdÏmÌmÐ%]Ó^Ð^ñ øô	 ô 	ß!Øò "ð	ús   ÂD ÂAD ÄD'Ä"D'Ä&D')rR   rQ   rT   rU   rS   rP   Nr   )Úuop_executor)r*   r+   r,   r-   r`   ra   rG   rY   rl   r~   r‹   r‘   rš   rK   r.   r=   r>   s   @r   rN   rN   ™   sE   ø‡ € ð
 €MðÐò	!ò(òT>ò
òò"ò/÷b_ð _r   rN   c                 ó  a € \        S R R4      '       g   \        '       dQ   \        S RR4      pV'       d:   \        '       g.   \        RS P                  : RV: 2\        P
                  R7       S # \        S 4      V 3R l4       pV# )r   Fr   NzIgnoring leakchecks for z: )Úfilec                 óä   <€ \        V R R4      '       d   \        P                  ! R4      h\        '       d*   \        SRR4      '       g   \        P                  ! R4      h\	        V S4      ! W4      # )r   Fz$This class ignored during leakchecksr   z(Only running tests that fail leakchecks.)r8   r   ÚSkipTestÚONLY_FAILING_LEAKCHECKSrN   )r4   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   )r8   ÚSKIP_LEAKCHECKSÚprintr*   r%   Ústderrr   )r«   Úreasonr¬   s   f  r   Úwrap_refcountr²   Y  sl   ø€ ÜˆvÐ)¨5×1Ò1·_³_Ü˜Ð!:¸DÓAˆßŸ/›/ÝØ4:·O´OÂVÐLÜ—Z‘Zõð ˆä
ˆ6ƒ]ô<ó ð<ð €Nr   )Úosr%   r9   Ú	functoolsr   r   rj   Ú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Úobjectr1   rA   rC   rN   r²   r   r   r   Ú<module>r¿      s9  ðó0 
Û 
Û 	å Û ó ðB ŸJ™JŸN™NÐ+;Ó<Ð Ø—J‘J—N‘N 8Ó,×IÐIÐ0IÐ Ø—j‘j—n‘n ZÓ0Ð Ø!×8Ð8Ð%8€Ø—z‘z—~‘~Ð&:Ó;Ð Ø&×TÐT¨"¯*©*¯.©.Ð9SÓ*T€ØŸ*™*Ÿ.™.Ð)KÓLÐ ØŸ*™*Ÿ.™.Ð)KÓLÐ òòòòô	�^ô 	ñ ˆ3�×Òô%�&ô %ñ
 “)€H„KØ,Ñòô¨ô ô~_�vô ~_ô@r   