+
    ÃìÜjMÐ  ã                   ó¬  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIt^ RIHt	 ^RI
Ht ^RI
Ht ^RI
Ht ^RI
Ht ^R	I
Ht ^R
I
Ht ^RIHt ^RIHt ^RIHt ^RIHt  ! R R]4      tR tR t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t] R8X  d   ]PB                  ! 4        R# R# ) é    N)ÚABCMeta)Úabstractmethod)Úgreenlet)ÚTestCase)ÚRUNNING_ON_MANYLINUX)ÚPY313)ÚPY314)ÚWIN)ÚRUNNING_ON_FREETHREAD_BUILD)Úfails_leakcheck)Ú fails_leakcheck_on_py314_or_less)Úignores_leakcheck)Úignores_leakcheck_ifc                   ó   € ] tR t^"tRtR# )Ú	SomeError© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    ÚZ/opt/render/project/src/.venv/lib/python3.14/site-packages/greenlet/tests/test_greenlet.pyr   r   "   s   † Ûr   r   c                 óÌ   €  \         P                  ! 4       P                  P                  4        \        h   T P	                  \
        P                  ! 4       ^ ,          4       h ; i©r   )r   Ú
getcurrentÚparentÚswitchÚappendÚsysÚexc_infor   ©Úseens   &r   Úfmainr%   &   sJ   € ðÜ×ÒÓ×$Ñ$×+Ñ+Ô-ô €OøðØ�‰”C—L’L“N 1Õ%Ô&Øús	   ‚-5 µ.A#c                 óF   € R  p\        W R7      pVP                  V4       R# )c                 ó   € V h©Nr   )Úexcs   &r   ÚcrasherÚsend_exception.<locals>.crasher2   s   € Øˆ	r   ©r   N©ÚRawGreenletr   )Úgr)   r*   Úg1s   &&  r   Úsend_exceptionr1   /   s   € òä	�WÔ	'€BØ‡I�Iˆc†Nr   c                   ó4  a € ] tR t^8t o R tR tR tR tR tR t	R t
R tR	 t]R
 4       tR tR tR tR t]P(                  ! ];'       d    ]R4      R 4       tR tR tR tR tR tR tR tR tR t R t!R t"R t#]$R5R l4       t%]$]&! ]';'       d    ](PR                  R,          R68H  R4      R  4       4       t*R! t+],R" 4       t-R# t.R$ t/R% t0R& t1R' t2R( t3]P(                  ! ];'       d    ]R)4      R* 4       t4R+ t5R, t6R- t7R. t8R/ t9R0 t:R1 t;R2 t<R3t=V t>R4# )7ÚTestGreenletc                ó  a€ . oV3R  lp\        V4      pSP                  ^ 4       VP                  4        SP                  ^4       VP                  4        SP                  ^4       V P                  S\	        \        ^4      4      4       R# )c                  ó¦   <€ S P                  ^4       \        P                  ! 4       P                  P	                  4        S P                  ^4       R# ©é   N©r    r   r   r   r   ©Úlsts   €r   ÚfÚ'TestGreenlet._do_simple_test.<locals>.f=   s4   ø€ Ø�J‰J�qŒMÜ×ÒÓ!×(Ñ(×/Ñ/Ô1Ø�J‰J�qŽMr   N)r.   r    r   ÚassertEqualÚlistÚrange)Úselfr;   r/   r:   s   &  @r   Ú_do_simple_testÚTestGreenlet._do_simple_test:   sc   ø€ Øˆõ	ô ˜‹NˆØ�
‰
�1ŒØ	�‰Œ
Ø�
‰
�1ŒØ	�‰Œ
Ø�
‰
�1ŒØ×Ñ˜œd¤5¨£8›nÖ-r   c                ó&   € V P                  4        R # r(   )rA   ©r@   s   &r   Útest_simpleÚTestGreenlet.test_simpleI   s   € Ø×ÑÖr   c                óö   € \        4       pV P                  \        4      ;_uu_ 4       pVP                  4        R R R 4       V P	                  R\        XP                  4      4       R #   + '       g   i     L7; i©NÚrun)r.   ÚassertRaisesÚAttributeErrorr   ÚassertInÚstrÚ	exception©r@   r/   r)   s   &  r   Ú(test_switch_no_run_raises_AttributeErrorÚ5TestGreenlet.test_switch_no_run_raises_AttributeErrorL   sL   € Ü‹MˆØ×Ñœ~×.Ô.°#Ø�H‰HŒJ÷ /ð 	�‰�eœS §¡Ó/Ö0÷ /×.ús   ¨A(Á(A8	c                ó   € \        4       pV P                  \        4      ;_uu_ 4       pVP                  \        4       R R R 4       V P                  R\        XP                  4      4       R #   + '       g   i     L7; irH   )r.   rJ   rK   Úthrowr   rL   rM   rN   rO   s   &  r   Ú'test_throw_no_run_raises_AttributeErrorÚ4TestGreenlet.test_throw_no_run_raises_AttributeErrorS   sO   € Ü‹MˆØ×Ñœ~×.Ô.°#Ø�G‰G”IÔ÷ /ð 	�‰�eœS §¡Ó/Ö0÷ /×.ús   ¨A-Á-A=	c                óž   € \        R R7      pV P                  V4       V P                  VP                  \        P
                  ! 4       4       R # )Nr,   )r.   ÚassertIsNotNoneÚassertIsr   r   r   ©r@   r/   s   & r   Útest_parent_equals_NoneÚ$TestGreenlet.test_parent_equals_NoneZ   s5   € Ü˜tÔ$ˆØ×Ñ˜QÔØ�‰�a—h‘h¤× 3Ò 3Ó 5Ö6r   c                óv   € \        R R7      pV P                  V4       V P                  VP                  4       R # )N©rI   )r.   rW   ÚassertIsNonerI   rY   s   & r   Útest_run_equals_NoneÚ!TestGreenlet.test_run_equals_None_   s,   € Ü˜DÔ!ˆØ×Ñ˜QÔØ×Ñ˜!Ÿ%™%Ö r   c                ó  a€ . oV3R  lp\        V4      p\        V4      pVP                  4        V P                  \        S4      ^4       VP                  4        V P                  \        S4      ^4       VP                  4        V P                  \        S4      ^4       V P                  VP                  R4       VP                  4        V P                  \        S4      ^4       V P                  VP                  R4       R# )c                  óª   <€ S P                  ^4       \        P                  ! 4       P                  P	                  4        S P                  ^^.4       R# r6   )r    r   r   r   r   Úextendr9   s   €r   r;   Ú)TestGreenlet.test_two_children.<locals>.fg   s9   ø€ Ø�J‰J�qŒMÜ×ÒÓ!×(Ñ(×/Ñ/Ô1Ø�J‰J˜˜1�vÖr   TN)r.   r   r=   ÚlenÚdead)r@   r;   r/   Úhr:   s   &   @r   Útest_two_childrenÚTestGreenlet.test_two_childrend   s½   ø€ Øˆõ	ô ˜‹NˆÜ˜‹NˆØ	�‰Œ
Ø×Ñœ˜S› 1Ô%Ø	�‰Œ
Ø×Ñœ˜S› 1Ô%Ø	�‰Œ
Ø×Ñœ˜S› 1Ô%Ø×Ñ˜Ÿ™ Ô&Ø	�‰Œ
Ø×Ñœ˜S› 1Ô%Ø×Ñ˜Ÿ™ Ö&r   c                óÊ  aa€ . oV3R  loVV3R lpT P                  \        P                  ! V4      \        '       g   ^M^4       \	        V4      pT P                  \        P                  ! V4      \        '       g   ^M^4       VP                  4        V P                  S. RO4       T P                  \        P                  ! V4      \        '       g	   ^4       R# ^4       R# )c                  ó„   <€ S P                  R 4       \        P                  ! 4       P                  P	                  4        R# )ÚbNr8   r9   s   €r   r;   Ú3TestGreenlet.test_two_recursive_children.<locals>.f{   s)   ø€ Ø�J‰J�sŒOÜ×ÒÓ!×(Ñ(×/Ñ/Ö1r   c                  ó‚   <€ SP                  R 4       \        S4      p V P                  4        SP                  R4       R# )ÚaÚcN)r    r.   r   )r/   r;   r:   s    €€r   r/   Ú3TestGreenlet.test_two_recursive_children.<locals>.g   s+   ø€ Ø�J‰J�sŒOÜ˜A“ˆAØ�H‰HŒJØ�J‰J�sŽOr   N)ro   rl   rp   )r=   r!   Úgetrefcountr	   r.   r   )r@   r/   r;   r:   s   & @@r   Útest_two_recursive_childrenÚ(TestGreenlet.test_two_recursive_childrenx   s˜   ù€ Øˆõ	2ö	ð
 	×ÑœŸš¨Ó+·e³e©QÀÔCÜ˜‹Nˆð 	×ÑœŸš¨Ó+·e³e©QÀÔCØ	�‰Œ
Ø×Ñ˜šoÔ.à×ÑœŸš¨Ó+·e³e¨QÖCÀÖCr   c                ó2  a a€ . oV V3R  lp\        ^
4       Uu. uF  p\        P                  ! VR7      NK  	  ppV F  pVP                  4        K  	  V F  pVP	                  ^
4       K  	  S P                  \        S4      \        V4      4       R# u upi )c                  óJ   <€ S P                  4        SP                  R 4       R# ©TN)rA   r    )r@   Úsuccesss   €€r   r;   Ú$TestGreenlet.test_threads.<locals>.f‘   s   ø€ Ø× Ñ Ô"Ø�N‰N˜4Ö r   ©ÚtargetN)r?   Ú	threadingÚThreadÚstartÚjoinr=   re   )r@   r;   ÚiÚthsÚthrx   s   f    @r   Útest_threadsÚTestGreenlet.test_threadsŽ   sw   ù€ Øˆö	!ô 49¸´9Ó=±9¨aŒy×Ò q×)±9ˆÐ=ÛˆBØ�H‰HŽJñ ãˆBØ�G‰G�BŽKñ à×Ñœ˜W›¤s¨3£xÖ0ùò >s   ™ Bc                ó„   aa€ R  oR oRVV3R llp\        ^4       F  pV! 4        \        P                  ! 4        K!  	  R# )c                 óš   € R  p\         P                   ! V4      pVP                  4        V P                  V4       VP                  4        R# )c                  ób   €  \         P                  ! 4       P                  P                  4        K0  ©T©r   r   r   r   r   r   r   ÚbodyÚPTestGreenlet.test_switching_many_threads.<locals>.creates_greenlet.<locals>.bodyŸ   s    € ØÜ×'Ò'Ó)×0Ñ0×7Ñ7Ö9r   N)r   r   r    Úwait)Ú	greenletsÚwait_to_die_untilrŠ   r/   s   &&  r   Úcreates_greenletÚBTestGreenlet.test_switching_many_threads.<locals>.creates_greenletž   s<   € ò:ô ×!Ò! $Ó'ˆAØ�H‰HŒJØ×Ñ˜QÔØ×"Ñ"Ö$r   c                 óü   € VP                  4        VP                  4       '       g:   \        V 4       F(  p VP                  '       g   VP	                  4        K(  K*  	  KO  R #   \
        P                   d     KH  i ; ir(   )rŒ   Úis_setr>   rf   r   r   Úerror)r�   Úwait_to_check_untilÚ
quit_afterr/   s   &&& r   Úswitches_from_other_threadÚLTestGreenlet.test_switching_many_threads.<locals>.switches_from_other_thread§   sf   € Ø×$Ñ$Ô&Ø ×'Ñ'×)Ò)Ü˜iž�AðØ ŸvŸv˜vØŸH™HžJñ  &ó )ñ *øô
 $Ÿ>™>ô ò ðús   ¶"A"Á"A;Á:A;c           	      ór  <€ . p\         P                  ! 4       p\         P                  ! 4       p\        V 4       Uu. uF  p\         P                  ! SVV3R 7      NK  	  pp\        V 4       Uu. uF  p\         P                  ! S	WV3R 7      NK  	  ppWV,            F  pVP	                  4        K  	  \        V4      V 8  d   \        P                  ! R4       K(  VP                  4        V F  pVP                  R4       K  	  VP                  4        V F  pVP                  R4       K  	  R# u upi u upi )©r{   Úargsg-Cëâ6?g      ð?N)
r|   ÚEventr?   r}   r~   re   ÚtimeÚsleepÚsetr   )
Úthread_countr�   Úgreenlets_all_createdÚall_threads_deadÚ_ÚcreatorsÚ	switchersÚtr�   r–   s
   &       €€r   Úrun_itÚ8TestGreenlet.test_switching_many_threads.<locals>.run_it³   s3  ø€ ØˆIÜ$-§O¢OÓ$5Ð!Ü(ŸšÓ0Ðô ˜Ô&ó	ñ 'ð ô × Ò Ð(8À	Ø@Uð@W÷ Xñ 'ð	 ð ô ˜Ô&óñ
 'ð ô × Ò Ð(BØ'0Ø'7ð'9÷:ñ 'ð ð ð ×*Ð*�Ø—‘–	ñ +ô �i“. <Ô/Ü—
’
˜6Ö"Ø!×%Ñ%Ô'ã�Ø—‘�s–ñ à× Ñ Ô"Û�Ø—‘�s–ó ùò5ùòs   »#D/Á-#D4N)é   )r?   ÚgcÚcollect)r@   r¦   r¢   r�   r–   s   &  @@r   Útest_switching_many_threadsÚ(TestGreenlet.test_switching_many_threads›   s6   ù€ ò	%ò
	÷ 	ð  	ôH �r–ˆAÙŒHÜ�JŠJŽLó r   c                ó  € . p\        \        4      p\        \        4      pVP                  V4       VP                  V4       W#n        V P	                  V. 4       V P                  \        VP                  4       V P	                  V\        .4       VP                  4       pV P	                  VR4       V P	                  V\        .4       VP                  ^4      pV P	                  V^4       V P	                  V\        .4       R# )é   Nr   )r.   r%   r   r   r=   rJ   r   )r@   r$   r0   Úg2Úvalues   &    r   Útest_exceptionÚTestGreenlet.test_exceptionÛ   sÊ   € ØˆÜœÓˆÜœÓˆØ
�	‰	�$ŒØ
�	‰	�$ŒØŒ	à×Ñ˜˜rÔ"ð 	×Ñœ) R§Y¡YÔ/Ø×Ñ˜¤	˜{Ô+à—	‘	“ˆØ×Ñ˜ Ô#Ø×Ñ˜¤	˜{Ô+à—	‘	˜"“ˆØ×Ñ˜ Ô#Ø×Ñ˜¤	˜{Ö+r   c                ó¸   € . p\        \        4      pVP                  V4       V P                  \        \
        V\        4       V P                  V\        .4       R # r(   )r.   r%   r   rJ   ÚKeyErrorr1   r=   )r@   r$   r0   s   &  r   Útest_send_exceptionÚ TestGreenlet.test_send_exception÷   sB   € ØˆÜœÓˆØ
�	‰	�$ŒØ×Ñœ(¤N°B¼ÔAØ×Ñ˜¤˜zÖ*r   c                ó¨  € . p\        \        4      p\        \        4      pVP                  V4       VP                  V4       V P                  V. 4       ?\        P
                  ! 4        V P                  V\        P                  .4       ?\        P
                  ! 4        V P                  V\        P                  \        P                  .4       R # r(   )r.   r%   r   r=   r©   rª   r   ÚGreenletExit)r@   r$   r0   r¯   s   &   r   Útest_deallocÚTestGreenlet.test_deallocþ   s“   € ØˆÜœÓˆÜœÓˆØ
�	‰	�$ŒØ
�	‰	�$ŒØ×Ñ˜˜rÔ"ØÜ
�
Š
ŒØ×Ñ˜¤× 5Ñ 5Ð6Ô7ØÜ
�
Š
ŒØ×Ñ˜¤× 5Ñ 5´x×7LÑ7LÐMÖNr   c                óH  a€ R  p\        V4      pVP                  4        . o\        P                  pV3R lpV\        n         ?V\        n        V P	                  \        S4      ^4       V P                  S^ ,          P                  \        4       R#   T\        n        i ; i)c                  ó¢   €  \         P                  ! 4       P                  P                  4        R #   \         P                   d	    \
        R hi ; ir(   )r   r   r   r   r¸   r   r   r   r   rI   ÚHTestGreenlet.test_dealloc_catches_GreenletExit_throws_other.<locals>.run  s?   € ð*Ü×#Ò#Ó%×,Ñ,×3Ñ3Ö5øÜ×(Ñ(ô *Ü TÐ)ð*ús	   ‚-1 ±Ac                 ó*   <€ SP                  V 4       R # r(   ©r    )Ú
unraisableÚunraisable_eventss   &€r   Ú_captureÚMTestGreenlet.test_dealloc_catches_GreenletExit_throws_other.<locals>._capture  s   ø€ Ø×$Ñ$ ZÖ0r   N)	r.   r   r!   Úunraisablehookr=   re   ÚassertIsInstanceÚ	exc_valuer   )r@   rI   r/   Úold_hookrÂ   rÁ   s   &    @r   Ú.test_dealloc_catches_GreenletExit_throws_otherÚ;TestGreenlet.test_dealloc_catches_GreenletExit_throws_other  s‰   ø€ ò	*ô ˜ÓˆØ	�‰Œ
àÐÜ×%Ñ%ˆõ	1à%ŒÔð	*Øà!)ŒCÔà×ÑœÐ.Ó/°Ô3Ø×ÑÐ/°Õ2×<Ñ<¼iÖHøð "*ŒCÕús   ÁB ÂB!z=Sometimes flaky (getting one GreenletExit in the second list)c                ó:  aaaaaa€ . o. o\         P                  ! 4       o\         P                  ! 4       o\         P                  ! 4       o\         P                  ! 4       oVVVVVV3R  lp\         P                  ! VR7      pVP                  4        SP	                  ^
4       V P                  S. 4       V P                  \        S4      ^4       SR \        '       g   \        P                  ! 4        V P                  S. 4       SP                  4        SP	                  ^4        V P                  S\        P                  .4       SP                  4        VP                  ^
4       SR SR R#   SP                  4        TP                  ^
4       SR SR i ; i)c                  óB  <€ \        \        4      p V P                  S4       SP                  V 4       ? \        P
                  ! 4        SP                  4        SP                  ^4       \        4        SP                  4        SP                  ^4       \        4        R# )é   N)r.   r%   r   r    r©   rª   rž   rŒ   )r0   Ú/bg_glet_created_running_and_no_longer_ref_in_bgÚbg_should_be_clearÚfg_ref_releasedÚok_to_exit_bg_threadr$   Úsomerefs    €€€€€€r   r;   Ú1TestGreenlet.test_dealloc_other_thread.<locals>.f4  sn   ø€ ÜœUÓ#ˆBØ�I‰I�dŒOØ�N‰N˜2ÔØÜ�JŠJŒLØ;×?Ñ?ÔAØ× Ñ  Ô#äŒMØ×"Ñ"Ô$Ø ×%Ñ% aÔ(ÜŽMr   rz   ºNNNN)r|   r›   r}   r~   rŒ   r=   re   r   r©   rª   rž   r   r¸   r   )	r@   r;   r¥   rÍ   rÎ   rÏ   rÐ   r$   rÑ   s	   &  @@@@@@r   Útest_dealloc_other_threadÚ&TestGreenlet.test_dealloc_other_thread$  sI  ý€ ð ˆØˆä:C¿/º/Ó:KÐ7Ü#Ÿ/š/Ó+ˆÜ&Ÿ_š_Ó.ÐÜ(ŸšÓ0Ð÷	ò 	ô ×Ò AÔ&ˆØ	�‰Œ	Ø7×<Ñ<¸RÔ@à×Ñ˜˜rÔ"Ø×Ñœ˜W› qÔ)Ø�AˆJß*Ó*ô �JŠJŒLð 	×Ñ˜˜rÔ"Ø×ÑÔØ×Ñ Ô"ð	Ø×Ñ˜T¤H×$9Ñ$9Ð#:Ô;à ×$Ñ$Ô&Ø�F‰F�2ŒJØ�Q�Ø˜’
øð !×$Ñ$Ô&Ø�F‰F�2ŒJØ�Q�Ø˜‘
ús   Ä'!E1 Å1)Fc                óB  a € V 3R  lp\        V4      pVP                  4       pS P                  W2P                  J 4       S P                  V4       VP                  4       pS P	                  V4       S P                  VR4       S P                  VP                  R4       R# )c                  óÈ   <€ \         P                  ! ^ 4      p SP                  V P                  R4       \        P
                  ! 4       P                  P                  V 4       R# )r   Númeaning of life)r!   Ú	_getframer=   Úf_backr   r   r   r   )r;   r@   s    €r   Úf1Ú#TestGreenlet.test_frame.<locals>.f1c  sE   ø€ Ü—’˜aÓ ˆAØ×Ñ˜QŸX™X tÔ,Ü×ÒÓ!×(Ñ(×/Ñ/°Ô2Ù$r   rØ   N)r.   r   Ú
assertTrueÚgr_frameÚassertFalser=   )r@   rÛ   r/   ÚframeÚfrom_gs   f    r   Ú
test_frameÚTestGreenlet.test_frameb  s{   ø€ õ	%ô
 ˜‹OˆØ—‘“
ˆØ�‰˜§¡Ð+Ô,Ø�‰˜Ôà—‘“ˆØ×Ñ˜ÔØ×Ñ˜Ð!2Ô3Ø×Ñ˜Ÿ™ TÖ*r   c                óð   € R  p\         P                  ! VRR7      p\         P                  ! VRR7      pVP                  4        VP                  4        VP                  ^
4       VP                  ^
4       R# )c                 óF   a € \        V 3R  l4      pVP                  4        R# )c                  ó0   <€ \         P                  ! S 4      # r(   )rœ   r�   ©Úxs   €r   Ú<lambda>Ú>TestGreenlet.test_thread_bug.<locals>.runner.<locals>.<lambda>t  s   ø€ ¤D§J¢J¨q¤Mr   Nr-   )rè   r/   s   f r   ÚrunnerÚ,TestGreenlet.test_thread_bug.<locals>.runners  s   ø€ ÜÔ1Ó2ˆAØ�H‰HŽJr   r™   N)gš™™™™™É?)g333333Ó?)r|   r}   r~   r   )r@   rë   Út1Út2s   &   r   Útest_thread_bugÚTestGreenlet.test_thread_bugr  sU   € ò	ô ×Ò V°&Ô9ˆÜ×Ò V°&Ô9ˆØ
�‰Œ
Ø
�‰Œ
Ø
�‰�ŒØ
�‰�Žr   c                óp   a € V 3R  lp\        V4      P                  ^^R7      pS P                  V^*4       R# )c                 óP   <€ SP                  V ^4       SP                  V^4       ^*# )é   )r=   )ro   rl   r@   s   &&€r   rI   Ú,TestGreenlet.test_switch_kwargs.<locals>.run~  s&   ø€ Ø×Ñ˜Q Ô"Ø×Ñ˜Q Ô"Ùr   )ro   rl   N©r.   r   r=   )r@   rI   rè   s   f  r   Útest_switch_kwargsÚTestGreenlet.test_switch_kwargs}  s4   ø€ õ	ô ˜Ó×#Ñ# a¨1Ð#Ó-ˆØ×Ñ˜˜BÖr   c                óð   € R  p\        V4      pV P                  R^/VP                  ^4      4       V P                  RR^/3VP                  4       4       V P                  RVP                  4       4       R# )c                 óÔ   € \         P                  ! 4       P                  P                  V R 7       \         P                  ! 4       P                  P                  ^^R 7       W ^,          3# )rç   r‰   rç   s   &r   rI   Ú6TestGreenlet.test_switch_kwargs_to_parent.<locals>.run†  sP   € Ü×ÒÓ!×(Ñ(×/Ñ/°!Ð/Ô4Ü×ÒÓ!×(Ñ(×/Ñ/°°QÐ/Ô7Ø˜1•f�9Ðr   rè   N)é   )rÌ   é	   )r.   r=   r   )r@   rI   r/   s   &  r   Útest_switch_kwargs_to_parentÚ)TestGreenlet.test_switch_kwargs_to_parent…  sd   € ò	ô ˜ÓˆØ×Ñ˜#˜q˜ 1§8¡8¨A£;Ô/Ø×Ñ˜$  a Ð)¨1¯8©8«:Ô6Ø×Ñ˜ §¡£Ö,r   c                óú  aaa€ / o\         P                  ! 4       o\         P                  ! 4       oVVV3R  lp\         P                  ! VR7      pVP                  4        SP	                  ^
4       V P                  \        P                  4      ;_uu_ 4        SR,          P                  4        RRR4       SP                  4        VP                  ^
4       SP                  4        R#   + '       g   i     LC; i)c                  óh   <€ \        R  4      SR&   S P                  4        SP                  ^
4       R# )c                  ó   € R # r(   r   r   r   r   ré   ÚITestGreenlet.test_switch_to_another_thread.<locals>.run.<locals>.<lambda>•  ó   € ©Dr   r/   N©r.   rž   rŒ   ©Úcreated_eventÚdataÚ
done_events   €€€r   rI   Ú7TestGreenlet.test_switch_to_another_thread.<locals>.run”  ó)   ø€ Ü#¡LÓ1ˆD�‰IØ×ÑÔØ�O‰O˜BÖr   rz   r/   N)r|   r›   r}   r~   rŒ   rJ   r   r“   r   rž   r   Úclear)r@   rI   Úthreadr  r  r  s   &  @@@r   Útest_switch_to_another_threadÚ*TestGreenlet.test_switch_to_another_thread�  sŸ   ú€ ØˆÜ!ŸšÓ)ˆÜ—_’_Ó&ˆ
÷	 ô ×!Ò!¨Ô-ˆØ�‰ŒØ×Ñ˜2ÔØ×ÑœxŸ~™~×.Õ.Ø��I×ÑÔ÷ /à�‰ÔØ�‰�BŒà�
‰
Ž÷ /×.ús   ÂC*Ã*C:	c                óV   a a€ VV 3R  lpV 3R lo\        V4      P                  4        R# )c                  óÒ   <€  \        R 4      h   \        P                  ! 4       p \        S4      P	                  4        SP                  T \        P                  ! 4       4        R# ; i)ÚfunN)Ú
ValueErrorr!   r"   r.   r   r=   )r"   rg   r@   s    €€r   r;   Ú&TestGreenlet.test_exc_state.<locals>.f£  sK   ø€ ð;Ü  Ó'Ð'øð;ÜŸ<š<›>�Ü˜A“×%Ñ%Ô'Ø× Ñ  ¬3¯<ª<«>×:ús
   ƒ ŽAA&c                  óR   <€ S P                  \        P                  ! 4       R4       R # )N)NNN)r=   r!   r"   rD   s   €r   rg   Ú&TestGreenlet.test_exc_state.<locals>.h«  s   ø€ Ø×ÑœSŸ\š\›^Ð-?Ö@r   Nr-   )r@   r;   rg   s   f @r   Útest_exc_stateÚTestGreenlet.test_exc_state¢  s    ù€ ö	;õ	Aô 	�A‹×ÑÖr   c                ó²  € R  pR pR p\        V4      pV P                  VP                  / 4       VP                  4        V P                  VP                  ^*4       V P                  VP                  R^*/4       VP                  Vn        V P                  VP                  R^*/4       V P                  \        W$4       V P                  \        W4^*4       R# )c                  ó:   € ^*\         P                  ! 4       n        R# )é*   N)r   r   Útestr   r   r   r;   Ú*TestGreenlet.test_instance_dict.<locals>.f±  s   € Ø)+ŒH×ÒÓ!Ö&r   c                 ó
   € V = R # r(   ©Ú__dict__)r/   s   &r   ÚdeldictÚ0TestGreenlet.test_instance_dict.<locals>.deldict³  s   € Ø’
r   c                 ó   € Wn         R # r(   r  )r/   r°   s   &&r   ÚsetdictÚ0TestGreenlet.test_instance_dict.<locals>.setdictµ  s   € ØŽJr   r  N)r.   r=   r  r   r  rJ   Ú	TypeError)r@   r;   r   r#  r/   s   &    r   Útest_instance_dictÚTestGreenlet.test_instance_dict°  s¨   € ò	,ò	ò	ä˜‹NˆØ×Ñ˜Ÿ™ RÔ(Ø	�‰Œ
Ø×Ñ˜Ÿ™ Ô$Ø×Ñ˜Ÿ™ f¨b \Ô2Ø—Z‘ZˆŒ
Ø×Ñ˜Ÿ™ f¨b \Ô2Ø×Ñœ) WÔ0Ø×Ñœ) W°Ö4r   c                ót   a€ . oV3R  lp\        V4      pVP                  4        V P                  SR.4       R# )c                  ód   <€ S P                  \        \        P                  ! 4       R 4      4       R# ©rI   N)r    Úhasattrr   r   )Úhas_runs   €r   ÚfuncÚ;TestGreenlet.test_running_greenlet_has_no_run.<locals>.funcÃ  s"   ø€ Ø�N‰NÜœ×+Ò+Ó-¨uÓ5ör   FNrõ   )r@   r-  r/   r,  s   &  @r   Ú test_running_greenlet_has_no_runÚ-TestGreenlet.test_running_greenlet_has_no_runÁ  s4   ø€ Øˆõ	ô
 ˜ÓˆØ	�‰Œ
Ø×Ñ˜ 5 'Ö*r   c                ó²   € ^ RI pV P                  \        VP                   \        4       4       V P                  \        VP                  \        4       4       R# ©r   N)ÚcopyrJ   r%  r.   Údeepcopy)r@   r3  s   & r   Útest_deepcopyÚTestGreenlet.test_deepcopyÌ  s5   € ÛØ×Ñœ) T§Y¡Y´³Ô>Ø×Ñœ) T§]¡]´K³MÖBr   c                óF  aaa€ \        R  4      o\        P                  ! 4       o. oVVV3R lp\        VSR7      pVP                  4        ?V P	                  S4       V P                  S^ ,          S4       V P                  S^,          P                  S4       SR RoRoR# )c                  ó   € R # r(   r   r   r   r   ré   Ú;TestGreenlet.test_parent_restored_on_kill.<locals>.<lambda>Ò  s   € ¡$r   c                  ó&  <€  SP                  4        R #   \        P                   dg    SP                  \        P                  ! 4       P
                  4       SP                  \        P                  ! 4       4       S P                  4         R # i ; ir(   )r   r   r¸   r    r   r   )ÚhubÚmainÚresults   €€€r   ÚworkerÚ9TestGreenlet.test_parent_restored_on_kill.<locals>.workerÕ  s_   ø€ ðà—‘–øÜ×(Ñ(ô à—‘œh×1Ò1Ó3×:Ñ:Ô;Ø—‘œh×1Ò1Ó3Ô4Ø—
‘
—ð	ús   ƒ •A7BÂBr,   rÓ   N)r.   r   r   r   rÝ   rX   r   )r@   r>  r/   r;  r<  r=  s   &  @@@r   Útest_parent_restored_on_killÚ)TestGreenlet.test_parent_restored_on_killÑ  sˆ   ú€ Ü™,Ó'ˆÜ×"Ò"Ó$ˆØˆ÷	ô ˜ sÔ+ˆØ	�‰Œ
àØ�‰˜ÔØ�‰�f˜Q•i Ô&Ø�‰�f˜Q•i×&Ñ&¨Ô,ð �1ˆIØˆØŠr   c                óÊ   € \        4       p\        R  VR7      pV P                  \        4      ;_uu_ 4        VP                  4        RRR4       R#   + '       g   i     R# ; i)c                  ó   € R # r(   r   r   r   r   ré   Ú9TestGreenlet.test_parent_return_failure.<locals>.<lambda>ð  ó   € ¡r   r,   N)r.   rJ   rK   r   )r@   r0   r¯   s   &  r   Útest_parent_return_failureÚ'TestGreenlet.test_parent_return_failureì  s>   € ä‹]ˆä™¨bÔ1ˆà×Ñœ~×.Õ.Ø�I‰IŒK÷ /×.×.Ò.ús   ¶AÁA"	c                óˆ   €  ! R  R\         4      pV! R 4      pV P                  \        VP                  \        4       4       R# )c                   ó&   a € ] tR tRt o R tRtV tR# )Ú>TestGreenlet.test_throw_exception_not_lost.<locals>.mygreenletiö  c                óJ   €  \         h    M; i\        P                  ! Y4      # r(   )Ú	Exceptionr.   Ú__getattribute__©r@   Únames   &&r   rM  ÚOTestGreenlet.test_throw_exception_not_lost.<locals>.mygreenlet.__getattribute__÷  s'   € ðÜ#�OøðÙúÜ"×3Ò3°DÓ?Ð?s   ‚ ˆr   N©r   r   r   r   rM  r   Ú__classdictcell__©Ú__classdict__s   @r   Ú
mygreenletrJ  ö  s   ø‡ € ÷@ð @r   rU  c                  ó   € R # r(   r   r   r   r   ré   Ú<TestGreenlet.test_throw_exception_not_lost.<locals>.<lambda>ý  ó   € ™tr   N)r.   rJ   r   rS   )r@   rU  r/   s   &  r   Útest_throw_exception_not_lostÚ*TestGreenlet.test_throw_exception_not_lostõ  s4   € ô	@œô 	@ñ ‘|Ó$ˆØ×Ñœ) Q§W¡W¬i«kÖ:r   c                ój  aaa€ . oR  oVVV3R lp\         P                  ! VR7      pVP                  4        VP                  ^
4       ?S'       d   V P	                  4        V P                  \        P                  4      ;_uu_ 4       pS^ ,          P                  \        4       RRR4       S'       g8   \        XP                  4      pT P                  VR8H  ;'       g    RV9   4       M%V P                  \        XP                  4      R4       \        S^ ,          P                  R4      '       dH   V P                  \         4      ;_uu_ 4        S^ ,          P                  P#                  4        RRR4       S'       gZ   \        S^ ,          P                  P$                  R4      '       d,   S^ ,          P                  P$                  P#                  4        M"V P'                  S^ ,          P                  4       ?RoSR RV n        R#   + '       g   i     ELq; i  + '       g   i     L¶; i)	c                  ó`   € \         P                  ! 4       P                  P                  4        R # r(   r‰   r   r   r   r>  ÚGTestGreenlet._do_test_throw_to_dead_thread_doesnt_crash.<locals>.worker  ó   € Ü×ÒÓ!×(Ñ(×/Ñ/Ö1r   c                  ó¾   <€ \        S4      p V P                  4        SP                  V 4       S'       d(   V P                  4        \        P                  ! 4        R # R # r(   )r.   r   r    r   r   )r/   r=  Úwait_for_cleanupr>  s    €€€r   ÚcreatorÚHTestGreenlet._do_test_throw_to_dead_thread_doesnt_crash.<locals>.creator  s?   ø€ Ü˜FÓ#ˆAØ�H‰HŒJØ�M‰M˜!Ôßà—‘”
Ü×#Ò#Ö%ñ  r   rz   NúBcannot switch to a different thread (which happens to have exited)zCannot switchr  rÓ   T)r|   r}   r~   r   Úwait_for_pending_cleanupsrJ   r   r“   rS   r   rM   rN   rÝ   r=   r+  rÞ   ÚRuntimeErrorr  Úf_localsr^   Úexpect_greenlet_leak)r@   r`  ra  r¥   r)   Úsr=  r>  s   &f    @@r   Ú*_do_test_throw_to_dead_thread_doesnt_crashÚ7TestGreenlet._do_test_throw_to_dead_thread_doesnt_crash   sœ  ú€ àˆò	2÷	&ô ×Ò GÔ,ˆØ	�‰Œ	Ø	�‰ˆrŒ
Ø÷ Ø×*Ñ*Ô,Ø×ÑœxŸ~™~×.Ô.°#Ø�1�I�O‰OœIÔ&÷ /÷  Ü�C—M‘MÓ"ˆAØ�O‰OØÐYÑY÷ (ð (Ø" aÑ'õð
 ×ÑÜ�C—M‘MÓ"ØTôô
 �6˜!•9×%Ñ% w×/Ò/à×"Ñ"¤<×0Õ0Ø�q•	×"Ñ"×(Ñ(Ô*÷ 1÷  ä�v˜a•y×)Ñ)×2Ñ2°G×<Ò<Ø�q•	×"Ñ"×+Ñ+×1Ñ1Ô3øà×Ñ˜f Q�i×0Ñ0Ô1àØˆØ�1ˆIð %)ˆÖ!÷C /×.Ð.ú÷" 1×0ús   Â	HÅ"H"ÈH	È"H2	:Nrû   Nz;does not leaks on Windows 3.10, but does on other platformsc                ó&   € V P                  4        R # r(   ©ri  rD   s   &r   Ú&test_throw_to_dead_thread_doesnt_crashÚ3TestGreenlet.test_throw_to_dead_thread_doesnt_crash:  s   € ð 	×7Ñ7Ö9r   c                ó(   € V P                  R 4       R# rw   rl  rD   s   &r   Ú+test_throw_to_dead_thread_doesnt_crash_waitÚ8TestGreenlet.test_throw_to_dead_thread_doesnt_crash_waitB  s   € Ø×7Ñ7¸Ö=r   c                ó‚   €  ! R  R\         4      pV! 4       pV P                  VP                  ^*4      ^+4       RV n        R# )c                   ó2   a € ] tR tRt o R tR tR tRtV tR# )Ú7TestGreenlet.test_recursive_startup.<locals>.convolutediG  c                ó@   € \         P                  ! V 4       ^ V n        R# r2  )r.   Ú__init__ÚcountrD   s   &r   rv  Ú@TestGreenlet.test_recursive_startup.<locals>.convoluted.__init__H  s   € Ü×$Ò$ TÔ*Ø�–
r   c                óŽ   € VR 8X  d*   V P                   ^ 8X  d   ^V n         V P                  ^+4       \        P                  ! W4      # r]   )rw  r   r.   rM  rN  s   &&r   rM  ÚHTestGreenlet.test_recursive_startup.<locals>.convoluted.__getattribute__K  s6   € Ø˜5”= T§Z¡Z°1¤_Ø!"�D”JØ—K‘K ”OÜ"×3Ò3°DÓ?Ð?r   c                ó>   €  V P                   P                  V4       K  rˆ   ©r   r   )r@   r°   s   &&r   rI   Ú;TestGreenlet.test_recursive_startup.<locals>.convoluted.runP  s   € ØØ—K‘K×&Ñ& uÖ-r   )rw  N)	r   r   r   r   rv  rM  rI   r   rR  rS  s   @r   Ú
convolutedrt  G  s   ø‡ € òò@÷
.ð .r   r~  TN)r.   r=   r   rg  )r@   r~  r/   s   &  r   Útest_recursive_startupÚ#TestGreenlet.test_recursive_startupE  s9   € ô	.œô 	.ñ ‹LˆØ×Ñ˜Ÿ™ "› rÔ*ð
 %)ˆÖ!r   c                ól  aaa€ \         P                  ! 4       oSP                  4        \         P                  ! 4       oSP                  4         ! VV3R  lR\        4      pR pVVV3R lp\        P
                  ! 4       p\        V4      .oV! 4       S^ ,          n        S^ ,          P                  4        \         P                  ! VR7      pVP                  4        SP                  4        SP                  4        V P                  \        P
                  ! 4       V4       VP                  ^
4       R# )c                   ó0   <a € ] tR tRt o VV3R ltRtV tR# )Ú;TestGreenlet.test_threaded_updatecurrent.<locals>.finalizedib  c                óH   <€ SP                  4        SP                  4        R # r(   ©ÚreleaseÚacquire)r@   Úlock1Úlock2s   &€€r   Ú__del__ÚCTestGreenlet.test_threaded_updatecurrent.<locals>.finalized.__del__c  s   ø€ ð —‘”Ø—‘–r   r   N©r   r   r   r   rŠ  r   rR  )rT  rˆ  r‰  s   @€€r   Ú	finalizedrƒ  b  s   ù‡ € ÷ ô  r   r�  c                  ó`   € \         P                  ! 4       P                  P                  4        R # r(   r‰   r   r   r   ÚdeallocatorÚ=TestGreenlet.test_threaded_updatecurrent.<locals>.deallocatorj  r^  r   c                  óâ   <€ SP                  4        \        P                  ! 4        S ^  SP                  4        SP                  4        \        P                  ! 4        SP                  4        R# r2  ©r‡  r   r   r†  )r/   rˆ  r‰  s   €€€r   ÚfthreadÚ9TestGreenlet.test_threaded_updatecurrent.<locals>.fthreadl  sF   ø€ Ø�M‰MŒOÜ×ÒÔ!Ø�!�Ø�M‰MŒOØ�M‰MŒOÜ×ÒÔ!Ø�M‰MŽOr   rz   N)r|   ÚLockr‡  Úobjectr   r   r.   Úbombr   r}   r~   r†  r=   r   )	r@   r�  r�  r“  r<  r¥   r/   rˆ  r‰  s	   &     @@@r   Útest_threaded_updatecurrentÚ(TestGreenlet.test_threaded_updatecurrent[  sÐ   ú€ ä—’Ó ˆØ�‰Œä—’Ó ˆØ�‰Œ÷	 ð 	 œô 	 ò	2÷	ô ×"Ò"Ó$ˆÜ˜Ó%Ð&ˆÙ“Kˆˆ!�Œ	Ø	ˆ!��‰ŒÜ×Ò GÔ,ˆØ	�‰Œ	à�‰ŒØ�‰Œð 	×Ñœ×,Ò,Ó.°Ô5à	�‰ˆrŽ
r   c                óø   aaa€ . oVVV3R  loR o\        S4      .oS^ ,          P                  4        \        SS^ ,          4      oSP                  4       pV P                  S4       V P                  V^*4       R# )c                  ó¨  <€ \         P                  ! 4       P                  P                  4       p S^  \         P                  ! 4       P                  Sn         \         P                  ! 4       P                  P                  V 4       SP	                  \         P                  ! 4       4       R#   SP	                  \         P                  ! 4       4       i ; ir2  )r   r   r   r   r    )r°   Ú	initiatorr$   r>  s    €€€r   r>  Ú>TestGreenlet.test_dealloc_switch_args_not_lost.<locals>.workerŒ  s‹   ø€ ä×'Ò'Ó)×0Ñ0×7Ñ7Ó9ˆEà�q�	Ü'×2Ò2Ó4×;Ñ;ˆIÔð3Ü×#Ò#Ó%×,Ñ,×3Ñ3°EÔ:à—‘œH×/Ò/Ó1Ö2ø�—‘œH×/Ò/Ó1Õ2ús   Á.B+ Â+&Cc                  ó   € ^*# ©r  r   r   r   r   rœ  ÚATestGreenlet.test_dealloc_switch_args_not_lost.<locals>.initiator™  ó   € Ùr   N)r.   r   rÝ   r=   )r@   r°   rœ  r$   r>  s   & @@@r   Ú!test_dealloc_switch_args_not_lostÚ.TestGreenlet.test_dealloc_switch_args_not_lostŠ  sk   ú€ Øˆ÷	3ò	ô ˜fÓ%Ð&ˆàˆq�	×ÑÔÜ 	¨6°!­9Ó5ˆ	Ø× Ñ Ó"ˆØ�‰˜ÔØ×Ñ˜ Ö#r   c                ó¼   aaa€ R  o ! R R\         4      pV! 4       o\        ^*R7      oVVV3R lp\        V4      pV P                  VP	                  4       S4       R# )c                 ó   € V ! V/ VB  R # r(   r   )r-  ro   Úks   &&&r   Ú_applyÚ0TestGreenlet.test_tuple_subclass.<locals>._apply²  s   € Ù�!ˆM�qŒMr   c                   ó&   a € ] tR tRt o R tRtV tR# )Ú1TestGreenlet.test_tuple_subclass.<locals>.mytupleiµ  c                ór   € \         P                  ! 4       P                  4        \        P	                  V 4      # r(   )r   r   r   ÚtupleÚ__len__rD   s   &r   r­  Ú9TestGreenlet.test_tuple_subclass.<locals>.mytuple.__len__¶  s&   € Ü×#Ò#Ó%×,Ñ,Ô.Ü—}‘} TÓ*Ð*r   r   N)r   r   r   r   r­  r   rR  rS  s   @r   Úmytuplerª  µ  s   ø‡ € ÷+ð +r   r¯  )ro   c                  ój   <€ S ! \         P                  ! 4       P                  P                  SS4       R # r(   r‰   )r§  rš   Úkwargss   €€€r   ÚswitchapplyÚ5TestGreenlet.test_tuple_subclass.<locals>.switchapply»  s$   ø€ Ù”8×&Ò&Ó(×/Ñ/×6Ñ6¸¸fÖEr   N)r¬  Údictr.   r=   r   )r@   r¯  r²  r/   r§  rš   r±  s   &   @@@r   Útest_tuple_subclassÚ TestGreenlet.test_tuple_subclass¤  sL   ú€ ò	ô	+”eô 	+ñ ‹yˆÜ˜”ˆ÷	Fä˜Ó$ˆØ×Ñ˜Ÿ™› VÖ,r   c                ó¨   € \        R \        3R\        R 4      /4      p ! R RV4      p ! R RV4      pV! 4        V P                  \        V4       R# )ÚAbstractSubclassrI   c                 ó   € R # r(   r   rD   s   &r   ré   Ú7TestGreenlet.test_abstract_subclasses.<locals>.<lambda>Ä  s   € ±r   c                   ó   € ] tR tRtRtR# )Ú:TestGreenlet.test_abstract_subclasses.<locals>.BadSubclassiÆ  r   Nr   r   r   r   ÚBadSubclassr¼  Æ  ó   † Ûr   r½  c                   ó&   a € ] tR tRt o R tRtV tR# )Ú;TestGreenlet.test_abstract_subclasses.<locals>.GoodSubclassiÉ  c                ó   € R # r(   r   rD   s   &r   rI   Ú?TestGreenlet.test_abstract_subclasses.<locals>.GoodSubclass.runÊ  s   € Ùr   r   N)r   r   r   r   rI   r   rR  rS  s   @r   ÚGoodSubclassrÀ  É  s   ø‡ € ÷ð r   rÃ  N)r   r.   r   rJ   r%  )r@   r¸  r½  rÃ  s   &   r   Útest_abstract_subclassesÚ%TestGreenlet.test_abstract_subclassesÀ  sT   € Ü"ØÜˆNØ”NÑ#4Ó5Ð6ó8Ðô
	Ð*ô 	ô	Ð+ô 	ñ 	ŒØ×Ñœ) [Ö1r   c                óà   a a€ \         P                  ! 4       '       g   R # \         P                  ! 4       ^ ,          oS^28  d   R # VV 3R lp\        ^4       F  pV! 4       '       g   K   R # 	  R # )Nc                  óV  <a	a
aa€ \         P                  ! 4       o
S
P                  4        \         P                  ! 4       oSP                  4        R .oV
V3R lp \         P                  ! V R7      pVP	                  4         ! V
VV3R lR\
        4      o	 ! V	3R lR\
        4      p. p\        S^,          4      p\        P                  ! 4       pV! 4       pV FT  pRpS^ ,          '       d   VP                  ^
4        R # \        4       pS^ ,          '       d    MLVP                  V4       KV  	  \        P                  ! 4        S^ ,          '       d   VP                  ^
4       R # SP                  VP                  V4       V F  pSP                  VP                  V4       K!  	  R# )	Fc                  ór   <€ S P                  4        \        P                  ! 4        SP                  4        R # r(   r’  )rˆ  r‰  s   €€r   Úanother_threadÚWTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.another_threadÜ  s!   ø€ Ø—‘”Ü×#Ò#Ô%Ø—‘–r   rz   c                   ó2   <a € ] tR tRt o VVV3R ltRtV tR# )ÚTTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.gc_callbackiâ  c                óR   <€ SP                  4        SP                  4        R S^ &   R# rw   r…  )r@   rˆ  r‰  Úrecycleds   &€€€r   rŠ  Ú\TestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.gc_callback.__del__ã  s   ø€ Ø—M‘M”OØ—M‘M”OØ"&�H˜Q“Kr   r   NrŒ  )rT  rˆ  r‰  rÎ  s   @€€€r   Úgc_callbackrÌ  â  s   ù‡ € ÷'õ 'r   rÐ  c                   ó.   <a € ] tR tRt o V3R ltRtV tR# )ÚPTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.garbageiç  c                ó,   <€ W n         S! 4       V n        R # r(   )ÚcycleÚcallback)r@   rÐ  s   &€r   rv  ÚYTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.garbage.__init__è  s   ø€ Ø!%”JÙ$/£M�D–Mr   )rÕ  rÔ  N)r   r   r   r   rv  r   rR  )rT  rÐ  s   @€r   ÚgarbagerÒ  ç  s   ù‡ € ÷2ó 2r   r×  NT)r|   r•  r‡  r}   r~   r–  r?   r   r   r   r.   r    r©   rª   r=   r   )rÉ  r¥   r×  Úlrè   Úcurrentr/   r¢   ÚlastrÐ  rˆ  r‰  rÎ  ÚNr@   s            @@@@€€r   ÚattemptÚ?TestGreenlet.test_implicit_parent_with_threads.<locals>.attemptÖ  s5  ü€ Ü—N’NÓ$ˆEØ�M‰MŒOÜ—N’NÓ$ˆEØ�M‰MŒOØ�wˆHö ô × Ò ¨Ô7ˆAØ�G‰GŒI÷'ñ 'œfô '÷
2œ&ô 2ð ˆAÜ�a˜•c“
ˆAÜ×)Ò)Ó+ˆGÙ“	ˆAÛ�Ø�Ø˜A—;”;à—F‘F˜2”JÚ Ü"“}�Ø˜A—;”;ÙØ—‘˜–ñ ô —
’
”Ø˜A—;”;Ø—F‘F˜2”JÙØ×Ñ˜TŸ[™[¨'Ô2Û�Ø× Ñ  §¡¨7Ö3ñ ár   )r©   Ú	isenabledÚget_thresholdr?   )r@   rÜ  r¢   rÛ  s   f  @r   Ú!test_implicit_parent_with_threadsÚ.TestGreenlet.test_implicit_parent_with_threadsÐ  sN   ù€ Ü�|Š|�~Š~ÙÜ×ÒÓ˜qÕ!ˆØˆrŒ6Ùö,	ôZ �q–ˆAÙ�yŒyÚó r   c                ó”  a aa€ ^ RI Ho ^ RI Ho  ! R R\        4      p\        P
                  ! V4      p. S n        VVV 3R lp\        ^
4       F  pV! V4      P                  4        K  	  S =\        '       d)   S P                  \        P
                  ! V4      V4       R# S P                  \        P
                  ! V4      V4       R# )r   ©r   )r¸   c                   ó   € ] tR tRtRtR# )ÚTTestGreenlet.test_issue_245_reference_counting_subclass_no_threads.<locals>.Greenleti  r   Nr   r   r   r   ÚGreenletrå    r¾  r   ræ  c                  ó¤   <€  S! 4       P                   P                  4        R #   S  d%    SP                  P                  S! 4       4        R # i ; ir(   )r   r   Úgletsr    )r¸   r   r@   s   €€€r   Úgreenlet_mainÚYTestGreenlet.test_issue_245_reference_counting_subclass_no_threads.<locals>.greenlet_main  s?   ø€ ð0Ù“×#Ñ#×*Ñ*Ö,øØô 0Ø—
‘
×!Ñ!¡*£,×/ð0ús   ƒ$ ¤'AÁAN)r   r   r¸   r.   r!   rr   rè  r?   r   r   ÚassertGreaterEqualr=   )r@   ræ  Úinitial_refsré  r¢   r¸   r   s   f    @@r   Ú5test_issue_245_reference_counting_subclass_no_threadsÚBTestGreenlet.test_issue_245_reference_counting_subclass_no_threads  s—   ú€ õ 	(Ý)ô	”{ô 	ô —’ xÓ0ˆð ˆŒ
÷	0ô �r–ˆAÙ�]Ó#×*Ñ*Ö,ñ ð ˆJß&Ó&ð ×#Ñ#¤C§O¢O°HÓ$=¸|ÖLà×ÑœSŸ_š_¨XÓ6¸ÖEr   z;The manylinux images appear to hang on this test on 3.13rc2c                ó0  aaaaa€ ^ RI Hp ^ RI Hp ^ RIHo  ! R R\
        4      o. oV! 4       oV3R loVVVVV3R lp\        P                  ! S4      p. pV^-,           p\        '       d   ^2p\        V4       F5  pV! 4       pV! W83R7      p	VP                  V4       V	P                  4        K7  	  V F  p
V
P                  ^
4       K  	  SR	 SP                  4        V P                  4        V P                  \        P                  ! S4      V4       R
# )r   )r}   )r›   rã  c                   ó   € ] tR tRtRtR# )ÚSTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.MyGreenleti?  r   Nr   r   r   r   Ú
MyGreenletrñ  ?  r¾  r   rò  c                  óF   <€ S ! 4       P                   P                  4        R # r(   r|  rã  s   €r   ré  ÚVTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.greenlet_mainE  s   ø€ Ù‹L×Ñ×&Ñ&Ö(r   c                 ó¬   <€ S! S4      pSP                  V4       VP                  4        ?V P                  4        SP                  ^
4       S! 4        R# )é
   N)r    r   rž   rŒ   )Úgreenlet_running_eventÚminerò  r   rè  ré  Úref_cleareds   & €€€€€r   Úthread_mainÚTTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.thread_mainH  sH   ø€ Ù˜mÓ,ˆDØ�L‰L˜Ôà�K‰KŒMàà"×&Ñ&Ô(ð ×Ñ˜RÔ ñ ŽLr   r™   rÓ   N)r|   r}   r›   r   r   r.   r!   rr   r   r?   r    r~   rŒ   rž   rd  r=   )r@   r}   r›   rú  rì  Úthread_ready_eventsrŸ   r¢   Úeventr  r  rò  r   rè  ré  rù  s   &          @@@@@r   Ú2test_issue_245_reference_counting_subclass_threadsÚ?TestGreenlet.test_issue_245_reference_counting_subclass_threads1  sï   ü€ õ 	%Ý#å'ô	œô 	ð ˆÙ“gˆõ	)÷	ñ 	ô8 —’ zÓ2ˆØ ÐØ# bÕ(ˆß&Ó&ð ˆLÜ�|Ö$ˆAÙ“GˆEÙ ;°XÔ>ˆFØ×&Ñ& uÔ-Ø�L‰LŽNñ	 %ó .ˆJØ�O‰O˜BÖñ .ð �!ˆHØ�‰Ôð 	×&Ñ&Ô(Ø×ÑœŸš¨Ó4°lÖCr   c                óÒ   € R  p\        V4      pR p\        W24      pV P                  \        4      ;_uu_ 4        VP                  4        RRR4       R#   + '       g   i     R# ; i)c                  ó   € ^# )é   r   r   r   r   Úno_argsÚ\TestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error.<locals>.no_args  r¡  r   c                  ó   € ^*# rŸ  r   r   r   r   ÚleafÚYTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error.<locals>.leaf„  r¡  r   N)r.   rJ   r%  r   )r@   r  Úparent_never_startedr  Úchilds   &    r   Ú>test_falling_off_end_switches_to_unstarted_parent_raises_errorÚKTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error~  sP   € ò	ô  +¨7Ó3Ðò	ô ˜DÓ7ˆð ×Ñœy×)Õ)Ø�L‰LŒN÷ *×)×)Ò)ús   ºAÁA&	c                ó‚   € R  p\        V4      pR p\        W24      pVP                  4       pV P                  VR4       R# )c                 ó
   € V ^3# ©é   r   rç   s   &r   Úone_argÚUTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works.<locals>.one_argŽ  s   € Ø�r�7ˆNr   c                  ó   € ^*# rŸ  r   r   r   r   r  ÚRTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works.<locals>.leaf“  r¡  r   N)r  r  rõ   )r@   r  r  r  r	  r=  s   &     r   Ú7test_falling_off_end_switches_to_unstarted_parent_worksÚDTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works�  s@   € ò	ô  +¨7Ó3Ðò	ô ˜DÓ7ˆà—‘“ˆØ×Ñ˜ Ö*r   c                óÈ  a€  ! R  R\         4      pV! 4       p. o\        V3R lV4      pV P                  \        4      ;_uu_ 4        VP                  4        RRR4       V P	                  S^*.4       V P                  \        4      ;_uu_ 4        VP                  4        RRR4       V P	                  S^*.4       R#   + '       g   i     Ln; i  + '       g   i     L8; i)c                   ó&   a € ] tR tRt o R tRtV tR# )ÚXTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.Parentiœ  c                ó    € VR 8X  d   \         hR# r*  )r   rN  s   &&r   rM  ÚiTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.Parent.__getattribute__�  s   € Ø˜5”=Ü#�Oñ !r   r   NrQ  rS  s   @r   ÚParentr  œ  s   ø‡ € ÷$ð $r   r  c                  ó&   <€ S P                  ^*4      # rŸ  r¿   r#   s   €r   ré   ÚZTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.<lambda>¤  ó   ø€  D§K¡K°¤Or   N)r.   rJ   r   r   r=   )r@   r  r  r	  r$   s   &   @r   Ú;test_switch_to_dead_greenlet_with_unstarted_perverse_parentÚHTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent›  s¤   ø€ ô	$”[ô 	$ñ  &›xÐØˆÜÔ3Ð5IÓJˆð ×Ñœy×)Õ)Ø�L‰LŒN÷ *ð 	×Ñ˜ ˜tÔ$à×Ñœy×)Õ)Ø�L‰LŒN÷ *à×Ñ˜ ˜tÖ$÷ *×)ú÷
 *×)ús   ÁB>ÂCÂ>C	ÃC!	c                ó  a€ . o\        V3R  l4      p\        V3R l4      pVP                  4        V P                  S^*.4       Wn        VP                  4       pV P	                  V4       V P                  S^*^.4       R# )c                  ó&   <€ S P                  ^4      # r  r¿   r#   s   €r   ré   ÚDTestGreenlet.test_switch_to_dead_greenlet_reparent.<locals>.<lambda>²  s   ø€ °4·;±;¸r´?r   c                  ó&   <€ S P                  ^*4      # rŸ  r¿   r#   s   €r   ré   r#  ³  r  r   N)r.   r   r=   r   r^   )r@   r  r	  r=  r$   s   &   @r   Ú%test_switch_to_dead_greenlet_reparentÚ2TestGreenlet.test_switch_to_dead_greenlet_reparent°  sl   ø€ ØˆÜ*Ô+BÓCÐÜÔ3Ó4ˆà�‰ŒØ×Ñ˜ ˜tÔ$à+Œà—‘“ˆØ×Ñ˜&Ô!Ø×Ñ˜  B˜xÖ(r   c                ól  aa€ \         P                  ! 4       oV3R  lpV3R lo\        V4      pVP                  4        \        R 4      pVP                  4        V P	                  VP
                  4       V P                  VP
                  P                  P                  R4       V P	                  VP
                  P                  4       V P                  VP
                  P                  P                  P                  R4       V P                  VP
                  P                  P                  4       R# )c                  ó   <€ S ! 4        R # r(   r   ©Úinners   €r   ÚouterÚHTestGreenlet.test_can_access_f_back_of_suspended_greenlet.<locals>.outerÄ  s   ø€ ÙŽGr   c                  óR   <€ S P                  \        P                  ! ^ 4      4       R# r2  )r   r!   rÙ   ©r<  s   €r   r*  ÚHTestGreenlet.test_can_access_f_back_of_suspended_greenlet.<locals>.innerÇ  s   ø€ Ø�K‰KœŸš aÓ(Ö)r   c                  ó   € R # r(   r   r   r   r   ré   ÚKTestGreenlet.test_can_access_f_back_of_suspended_greenlet.<locals>.<lambda>Ð  ó   € ©r   r*  r+  N)r   r   r.   r   rW   rÞ   r=   Úf_codeÚco_namerÚ   r^   )r@   r+  r;  Ú	unrelatedr*  r<  s   &   @@r   Ú,test_can_access_f_back_of_suspended_greenletÚ9TestGreenlet.test_can_access_f_back_of_suspended_greenlet¾  sÚ   ù€ ô ×"Ò"Ó$ˆõ	õ	*ô ˜%Ó ˆà�
‰
Œô  ¡Ó-ˆ	Ø×ÑÔð 	×Ñ˜SŸ\™\Ô*Ø×Ñ˜Ÿ™×,Ñ,×4Ñ4°gÔ>Ø×Ñ˜SŸ\™\×0Ñ0Ô1Ø×Ñ˜Ÿ™×,Ñ,×3Ñ3×;Ñ;¸WÔEà×Ñ˜#Ÿ,™,×-Ñ-×4Ñ4Ö5r   c                óÄ  aaa€ ^ RI Ho ^RIHo VVV3R lo\	        S4      pVP                  ^4       VP                  p\        ^4       F2  pV P                  VP                  R,          V4       VP                  pK4  	  V P                  VP                  R,          ^4       V P                  VP                  4       V P                  VP                  ^
4      R4       R# )r   )Úpartial)Ú_test_extension_cppc                 ó¸   <€ V ^ 8”  d'   V SP                  S! SV ^,
          4      4      ,          # \        P                  ! 4       P                  P	                  4       # r   )Ú	test_callr   r   r   r   )Úvr:  r9  Úrecurses   &€€€r   r>  Ú@TestGreenlet.test_get_stack_with_nested_c_calls.<locals>.recurseß  sJ   ø€ Ø�1ŒuØÐ.×8Ñ8¹ÀÈ!ÈaÍ%Ó9PÓQÕQÐQÜ×&Ò&Ó(×/Ñ/×6Ñ6Ó8Ð8r   r=  i°  N)Ú	functoolsr9  Ú r:  r.   r   rÞ   r?   r=   rf  rÚ   r^   )r@   Úgrrà   r€   r:  r9  r>  s   &   @@@r   Ú"test_get_stack_with_nested_c_callsÚ/TestGreenlet.test_get_stack_with_nested_c_callsÛ  s£   ú€ Ý%Ý)÷	9ô
 ˜Ó!ˆØ
�	‰	�!ŒØ—‘ˆÜ�q–ˆAØ×Ñ˜UŸ^™^¨CÕ0°!Ô4Ø—L‘LŠEñ ð 	×Ñ˜Ÿ™¨Õ,¨aÔ0Ø×Ñ˜%Ÿ,™,Ô'Ø×Ñ˜Ÿ™ 2›¨Ö-r   c                ó<  aa€ \         P                  ! 4       oV3R  lpV3R lo\        V4      pVP                  4       p\        R 4      pVP                  4        V P	                  VP
                  P                  R4       V P                  VP                  4       R# )c                  ó@   <€ S ! \         P                  ! ^ 4      4       R# r2  )r!   rÙ   r)  s   €r   r+  Ú6TestGreenlet.test_frames_always_exposed.<locals>.outerô  s   ø€ Ù”#—-’- Ó"Ö#r   c                 ó*   <€ SP                  V 4       R # r(   ©r   )rà   r<  s   &€r   r*  Ú6TestGreenlet.test_frames_always_exposed.<locals>.inner÷  s   ø€ Ø�K‰K˜Ör   c                  ó   € R # r(   r   r   r   r   ré   Ú9TestGreenlet.test_frames_always_exposed.<locals>.<lambda>ÿ  r2  r   r+  N)	r   r   r.   r   r=   r3  r4  r^   rÚ   )r@   r+  rB  rà   r5  r*  r<  s   &    @@r   Útest_frames_always_exposedÚ'TestGreenlet.test_frames_always_exposedî  sx   ù€ ô ×"Ò"Ó$ˆõ	$õ	ô ˜ÓˆØ—	‘	“ˆô  ¡Ó-ˆ	Ø×ÑÔà×Ñ˜Ÿ™×-Ñ-¨wÔ7à×Ñ˜%Ÿ,™,Ö'r   c                ó¸   aaaa€ V3R  loV3R loVV3R lpV3R lp\         P                   ! V4      o\         P                   ! V4      oSP                  4        R# )c                 ó(   <€ SP                  4        V # r(   rI  )rè   r¯   s   &€r   Úk1ÚITestGreenlet.test_switching_holding_critical_section_no_crash.<locals>.k1  ó   ø€ Ø�I‰IŒKØˆHr   c                 ó(   <€ SP                  4        V # r(   rI  )rè   r0   s   &€r   Úk2ÚITestGreenlet.test_switching_holding_critical_section_no_crash.<locals>.k2  rS  r   c                  óD   <€ \        ^ .SR7       S P                  4        R# )r   ©ÚkeyN)Úsortedr   )r¯   rQ  s   €€r   Úg1_bodyÚNTestGreenlet.test_switching_holding_critical_section_no_crash.<locals>.g1_body  s   ø€ Ü�A�3˜BÕØ�I‰IŽKr   c                  ó²   <€ \        ^ .SR7       \        \        RRR7      ;_uu_ 4       p V P                  4        RRR4       R#   + '       g   i     R# ; i)r   rX  Úrtzutf-8)ÚencodingN)rZ  ÚopenÚ__file__Úread)r;   rU  s    €r   Úg2_bodyÚNTestGreenlet.test_switching_holding_critical_section_no_crash.<locals>.g2_body"  s:   ø€ Ü�A�3˜BÕô ”h ¨w×7Õ7¸1Ø—‘”÷ 8×7×7Ò7ús   ªAÁA	N)r   r   )r@   r[  rc  r0   r¯   rQ  rU  s   &  @@@@r   Ú0test_switching_holding_critical_section_no_crashÚ=TestGreenlet.test_switching_holding_critical_section_no_crash  sB   û€ õ	õ
	ö
	õ
	ô ×Ò˜wÓ'ˆÜ×Ò˜wÓ'ˆØ
�	‰	Žr   )rg  rè  N)F)rÌ   rö  )?r   r   r   r   rA   rE   rP   rT   rZ   r_   rh   rs   rƒ   r   r«   r±   rµ   r¹   rÈ   ÚunittestÚskipIfr   r   rÔ   râ   rï   rö   rý   r  r  r&  r/  r5  r@  rF  rY  r   ri  r   r
   r!   Úversion_inform  rp  r   r  r˜  r¢  rµ  rÄ  rà  rí  rþ  r
  r  r  r%  r6  rC  rM  re  r   rR  rS  s   @r   r3   r3   8   sµ  ø‡ € ò.òò1ò1ò7ò
!ò
'ò(Dò,1ð ñ=ó ð=ò~,ò8+òOòIð0 ‡_‚_Ø×&Ð&Ð&ØGóñ5óð5òn+ò 	ò ò-òò& ò5ò"	+òCò
ò6ò	;ð &ó7)ó &ð7)ðr &ÙØ×/Ð/�× Ñ  Õ$¨Ñ/ØEóñ:ó	ó &ð
:ò>ð ñ)ó ð)ò*-ò^$ò4-ò82ò 5òn(FðT ‡_‚_Ø×&Ð&Ð&ØEóñDDóðDDòLò+ò%ò*)ò6ò:.ò&(÷0&ð &r   r3   c                   ó\   a € ] tR tR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# )ÚTestGreenletSetParentErrorsi/  c                ó:  aaa€ / o\         P                  ! 4       o\         P                  ! 4       oVVV3R  lpR p\         P                  ! VR7      pVP                  4        SP	                  ^
4       \        V4      pVP                  4        V P                  \        4      ;_uu_ 4       pSR,          Vn	        RRR4       SP                  4        VP                  ^
4       V P                  \        XP                  4      R4       R#   + '       g   i     LX; i)c                  óh   <€ \        R  4      SR&   S P                  4        SP                  ^
4       R# )c                  ó   € R # r(   r   r   r   r   ré   ÚQTestGreenletSetParentErrors.test_threaded_reparent.<locals>.run.<locals>.<lambda>6  r  r   r/   Nr  r  s   €€€r   rI   Ú?TestGreenletSetParentErrors.test_threaded_reparent.<locals>.run5  r
  r   c                  ó`   € \         P                  ! 4       P                  P                  4        R # r(   r‰   r   r   r   ÚblankÚATestGreenletSetParentErrors.test_threaded_reparent.<locals>.blank:  r^  r   rz   r/   Nz&parent cannot be on a different thread)r|   r›   r}   r~   rŒ   r.   r   rJ   r  r   rž   r   r=   rM   rN   )	r@   rI   rr  r  r/   r)   r  r  r  s	   &     @@@r   Útest_threaded_reparentÚ2TestGreenletSetParentErrors.test_threaded_reparent0  sÁ   ú€ ØˆÜ!ŸšÓ)ˆÜ—_’_Ó&ˆ
÷	 ò
	2ô ×!Ò!¨Ô-ˆØ�‰ŒØ×Ñ˜2ÔÜ˜ÓˆØ	�‰Œ
Ø×Ñœz×*Ô*¨cØ˜C•yˆAŒH÷ +à�‰ÔØ�‰�BŒà×Ñœ˜SŸ]™]Ó+Ð-UÖV÷ +×*ús   Â+D
Ä
D	c                óú  a€ . oV3R  lp\         P                  ! VR7      pVP                  4        VP                  ^
4       V P	                  V P
                  ^,           R7        ! V3R lR\        4      pV! R 4      pV P                  \        P                  4      ;_uu_ 4       pVP                  4        RRR4       V P                  \        XP                  4      R4       SR R#   + '       g   i     L:; i)	c                  ób   <€ \        R  4      p SP                  V 4       V P                  4        R# )c                  ó   € R # r(   r   r   r   r   ré   ÚYTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.worker.<locals>.<lambda>L  ó   € ¡Dr   N)r.   r    r   )r/   Úanothers    €r   r>  ÚGTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.workerK  s"   ø€ Ü™LÓ)ˆAØ�N‰N˜1ÔØ�H‰HŽJr   rz   )Úinitial_main_greenletsc                   ó.   <a € ] tR tRt o V3R ltRtV tR# )ÚKTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.convolutedif  c                óZ   <€ VR 8X  d   S^ ,          V n         \        P                  ! W4      # r]   ©r   r.   rM  ©r@   rO  r{  s   &&€r   rM  Ú\TestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.convoluted.__getattribute__g  ó&   ø€ Ø˜5”=Ø")¨!¥*�D”KÜ"×3Ò3°DÓ?Ð?r   r,   NrQ  ©rT  r{  s   @€r   r~  r  f  ó   ù‡ € ÷@ó @r   r~  c                  ó   € R # r(   r   r   r   r   ré   ÚITestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.<lambda>k  rX  r   Nrc  rÓ   )r|   r}   r~   r   rd  Úmain_greenlets_before_testr.   rJ   r   r“   r   r=   rM   rN   )r@   r>  r¥   r~  r/   r)   r{  s   &     @r   Útest_unexpected_reparentingÚ7TestGreenletSetParentErrors.test_unexpected_reparentingI  s¾   ø€ Øˆõ	ô ×Ò FÔ+ˆØ	�‰Œ	Ø	�‰ˆrŒ
ð& 	×&Ñ&¸d×>]Ñ>]Ð`aÕ>aÐ&Ôb÷	@œô 	@ñ
 ‘|Ó$ˆØ×ÑœxŸ~™~×.Ô.°#Ø�H‰HŒJ÷ /à×Ñœ˜SŸ]™]Ó+Ø]ô	_à�AŠJ÷	 /×.ús   Â'C*Ã*C:	c                ó:  aaa€ . o\         P                  ! 4       o\         P                  ! 4       oVVV3R  lp ! V3R lR\        4      p\         P                  ! VR7      pVP	                  4        SP                  ^
4        V! R 4      pV P                  \        P                  4      ;_uu_ 4       pVP                  4        RRR4       V P                  R\        XP                  4      4       V P                  R\        VP                  4      4       V P                  R\        VP                  4      4       SP                  4        VP                  ^
4       SR	 R#   + '       g   i     L¥; i  SP                  4        TP                  ^
4       SR	 i ; i)
c                  ó¤   <€ \        R  4      p SP                  V 4       V P                  4        SP                  4        SP	                  ^
4       R# )c                  ó   € R # r(   r   r   r   r   ré   ÚhTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.worker.<locals>.<lambda>y  rz  r   N)r.   r    r   rž   rŒ   )r/   r{  Úkeep_main_aliveÚswitched_to_greenlets    €€€r   r>  ÚVTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.workerx  s<   ø€ Ü™LÓ)ˆAØ�N‰N˜1ÔØ�H‰HŒJØ ×$Ñ$Ô&Ø× Ñ  Ö$r   c                   ó.   <a € ] tR tRt o V3R ltRtV tR# )ÚZTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.convolutedi~  c                óZ   <€ VR 8X  d   S^ ,          V n         \        P                  ! W4      # r]   r�  r‚  s   &&€r   rM  ÚkTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.convoluted.__getattribute__  r„  r   r,   NrQ  r…  s   @€r   r~  r”  ~  r†  r   r~  rz   c                  ó   € R # r(   r   r   r   r   ré   ÚXTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.<lambda>‰  ó   € ¡4r   Nz#Cannot switch to a different threadÚExpectedÚCurrentrÓ   )r|   r›   r.   r}   r~   rŒ   rJ   r   r“   r   rL   rM   rN   rž   r   )	r@   r>  r~  r¥   r/   r)   r{  r�  r‘  s	   &     @@@r   Ú*test_unexpected_reparenting_thread_runningÚFTestGreenletSetParentErrors.test_unexpected_reparenting_thread_runningr  s!  ú€ ð ˆÜ(ŸšÓ0ÐÜ#Ÿ/š/Ó+ˆ÷	%÷	@œô 	@ô ×Ò FÔ+ˆØ	�‰Œ	à×!Ñ! "Ô%ð	Ù™<Ó(ˆAà×"Ñ"¤8§>¡>×2Ô2°cØ—‘”
÷ 3à�M‰MÐ?ÄÀSÇ]Á]ÓASÔTØ�M‰M˜*¤c¨#¯-©-Ó&8Ô9Ø�M‰M˜)¤S¨¯©Ó%7Ô8à×ÑÔ!Ø�F‰F�2ŒJà˜’
÷ 3×2ûð ×ÑÔ!Ø�F‰F�2ŒJà˜‘
ús%   Â0E4 Â3E!ÃA7E4 Å!E1	Å,E4 Å4&Fc                ó<  € \        R  4      pV P                  VP                  \        P                  ! 4       4       V P                  \        4      ;_uu_ 4       pV=RRR4       V P                  \        XP                  4      R4       R#   + '       g   i     L7; i)c                  ó   € R # r(   r   r   r   r   ré   ÚGTestGreenletSetParentErrors.test_cannot_delete_parent.<locals>.<lambda>—  ó   € ¡Tr   Núcan't delete attribute)
r.   rX   r   r   r   rJ   rK   r=   rM   rN   )r@   r>  r)   s   &  r   Útest_cannot_delete_parentÚ5TestGreenletSetParentErrors.test_cannot_delete_parent–  sg   € Ü™\Ó*ˆØ�‰�f—m‘m¤X×%8Ò%8Ó%:Ô;à×Ñœ~×.Ô.°#Ø�÷ /à×Ñœ˜SŸ]™]Ó+Ð-EÖF÷ /×.ús   ÁBÂB	c                óì   € V P                  \        4      ;_uu_ 4       p\        P                  ! 4       =R R R 4       V P                  \        XP                  4      R4       R #   + '       g   i     L7; i)Nr¢  ©rJ   rK   r   r   r   r=   rM   rN   ©r@   r)   s   & r   Ú!test_cannot_delete_parent_of_mainÚ=TestGreenletSetParentErrors.test_cannot_delete_parent_of_mainž  sL   € Ø×Ñœ~×.Ô.°#Ü×#Ò#Ó%Ð,÷ /à×Ñœ˜SŸ]™]Ó+Ð-EÖF÷ /×.ús   žA#Á#A3	c                ób   € V P                  \        P                  ! 4       P                  4       R # r(   )r^   r   r   r   rD   s   &r   Ú!test_main_greenlet_parent_is_noneÚ=TestGreenletSetParentErrors.test_main_greenlet_parent_is_none¤  s   € à×Ñœ(×-Ò-Ó/×6Ñ6Ö7r   c                óÔ   a € R  pV 3R lp\        V4      pS P                  V4       V! V4       VP                  4        S P                  V4       V! V4       VP                  4        R# )c                  ó`   € \         P                  ! 4       P                  P                  4        R # r(   r‰   r   r   r   ÚbgÚCTestGreenletSetParentErrors.test_set_parent_wrong_types.<locals>.bg©  s   € ä×ÒÓ!×(Ñ(×/Ñ/Ö1r   c                 ó  <€ R ^SR3 Fn  pSP                  \        4      ;_uu_ 4       pWn        R R R 4       SP                  \	        XP
                  4      R\        V4      P                  ,           4       Kp  	  R #   + '       g   i     LU; i)NÚ42z4GreenletChecker: Expected any type of greenlet, not )rJ   r%  r   r=   rM   rN   Útyper   )ÚgletÚpr)   r@   s   &  €r   ÚcheckÚFTestGreenletSetParentErrors.test_set_parent_wrong_types.<locals>.check­  sj   ø€ Ø˜1˜d DÓ(�Ø×&Ñ&¤y×1Ô1°SØ"#”K÷ 2ð × Ñ Ü˜Ÿ™Ó&ØJÌTÐRSËW×M]ÑM]Õ]ö_ó	 )ß1×1ús   ¨A<Á<BN)r.   rß   r   rÝ   )r@   r¯  r¶  r/   s   f   r   Útest_set_parent_wrong_typesÚ7TestGreenletSetParentErrors.test_set_parent_wrong_types¨  sW   ø€ ò	2õ	_ô ˜‹OˆØ×Ñ˜ÔÙˆaŒð 	
�‰Œ
Ø�‰˜ÔÙˆaŒð 	
�‰Ž
r   c                óæ   € \        R  4      pV P                  \        4      ;_uu_ 4       pWn        RRR4       V P	                  \        XP                  4      R4       R#   + '       g   i     L7; i)c                  ó   € R # r(   r   r   r   r   ré   Ú@TestGreenletSetParentErrors.test_trivial_cycle.<locals>.<lambda>Å  r™  r   Núcyclic parent chain)r.   rJ   r  r   r=   rM   rN   )r@   r´  r)   s   &  r   Útest_trivial_cycleÚ.TestGreenletSetParentErrors.test_trivial_cycleÄ  sL   € Ü™<Ó(ˆØ×Ñœz×*Ô*¨cØŒK÷ +à×Ñœ˜SŸ]™]Ó+Ð-BÖC÷ +×*ús   ªA Á A0	c                ó  € V P                  \        4      ;_uu_ 4       p\        P                  ! 4       \        P                  ! 4       n        R R R 4       V P                  \        XP                  4      R4       R #   + '       g   i     L7; i)Nz(cannot set the parent of a main greenletr¦  r§  s   & r   Útest_trivial_cycle_mainÚ3TestGreenletSetParentErrors.test_trivial_cycle_mainÊ  sW   € à×Ñœ~×.Ô.°#Ü+3×+>Ò+>Ó+@ŒH×ÒÓ!Ô(÷ /à×Ñœ˜SŸ]™]Ó+Ð-WÖX÷ /×.ús   ž.A;Á;B	c                ó.  € \        R  4      p\        R 4      p\        R 4      pW!n        W2n        V P                  \        4      ;_uu_ 4       pWn        RRR4       V P	                  \        XP                  4      R4       R#   + '       g   i     L7; i)c                  ó   € R # r(   r   r   r   r   ré   Ú?TestGreenletSetParentErrors.test_deeper_cycle.<locals>.<lambda>Ñ  rE  r   c                  ó   € R # r(   r   r   r   r   ré   rÅ  Ò  rE  r   c                  ó   € R # r(   r   r   r   r   ré   rÅ  Ó  rE  r   Nr½  )r.   r   rJ   r  r=   rM   rN   )r@   r0   r¯   Úg3r)   s   &    r   Útest_deeper_cycleÚ-TestGreenletSetParentErrors.test_deeper_cycleÐ  sj   € Ü™Ó&ˆÜ™Ó&ˆÜ™Ó&ˆàŒ	ØŒ	Ø×Ñœz×*Ô*¨cØŒI÷ +à×Ñœ˜SŸ]™]Ó+Ð-BÖC÷ +×*ús   ÁBÂB	r   N)r   r   r   r   rt  rŠ  rœ  r£  r¨  r«  r¸  r¾  rÁ  rÉ  r   rR  rS  s   @r   rk  rk  /  sE   ø‡ € òWò2'òR"òHGòGò8òò8DòY÷	Dð 	Dr   rk  c                   ól   a € ] tR tRt o ]! ]R4      '       g   RR ltR tR tR t	R t
R	 tR
 tRtV tR# )ÚTestRepriÜ  ÚassertEndsWithNc                óL   € V P                  VP                  V4      WV34       R # r(   )rÝ   Úendswith)r@   rh  ÚsuffixÚmsgs   &&&&r   rÍ  ÚTestRepr.assertEndsWithß  s   € Ø�O‰O˜AŸJ™J vÓ.°¸CÐ0@ÖAr   c                óf   € \        \        P                  ! 4       4      pV P                  VR 4       R# )ú current active started main>N)Úreprr   r   rÍ  ©r@   Úrs   & r   Útest_main_while_runningÚ TestRepr.test_main_while_runningâ  s&   € Ü”×$Ò$Ó&Ó'ˆØ×Ñ˜AÐ>Ö?r   c                ó˜   a€ \         P                  ! 4       oV3R  lp\        V4      pVP                  4       pV P	                  VR4       R# )c                  ó   <€ \        S 4      # r(   )rÕ  r.  s   €r   rI   Ú-TestRepr.test_main_in_background.<locals>.runè  s   ø€ Ü˜“:Ðr   ú suspended active started main>N)r   r   r.   r   rÍ  )r@   rI   r/   r×  r<  s   &   @r   Útest_main_in_backgroundÚ TestRepr.test_main_in_backgroundæ  s>   ø€ Ü×"Ò"Ó$ˆõ	ô ˜ÓˆØ�H‰H‹JˆØ×Ñ˜AÐ@ÖAr   c                óP   € \        \        4       4      pV P                  VR 4       R# )z	 pending>N)rÕ  r.   rÍ  rÖ  s   & r   Útest_initialÚTestRepr.test_initialï  s   € Ü”“ÓˆØ×Ñ˜A˜{Ö+r   c                ó6  a€ \         P                  ! 4       o ! V3R  lR\        P                  4      pV! 4       pVP	                  4        VP                  ^
4       V P                  VP                  R4       V P                  VP                  R4       \        ^4       F  p\        P                  ! R4       K  	  \        ^4       FO  pV P                  VP                  P                  4       \        VP                  4      pV P                  VR4       KQ  	  R# )c                   ó:   <a € ] tR tRt o R;ttRtV3R ltRtV t	R# )Ú/TestRepr.test_main_from_other_thread.<locals>.Tiö  Nc                ó�   <€ \        S4      V n        \        P                  ! 4       V n        \        V P                  4      V n        R # r(   )rÕ  Úoriginal_mainr   r   Ú	main_gletrú  )r@   r<  s   &€r   rI   Ú3TestRepr.test_main_from_other_thread.<locals>.T.runù  s0   ø€ Ü%)¨$£Z�Ô"Ü!)×!4Ò!4Ó!6�”Ü#'¨¯©Ó#7�Ö r   )rè  rç  rú  )
r   r   r   r   rç  rú  rè  rI   r   rR  )rT  r<  s   @€r   ÚTrå  ö  s   ù‡ € Ø*.Ð.ˆM˜KØˆI÷8ó 8r   rê  rÝ  rÔ  gü©ñÒMbP?z (thread exited) dead>N)r   r   r|   r}   r~   r   rÍ  rç  rú  r?   rœ   r�   rÝ   rè  rf   rÕ  )r@   rê  r¥   r¢   r×  r<  s   &    @r   Útest_main_from_other_threadÚ$TestRepr.test_main_from_other_threadó  sË   ø€ Ü×"Ò"Ó$ˆ÷	8”	× Ñ ô 	8ñ ‹CˆØ	�‰Œ	Ø	�‰ˆrŒ
à×Ñ˜AŸO™OÐ-NÔOØ×Ñ˜AŸM™MÐ+JÔKô �q–ˆAÜ�JŠJ�uÖñ ô �q–ˆAØ�O‰O˜AŸK™K×,Ñ,Ô-Ü�Q—[‘[Ó!ˆAØ×Ñ Ð#;Ö<ó r   c                ó  € \        R  4      pVP                  4        V P                  \        V4      R4       V P	                  R\        V4      4       V P	                  R\        V4      4       V P	                  R\        V4      4       R# )c                  ó   € R # r(   r   r   r   r   ré   Ú$TestRepr.test_dead.<locals>.<lambda>  s   € ¡r   z dead>Ú	suspendedÚstartedÚactiveN)r.   r   rÍ  rÕ  ÚassertNotInrY   s   & r   Ú	test_deadÚTestRepr.test_dead  se   € Ü™Ó%ˆØ	�‰Œ
Ø×ÑœD ›G XÔ.Ø×Ñ˜¤d¨1£gÔ.Ø×Ñ˜¤D¨£GÔ,Ø×Ñ˜¤4¨£7Ö+r   c                óÖ   € \        R  4      p\        R 4      p\        P                  ! 4       pWV3 F3  pV P                  V: \        4       V P                  V: \        4       K5  	  R# )c                  ó   € R # r(   r   r   r   r   ré   Ú>TestRepr.test_formatting_produces_native_str.<locals>.<lambda>"  r¡  r   c                  ó   € R # r(   r   r   r   r   ré   rø  #  r  r   N)r.   r   r   rÅ   rM   )r@   Úg_deadÚg_not_startedÚg_curr/   s   &    r   Ú#test_formatting_produces_native_strÚ,TestRepr.test_formatting_produces_native_str  s_   € ô ™\Ó*ˆÜ#¡LÓ1ˆÜ×#Ò#Ó%ˆà¨Ó-ˆAà×!Ñ!ÚÜôð ×!Ñ!ÚÜöó .r   r   r(   )r   r   r   r   r+  r   rÍ  rØ  rÞ  rá  rë  rô  rý  r   rR  rS  s   @r   rÌ  rÌ  Ü  s?   ø‡ € á�8Ð-×.Ò.ô	Bò@òBò,ò!=òF,÷ð r   rÌ  c                   ó8   a € ] tR tRt o R tR tR tR tRtV t	R# )ÚTestMainGreenleti2  c                ó°   € R \        \        P                  ! 4       4      9   g   Q h\        \        P                  ! 4       4      pR \        V4      9  g   Q hV# r.  )rÕ  r   r   r³  )r@   r¥   s   & r   Ú_check_current_is_mainÚ'TestMainGreenlet._check_current_is_main6  sH   € àœœh×1Ò1Ó3Ó4Ô4Ð4Ð4ä”×$Ò$Ó&Ó'ˆØœT !›WÔ$Ð$Ð$Øˆr   c                ód   € V P                  4       p\        R V3/ 4      pV P                  V4       R# )ÚsubclassN)r  r³  rW   )r@   Ú	main_typer  s   &  r   Ú)test_main_greenlet_type_can_be_subclassedÚ:TestMainGreenlet.test_main_greenlet_type_can_be_subclassed>  s.   € Ø×/Ñ/Ó1ˆ	Ü˜
 Y L°"Ó5ˆØ×Ñ˜XÖ&r   c                óx   € V P                  4        V P                  \        P                  ! 4       \        4       R # r(   )r  rÅ   r   r   r.   rD   s   &r   Útest_main_greenlet_is_greenletÚ/TestMainGreenlet.test_main_greenlet_is_greenletC  s'   € Ø×#Ñ#Ô%Ø×Ñœh×1Ò1Ó3´[ÖAr   c                óð   a a€ VV 3R  lp\         P                   ! V4      oSP                  4        S P                  \        4      ;_uu_ 4        \	        SR4       RRR4       R#   + '       g   i     R# ; i)c                  ó”   <€ SP                  \        4      ;_uu_ 4        \        S R 4       RRR4       R#   + '       g   i     R# ; ir*  )rJ   rK   Úgetattr)r/   r@   s   €€r   Údo_itÚ1TestMainGreenlet.test_greenlet_run.<locals>.do_itH  s-   ø€ Ø×"Ñ"¤>×2Õ2Ü˜˜5Ô!÷ 3×2×2Ò2ús	   Ÿ6¶A	rI   N)r   r   rJ   rK   r  )r@   r  r/   s   f @r   Útest_greenlet_runÚ"TestMainGreenlet.test_greenlet_runG  sM   ù€ ö	"ô ×Ò˜eÓ$ˆØ	�‰Œ
Ø×Ñœ~×.Õ.Ü�A�uÔ÷ /×.×.Ò.ús   ÁA$Á$A5	r   N)
r   r   r   r   r  r  r
  r  r   rR  rS  s   @r   r   r   2  s   ø‡ € òò'ò
B÷ð r   r   c                   óV   a € ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tRtV tR# )ÚTestBrokenGreenletsiR  c                óî   € R  p\         P                  P                  V4      pRVn        V P	                  \
        R4      ;_uu_ 4        VP                  4        RRR4       R#   + '       g   i     R# ; i)c                  ó   € \        R 4      h)zNever get here)ÚAssertionErrorr   r   r   r-  Ú<TestBrokenGreenlets.test_failed_to_initialstub.<locals>.funcW  s   € Ü Ð!1Ó2Ð2r   Tz;Failed to switch stacks into a greenlet for the first time.N)r   Ú	_greenletÚUnswitchableGreenletÚforce_switch_errorÚassertRaisesRegexÚSystemErrorr   )r@   r-  r/   s   &  r   Útest_failed_to_initialstubÚ.TestBrokenGreenlets.test_failed_to_initialstubV  sc   € ò	3ô ×Ñ×3Ñ3°DÓ9ˆØ#ˆÔà×#Ñ#¤KØ$a÷cõ cà�H‰HŒJ÷c÷ c÷ cò cús   ÁA#Á#A4	c                óÜ  a€ . oV3R  lp\         P                  P                  V4      pVP                  4        V P	                  S^.4       VP                  4        V P	                  S^^.4       RVn        V P                  \        R4      ;_uu_ 4        VP                  4        RRR4       RVn        VP                  4        V P	                  S. RO4       R#   + '       g   i     L=; i)c                  ó"  <€ S P                  ^4       \        P                  ! 4       P                  P	                  4        S P                  ^4       \        P                  ! 4       P                  P	                  4        S P                  ^4       R# r6   r8   )Úrunss   €r   r-  ÚDTestBrokenGreenlets.test_failed_to_switch_into_running.<locals>.funcd  sZ   ø€ Ø�K‰K˜ŒNÜ×ÒÓ!×(Ñ(×/Ñ/Ô1Ø�K‰K˜ŒNÜ×ÒÓ!×(Ñ(×/Ñ/Ô1Ø�K‰K˜ŽNr   Tz0Failed to switch stacks into a running greenlet.NF)r7   rû   rÌ   )r   r  r  r   r=   r  r  r  )r@   r-  r/   r"  s   &  @r   Ú"test_failed_to_switch_into_runningÚ6TestBrokenGreenlets.test_failed_to_switch_into_runningb  s¾   ø€ Øˆõ	ô ×Ñ×3Ñ3°DÓ9ˆØ	�‰Œ
Ø×Ñ˜ ˜sÔ#Ø	�‰Œ
Ø×Ñ˜  1˜vÔ&Ø#ˆÔà×#Ñ#¤KØ$V÷Xõ Xà�H‰HŒJ÷Xð  %ˆÔØ	�‰Œ
Ø×Ñ˜šyÖ)÷X÷ Xús   ÂCÃC+	c                ó´   € V P                  R 4      pV P                  RVP                  4       V P                  VP                  V P	                  4       4       R# )zfail_slp_switch.pyzfail_slp_switch is runningN)ÚassertScriptRaisesrL   ÚoutputÚ
returncodeÚ,get_expected_returncodes_for_aborted_process©r@   Úexs   & r   Ú&test_failed_to_slp_switch_into_runningÚ:TestBrokenGreenlets.test_failed_to_slp_switch_into_running~  sA   € Ø×$Ñ$Ð%9Ó:ˆà�‰Ð2°B·I±IÔ>Ø�‰�b—m‘m T×%VÑ%VÓ%XÖYr   c                ó   € V P                  R 4      pV P                  RV4       V P                  RV4       V P                  RV4       V P                  RV4       V P                  RV4       V P                  RV4       R# )zfail_switch_two_greenlets.pyz	In g1_runÚTRACEzLEAVE TRACEzFalling off end of mainzFalling off end of g1_runzFalling off end of g2N©Ú
run_scriptrL   ©r@   r(  s   & r   Ú#test_reentrant_switch_two_greenletsÚ7TestBrokenGreenlets.test_reentrant_switch_two_greenlets„  sh   € à—‘Ð!?Ó@ˆØ�‰�k 6Ô*Ø�‰�g˜vÔ&Ø�‰�m VÔ,Ø�‰Ð/°Ô8Ø�‰Ð1°6Ô:Ø�‰Ð-¨vÖ6r   c                óœ   € V P                  R RR7      pV P                  RVP                  4       V P                  RVP                  4       R# )zfail_switch_three_greenlets.py)Ú	exitcodesr%  zpositional argumentsN)r7   )r'  rL   r(  r+  s   & r   Ú%test_reentrant_switch_three_greenletsÚ9TestBrokenGreenlets.test_reentrant_switch_three_greenletsŽ  s@   € ð ×$Ñ$Ð%EÐQUÐ$ÓVˆà�‰�k 2§9¡9Ô-Ø�‰Ð,¨b¯i©iÖ8r   c                óL   € V P                  R 4      pV P                  RV4       R# )zfail_switch_three_greenlets2.pya­  RESULTS: [('trace', 'switch'), ('trace', 'switch'), ('g2 arg', 'g2 from tracefunc'), ('trace', 'switch'), ('main g1', 'from g2_run'), ('trace', 'switch'), ('g1 arg', 'g1 from main'), ('trace', 'switch'), ('main g2', 'from g1_run'), ('trace', 'switch'), ('g1 from parent', 'g1 from main 2'), ('trace', 'switch'), ('main g1.2', 'g1 done'), ('trace', 'switch'), ('g2 from parent', ()), ('trace', 'switch'), ('main g2.2', 'g2 done')]Nr1  r3  s   & r   Ú&test_reentrant_switch_three_greenlets2Ú:TestBrokenGreenlets.test_reentrant_switch_three_greenlets2—  s)   € ð —‘Ð!BÓCˆØ�‰ð=ð ö		
r   c                óL   € V P                  R 4      pV P                  RV4       R# )z#fail_initialstub_already_started.pya!  RESULTS: ['Begin C', 'Switch to b from B.__getattribute__ in C', ('Begin B', ()), '_B_run switching to main', ('main from c', 'From B'), 'B.__getattribute__ back from main in C', ('Begin A', (None,)), ('A dead?', True, 'B dead?', True, 'C dead?', False), 'C done', ('main from c.2', None)]Nr1  r3  s   & r   Ú4test_reentrant_switch_GreenletAlreadyStartedInPythonÚHTestBrokenGreenlets.test_reentrant_switch_GreenletAlreadyStartedInPython©  s'   € Ø—‘Ð!FÓGˆà�‰ð1ð
 ö	
r   c                óL   € V P                  R 4      pV P                  RV4       R# )zfail_clearing_run_switches.pyz„RESULTS [('G.__getattribute__', 'run'), ('RunCallable', '__del__'), ('main: g.switch()', 'from RunCallable'), ('run_func', 'enter')]Nr1  r3  s   & r   Ú*test_reentrant_switch_run_callable_has_delÚ>TestBrokenGreenlets.test_reentrant_switch_run_callable_has_delµ  s'   € Ø—‘Ð!@ÓAˆØ�‰ðð ö	
r   c                ó†   € \         '       g   V P                  R 4       V P                  R4      pV P                  RV4       R# )z0Only free-threaded builds take critical sectionszfail_switch_critical_section.pyzSWITCH CS OKN)r   ÚskipTestr2  rL   r3  s   & r   Ú+test_switch_leaves_no_critical_section_heldÚ?TestBrokenGreenlets.test_switch_leaves_no_critical_section_held¿  s4   € ÷ +Ó*Ø�M‰MÐLÔMØ—‘Ð!BÓCˆØ�‰�n fÖ-r   r   N)r   r   r   r   r  r$  r-  r4  r8  r;  r>  rA  rE  r   rR  rS  s   @r   r  r  R  s8   ø‡ € ò
ò*ò8Zò7ò9ò
ò$

ò
÷.ð .r   r  c                   ó`   a € ] tR tRt o ]P
                  ! ]! ]R4      R4      R 4       tRt	V t
R# )Ú
TestModuleiÍ  Ú_is_gil_enabledz,Needs 3.13 and above for sys._is_gil_enabledc                ó²   € \         '       d'   V P                  \        P                  ! 4       4       R # V P	                  \        P                  ! 4       4       R # r(   )r   rß   r!   rI  rÝ   rD   s   &r   Útest_no_gil_on_free_threadedÚ'TestModule.test_no_gil_on_free_threadedÏ  s6   € ÷ 'Ó&Ø×ÑœS×0Ò0Ó2Ö3à�O‰OœC×/Ò/Ó1Ö2r   r   N)r   r   r   r   rg  Ú
skipUnlessr+  r!   rK  r   rR  rS  s   @r   rH  rH  Í  s1   ø‡ € à×Ò™ Ð&7Ó8ØGóIñ3óIö3r   rH  Ú__main__)"r©   r!   rœ   r|   rg  Úabcr   r   r   r.   rA  r   r   r   r	   r
   r   Ú	leakcheckr   r   r   r   rL  r   r%   r1   r3   rk  rÌ  r   r  rH  r   r<  r   r   r   Ú<module>rQ     sÃ   ðÛ 	Û 
Û Û Û å Ý ã Ý ,Ý Ý "Ý Ý Ý Ý )Ý &Ý 7Ý (Ý +ô	�	ô 	òòôt�8ô tônjD (ô jDôZSˆxô Sôl�xô ô@y.˜(ô y.ôv3�ô 3ð ˆzÔØ‡M‚M†Oñ r   