§
    dŠtjMÐ  ã                   óÐ  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlZd dlmZ	 ddl
mZ ddl
mZ ddl
mZ dd	l
mZ dd
l
mZ ddl
mZ ddlmZ ddlmZ ddlmZ ddlmZ  G d„ de¦  «        Zd„ Zd„ Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Ze d k    r ej!        ¦   «          dS dS )!é    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                   ó   — e Zd ZdS )Ú	SomeErrorN©Ú__name__Ú
__module__Ú__qualname__© ó    úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/greenlet/tests/test_greenlet.pyr   r   "   s   € € € € € Ø€Dr   r   c                 óÌ   — 	 t          j        ¦   «         j                             ¦   «          n2#  |                      t          j        ¦   «         d         ¦  «         ‚ xY wt          ‚©Nr   )r   Ú
getcurrentÚparentÚswitchÚappendÚsysÚexc_infor   ©Úseens    r   Úfmainr$   &   sV   € ðÝÔÑÔÔ$×+Ò+Ñ-Ô-Ð-Ð-øðØ�Š•C”L‘N”N 1Ô%Ñ&Ô&Ð&ØøøøÝ
€Os	   ‚*- ­/Ac                 óX   — d„ }t          || ¬¦  «        }|                     |¦  «         d S )Nc                 ó   — | ‚©Nr   )Úexcs    r   Úcrasherzsend_exception.<locals>.crasher2   s   € Øˆ	r   ©r   ©ÚRawGreenletr   )Úgr(   r)   Úg1s       r   Úsend_exceptionr/   /   s6   € ðð ð å	�W QÐ	'Ñ	'Ô	'€BØ‡I‚Iˆc�N„N€N€N€Nr   c                   ó  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zed
„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z ej        eoed¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"e#d6d„¦   «         Z$e# e%e&oe'j(        dd …         d!k    d"¦  «        d#„ ¦   «         ¦   «         Z)d$„ Z*e+d%„ ¦   «         Z,d&„ Z-d'„ Z.d(„ Z/d)„ Z0d*„ Z1d+„ Z2 ej        eoed,¦  «        d-„ ¦   «         Z3d.„ Z4d/„ Z5d0„ Z6d1„ Z7d2„ Z8d3„ Z9d4„ Z:d5„ Z;dS )7ÚTestGreenletc                 ób  ‡— g Šˆfd„}t          |¦  «        }‰                     d¦  «         |                     ¦   «          ‰                     d¦  «         |                     ¦   «          ‰                     d¦  «         |                      ‰t	          t          d¦  «        ¦  «        ¦  «         d S )Nc                  ó°   •— ‰                       d¦  «         t          j        ¦   «         j                             ¦   «          ‰                       d¦  «         d S )Nr   é   ©r   r   r   r   r   ©Úlsts   €r   Úfz'TestGreenlet._do_simple_test.<locals>.f=   sC   ø€ Ø�JŠJ�q‰MŒMˆMÝÔÑ!Ô!Ô(×/Ò/Ñ1Ô1Ð1Ø�JŠJ�q‰MŒMˆMˆMˆMr   r   é   é   é   )r,   r   r   ÚassertEqualÚlistÚrange)Úselfr8   r-   r7   s      @r   Ú_do_simple_testzTestGreenlet._do_simple_test:   s�   ø€ Øˆð	ð 	ð 	ð 	ð 	õ ˜‰NŒNˆØ�
Š
�1‰ŒˆØ	�Š‰
Œ
ˆ
Ø�
Š
�1‰ŒˆØ	�Š‰
Œ
ˆ
Ø�
Š
�1‰ŒˆØ×Ò˜�d¥5¨¡8¤8™nœnÑ-Ô-Ð-Ð-Ð-r   c                 ó.   — |                       ¦   «          d S r'   )r@   ©r?   s    r   Útest_simplezTestGreenlet.test_simpleI   s   € Ø×ÒÑÔÐÐÐr   c                 óþ   — t          ¦   «         }|                      t          ¦  «        5 }|                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         d S ©NÚrun)r,   ÚassertRaisesÚAttributeErrorr   ÚassertInÚstrÚ	exception©r?   r-   r(   s      r   Ú(test_switch_no_run_raises_AttributeErrorz5TestGreenlet.test_switch_no_run_raises_AttributeErrorL   s¤   € Ý‰MŒMˆØ×Ò�~Ñ.Ô.ð 	°#Ø�HŠH‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�Š�e�S ¤Ñ/Ô/Ñ0Ô0Ð0Ð0Ð0s   ©A
Á
AÁAc                 ó
  — t          ¦   «         }|                      t          ¦  «        5 }|                     t          ¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j        ¦  «        ¦  «         d S rE   )r,   rG   rH   Úthrowr   rI   rJ   rK   rL   s      r   Ú'test_throw_no_run_raises_AttributeErrorz4TestGreenlet.test_throw_no_run_raises_AttributeErrorS   s©   € Ý‰MŒMˆØ×Ò�~Ñ.Ô.ð 	°#Ø�GŠG•IÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�Š�e�S ¤Ñ/Ô/Ñ0Ô0Ð0Ð0Ð0s   ©AÁAÁAc                 ó¨   — t          d ¬¦  «        }|                      |¦  «         |                      |j        t	          j        ¦   «         ¦  «         d S )Nr*   )r,   ÚassertIsNotNoneÚassertIsr   r   r   ©r?   r-   s     r   Útest_parent_equals_Nonez$TestGreenlet.test_parent_equals_NoneZ   sK   € Ý˜tÐ$Ñ$Ô$ˆØ×Ò˜QÑÔÐØ�Š�a”h¥Ô 3Ñ 5Ô 5Ñ6Ô6Ð6Ð6Ð6r   c                 ó„   — t          d ¬¦  «        }|                      |¦  «         |                      |j        ¦  «         d S )N)rF   )r,   rR   ÚassertIsNonerF   rT   s     r   Útest_run_equals_Nonez!TestGreenlet.test_run_equals_None_   sB   € Ý˜DÐ!Ñ!Ô!ˆØ×Ò˜QÑÔÐØ×Ò˜!œ%Ñ Ô Ð Ð Ð r   c                 óv  ‡— g Šˆfd„}t          |¦  «        }t          |¦  «        }|                     ¦   «          |                      t          ‰¦  «        d¦  «         |                     ¦   «          |                      t          ‰¦  «        d¦  «         |                     ¦   «          |                      t          ‰¦  «        d¦  «         |                      |j        d¦  «         |                     ¦   «          |                      t          ‰¦  «        d¦  «         |                      |j        d¦  «         d S )Nc                  ó´   •— ‰                       d¦  «         t          j        ¦   «         j                             ¦   «          ‰                      ddg¦  «         d S )Nr   )r   r   r   r   r   Úextendr6   s   €r   r8   z)TestGreenlet.test_two_children.<locals>.fg   sL   ø€ Ø�JŠJ�q‰MŒMˆMÝÔÑ!Ô!Ô(×/Ò/Ñ1Ô1Ð1Ø�JŠJ˜˜1�vÑÔÐÐÐr   r   r9   r:   Té   )r,   r   r<   ÚlenÚdead)r?   r8   r-   Úhr7   s       @r   Útest_two_childrenzTestGreenlet.test_two_childrend   s  ø€ Øˆð	ð 	ð 	ð 	ð 	õ ˜‰NŒNˆÝ˜‰NŒNˆØ	�Š‰
Œ
ˆ
Ø×Ò�˜S™œ 1Ñ%Ô%Ð%Ø	�Š‰
Œ
ˆ
Ø×Ò�˜S™œ 1Ñ%Ô%Ð%Ø	�Š‰
Œ
ˆ
Ø×Ò�˜S™œ 1Ñ%Ô%Ð%Ø×Ò˜œ Ñ&Ô&Ð&Ø	�Š‰
Œ
ˆ
Ø×Ò�˜S™œ 1Ñ%Ô%Ð%Ø×Ò˜œ Ñ&Ô&Ð&Ð&Ð&r   c                 óÀ  ‡‡— g Šˆfd„Šˆˆfd„}|                       t          j        |¦  «        t          sdnd¦  «         t	          |¦  «        }|                       t          j        |¦  «        t          sdnd¦  «         |                     ¦   «          |                       ‰g d¢¦  «         |                       t          j        |¦  «        t          sdnd¦  «         d S )Nc                  ó†   •— ‰                       d¦  «         t          j        ¦   «         j                             ¦   «          d S )NÚbr5   r6   s   €r   r8   z3TestGreenlet.test_two_recursive_children.<locals>.f{   s6   ø€ Ø�JŠJ�s‰OŒOˆOÝÔÑ!Ô!Ô(×/Ò/Ñ1Ô1Ð1Ð1Ð1r   c                  ó¢   •— ‰                      d¦  «         t          ‰¦  «        } |                      ¦   «          ‰                      d¦  «         d S )NÚaÚc)r   r,   r   )r-   r8   r7   s    €€r   r-   z3TestGreenlet.test_two_recursive_children.<locals>.g   s=   ø€ Ø�JŠJ�s‰OŒOˆOÝ˜A‘”ˆAØ�HŠH‰JŒJˆJØ�JŠJ�s‰OŒOˆOˆOˆOr   r9   r   )re   rc   rf   )r<   r    Úgetrefcountr
   r,   r   )r?   r-   r8   r7   s     @@r   Útest_two_recursive_childrenz(TestGreenlet.test_two_recursive_childrenx   s÷   øø€ Øˆð	2ð 	2ð 	2ð 	2ð 	2ð	ð 	ð 	ð 	ð 	ð 	ð
 	×Ò�œ¨Ñ+Ô+µeÐ-B¨Q¨QÀÑCÔCÐCÝ˜‰NŒNˆð 	×Ò�œ¨Ñ+Ô+µeÐ-B¨Q¨QÀÑCÔCÐCØ	�Š‰
Œ
ˆ
Ø×Ò˜˜o˜o˜oÑ.Ô.Ð.à×Ò�œ¨Ñ+Ô+µeÐ-B¨Q¨QÀÑCÔCÐCÐCÐCr   c                 ó  ‡ ‡‡— g Šˆ ˆfd„Šˆfd„t          d¦  «        D ¦   «         }|D ]}|                     ¦   «          Œ|D ]}|                     d¦  «         Œ‰                      t	          ‰¦  «        t	          |¦  «        ¦  «         d S )Nc                  óZ   •— ‰                       ¦   «          ‰                     d¦  «         d S ©NT)r@   r   )r?   Úsuccesss   €€r   r8   z$TestGreenlet.test_threads.<locals>.f‘   s-   ø€ Ø× Ò Ñ"Ô"Ð"Ø�NŠN˜4Ñ Ô Ð Ð Ð r   c                 ó:   •— g | ]}t          j        ‰¬ ¦  «        ‘ŒS )©Útarget©Ú	threadingÚThread)Ú.0Úir8   s     €r   ú
<listcomp>z-TestGreenlet.test_threads.<locals>.<listcomp>”   s'   ø€ Ð=Ð=Ð=¨a�yÔ qÐ)Ñ)Ô)Ð=Ð=Ð=r   é
   )r>   ÚstartÚjoinr<   r]   )r?   ÚthsÚthr8   rl   s   `  @@r   Útest_threadszTestGreenlet.test_threadsŽ   s¯   øøø€ Øˆð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð >Ð=Ð=Ð=µ5¸±9´9Ð=Ñ=Ô=ˆØð 	ð 	ˆBØ�HŠH‰JŒJˆJˆJØð 	ð 	ˆBØ�GŠG�B‰KŒKˆKˆKØ×Ò�˜W™œ¥s¨3¡x¤xÑ0Ô0Ð0Ð0Ð0r   c                 ó‚   ‡‡— d„ Šd„ Šdˆˆfd„	}t          d¦  «        D ]} |¦   «          t          j        ¦   «          Œ d S )Nc                 ó®   — d„ }t          j         |¦  «        }|                     ¦   «          |                      |¦  «         |                     ¦   «          d S )Nc                  óZ   — 	 t          j        ¦   «         j                             ¦   «          Œ+r'   ©r   r   r   r   r   r   r   ÚbodyzPTestGreenlet.test_switching_many_threads.<locals>.creates_greenlet.<locals>.bodyŸ   s*   € ð:ÝÔ'Ñ)Ô)Ô0×7Ò7Ñ9Ô9Ð9ð:r   )r   r   r   Úwait)Ú	greenletsÚwait_to_die_untilr€   r-   s       r   Úcreates_greenletzBTestGreenlet.test_switching_many_threads.<locals>.creates_greenletž   s\   € ð:ð :ð :õ Ô! $Ñ'Ô'ˆAØ�HŠH‰JŒJˆJØ×Ò˜QÑÔÐØ×"Ò"Ñ$Ô$Ð$Ð$Ð$r   c                 ó  — |                      ¦   «          |                     ¦   «         sYt          | ¦  «        D ]3}	 |j        s|                     ¦   «          Œ# t
          j        $ r Y Œ0w xY w|                     ¦   «         ¯Wd S d S r'   )r�   Úis_setr=   r^   r   r   Úerror)r‚   Úwait_to_check_untilÚ
quit_afterr-   s       r   Úswitches_from_other_threadzLTestGreenlet.test_switching_many_threads.<locals>.switches_from_other_thread§   s¨   € Ø×$Ò$Ñ&Ô&Ð&Ø ×'Ò'Ñ)Ô)ð Ý˜i™œð ð �AðØ œvð 'ØŸHšH™JœJ˜JøøÝ#œ>ð ð ð ð ˜ðøøøð !×'Ò'Ñ)Ô)ð ð ð ð ð s   »AÁA)Á(A)é   c                 ó8  •‡‡‡— g Št          j        ¦   «         Št          j        ¦   «         Šˆˆˆfd„t          | ¦  «        D ¦   «         }ˆˆˆˆfd„t          | ¦  «        D ¦   «         }||z   D ]}|                     ¦   «          Œt	          ‰¦  «        | k     r't          j        d¦  «         t	          ‰¦  «        | k     °'‰                     ¦   «          |D ]}|                     d¦  «         Œ‰                     ¦   «          |D ]}|                     d¦  «         Œd S )Nc                 ó@   •— g | ]}t          j        ‰‰‰f¬ ¦  «        ‘ŒS ©©ro   Úargsrp   )rs   Ú_r„   r‚   Úgreenlets_all_createds     €€€r   ru   zLTestGreenlet.test_switching_many_threads.<locals>.run_it.<locals>.<listcomp>¸   sO   ø€ ð ð ð ð õ Ô Ð(8À	Ø@Uð@Wð Xñ Xô Xðð ð r   c                 óB   •— g | ]}t          j        ‰‰‰‰f¬ ¦  «        ‘ŒS rŽ   rp   )rs   r‘   Úall_threads_deadr‚   r’   rŠ   s     €€€€r   ru   zLTestGreenlet.test_switching_many_threads.<locals>.run_it.<locals>.<listcomp>¿   sN   ø€ ð ð ð ð õ Ô Ð(BØ'0Ð2GØ'7ð'9ð:ñ :ô :ðð ð r   g-Cëâ6?g      ð?)	rq   ÚEventr>   rw   r]   ÚtimeÚsleepÚsetrx   )	Úthread_countÚcreatorsÚ	switchersÚtr”   r‚   r’   r„   rŠ   s	       @@@€€r   Úrun_itz8TestGreenlet.test_switching_many_threads.<locals>.run_it³   sm  øøøø€ ØˆIÝ$-¤OÑ$5Ô$5Ð!Ý(œÑ0Ô0Ððð ð ð ð ð õ ˜Ñ&Ô&ð	ñ ô ˆHðð ð ð ð ð ð õ
 ˜Ñ&Ô&ðñ ô ˆIð  Ñ*ð ð �Ø—’‘	”	�	�	õ �i‘.”. <Ò/Ð/Ý”
˜6Ñ"Ô"Ð"õ �i‘.”. <Ò/Ð/à!×%Ò%Ñ'Ô'Ð'àð ð �Ø—’�s‘”��Ø× Ò Ñ"Ô"Ð"Øð ð �Ø—’�s‘”��ðð r   é   )r‹   )r>   ÚgcÚcollect)r?   r�   r‘   r„   rŠ   s      @@r   Útest_switching_many_threadsz(TestGreenlet.test_switching_many_threads›   s   øø€ ð	%ð 	%ð 	%ð
	ð 
	ð 
	ð 	ð  	ð  	ð  	ð  	ð  	ð  	õH �r‘”ð 	ð 	ˆAØˆF‰HŒHˆHÝŒJ‰LŒLˆLˆLð	ð 	r   c                 óz  — g }t          t          ¦  «        }t          t          ¦  «        }|                     |¦  «         |                     |¦  «         ||_        |                      |g ¦  «         |                      t          |j        ¦  «         |                      |t          g¦  «         |                     ¦   «         }|                      |d¦  «         |                      |t          g¦  «         |                     d¦  «        }|                      |d¦  «         |                      |t          g¦  «         d S )Nr   é   )r,   r$   r   r   r<   rG   r   )r?   r#   r.   Úg2Úvalues        r   Útest_exceptionzTestGreenlet.test_exceptionÛ   s  € ØˆÝ�ÑÔˆÝ�ÑÔˆØ
�	Š	�$‰ŒˆØ
�	Š	�$‰ŒˆØˆŒ	à×Ò˜˜rÑ"Ô"Ð"ð 	×Ò�) R¤YÑ/Ô/Ð/Ø×Ò˜¥	˜{Ñ+Ô+Ð+à—	’	‘”ˆØ×Ò˜ Ñ#Ô#Ð#Ø×Ò˜¥	˜{Ñ+Ô+Ð+à—	’	˜"‘”ˆØ×Ò˜ Ñ#Ô#Ð#Ø×Ò˜¥	˜{Ñ+Ô+Ð+Ð+Ð+r   c                 óâ   — g }t          t          ¦  «        }|                     |¦  «         |                      t          t
          |t          ¦  «         |                      |t          g¦  «         d S r'   )r,   r$   r   rG   ÚKeyErrorr/   r<   )r?   r#   r.   s      r   Útest_send_exceptionz TestGreenlet.test_send_exception÷   s[   € ØˆÝ�ÑÔˆØ
�	Š	�$‰ŒˆØ×Ò�(¥N°B½ÑAÔAÐAØ×Ò˜¥˜zÑ*Ô*Ð*Ð*Ð*r   c                 óÄ  — g }t          t          ¦  «        }t          t          ¦  «        }|                     |¦  «         |                     |¦  «         |                      |g ¦  «         ~t	          j        ¦   «          |                      |t          j        g¦  «         ~t	          j        ¦   «          |                      |t          j        t          j        g¦  «         d S r'   )r,   r$   r   r<   rŸ   r    r   ÚGreenletExit)r?   r#   r.   r¤   s       r   Útest_dealloczTestGreenlet.test_deallocþ   s´   € ØˆÝ�ÑÔˆÝ�ÑÔˆØ
�	Š	�$‰ŒˆØ
�	Š	�$‰ŒˆØ×Ò˜˜rÑ"Ô"Ð"ØÝ
Œ
‰ŒˆØ×Ò˜¥Ô 5Ð6Ñ7Ô7Ð7ØÝ
Œ
‰ŒˆØ×Ò˜¥Ô 5µxÔ7LÐMÑNÔNÐNÐNÐNr   c                 ód  ‡— d„ }t          |¦  «        }|                     ¦   «          g Št          j        }ˆfd„}|t          _        	 ~|t          _        n# |t          _        w xY w|                      t          ‰¦  «        d¦  «         |                      ‰d         j        t          ¦  «         d S )Nc                  ó’   — 	 t          j        ¦   «         j                             ¦   «          d S # t           j        $ r	 t
          d ‚w xY wr'   )r   r   r   r   r«   r   r   r   r   rF   zHTestGreenlet.test_dealloc_catches_GreenletExit_throws_other.<locals>.run  sQ   € ð*ÝÔ#Ñ%Ô%Ô,×3Ò3Ñ5Ô5Ð5Ð5Ð5øÝÔ(ð *ð *ð *Ý TÐ)ð*øøøs	   ‚*. ®Ac                 ó2   •— ‰                      | ¦  «         d S r'   ©r   )Ú
unraisableÚunraisable_eventss    €r   Ú_capturezMTestGreenlet.test_dealloc_catches_GreenletExit_throws_other.<locals>._capture  s   ø€ Ø×$Ò$ ZÑ0Ô0Ð0Ð0Ð0r   r   r   )	r,   r   r    Úunraisablehookr<   r]   ÚassertIsInstanceÚ	exc_valuer   )r?   rF   r-   Úold_hookr³   r²   s        @r   Ú.test_dealloc_catches_GreenletExit_throws_otherz;TestGreenlet.test_dealloc_catches_GreenletExit_throws_other  sÈ   ø€ ð	*ð 	*ð 	*õ ˜ÑÔˆØ	�Š‰
Œ
ˆ
àÐÝÔ%ˆð	1ð 	1ð 	1ð 	1ð 	1à%�Ôð	*Øà!)�CÔÐø �CÔÐ)Ð)Ð)Ð)à×Ò�Ð.Ñ/Ô/°Ñ3Ô3Ð3Ø×ÒÐ/°Ô2Ô<½iÑHÔHÐHÐHÐHs   ÁA ÁA$z=Sometimes flaky (getting one GreenletExit in the second list)c                 óŠ  ‡‡‡‡‡‡— g Šg Št          j        ¦   «         Št          j        ¦   «         Št          j        ¦   «         Št          j        ¦   «         Šˆˆˆˆˆˆfd„}t          j        |¬¦  «        }|                     ¦   «          ‰                     d¦  «         |                      ‰g ¦  «         |                      t          ‰¦  «        d¦  «         ‰d d …= t          st          j	        ¦   «          |                      ‰g ¦  «         ‰ 
                    ¦   «          ‰                     d¦  «         	 |                      ‰t          j        g¦  «         ‰ 
                    ¦   «          |                     d¦  «         ‰d d …= ‰d d …= d S # ‰ 
                    ¦   «          |                     d¦  «         ‰d d …= ‰d d …= w xY w)Nc                  óˆ  •— t          t          ¦  «        } |                      ‰¦  «         ‰                     | ¦  «         ~ t	          j        ¦   «          ‰                     ¦   «          ‰                     d¦  «         t          ¦   «          ‰                     ¦   «          ‰                     d¦  «         t          ¦   «          d S )Nr4   )r,   r$   r   r   rŸ   r    r˜   r�   )r.   Ú/bg_glet_created_running_and_no_longer_ref_in_bgÚbg_should_be_clearÚfg_ref_releasedÚok_to_exit_bg_threadr#   Úsomerefs    €€€€€€r   r8   z1TestGreenlet.test_dealloc_other_thread.<locals>.f4  s¡   ø€ Ý�UÑ#Ô#ˆBØ�IŠI�d‰OŒOˆOØ�NŠN˜2ÑÔÐØÝŒJ‰LŒLˆLØ;×?Ò?ÑAÔAÐAØ× Ò  Ñ#Ô#Ð#å‰MŒMˆMØ×"Ò"Ñ$Ô$Ð$Ø ×%Ò% aÑ(Ô(Ð(Ý‰MŒMˆMˆMˆMr   rn   rv   r   r4   )rq   r•   rr   rw   r�   r<   r]   r   rŸ   r    r˜   r   r«   rx   )	r?   r8   rœ   r»   r¼   r½   r¾   r#   r¿   s	      @@@@@@r   Útest_dealloc_other_threadz&TestGreenlet.test_dealloc_other_thread$  sá  øøøøøø€ ð ˆØˆå:C¼/Ñ:KÔ:KÐ7Ý#œ/Ñ+Ô+ˆÝ&œ_Ñ.Ô.ÐÝ(œÑ0Ô0Ðð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ Ô AÐ&Ñ&Ô&ˆØ	�Š‰	Œ	ˆ	Ø7×<Ò<¸RÑ@Ô@Ð@à×Ò˜˜rÑ"Ô"Ð"Ø×Ò�˜W™œ qÑ)Ô)Ð)Ø�A�A�AˆJÝ*ð 
	õ ŒJ‰LŒLˆLð 	×Ò˜˜rÑ"Ô"Ð"Ø×ÒÑÔÐØ×Ò Ñ"Ô"Ð"ð	Ø×Ò˜T¥HÔ$9Ð#:Ñ;Ô;Ð;à ×$Ò$Ñ&Ô&Ð&Ø�FŠF�2‰JŒJˆJØ�Q�Q�Q�Ø˜˜˜�
�
�
øð !×$Ò$Ñ&Ô&Ð&Ø�FŠF�2‰JŒJˆJØ�Q�Q�Q�Ø˜˜˜�
ˆNˆNˆNˆNs   Ä7!F Æ5Gc                 ón  ‡ — ˆ fd„}t          |¦  «        }|                     ¦   «         }‰                      ||j        u ¦  «         ‰                      |¦  «         |                     ¦   «         }‰                      |¦  «         ‰                      |d¦  «         ‰                      |j        d ¦  «         d S )Nc                  ó¼   •— t          j        d¦  «        } ‰                     | j        d ¦  «         t	          j        ¦   «         j                             | ¦  «         dS )Nr   úmeaning of life)r    Ú	_getframer<   Úf_backr   r   r   r   )r8   r?   s    €r   Úf1z#TestGreenlet.test_frame.<locals>.f1c  sP   ø€ Ý”˜aÑ Ô ˆAØ×Ò˜QœX tÑ,Ô,Ð,ÝÔÑ!Ô!Ô(×/Ò/°Ñ2Ô2Ð2Ø$Ð$r   rÃ   )r,   r   Ú
assertTrueÚgr_frameÚassertFalser<   )r?   rÆ   r-   ÚframeÚfrom_gs   `    r   Ú
test_framezTestGreenlet.test_frameb  s·   ø€ ð	%ð 	%ð 	%ð 	%ð 	%õ
 ˜‰OŒOˆØ—’‘
”
ˆØ�Š˜ ¤Ð+Ñ,Ô,Ð,Ø�Š˜ÑÔÐà—’‘”ˆØ×Ò˜ÑÔÐØ×Ò˜Ð!2Ñ3Ô3Ð3Ø×Ò˜œ TÑ*Ô*Ð*Ð*Ð*r   c                 ó  — d„ }t          j        |d¬¦  «        }t          j        |d¬¦  «        }|                     ¦   «          |                     ¦   «          |                     d¦  «         |                     d¦  «         d S )Nc                 óT   ‡ — t          ˆ fd„¦  «        }|                     ¦   «          d S )Nc                  ó,   •— t          j        ‰ ¦  «        S r'   )r–   r—   ©Úxs   €r   ú<lambda>z>TestGreenlet.test_thread_bug.<locals>.runner.<locals>.<lambda>t  s   ø€ ¥D¤J¨q¡M¤M€ r   r+   )rÑ   r-   s   ` r   Úrunnerz,TestGreenlet.test_thread_bug.<locals>.runners  s+   ø€ ÝÐ1Ð1Ð1Ð1Ñ2Ô2ˆAØ�HŠH‰JŒJˆJˆJˆJr   )gš™™™™™É?r�   )g333333Ó?rv   )rq   rr   rw   rx   )r?   rÓ   Út1Út2s       r   Útest_thread_bugzTestGreenlet.test_thread_bugr  sy   € ð	ð 	ð 	õ Ô V°&Ð9Ñ9Ô9ˆÝÔ V°&Ð9Ñ9Ô9ˆØ
�Š‰
Œ
ˆ
Ø
�Š‰
Œ
ˆ
Ø
�Š�‰ŒˆØ
�Š�‰Œˆˆˆr   c                 ó†   ‡ — ˆ fd„}t          |¦  «                             dd¬¦  «        }‰                      |d¦  «         d S )Nc                 ó`   •— ‰                      | d¦  «         ‰                      |d¦  «         dS )Nr:   r9   é*   )r<   )re   rc   r?   s     €r   rF   z,TestGreenlet.test_switch_kwargs.<locals>.run~  s4   ø€ Ø×Ò˜Q Ñ"Ô"Ð"Ø×Ò˜Q Ñ"Ô"Ð"Ø�2r   r:   r9   )re   rc   rÙ   ©r,   r   r<   )r?   rF   rÑ   s   `  r   Útest_switch_kwargszTestGreenlet.test_switch_kwargs}  sZ   ø€ ð	ð 	ð 	ð 	ð 	õ ˜ÑÔ×#Ò# a¨1Ð#Ñ-Ô-ˆØ×Ò˜˜BÑÔÐÐÐr   c                 ó(  — d„ }t          |¦  «        }|                      ddi|                     d¦  «        ¦  «         |                      dddif|                     ¦   «         ¦  «         |                      d|                     ¦   «         ¦  «         d S )Nc                 óÂ   — t          j        ¦   «         j                             | ¬¦  «         t          j        ¦   «         j                             dd¬¦  «         | | dz  fS )NrÐ   r9   r4   r   rÐ   s    r   rF   z6TestGreenlet.test_switch_kwargs_to_parent.<locals>.run†  sX   € ÝÔÑ!Ô!Ô(×/Ò/°!Ð/Ñ4Ô4Ð4ÝÔÑ!Ô!Ô(×/Ò/°°QÐ/Ñ7Ô7Ð7Ø�a˜1‘f�9Ðr   rÑ   r4   )r9   )r4   é	   )r,   r<   r   )r?   rF   r-   s      r   Útest_switch_kwargs_to_parentz)TestGreenlet.test_switch_kwargs_to_parent…  s�   € ð	ð 	ð 	õ ˜ÑÔˆØ×Ò˜#˜q˜ 1§8¢8¨A¡;¤;Ñ/Ô/Ð/Ø×Ò˜$  a Ð)¨1¯8ª8©:¬:Ñ6Ô6Ð6Ø×Ò˜ §¢¡¤Ñ,Ô,Ð,Ð,Ð,r   c                 ó  ‡‡‡— i Št          j        ¦   «         Št          j        ¦   «         Šˆˆˆfd„}t          j        |¬¦  «        }|                     ¦   «          ‰                     d¦  «         |                      t          j        ¦  «        5  ‰d                              ¦   «          d d d ¦  «         n# 1 swxY w Y   ‰ 	                    ¦   «          | 
                    d¦  «         ‰                     ¦   «          d S )Nc                  ó€   •— t          d„ ¦  «        ‰d<   ‰                      ¦   «          ‰                     d¦  «         d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   zITestGreenlet.test_switch_to_another_thread.<locals>.run.<locals>.<lambda>•  ó   € ¨D€ r   r-   rv   ©r,   r˜   r�   ©Úcreated_eventÚdataÚ
done_events   €€€r   rF   z7TestGreenlet.test_switch_to_another_thread.<locals>.run”  ó@   ø€ Ý# L LÑ1Ô1ˆD�‰IØ×ÒÑÔÐØ�OŠO˜BÑÔÐÐÐr   rn   rv   r-   )rq   r•   rr   rw   r�   rG   r   r‡   r   r˜   rx   Úclear)r?   rF   Úthreadræ   rç   rè   s      @@@r   Útest_switch_to_another_threadz*TestGreenlet.test_switch_to_another_thread�  s.  øøø€ ØˆÝ!œÑ)Ô)ˆÝ”_Ñ&Ô&ˆ
ð	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 õ Ô!¨Ð-Ñ-Ô-ˆØ�Š‰ŒˆØ×Ò˜2ÑÔÐØ×Ò�xœ~Ñ.Ô.ð 	ð 	Ø�ŒI×ÒÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à�ŠÑÔÐØ�Š�B‰Œˆà�
Š
‰Œˆˆˆs   ÂB7Â7B;Â>B;c                 ób   ‡ ‡— ˆˆ fd„}ˆ fd„Št          |¦  «                             ¦   «          d S )Nc                  óê   •— 	 t          d¦  «        ‚#  t          j        ¦   «         } t          ‰¦  «                             ¦   «          ‰                     | t          j        ¦   «         ¦  «         Y d S xY w)NÚfun)Ú
ValueErrorr    r!   r,   r   r<   )r!   r_   r?   s    €€r   r8   z&TestGreenlet.test_exc_state.<locals>.f£  sg   ø€ ð;Ý  Ñ'Ô'Ð'øð;Ýœ<™>œ>�Ý˜A‘”×%Ò%Ñ'Ô'Ð'Ø× Ò  ­3¬<©>¬>Ñ:Ô:Ð:Ð:Ð:Ð:øøøs
   ƒ ’AA2c                  óV   •— ‰                       t          j        ¦   «         d¦  «         d S )N)NNN)r<   r    r!   rB   s   €r   r_   z&TestGreenlet.test_exc_state.<locals>.h«  s&   ø€ Ø×Ò�Sœ\™^œ^Ð-?Ñ@Ô@Ð@Ð@Ð@r   r+   )r?   r8   r_   s   ` @r   Útest_exc_statezTestGreenlet.test_exc_state¢  s`   øø€ ð	;ð 	;ð 	;ð 	;ð 	;ð 	;ð	Að 	Að 	Að 	Að 	Aõ 	�A‰Œ×ÒÑÔÐÐÐr   c                 óÈ  — d„ }d„ }d„ }t          |¦  «        }|                      |j        i ¦  «         |                     ¦   «          |                      |j        d¦  «         |                      |j        ddi¦  «         |j        |_        |                      |j        ddi¦  «         |                      t          ||¦  «         |                      t          ||d¦  «         d S )Nc                  ó6   — dt          j        ¦   «         _        d S ©NrÙ   )r   r   Útestr   r   r   r8   z*TestGreenlet.test_instance_dict.<locals>.f±  s   € Ø)+�HÔÑ!Ô!Ô&Ð&Ð&r   c                 ó
   — | ` d S r'   ©Ú__dict__)r-   s    r   Údeldictz0TestGreenlet.test_instance_dict.<locals>.deldict³  s   € Ø�
�
�
r   c                 ó   — || _         d S r'   rø   )r-   r¥   s     r   Úsetdictz0TestGreenlet.test_instance_dict.<locals>.setdictµ  s   € ØˆAŒJˆJˆJr   rÙ   rö   )r,   r<   rù   r   rö   rG   Ú	TypeError)r?   r8   rú   rü   r-   s        r   Útest_instance_dictzTestGreenlet.test_instance_dict°  sð   € ð	,ð 	,ð 	,ð	ð 	ð 	ð	ð 	ð 	å˜‰NŒNˆØ×Ò˜œ RÑ(Ô(Ð(Ø	�Š‰
Œ
ˆ
Ø×Ò˜œ Ñ$Ô$Ð$Ø×Ò˜œ f¨b \Ñ2Ô2Ð2Ø”ZˆŒ
Ø×Ò˜œ f¨b \Ñ2Ô2Ð2Ø×Ò�) W¨aÑ0Ô0Ð0Ø×Ò�) W¨a°Ñ4Ô4Ð4Ð4Ð4r   c                 óŠ   ‡— g Šˆfd„}t          |¦  «        }|                     ¦   «          |                      ‰dg¦  «         d S )Nc                  óp   •— ‰                       t          t          j        ¦   «         d¦  «        ¦  «         d S rE   )r   Úhasattrr   r   )Úhas_runs   €r   Úfuncz;TestGreenlet.test_running_greenlet_has_no_run.<locals>.funcÃ  s9   ø€ Ø�NŠNÝ�Ô+Ñ-Ô-¨uÑ5Ô5ñô ð ð ð r   FrÚ   )r?   r  r-   r  s      @r   Ú test_running_greenlet_has_no_runz-TestGreenlet.test_running_greenlet_has_no_runÁ  s[   ø€ Øˆð	ð 	ð 	ð 	ð 	õ
 ˜ÑÔˆØ	�Š‰
Œ
ˆ
Ø×Ò˜ 5 'Ñ*Ô*Ð*Ð*Ð*r   c                 óÂ   — dd l }|                      t          |j         t          ¦   «         ¦  «         |                      t          |j        t          ¦   «         ¦  «         d S r   )ÚcopyrG   rý   r,   Údeepcopy)r?   r  s     r   Útest_deepcopyzTestGreenlet.test_deepcopyÌ  sM   € ØˆˆˆØ×Ò�) T¤Yµ±´Ñ>Ô>Ð>Ø×Ò�) T¤]µK±M´MÑBÔBÐBÐBÐBr   c                 óf  ‡‡‡— t          d„ ¦  «        Št          j        ¦   «         Šg Šˆˆˆfd„}t          |‰¬¦  «        }|                     ¦   «          ~|                      ‰¦  «         |                      ‰d         ‰¦  «         |                      ‰d         j        ‰¦  «         ‰d d …= d Šd Šd S )Nc                  ó   — d S r'   r   r   r   r   rÒ   z;TestGreenlet.test_parent_restored_on_kill.<locals>.<lambda>Ò  s   €  $€ r   c                  ó(  •— 	 ‰                      ¦   «          d S # t          j        $ ri ‰                     t          j        ¦   «         j        ¦  «         ‰                     t          j        ¦   «         ¦  «         ‰                       ¦   «          Y d S w xY wr'   )r   r   r«   r   r   r   )ÚhubÚmainÚresults   €€€r   Úworkerz9TestGreenlet.test_parent_restored_on_kill.<locals>.workerÕ  sƒ   ø€ ðà—’‘”���øÝÔ(ð ð ð à—’�hÔ1Ñ3Ô3Ô:Ñ;Ô;Ð;Ø—’�hÔ1Ñ3Ô3Ñ4Ô4Ð4Ø—
’
‘”����ð	øøøs   ƒ ™A4BÂBr*   r   r   )r,   r   r   r   rÇ   rS   r   )r?   r  r-   r  r  r  s      @@@r   Útest_parent_restored_on_killz)TestGreenlet.test_parent_restored_on_killÑ  sÎ   øøø€ Ý˜,˜,Ñ'Ô'ˆÝÔ"Ñ$Ô$ˆØˆð	ð 	ð 	ð 	ð 	ð 	ð 	õ ˜ sÐ+Ñ+Ô+ˆØ	�Š‰
Œ
ˆ
àØ�Š˜ÑÔÐØ�Š�f˜Q”i Ñ&Ô&Ð&Ø�Š�f˜Q”iÔ&¨Ñ,Ô,Ð,ð �1�1�1ˆIØˆØˆˆˆr   c                 óÔ   — t          ¦   «         }t          d„ |¬¦  «        }|                      t          ¦  «        5  |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   z9TestGreenlet.test_parent_return_failure.<locals>.<lambda>ð  ó   €  € r   r*   )r,   rG   rH   r   )r?   r.   r¤   s      r   Útest_parent_return_failurez'TestGreenlet.test_parent_return_failureì  s¤   € å‰]Œ]ˆå˜˜¨bÐ1Ñ1Ô1ˆà×Ò�~Ñ.Ô.ð 	ð 	Ø�IŠI‰KŒKˆKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   »AÁA!Á$A!c                 óž   —  G d„ dt           ¦  «        } |d„ ¦  «        }|                      t          |j        t          ¦   «         ¦  «         d S )Nc                   ó   — e Zd Zd„ ZdS )ú>TestGreenlet.test_throw_exception_not_lost.<locals>.mygreenletc                 óJ   — 	 t           ‚#  Y nxY wt          j        | |¦  «        S r'   )Ú	Exceptionr,   Ú__getattribute__©r?   Únames     r   r  zOTestGreenlet.test_throw_exception_not_lost.<locals>.mygreenlet.__getattribute__÷  s-   € ðÝ#�OøðØ�DøøøÝ"Ô3°D¸$Ñ?Ô?Ð?s   ‚	 ‰N©r   r   r   r  r   r   r   Ú
mygreenletr  ö  s(   € € € € € ð@ð @ð @ð @ð @r   r  c                  ó   — d S r'   r   r   r   r   rÒ   z<TestGreenlet.test_throw_exception_not_lost.<locals>.<lambda>ý  ó   € ˜t€ r   )r,   rG   r   rO   )r?   r  r-   s      r   Útest_throw_exception_not_lostz*TestGreenlet.test_throw_exception_not_lostõ  sk   € ð	@ð 	@ð 	@ð 	@ð 	@�ñ 	@ô 	@ð 	@ð ˆJ�|�|Ñ$Ô$ˆØ×Ò�) Q¤W­i©k¬kÑ:Ô:Ð:Ð:Ð:r   Fc                 óø  ‡‡‡— g Šd„ Šˆˆˆfd„}t          j        |¬¦  «        }|                     ¦   «          |                     d¦  «         ~‰r|                      ¦   «          |                      t          j        ¦  «        5 }‰d                              t          ¦  «         d d d ¦  «         n# 1 swxY w Y   ‰s2t          |j        ¦  «        }|                      |dk    pd|v ¦  «         n(|                      t          |j        ¦  «        d¦  «         t          ‰d         j        d¦  «        rQ|                      t           ¦  «        5  ‰d         j                             ¦   «          d d d ¦  «         n# 1 swxY w Y   ‰sEt          ‰d         j        j        d¦  «        r$‰d         j        j                             ¦   «          n |                      ‰d         j        ¦  «         ~d Š‰d d …= d	| _        d S )
Nc                  óZ   — t          j        ¦   «         j                             ¦   «          d S r'   r   r   r   r   r  zGTestGreenlet._do_test_throw_to_dead_thread_doesnt_crash.<locals>.worker  ó&   € ÝÔÑ!Ô!Ô(×/Ò/Ñ1Ô1Ð1Ð1Ð1r   c                  óÎ   •— t          ‰¦  «        } |                      ¦   «          ‰                     | ¦  «         ‰r)|                      ¦   «          t          j        ¦   «          d S d S r'   )r,   r   r   r   r   )r-   r  Úwait_for_cleanupr  s    €€€r   ÚcreatorzHTestGreenlet._do_test_throw_to_dead_thread_doesnt_crash.<locals>.creator  sc   ø€ Ý˜FÑ#Ô#ˆAØ�HŠH‰JŒJˆJØ�MŠM˜!ÑÔÐØð &à—’‘
”
�
ÝÔ#Ñ%Ô%Ð%Ð%Ð%ð&ð &r   rn   rv   r   úBcannot switch to a different thread (which happens to have exited)zCannot switchrê   T)rq   rr   rw   rx   Úwait_for_pending_cleanupsrG   r   r‡   rO   r   rJ   rK   rÇ   r<   r  rÈ   ÚRuntimeErrorrê   Úf_localsrW   Úexpect_greenlet_leak)r?   r&  r'  rœ   r(   Úsr  r  s    `    @@r   Ú*_do_test_throw_to_dead_thread_doesnt_crashz7TestGreenlet._do_test_throw_to_dead_thread_doesnt_crash   sœ  øøø€ àˆð	2ð 	2ð 	2ð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&õ Ô GÐ,Ñ,Ô,ˆØ	�Š‰	Œ	ˆ	Ø	�Šˆr‰
Œ
ˆ
Øð ð 	-Ø×*Ò*Ñ,Ô,Ð,Ø×Ò�xœ~Ñ.Ô.ð 	'°#Ø�1ŒI�OŠO�IÑ&Ô&Ð&ð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'ð  ð 
	Ý�C”MÑ"Ô"ˆAØ�OŠOØÐYÒYð (Ø" aÐ'ñô ð ð ð
 ×ÒÝ�C”MÑ"Ô"ØTñô ð õ
 �6˜!”9Ô% wÑ/Ô/ð 	+à×"Ò"¥<Ñ0Ô0ð +ð +Ø�q”	Ô"×(Ò(Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð  ð 	2å�v˜a”yÔ)Ô2°GÑ<Ô<ð 4Ø�q”	Ô"Ô+×1Ò1Ñ3Ô3Ð3øà×Ò˜f QœiÔ0Ñ1Ô1Ð1àØˆØ�1�1�1ˆIð %)ˆÔ!Ð!Ð!s$   Â!B1Â1B5Â8B5Å E9Å9E=Æ E=Nr9   )r4   rv   z;does not leaks on Windows 3.10, but does on other platformsc                 ó.   — |                       ¦   «          d S r'   ©r.  rB   s    r   Ú&test_throw_to_dead_thread_doesnt_crashz3TestGreenlet.test_throw_to_dead_thread_doesnt_crash:  s   € ð 	×7Ò7Ñ9Ô9Ð9Ð9Ð9r   c                 ó0   — |                       d¦  «         d S rk   r0  rB   s    r   Ú+test_throw_to_dead_thread_doesnt_crash_waitz8TestGreenlet.test_throw_to_dead_thread_doesnt_crash_waitB  s   € Ø×7Ò7¸Ñ=Ô=Ð=Ð=Ð=r   c                 ó    —  G d„ dt           ¦  «        } |¦   «         }|                      |                     d¦  «        d¦  «         d| _        d S )Nc                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ú7TestGreenlet.test_recursive_startup.<locals>.convolutedc                 ó<   — t          j        | ¦  «         d| _        d S r   )r,   Ú__init__ÚcountrB   s    r   r8  z@TestGreenlet.test_recursive_startup.<locals>.convoluted.__init__H  s   € ÝÔ$ TÑ*Ô*Ð*Ø�”
�
�
r   c                 ó†   — |dk    r'| j         dk    rd| _         |                      d¦  «         t          j        | |¦  «        S )NrF   r   r   é+   )r9  r   r,   r  r  s     r   r  zHTestGreenlet.test_recursive_startup.<locals>.convoluted.__getattribute__K  s>   € Ø˜5’=�= T¤Z°1¢_ _Ø!"�D”JØ—K’K ‘O”O�OÝ"Ô3°D¸$Ñ?Ô?Ð?r   c                 ó:   — 	 | j                              |¦  «         Œr'   ©r   r   )r?   r¥   s     r   rF   z;TestGreenlet.test_recursive_startup.<locals>.convoluted.runP  s"   € ð.Ø”K×&Ò& uÑ-Ô-Ð-ð.r   N)r   r   r   r8  r  rF   r   r   r   Ú
convolutedr6  G  sD   € € € € € ðð ð ð@ð @ð @ð
.ð .ð .ð .ð .r   r>  rÙ   r;  T)r,   r<   r   r,  )r?   r>  r-   s      r   Útest_recursive_startupz#TestGreenlet.test_recursive_startupE  si   € ð	.ð 	.ð 	.ð 	.ð 	.�ñ 	.ô 	.ð 	.ð ˆJ‰LŒLˆØ×Ò˜Ÿš "™œ rÑ*Ô*Ð*ð
 %)ˆÔ!Ð!Ð!r   c                 ó¦  ‡‡‡— t          j        ¦   «         Š‰                     ¦   «          t          j        ¦   «         Š‰                     ¦   «           G ˆˆfd„dt          ¦  «        }d„ }ˆˆˆfd„}t	          j        ¦   «         }t          |¦  «        gŠ |¦   «         ‰d         _        ‰d                              ¦   «          t          j	        |¬¦  «        }| 
                    ¦   «          ‰                     ¦   «          ‰                     ¦   «          |                      t	          j        ¦   «         |¦  «         |                     d¦  «         d S )Nc                   ó   •— e Zd Zˆ ˆfd„ZdS )ú;TestGreenlet.test_threaded_updatecurrent.<locals>.finalizedc                 óX   •— ‰                      ¦   «          ‰                     ¦   «          d S r'   ©ÚreleaseÚacquire)r?   Úlock1Úlock2s    €€r   Ú__del__zCTestGreenlet.test_threaded_updatecurrent.<locals>.finalized.__del__c  s#   ø€ ð —’‘”�Ø—’‘”���r   N©r   r   r   rI  ©rG  rH  s   €€r   Ú	finalizedrB  b  s3   ø€ € € € € ð ð  ð  ð  ð  ð  ð  ð  r   rL  c                  óZ   — t          j        ¦   «         j                             ¦   «          d S r'   r   r   r   r   Údeallocatorz=TestGreenlet.test_threaded_updatecurrent.<locals>.deallocatorj  r$  r   c                  óú   •— ‰                      ¦   «          t          j        ¦   «          ‰ d= ‰                     ¦   «          ‰                      ¦   «          t          j        ¦   «          ‰                     ¦   «          d S r   ©rF  r   r   rE  )r-   rG  rH  s   €€€r   Úfthreadz9TestGreenlet.test_threaded_updatecurrent.<locals>.fthreadl  s`   ø€ Ø�MŠM‰OŒOˆOÝÔÑ!Ô!Ð!Ø�!�Ø�MŠM‰OŒOˆOØ�MŠM‰OŒOˆOÝÔÑ!Ô!Ð!Ø�MŠM‰OŒOˆOˆOˆOr   r   rn   rv   )rq   ÚLockrF  Úobjectr   r   r,   Úbombr   rr   rw   rE  r<   rx   )	r?   rL  rN  rQ  r  rœ   r-   rG  rH  s	         @@@r   Útest_threaded_updatecurrentz(TestGreenlet.test_threaded_updatecurrent[  sT  øøø€ å”Ñ Ô ˆØ�Š‰Œˆå”Ñ Ô ˆØ�Š‰Œˆð	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 �ñ 	 ô 	 ð 	 ð	2ð 	2ð 	2ð	ð 	ð 	ð 	ð 	ð 	ð 	õ Ô"Ñ$Ô$ˆÝ˜Ñ%Ô%Ð&ˆØ�I‘K”Kˆˆ!ŒŒ	Ø	ˆ!Œ�Š‰ŒˆÝÔ GÐ,Ñ,Ô,ˆØ	�Š‰	Œ	ˆ	à�Š‰ŒˆØ�Š‰Œˆð 	×Ò�Ô,Ñ.Ô.°Ñ5Ô5Ð5à	�Šˆr‰
Œ
ˆ
ˆ
ˆ
r   c                 ó"  ‡‡‡— g Šˆˆˆfd„Šd„ Št          ‰¦  «        gŠ‰d                              ¦   «          t          ‰‰d         ¦  «        Š‰                     ¦   «         }|                      ‰¦  «         |                      |d¦  «         d S )Nc                  ó–  •— t          j        ¦   «         j                             ¦   «         } ‰d= t          j        ¦   «         j        ‰_        	 t          j        ¦   «         j                             | ¦  «         ‰                     t          j        ¦   «         ¦  «         d S # ‰                     t          j        ¦   «         ¦  «         w xY wr   )r   r   r   r   r   )r¥   Ú	initiatorr#   r  s    €€€r   r  z>TestGreenlet.test_dealloc_switch_args_not_lost.<locals>.workerŒ  s¢   ø€ åÔ'Ñ)Ô)Ô0×7Ò7Ñ9Ô9ˆEà�q�	Ý'Ô2Ñ4Ô4Ô;ˆIÔð3ÝÔ#Ñ%Ô%Ô,×3Ò3°EÑ:Ô:Ð:à—’�HÔ/Ñ1Ô1Ñ2Ô2Ð2Ð2Ð2ø�—’�HÔ/Ñ1Ô1Ñ2Ô2Ð2Ð2øøøs   Á+B  Â (Cc                  ó   — dS rõ   r   r   r   r   rX  zATestGreenlet.test_dealloc_switch_args_not_lost.<locals>.initiator™  ó   € Ø�2r   r   rÙ   )r,   r   rÇ   r<   )r?   r¥   rX  r#   r  s     @@@r   Ú!test_dealloc_switch_args_not_lostz.TestGreenlet.test_dealloc_switch_args_not_lostŠ  s¶   øøø€ Øˆð	3ð 	3ð 	3ð 	3ð 	3ð 	3ð 	3ð	ð 	ð 	õ ˜fÑ%Ô%Ð&ˆàˆqŒ	×ÒÑÔÐÝ 	¨6°!¬9Ñ5Ô5ˆ	Ø× Ò Ñ"Ô"ˆØ�Š˜ÑÔÐØ×Ò˜ Ñ#Ô#Ð#Ð#Ð#r   c                 óè   ‡‡‡— d„ Š G d„ dt           ¦  «        } |¦   «         Št          d¬¦  «        Šˆˆˆfd„}t          |¦  «        }|                      |                     ¦   «         ‰¦  «         d S )Nc                 ó   —  | |i |¤Ž d S r'   r   )r  re   Úks      r   Ú_applyz0TestGreenlet.test_tuple_subclass.<locals>._apply²  s   € ØˆD�!ˆM�qˆMˆMˆMˆMˆMr   c                   ó   — e Zd Zd„ ZdS )ú1TestGreenlet.test_tuple_subclass.<locals>.mytuplec                 ó€   — t          j        ¦   «                              ¦   «          t                               | ¦  «        S r'   )r   r   r   ÚtupleÚ__len__rB   s    r   rd  z9TestGreenlet.test_tuple_subclass.<locals>.mytuple.__len__¶  s/   € ÝÔ#Ñ%Ô%×,Ò,Ñ.Ô.Ð.Ý—}’} TÑ*Ô*Ð*r   N)r   r   r   rd  r   r   r   Úmytuplera  µ  s#   € € € € € ð+ð +ð +ð +ð +r   re  rÙ   )re   c                  óX   •—  ‰ t          j        ¦   «         j        j        ‰‰¦  «         d S r'   r   )r_  r�   Úkwargss   €€€r   Úswitchapplyz5TestGreenlet.test_tuple_subclass.<locals>.switchapply»  s,   ø€ ØˆF•8Ô&Ñ(Ô(Ô/Ô6¸¸fÑEÔEÐEÐEÐEr   )rc  Údictr,   r<   r   )r?   re  rh  r-   r_  r�   rg  s       @@@r   Útest_tuple_subclassz TestGreenlet.test_tuple_subclass¤  s³   øøø€ ð	ð 	ð 	ð	+ð 	+ð 	+ð 	+ð 	+•eñ 	+ô 	+ð 	+ð ˆw‰yŒyˆÝ˜�‘”ˆð	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Få˜Ñ$Ô$ˆØ×Ò˜Ÿš™œ VÑ,Ô,Ð,Ð,Ð,r   c                 óÖ   — t          dt          fdt          d„ ¦  «        i¦  «        } G d„ d|¦  «        } G d„ d|¦  «        } |¦   «          |                      t          |¦  «         d S )NÚAbstractSubclassrF   c                 ó   — d S r'   r   rB   s    r   rÒ   z7TestGreenlet.test_abstract_subclasses.<locals>.<lambda>Ä  s   € °€ r   c                   ó   — e Zd ZdS )ú:TestGreenlet.test_abstract_subclasses.<locals>.BadSubclassNr   r   r   r   ÚBadSubclassro  Æ  ó   € € € € € ØˆDr   rp  c                   ó   — e Zd Zd„ ZdS )ú;TestGreenlet.test_abstract_subclasses.<locals>.GoodSubclassc                 ó   — d S r'   r   rB   s    r   rF   z?TestGreenlet.test_abstract_subclasses.<locals>.GoodSubclass.runÊ  s   € Ø�r   N)r   r   r   rF   r   r   r   ÚGoodSubclassrs  É  s#   € € € € € ðð ð ð ð r   ru  )r   r,   r   rG   rý   )r?   rl  rp  ru  s       r   Útest_abstract_subclassesz%TestGreenlet.test_abstract_subclassesÀ  s­   € Ý"ØÝˆNØ•NÐ#4Ð#4Ñ5Ô5Ð6ñ8ô 8Ðð
	ð 	ð 	ð 	ð 	Ð*ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð+ñ 	ô 	ð 	ð 	ˆ‰ŒˆØ×Ò�) [Ñ1Ô1Ð1Ð1Ð1r   c                 óÀ   ‡ ‡— t          j        ¦   «         sd S t          j        ¦   «         d         Š‰dk     rd S ˆˆ fd„}t          d¦  «        D ]} |¦   «         r d S Œd S )Nr   é2   c                  óL  •‡	‡
‡‡— t          j        ¦   «         Š
‰
                     ¦   «          t          j        ¦   «         Š‰                     ¦   «          dgŠˆ
ˆfd„} t          j        | ¬¦  «        }|                     ¦   «           G ˆ
ˆˆfd„dt
          ¦  «        Š	 G ˆ	fd„dt
          ¦  «        }g }t          ‰dz  ¦  «        }t          j        ¦   «         } |¦   «         }|D ]Q}d }‰d	         r| 	                    d
¦  «          dS t          ¦   «         }‰d	         r nH|                     |¦  «         ŒRt          j        ¦   «          ‰d	         r| 	                    d
¦  «         dS ‰                     |j        |¦  «         |D ]}‰                     |j        |¦  «         ŒdS )NFc                  ó~   •— ‰                       ¦   «          t          j        ¦   «          ‰                     ¦   «          d S r'   rP  rK  s   €€r   Úanother_threadzWTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.another_threadÜ  s0   ø€ Ø—’‘”�ÝÔ#Ñ%Ô%Ð%Ø—’‘”���r   rn   c                   ó   •— e Zd Zˆ ˆˆfd„ZdS )úTTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.gc_callbackc                 ób   •— ‰                      ¦   «          ‰                     ¦   «          d‰d<   d S )NTr   rD  )r?   rG  rH  Úrecycleds    €€€r   rI  z\TestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.gc_callback.__del__ã  s*   ø€ Ø—M’M‘O”O�OØ—M’M‘O”O�OØ"&�H˜Q‘K�K�Kr   NrJ  )rG  rH  r  s   €€€r   Úgc_callbackr}  â  s8   ø€ € € € € ð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð 'r   r€  c                   ó   •— e Zd Zˆ fd„ZdS )úPTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.garbagec                 ó4   •— | | _          ‰¦   «         | _        d S r'   )ÚcycleÚcallback)r?   r€  s    €r   r8  zYTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.garbage.__init__è  s   ø€ Ø!%�D”JØ$/ K¡M¤M�D”M�M�Mr   N)r   r   r   r8  )r€  s   €r   Úgarbager‚  ç  s.   ø€ € € € € ð2ð 2ð 2ð 2ð 2ð 2ð 2r   r†  r9   r   rv   T)rq   rR  rF  rr   rw   rS  r>   r   r   rx   r,   r   rŸ   r    r<   r   )r{  rœ   r†  ÚlrÑ   Úcurrentr-   r‘   Úlastr€  rG  rH  r  ÚNr?   s            @@@@€€r   Úattemptz?TestGreenlet.test_implicit_parent_with_threads.<locals>.attemptÖ  sø  øøøøø€ Ý”NÑ$Ô$ˆEØ�MŠM‰OŒOˆOÝ”NÑ$Ô$ˆEØ�MŠM‰OŒOˆOØ�wˆHð ð  ð  ð  ð  ð  õ Ô ¨Ð7Ñ7Ô7ˆAØ�GŠG‰IŒIˆIð'ð 'ð 'ð 'ð 'ð 'ð 'ð 'ð '�fñ 'ô 'ð 'ð
2ð 2ð 2ð 2ð 2ð 2ð 2�&ñ 2ô 2ð 2ð ˆAÝ�a˜‘c‘
”
ˆAÝÔ)Ñ+Ô+ˆGØ�‘	”	ˆAØð ð �Ø�Ø˜A”;ð !à—F’F˜2‘J”J�JØ ˜5˜5Ý"‘}”}�Ø˜A”;ð Ø�EØ—’˜‘”��õ ”
‘”�Ø˜A”;ð Ø—F’F˜2‘J”J�JØ�uØ×Ò˜Tœ[¨'Ñ2Ô2Ð2Øð 4ð 4�Ø× Ò  ¤¨7Ñ3Ô3Ð3Ð3Ø�4r   r;   )rŸ   Ú	isenabledÚget_thresholdr>   )r?   r‹  r‘   rŠ  s   `  @r   Ú!test_implicit_parent_with_threadsz.TestGreenlet.test_implicit_parent_with_threadsÐ  s’   øø€ ÝŒ|‰~Œ~ð 	ØˆFÝÔÑÔ˜qÔ!ˆØˆrŠ6ˆ6ØˆFð,	ð ,	ð ,	ð ,	ð ,	ð ,	õZ �q‘”ð 	ð 	ˆAØˆw‰yŒyð Ø��ðð	ð 	r   c                 ó¢  ‡ ‡‡— ddl mŠ ddl mŠ  G d„ dt          ¦  «        }t	          j        |¦  «        }g ‰ _        ˆˆˆ fd„}t          d¦  «        D ]} ||¦  «                             ¦   «          Œ ‰ `t          r*‰  
                    t	          j        |¦  «        |¦  «         d S ‰                      t	          j        |¦  «        |¦  «         d S )Nr   ©r   )r«   c                   ó   — e Zd ZdS )úTTestGreenlet.test_issue_245_reference_counting_subclass_no_threads.<locals>.GreenletNr   r   r   r   ÚGreenletr’    rq  r   r“  c                  ó¨   •— 	  ‰¦   «         j                              ¦   «          d S # ‰ $ r& ‰j                              ‰¦   «         ¦  «         Y d S w xY wr'   )r   r   Úgletsr   )r«   r   r?   s   €€€r   Úgreenlet_mainzYTestGreenlet.test_issue_245_reference_counting_subclass_no_threads.<locals>.greenlet_main  si   ø€ ð0Ø�
‘”Ô#×*Ò*Ñ,Ô,Ð,Ð,Ð,øØð 0ð 0ð 0Ø”
×!Ò! * *¡,¤,Ñ/Ô/Ð/Ð/Ð/Ð/ð0øøøs   ƒ!& ¦'AÁArv   )r   r   r«   r,   r    rg   r•  r>   r   r   ÚassertGreaterEqualr<   )r?   r“  Úinitial_refsr–  r‘   r«   r   s   `    @@r   Ú5test_issue_245_reference_counting_subclass_no_threadszBTestGreenlet.test_issue_245_reference_counting_subclass_no_threads  s$  øøø€ ð 	(Ð'Ð'Ð'Ð'Ð'Ø)Ð)Ð)Ð)Ð)Ð)ð	ð 	ð 	ð 	ð 	•{ñ 	ô 	ð 	õ ” xÑ0Ô0ˆð ˆŒ
ð	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0õ �r‘”ð 	-ð 	-ˆAØˆH�]Ñ#Ô#×*Ò*Ñ,Ô,Ð,Ð,àˆJÝ&ð 	Fð ×#Ò#¥C¤O°HÑ$=Ô$=¸|ÑLÔLÐLÐLÐLà×Ò�Sœ_¨XÑ6Ô6¸ÑEÔEÐEÐEÐEr   z;The manylinux images appear to hang on this test on 3.13rc2c                 óZ  ‡‡‡‡‡— ddl m} ddl m} ddlmŠ  G d„ dt
          ¦  «        Šg Š |¦   «         Šˆfd„Šˆˆˆˆˆfd„}t          j        ‰¦  «        }g }|d	z   }t          rd
}t          |¦  «        D ]C} |¦   «         } |||f¬¦  «        }	| 
                    |¦  «         |	                     ¦   «          ŒD|D ]}
|
                     d¦  «         Œ‰d d …= ‰                     ¦   «          |                      ¦   «          |                      t          j        ‰¦  «        |¦  «         d S )Nr   )rr   )r•   r�  c                   ó   — e Zd ZdS )úSTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.MyGreenletNr   r   r   r   Ú
MyGreenletrœ  ?  rq  r   r�  c                  óJ   •—  ‰ ¦   «         j                              ¦   «          d S r'   r=  r�  s   €r   r–  zVTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.greenlet_mainE  s$   ø€ ØˆJ‰LŒLÔ×&Ò&Ñ(Ô(Ð(Ð(Ð(r   c                 óØ   •—  ‰‰¦  «        }‰                      |¦  «         |                     ¦   «          ~|                      ¦   «          ‰                     d¦  «          ‰¦   «          d S )Nrv   )r   r   r˜   r�   )Úgreenlet_running_eventÚminer�  r   r•  r–  Úref_cleareds     €€€€€r   Úthread_mainzTTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.thread_mainH  sm   ø€ Ø�:˜mÑ,Ô,ˆDØ�LŠL˜ÑÔÐà�KŠK‰MŒMˆMàà"×&Ò&Ñ(Ô(Ð(ð ×Ò˜RÑ Ô Ð ð ˆJ‰LŒLˆLˆLˆLr   é-   rx  r�   rv   )rq   rr   r•   r   r   r,   r    rg   r   r>   r   rw   r�   r˜   r)  r<   )r?   rr   r•   r£  r˜  Úthread_ready_eventsr™   r‘   Úeventrë   rè   r�  r   r•  r–  r¢  s              @@@@@r   Ú2test_issue_245_reference_counting_subclass_threadsz?TestGreenlet.test_issue_245_reference_counting_subclass_threads1  sÉ  øøøøø€ ð 	%Ð$Ð$Ð$Ð$Ð$Ø#Ð#Ð#Ð#Ð#Ð#à'Ð'Ð'Ð'Ð'Ð'ð	ð 	ð 	ð 	ð 	�ñ 	ô 	ð 	ð ˆØ�e‘g”gˆð	)ð 	)ð 	)ð 	)ð 	)ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ8 ” zÑ2Ô2ˆØ ÐØ# bÑ(ˆÝ&ð 	ð ˆLÝ�|Ñ$Ô$ð 	ð 	ˆAØ�E‘G”GˆEØ�V ;°e°XÐ>Ñ>Ô>ˆFØ×&Ò& uÑ-Ô-Ð-Ø�LŠL‰NŒNˆNˆNð .ð 	 ð 	 ˆJØ�OŠO˜BÑÔÐÐð �!�!�!ˆHØ�ŠÑÔÐð 	×&Ò&Ñ(Ô(Ð(Ø×Ò�œ¨Ñ4Ô4°lÑCÔCÐCÐCÐCr   c                 óÞ   — d„ }t          |¦  «        }d„ }t          ||¦  «        }|                      t          ¦  «        5  |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nc                  ó   — dS )Né   r   r   r   r   Úno_argsz\TestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error.<locals>.no_args  rZ  r   c                  ó   — dS rõ   r   r   r   r   ÚleafzYTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error.<locals>.leaf„  rZ  r   )r,   rG   rý   r   )r?   r«  Úparent_never_startedr­  Úchilds        r   Ú>test_falling_off_end_switches_to_unstarted_parent_raises_errorzKTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error~  sÉ   € ð	ð 	ð 	õ  +¨7Ñ3Ô3Ðð	ð 	ð 	õ ˜DÐ"6Ñ7Ô7ˆð ×Ò�yÑ)Ô)ð 	ð 	Ø�LŠL‰NŒNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á A"Á"A&Á)A&c                 ó¤   — d„ }t          |¦  «        }d„ }t          ||¦  «        }|                     ¦   «         }|                      |d¦  «         d S )Nc                 ó
   — | dfS ©Né   r   rÐ   s    r   Úone_argzUTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works.<locals>.one_argŽ  s   € Ø�r�7ˆNr   c                  ó   — dS rõ   r   r   r   r   r­  zRTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works.<locals>.leaf“  rZ  r   )rÙ   r´  rÚ   )r?   rµ  r®  r­  r¯  r  s         r   Ú7test_falling_off_end_switches_to_unstarted_parent_workszDTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works�  sk   € ð	ð 	ð 	õ  +¨7Ñ3Ô3Ðð	ð 	ð 	õ ˜DÐ"6Ñ7Ô7ˆà—’‘”ˆØ×Ò˜ Ñ*Ô*Ð*Ð*Ð*r   c                 óà  ‡—  G d„ dt           ¦  «        } |¦   «         }g Št          ˆfd„|¦  «        }|                      t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      ‰dg¦  «         |                      t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      ‰dg¦  «         d S )Nc                   ó   — e Zd Zd„ ZdS )úXTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.Parentc                 ó    — |dk    rt           ‚d S rE   )r   r  s     r   r  ziTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.Parent.__getattribute__�  s   € Ø˜5’=�=Ý#�Oð !�=r   Nr  r   r   r   ÚParentrº  œ  s#   € € € € € ð$ð $ð $ð $ð $r   r¼  c                  ó.   •— ‰                       d¦  «        S rõ   r°   r"   s   €r   rÒ   zZTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.<lambda>¤  ó   ø€  D§K¢K°¡O¤O€ r   rÙ   )r,   rG   r   r   r<   )r?   r¼  r®  r¯  r#   s       @r   Ú;test_switch_to_dead_greenlet_with_unstarted_perverse_parentzHTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent›  s€  ø€ ð	$ð 	$ð 	$ð 	$ð 	$•[ñ 	$ô 	$ð 	$ð  &˜v™xœxÐØˆÝÐ3Ð3Ð3Ð3Ð5IÑJÔJˆð ×Ò�yÑ)Ô)ð 	ð 	Ø�LŠL‰NŒNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	×Ò˜ ˜tÑ$Ô$Ð$à×Ò�yÑ)Ô)ð 	ð 	Ø�LŠL‰NŒNˆNð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò˜ ˜tÑ$Ô$Ð$Ð$Ð$s$   ÁA/Á/A3Á6A3Â+CÃCÃCc                 ó:  ‡— g Št          ˆfd„¦  «        }t          ˆfd„¦  «        }|                     ¦   «          |                      ‰dg¦  «         ||_        |                     ¦   «         }|                      |¦  «         |                      ‰ddg¦  «         d S )Nc                  ó.   •— ‰                       d¦  «        S r³  r°   r"   s   €r   rÒ   zDTestGreenlet.test_switch_to_dead_greenlet_reparent.<locals>.<lambda>²  s   ø€ °4·;²;¸r±?´?€ r   c                  ó.   •— ‰                       d¦  «        S rõ   r°   r"   s   €r   rÒ   zDTestGreenlet.test_switch_to_dead_greenlet_reparent.<locals>.<lambda>³  r¾  r   rÙ   r´  )r,   r   r<   r   rW   )r?   r®  r¯  r  r#   s       @r   Ú%test_switch_to_dead_greenlet_reparentz2TestGreenlet.test_switch_to_dead_greenlet_reparent°  s¤   ø€ ØˆÝ*Ð+BÐ+BÐ+BÐ+BÑCÔCÐÝÐ3Ð3Ð3Ð3Ñ4Ô4ˆà�Š‰ŒˆØ×Ò˜ ˜tÑ$Ô$Ð$à+ˆŒà—’‘”ˆØ×Ò˜&Ñ!Ô!Ð!Ø×Ò˜  B˜xÑ(Ô(Ð(Ð(Ð(r   c                 ó*  ‡‡— t          j        ¦   «         Šˆfd„}ˆfd„Št          |¦  «        }|                     ¦   «          t          d„ ¦  «        }|                     ¦   «          |                      |j        ¦  «         |                      |j        j        j        d¦  «         |                      |j        j	        ¦  «         |                      |j        j	        j        j        d¦  «         |  
                    |j        j	        j	        ¦  «         d S )Nc                  ó   •—  ‰ ¦   «          d S r'   r   ©Úinners   €r   ÚouterzHTestGreenlet.test_can_access_f_back_of_suspended_greenlet.<locals>.outerÄ  s   ø€ ØˆE‰GŒGˆGˆGˆGr   c                  óV   •— ‰                       t          j        d¦  «        ¦  «         d S r   )r   r    rÄ   ©r  s   €r   rÇ  zHTestGreenlet.test_can_access_f_back_of_suspended_greenlet.<locals>.innerÇ  s%   ø€ Ø�KŠK�œ aÑ(Ô(Ñ)Ô)Ð)Ð)Ð)r   c                  ó   — d S r'   r   r   r   r   rÒ   zKTestGreenlet.test_can_access_f_back_of_suspended_greenlet.<locals>.<lambda>Ð  ó   € ¨€ r   rÇ  rÈ  )r   r   r,   r   rR   rÈ   r<   Úf_codeÚco_namerÅ   rW   )r?   rÈ  r  Ú	unrelatedrÇ  r  s       @@r   Ú,test_can_access_f_back_of_suspended_greenletz9TestGreenlet.test_can_access_f_back_of_suspended_greenlet¾  s  øø€ õ Ô"Ñ$Ô$ˆð	ð 	ð 	ð 	ð 	ð	*ð 	*ð 	*ð 	*ð 	*õ ˜%Ñ Ô ˆà�
Š
‰Œˆõ    Ñ-Ô-ˆ	Ø×ÒÑÔÐð 	×Ò˜Sœ\Ñ*Ô*Ð*Ø×Ò˜œÔ,Ô4°gÑ>Ô>Ð>Ø×Ò˜Sœ\Ô0Ñ1Ô1Ð1Ø×Ò˜œÔ,Ô3Ô;¸WÑEÔEÐEà×Ò˜#œ,Ô-Ô4Ñ5Ô5Ð5Ð5Ð5r   c                 óÄ  ‡‡‡— ddl mŠ ddlmŠ ˆˆˆfd„Št	          ‰¦  «        }|                     d¦  «         |j        }t          d¦  «        D ]*}|                      |j	        d         |¦  «         |j
        }Œ+|                      |j	        d         d¦  «         |                      |j
        ¦  «         |                      |                     d¦  «        d	¦  «         d S )
Nr   )Úpartialr   )Ú_test_extension_cppc                 ó®   •— | dk    r%| ‰                       ‰‰| dz
  ¦  «        ¦  «        z  S t          j        ¦   «         j                             ¦   «         S )Nr   r   )Ú	test_callr   r   r   r   )ÚvrÓ  rÒ  Úrecurses    €€€r   r×  z@TestGreenlet.test_get_stack_with_nested_c_calls.<locals>.recurseß  sT   ø€ Ø�1ŠuˆuØÐ.×8Ò8¸¸ÀÈ!ÈaÉ%Ñ9PÔ9PÑQÔQÑQÐQÝÔ&Ñ(Ô(Ô/×6Ò6Ñ8Ô8Ð8r   r;   rÖ  rv   i°  )Ú	functoolsrÒ  Ú rÓ  r,   r   rÈ   r>   r<   r+  rÅ   rW   )r?   ÚgrrÊ   rt   rÓ  rÒ  r×  s       @@@r   Ú"test_get_stack_with_nested_c_callsz/TestGreenlet.test_get_stack_with_nested_c_callsÛ  s  øøø€ Ø%Ð%Ð%Ð%Ð%Ð%Ø)Ð)Ð)Ð)Ð)Ð)ð	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9õ
 ˜Ñ!Ô!ˆØ
�	Š	�!‰ŒˆØ”ˆÝ�q‘”ð 	!ð 	!ˆAØ×Ò˜Uœ^¨CÔ0°!Ñ4Ô4Ð4Ø”LˆEˆEØ×Ò˜œ¨Ô,¨aÑ0Ô0Ð0Ø×Ò˜%œ,Ñ'Ô'Ð'Ø×Ò˜Ÿš 2™œ¨Ñ-Ô-Ð-Ð-Ð-r   c                 óF  ‡‡— t          j        ¦   «         Šˆfd„}ˆfd„Št          |¦  «        }|                     ¦   «         }t          d„ ¦  «        }|                     ¦   «          |                      |j        j        d¦  «         |                      |j        ¦  «         d S )Nc                  óB   •—  ‰ t          j        d¦  «        ¦  «         d S r   )r    rÄ   rÆ  s   €r   rÈ  z6TestGreenlet.test_frames_always_exposed.<locals>.outerô  s#   ø€ ØˆE•#”- Ñ"Ô"Ñ#Ô#Ð#Ð#Ð#r   c                 ó2   •— ‰                      | ¦  «         d S r'   ©r   )rÊ   r  s    €r   rÇ  z6TestGreenlet.test_frames_always_exposed.<locals>.inner÷  s   ø€ Ø�KŠK˜ÑÔÐÐÐr   c                  ó   — d S r'   r   r   r   r   rÒ   z9TestGreenlet.test_frames_always_exposed.<locals>.<lambda>ÿ  rÌ  r   rÈ  )	r   r   r,   r   r<   rÍ  rÎ  rW   rÅ   )r?   rÈ  rÚ  rÊ   rÏ  rÇ  r  s        @@r   Útest_frames_always_exposedz'TestGreenlet.test_frames_always_exposedî  s¼   øø€ õ Ô"Ñ$Ô$ˆð	$ð 	$ð 	$ð 	$ð 	$ð	ð 	ð 	ð 	ð 	õ ˜ÑÔˆØ—	’	‘”ˆõ    Ñ-Ô-ˆ	Ø×ÒÑÔÐà×Ò˜œÔ-¨wÑ7Ô7Ð7à×Ò˜%œ,Ñ'Ô'Ð'Ð'Ð'r   c                 ó°   ‡‡‡‡— ˆfd„Šˆfd„Šˆˆfd„}ˆfd„}t          j         |¦  «        Št          j         |¦  «        Š‰                     ¦   «          d S )Nc                 ó0   •— ‰                      ¦   «          | S r'   rß  )rÑ   r¤   s    €r   Úk1zITestGreenlet.test_switching_holding_critical_section_no_crash.<locals>.k1  ó   ø€ Ø�IŠI‰KŒKˆKØˆHr   c                 ó0   •— ‰                      ¦   «          | S r'   rß  )rÑ   r.   s    €r   Úk2zITestGreenlet.test_switching_holding_critical_section_no_crash.<locals>.k2  rå  r   c                  óT   •— t          dg‰¬¦  «         ‰                      ¦   «          d S )Nr   ©Úkey)Úsortedr   )r¤   rä  s   €€r   Úg1_bodyzNTestGreenlet.test_switching_holding_critical_section_no_crash.<locals>.g1_body  s)   ø€ Ý�A�3˜BÐÑÔÐØ�IŠI‰KŒKˆKˆKˆKr   c                  ó´   •— t          dg‰¬¦  «         t          t          dd¬¦  «        5 } |                      ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nr   ré  Úrtzutf-8)Úencoding)rë  ÚopenÚ__file__Úread)r8   rç  s    €r   Úg2_bodyzNTestGreenlet.test_switching_holding_critical_section_no_crash.<locals>.g2_body"  s�   ø€ Ý�A�3˜BÐÑÔÐõ •h ¨wÐ7Ñ7Ô7ð ¸1Ø—’‘”�ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   «AÁAÁA)r   r   )r?   rì  ró  r.   r¤   rä  rç  s      @@@@r   Ú0test_switching_holding_critical_section_no_crashz=TestGreenlet.test_switching_holding_critical_section_no_crash  s¢   øøøø€ ð	ð 	ð 	ð 	ð 	ð
	ð 	ð 	ð 	ð 	ð
	ð 	ð 	ð 	ð 	ð 	ð
	ð 	ð 	ð 	ð 	õ Ô˜wÑ'Ô'ˆÝÔ˜wÑ'Ô'ˆØ
�	Š	‰Œˆˆˆr   )F)<r   r   r   r@   rC   rM   rP   rU   rX   r`   rh   r{   r   r¡   r¦   r©   r¬   r¸   ÚunittestÚskipIfr	   r   rÀ   rÌ   rÖ   rÛ   rß   rì   rò   rþ   r  r  r  r  r!  r   r.  r   r   r    Úversion_infor1  r3  r   r?  rU  r[  rj  rv  rŽ  r™  r§  r°  r·  r¿  rÃ  rÐ  rÛ  rá  rô  r   r   r   r1   r1   8   s¢  € € € € € ð.ð .ð .ðð ð ð1ð 1ð 1ð1ð 1ð 1ð7ð 7ð 7ð
!ð !ð !ð
'ð 'ð 'ð(Dð Dð Dð,1ð 1ð 1ð ð=ð =ñ Ôð=ð~,ð ,ð ,ð8+ð +ð +ðOð Oð OðIð Ið Ið0 €X„_ØÐ&Ð&ØGñô ð5ð 5ñô ð5ðn+ð +ð +ð 	ð 	ð 	ð ð  ð  ð-ð -ð -ðð ð ð& ð  ð  ð5ð 5ð 5ð"	+ð 	+ð 	+ðCð Cð Cð
ð ð ð6ð ð ð	;ð 	;ð 	;ð &ð7)ð 7)ð 7)ñ &Ô%ð7)ðr &ØÐØÐ/�Ô   ! Ô$¨Ò/ØEñô ð:ð :ñ	ô ñ &Ô%ð
:ð>ð >ð >ð ð)ð )ñ „_ð)ð*-ð -ð -ð^$ð $ð $ð4-ð -ð -ð82ð 2ð 2ð 5ð 5ð 5ðn(Fð (Fð (FðT €X„_ØÐ&Ð&ØEñô ðDDð DDñô ðDDðLð ð ð+ð +ð +ð%ð %ð %ð*)ð )ð )ð6ð 6ð 6ð:.ð .ð .ð&(ð (ð (ð0&ð &ð &ð &ð &r   r1   c                   óJ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )ÚTestGreenletSetParentErrorsc                 óR  ‡‡‡— i Št          j        ¦   «         Št          j        ¦   «         Šˆˆˆfd„}d„ }t          j        |¬¦  «        }|                     ¦   «          ‰                     d¦  «         t          |¦  «        }|                     ¦   «          |                      t          ¦  «        5 }‰d         |_	        d d d ¦  «         n# 1 swxY w Y   ‰ 
                    ¦   «          |                     d¦  «         |                      t          |j        ¦  «        d¦  «         d S )Nc                  ó€   •— t          d„ ¦  «        ‰d<   ‰                      ¦   «          ‰                     d¦  «         d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   zQTestGreenletSetParentErrors.test_threaded_reparent.<locals>.run.<locals>.<lambda>6  rã   r   r-   rv   rä   rå   s   €€€r   rF   z?TestGreenletSetParentErrors.test_threaded_reparent.<locals>.run5  ré   r   c                  óZ   — t          j        ¦   «         j                             ¦   «          d S r'   r   r   r   r   ÚblankzATestGreenletSetParentErrors.test_threaded_reparent.<locals>.blank:  r$  r   rn   rv   r-   z&parent cannot be on a different thread)rq   r•   rr   rw   r�   r,   r   rG   rð   r   r˜   rx   r<   rJ   rK   )	r?   rF   rþ  rë   r-   r(   ræ   rç   rè   s	         @@@r   Útest_threaded_reparentz2TestGreenletSetParentErrors.test_threaded_reparent0  s]  øøø€ ØˆÝ!œÑ)Ô)ˆÝ”_Ñ&Ô&ˆ
ð	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð
	2ð 	2ð 	2õ Ô!¨Ð-Ñ-Ô-ˆØ�Š‰ŒˆØ×Ò˜2ÑÔÐÝ˜ÑÔˆØ	�Š‰
Œ
ˆ
Ø×Ò�zÑ*Ô*ð 	!¨cØ˜C”yˆAŒHð	!ð 	!ð 	!ñ 	!ô 	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	!øøøð 	!ð 	!ð 	!ð 	!à�ŠÑÔÐØ�Š�B‰Œˆà×Ò�˜Sœ]Ñ+Ô+Ð-UÑVÔVÐVÐVÐVs   Â1CÃCÃCc                 ó   ‡— g Šˆfd„}t          j        |¬¦  «        }|                     ¦   «          |                     d¦  «         |                      | j        dz   ¬¦  «          G ˆfd„dt          ¦  «        } |d„ ¦  «        }|                      t          j	        ¦  «        5 }| 
                    ¦   «          d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d	¦  «         ‰d d …= d S )
Nc                  óz   •— t          d„ ¦  «        } ‰                     | ¦  «         |                      ¦   «          d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   zYTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.worker.<locals>.<lambda>L  ó   €  D€ r   )r,   r   r   )r-   Úanothers    €r   r  zGTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.workerK  s5   ø€ Ý˜L˜LÑ)Ô)ˆAØ�NŠN˜1ÑÔÐØ�HŠH‰JŒJˆJˆJˆJr   rn   rv   r   )Úinitial_main_greenletsc                   ó   •— e Zd Zˆ fd„ZdS )úKTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.convolutedc                 óT   •— |dk    r‰d         | _         t          j        | |¦  «        S ©NrF   r   ©r   r,   r  ©r?   r  r  s     €r   r  z\TestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.convoluted.__getattribute__g  ó*   ø€ Ø˜5’=�=Ø")¨!¤*�D”KÝ"Ô3°D¸$Ñ?Ô?Ð?r   Nr  ©r  s   €r   r>  r  f  ó5   ø€ € € € € ð@ð @ð @ð @ð @ð @ð @r   r>  c                  ó   — d S r'   r   r   r   r   rÒ   zITestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.<lambda>k  r   r   r(  )rq   rr   rw   rx   r)  Úmain_greenlets_before_testr,   rG   r   r‡   r   r<   rJ   rK   )r?   r  rœ   r>  r-   r(   r  s         @r   Útest_unexpected_reparentingz7TestGreenletSetParentErrors.test_unexpected_reparentingI  ss  ø€ Øˆð	ð 	ð 	ð 	ð 	õ Ô FÐ+Ñ+Ô+ˆØ	�Š‰	Œ	ˆ	Ø	�Šˆr‰
Œ
ˆ
ð& 	×&Ò&¸dÔ>]Ð`aÑ>aÐ&ÑbÔbÐbð	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@�ñ 	@ô 	@ð 	@ð
 ˆJ�|�|Ñ$Ô$ˆØ×Ò�xœ~Ñ.Ô.ð 	°#Ø�HŠH‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò�˜Sœ]Ñ+Ô+Ø]ñ	_ô 	_ð 	_à�A�A�AˆJˆJˆJs   Â%CÃC
ÃC
c                 ór  ‡‡‡— g Št          j        ¦   «         Št          j        ¦   «         Šˆˆˆfd„} G ˆfd„dt          ¦  «        }t          j        |¬¦  «        }|                     ¦   «          ‰                     d¦  «         	  |d„ ¦  «        }|                      t          j        ¦  «        5 }| 	                    ¦   «          d d d ¦  «         n# 1 swxY w Y   |  
                    dt          |j        ¦  «        ¦  «         |  
                    dt          |j        ¦  «        ¦  «         |  
                    d	t          |j        ¦  «        ¦  «         ‰                     ¦   «          |                     d¦  «         ‰d d …= d S # ‰                     ¦   «          |                     d¦  «         ‰d d …= w xY w)
Nc                  óÌ   •— t          d„ ¦  «        } ‰                     | ¦  «         |                      ¦   «          ‰                     ¦   «          ‰                     d¦  «         d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   zhTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.worker.<locals>.<lambda>y  r  r   rv   )r,   r   r   r˜   r�   )r-   r  Úkeep_main_aliveÚswitched_to_greenlets    €€€r   r  zVTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.workerx  s]   ø€ Ý˜L˜LÑ)Ô)ˆAØ�NŠN˜1ÑÔÐØ�HŠH‰JŒJˆJØ ×$Ò$Ñ&Ô&Ð&Ø× Ò  Ñ$Ô$Ð$Ð$Ð$r   c                   ó   •— e Zd Zˆ fd„ZdS )úZTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.convolutedc                 óT   •— |dk    r‰d         | _         t          j        | |¦  «        S r	  r
  r  s     €r   r  zkTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.convoluted.__getattribute__  r  r   Nr  r  s   €r   r>  r  ~  r  r   r>  rn   rv   c                  ó   — d S r'   r   r   r   r   rÒ   zXTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.<lambda>‰  ó   €  4€ r   z#Cannot switch to a different threadÚExpectedÚCurrent)rq   r•   r,   rr   rw   r�   rG   r   r‡   r   rI   rJ   rK   r˜   rx   )	r?   r  r>  rœ   r-   r(   r  r  r  s	         @@@r   Ú*test_unexpected_reparenting_thread_runningzFTestGreenletSetParentErrors.test_unexpected_reparenting_thread_runningr  s  øøø€ ð ˆÝ(œÑ0Ô0ÐÝ#œ/Ñ+Ô+ˆð	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@�ñ 	@ô 	@ð 	@õ Ô FÐ+Ñ+Ô+ˆØ	�Š‰	Œ	ˆ	à×!Ò! "Ñ%Ô%Ð%ð	Ø�
˜<˜<Ñ(Ô(ˆAà×"Ò"¥8¤>Ñ2Ô2ð °cØ—’‘
”
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à�MŠMÐ?ÅÀSÄ]ÑASÔASÑTÔTÐTØ�MŠM˜*¥c¨#¬-Ñ&8Ô&8Ñ9Ô9Ð9Ø�MŠM˜)¥S¨¬Ñ%7Ô%7Ñ8Ô8Ð8à×ÒÑ!Ô!Ð!Ø�FŠF�2‰JŒJˆJà˜˜˜�
�
�
øð ×ÒÑ!Ô!Ð!Ø�FŠF�2‰JŒJˆJà˜˜˜�
ˆNˆNˆNˆNs1   Â+F Â2CÃF ÃCÃF ÃCÃA;F Æ0F6c                 ó6  — t          d„ ¦  «        }|                      |j        t          j        ¦   «         ¦  «         |                      t          ¦  «        5 }|`d d d ¦  «         n# 1 swxY w Y   |                      t          |j	        ¦  «        d¦  «         d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   zGTestGreenletSetParentErrors.test_cannot_delete_parent.<locals>.<lambda>—  ó   €  T€ r   úcan't delete attribute)
r,   rS   r   r   r   rG   rH   r<   rJ   rK   )r?   r  r(   s      r   Útest_cannot_delete_parentz5TestGreenletSetParentErrors.test_cannot_delete_parent–  sÂ   € Ý˜\˜\Ñ*Ô*ˆØ�Š�f”m¥XÔ%8Ñ%:Ô%:Ñ;Ô;Ð;à×Ò�~Ñ.Ô.ð 	°#Ø�ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò�˜Sœ]Ñ+Ô+Ð-EÑFÔFÐFÐFÐFs   ÁA&Á&A*Á-A*c                 óà   — |                       t          ¦  «        5 }t          j        ¦   «         `d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d¦  «         d S )Nr"  ©rG   rH   r   r   r   r<   rJ   rK   ©r?   r(   s     r   Ú!test_cannot_delete_parent_of_mainz=TestGreenletSetParentErrors.test_cannot_delete_parent_of_mainž  sž   € Ø×Ò�~Ñ.Ô.ð 	-°#ÝÔ#Ñ%Ô%Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-à×Ò�˜Sœ]Ñ+Ô+Ð-EÑFÔFÐFÐFÐFs   ›;»?Á?c                 ó\   — |                       t          j        ¦   «         j        ¦  «         d S r'   )rW   r   r   r   rB   s    r   Ú!test_main_greenlet_parent_is_nonez=TestGreenletSetParentErrors.test_main_greenlet_parent_is_none¤  s(   € à×Ò�(Ô-Ñ/Ô/Ô6Ñ7Ô7Ð7Ð7Ð7r   c                 ó  ‡ — d„ }ˆ fd„}t          |¦  «        }‰                      |¦  «          ||¦  «         |                     ¦   «          ‰                      |¦  «          ||¦  «         |                     ¦   «          d S )Nc                  óZ   — t          j        ¦   «         j                             ¦   «          d S r'   r   r   r   r   ÚbgzCTestGreenletSetParentErrors.test_set_parent_wrong_types.<locals>.bg©  s&   € åÔÑ!Ô!Ô(×/Ò/Ñ1Ô1Ð1Ð1Ð1r   c                 ó  •— d d‰dfD ]x}‰                      t          ¦  «        5 }|| _        d d d ¦  «         n# 1 swxY w Y   ‰                     t	          |j        ¦  «        dt          |¦  «        j        z   ¦  «         Œyd S )Nr   Ú42z4GreenletChecker: Expected any type of greenlet, not )rG   rý   r   r<   rJ   rK   Útyper   )ÚgletÚpr(   r?   s      €r   ÚcheckzFTestGreenletSetParentErrors.test_set_parent_wrong_types.<locals>.check­  sØ   ø€ Ø˜1˜d DÐ(ð _ð _�Ø×&Ò&¥yÑ1Ô1ð $°SØ"#�D”Kð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð × Ò Ý˜œÑ&Ô&ØJÍTÐRSÉWÌWÔM]Ñ]ñ_ô _ð _ð _ð	_ð _s   ¤8¸<	¿<	)r,   rÉ   r   rÇ   )r?   r,  r2  r-   s   `   r   Útest_set_parent_wrong_typesz7TestGreenletSetParentErrors.test_set_parent_wrong_types¨  sŸ   ø€ ð	2ð 	2ð 	2ð	_ð 	_ð 	_ð 	_ð 	_õ ˜‰OŒOˆØ×Ò˜ÑÔÐØˆˆa‰Œˆð 	
�Š‰
Œ
ˆ
Ø�Š˜ÑÔÐØˆˆa‰Œˆð 	
�Š‰
Œ
ˆ
ˆ
ˆ
r   c                 óè   — t          d„ ¦  «        }|                      t          ¦  «        5 }||_        d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d¦  «         d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   z@TestGreenletSetParentErrors.test_trivial_cycle.<locals>.<lambda>Å  r  r   úcyclic parent chain)r,   rG   rð   r   r<   rJ   rK   )r?   r0  r(   s      r   Útest_trivial_cyclez.TestGreenletSetParentErrors.test_trivial_cycleÄ  s¥   € Ý˜<˜<Ñ(Ô(ˆØ×Ò�zÑ*Ô*ð 	¨cØˆDŒKð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò�˜Sœ]Ñ+Ô+Ð-BÑCÔCÐCÐCÐCs   «?¿AÁAc                 ó  — |                       t          ¦  «        5 }t          j        ¦   «         t          j        ¦   «         _        d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d¦  «         d S )Nz(cannot set the parent of a main greenletr%  r&  s     r   Útest_trivial_cycle_mainz3TestGreenletSetParentErrors.test_trivial_cycle_mainÊ  s¹   € à×Ò�~Ñ.Ô.ð 	A°#Ý+3Ô+>Ñ+@Ô+@�HÔÑ!Ô!Ô(ð	Að 	Að 	Añ 	Aô 	Að 	Að 	Að 	Að 	Að 	Að 	Aøøøð 	Að 	Að 	Að 	Aà×Ò�˜Sœ]Ñ+Ô+Ð-WÑXÔXÐXÐXÐXs   ›*AÁAÁAc                 óD  — t          d„ ¦  «        }t          d„ ¦  «        }t          d„ ¦  «        }||_        ||_        |                      t          ¦  «        5 }||_        d d d ¦  «         n# 1 swxY w Y   |                      t          |j        ¦  «        d¦  «         d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   z?TestGreenletSetParentErrors.test_deeper_cycle.<locals>.<lambda>Ñ  r  r   c                  ó   — d S r'   r   r   r   r   rÒ   z?TestGreenletSetParentErrors.test_deeper_cycle.<locals>.<lambda>Ò  r  r   c                  ó   — d S r'   r   r   r   r   rÒ   z?TestGreenletSetParentErrors.test_deeper_cycle.<locals>.<lambda>Ó  r  r   r6  )r,   r   rG   rð   r<   rJ   rK   )r?   r.   r¤   Úg3r(   s        r   Útest_deeper_cyclez-TestGreenletSetParentErrors.test_deeper_cycleÐ  sÑ   € Ý˜˜Ñ&Ô&ˆÝ˜˜Ñ&Ô&ˆÝ˜˜Ñ&Ô&ˆàˆŒ	ØˆŒ	Ø×Ò�zÑ*Ô*ð 	¨cØˆBŒIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à×Ò�˜Sœ]Ñ+Ô+Ð-BÑCÔCÐCÐCÐCs   ÁA-Á-A1Á4A1N)r   r   r   rÿ  r  r  r#  r'  r)  r3  r7  r9  r?  r   r   r   rù  rù  /  sÀ   € € € € € ðWð Wð Wð2'ð 'ð 'ðR"ð "ð "ðHGð Gð GðGð Gð Gð8ð 8ð 8ðð ð ð8Dð Dð DðYð Yð Yð	Dð 	Dð 	Dð 	Dð 	Dr   rù  c                   óR   — e Zd Z eed¦  «        sd
d„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ ZdS )ÚTestReprÚassertEndsWithNc                 ó^   — |                       |                     |¦  «        |||f¦  «         d S r'   )rÇ   Úendswith)r?   r-  ÚsuffixÚmsgs       r   rB  zTestRepr.assertEndsWithß  s/   € Ø�OŠO˜AŸJšJ vÑ.Ô.°°F¸CÐ0@ÑAÔAÐAÐAÐAr   c                 ór   — t          t          j        ¦   «         ¦  «        }|                      |d¦  «         d S )Nú current active started main>)Úreprr   r   rB  ©r?   Úrs     r   Útest_main_while_runningz TestRepr.test_main_while_runningâ  s5   € Ý•Ô$Ñ&Ô&Ñ'Ô'ˆØ×Ò˜AÐ>Ñ?Ô?Ð?Ð?Ð?r   c                 óª   ‡— t          j        ¦   «         Šˆfd„}t          |¦  «        }|                     ¦   «         }|                      |d¦  «         d S )Nc                  ó"   •— t          ‰ ¦  «        S r'   )rI  rÊ  s   €r   rF   z-TestRepr.test_main_in_background.<locals>.runè  s   ø€ Ý˜‘:”:Ðr   ú suspended active started main>)r   r   r,   r   rB  )r?   rF   r-   rK  r  s       @r   Útest_main_in_backgroundz TestRepr.test_main_in_backgroundæ  sc   ø€ ÝÔ"Ñ$Ô$ˆð	ð 	ð 	ð 	ð 	õ ˜ÑÔˆØ�HŠH‰JŒJˆØ×Ò˜AÐ@ÑAÔAÐAÐAÐAr   c                 óh   — t          t          ¦   «         ¦  «        }|                      |d¦  «         d S )Nz	 pending>)rI  r,   rB  rJ  s     r   Útest_initialzTestRepr.test_initialï  s/   € Ý•‘”ÑÔˆØ×Ò˜A˜{Ñ+Ô+Ð+Ð+Ð+r   c                 ó6  ‡— t          j        ¦   «         Š G ˆfd„dt          j        ¦  «        } |¦   «         }|                     ¦   «          |                     d¦  «         |                      |j        d¦  «         |                      |j        d¦  «         t          d¦  «        D ]}t          j        d¦  «         Œt          d¦  «        D ]K}|                      |j        j        ¦  «         t          |j        ¦  «        }|                      |d¦  «         ŒLd S )	Nc                   ó&   •— e Zd ZdxZZdZˆ fd„ZdS )ú/TestRepr.test_main_from_other_thread.<locals>.TNc                 ó’   •— t          ‰¦  «        | _        t          j        ¦   «         | _        t          | j        ¦  «        | _        d S r'   )rI  Úoriginal_mainr   r   Ú	main_gletr£  )r?   r  s    €r   rF   z3TestRepr.test_main_from_other_thread.<locals>.T.runù  s9   ø€ Ý%)¨$¡Z¤Z�Ô"Ý!)Ô!4Ñ!6Ô!6�”Ý#'¨¬Ñ#7Ô#7�Ô Ð Ð r   )r   r   r   rW  r£  rX  rF   rÊ  s   €r   ÚTrU  ö  s=   ø€ € € € € Ø*.Ð.ˆM˜KØˆIð8ð 8ð 8ð 8ð 8ð 8ð 8r   rY  rv   rO  rH  r4   gü©ñÒMbP?z (thread exited) dead>)r   r   rq   rr   rw   rx   rB  rW  r£  r>   r–   r—   rÇ   rX  r^   rI  )r?   rY  rœ   r‘   rK  r  s        @r   Útest_main_from_other_threadz$TestRepr.test_main_from_other_threadó  s.  ø€ ÝÔ"Ñ$Ô$ˆð	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8•	Ô ñ 	8ô 	8ð 	8ð ˆA‰CŒCˆØ	�Š‰	Œ	ˆ	Ø	�Šˆr‰
Œ
ˆ
à×Ò˜AœOÐ-NÑOÔOÐOØ×Ò˜AœMÐ+JÑKÔKÐKõ �q‘”ð 	ð 	ˆAÝŒJ�uÑÔÐÐõ �q‘”ð 	=ð 	=ˆAØ�OŠO˜AœKÔ,Ñ-Ô-Ð-Ý�Q”[Ñ!Ô!ˆAØ×Ò Ð#;Ñ<Ô<Ð<Ð<ð	=ð 	=r   c                 óf  — t          d„ ¦  «        }|                     ¦   «          |                      t          |¦  «        d¦  «         |                      dt          |¦  «        ¦  «         |                      dt          |¦  «        ¦  «         |                      dt          |¦  «        ¦  «         d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   z$TestRepr.test_dead.<locals>.<lambda>  s   €  € r   z dead>Ú	suspendedÚstartedÚactive)r,   r   rB  rI  ÚassertNotInrT   s     r   Ú	test_deadzTestRepr.test_dead  s”   € Ý˜˜Ñ%Ô%ˆØ	�Š‰
Œ
ˆ
Ø×Ò�D ™GœG XÑ.Ô.Ð.Ø×Ò˜¥d¨1¡g¤gÑ.Ô.Ð.Ø×Ò˜¥D¨¡G¤GÑ,Ô,Ð,Ø×Ò˜¥4¨¡7¤7Ñ+Ô+Ð+Ð+Ð+r   c                 óì   — t          d„ ¦  «        }t          d„ ¦  «        }t          j        ¦   «         }|||fD ]:}|                      |›t          ¦  «         |                      |›t          ¦  «         Œ;d S )Nc                  ó   — d S r'   r   r   r   r   rÒ   z>TestRepr.test_formatting_produces_native_str.<locals>.<lambda>"  r!  r   c                  ó   — d S r'   r   r   r   r   rÒ   z>TestRepr.test_formatting_produces_native_str.<locals>.<lambda>#  rã   r   )r,   r   r   rµ   rJ   )r?   Úg_deadÚg_not_startedÚg_curr-   s        r   Ú#test_formatting_produces_native_strz,TestRepr.test_formatting_produces_native_str  s—   € õ ˜\˜\Ñ*Ô*ˆÝ# L LÑ1Ô1ˆÝÔ#Ñ%Ô%ˆà˜¨Ð-ð 		ð 		ˆAà×!Ò!Ø˜Ýñô ð ð ×!Ò!Ø˜Ýñô ð ð ð		ð 		r   r'   )r   r   r   r  r   rB  rL  rP  rR  rZ  ra  rh  r   r   r   rA  rA  Ü  s£   € € € € € àˆ7�8Ð-Ñ.Ô.ð Bð	Bð 	Bð 	Bð 	Bð@ð @ð @ðBð Bð Bð,ð ,ð ,ð!=ð !=ð !=ðF,ð ,ð ,ðð ð ð ð r   rA  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestMainGreenletc                 ó´   — dt          t          j        ¦   «         ¦  «        v sJ ‚t          t          j        ¦   «         ¦  «        }dt          |¦  «        vsJ ‚|S )Nr  )rI  r   r   r/  )r?   rœ   s     r   Ú_check_current_is_mainz'TestMainGreenlet._check_current_is_main6  sV   € à��hÔ1Ñ3Ô3Ñ4Ô4Ð4Ð4Ð4Ð4å•Ô$Ñ&Ô&Ñ'Ô'ˆØ�T !™WœWÐ$Ð$Ð$Ð$Øˆr   c                 ó|   — |                       ¦   «         }t          d|fi ¦  «        }|                      |¦  «         d S )NÚsubclass)rl  r/  rR   )r?   Ú	main_typern  s      r   Ú)test_main_greenlet_type_can_be_subclassedz:TestMainGreenlet.test_main_greenlet_type_can_be_subclassed>  s@   € Ø×/Ò/Ñ1Ô1ˆ	Ý˜
 Y L°"Ñ5Ô5ˆØ×Ò˜XÑ&Ô&Ð&Ð&Ð&r   c                 ó†   — |                       ¦   «          |                      t          j        ¦   «         t          ¦  «         d S r'   )rl  rµ   r   r   r,   rB   s    r   Útest_main_greenlet_is_greenletz/TestMainGreenlet.test_main_greenlet_is_greenletC  s9   € Ø×#Ò#Ñ%Ô%Ð%Ø×Ò�hÔ1Ñ3Ô3µ[ÑAÔAÐAÐAÐAr   c                 óì   ‡ ‡— ˆˆ fd„}t          j         |¦  «        Š‰                     ¦   «          ‰                      t          ¦  «        5  t	          ‰d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nc                  óŽ   •— ‰                      t          ¦  «        5  t          ‰ d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S rE   )rG   rH   Úgetattr)r-   r?   s   €€r   Údo_itz1TestMainGreenlet.test_greenlet_run.<locals>.do_itH  s‹   ø€ Ø×"Ò"¥>Ñ2Ô2ð "ð "Ý˜˜5Ñ!Ô!Ð!ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð "ð "s   œ:º>Á>rF   )r   r   rG   rH   ru  )r?   rv  r-   s   ` @r   Útest_greenlet_runz"TestMainGreenlet.test_greenlet_runG  sÉ   øø€ ð	"ð 	"ð 	"ð 	"ð 	"ð 	"õ Ô˜eÑ$Ô$ˆØ	�Š‰
Œ
ˆ
Ø×Ò�~Ñ.Ô.ð 	ð 	Ý�A�uÑÔÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÁA)Á)A-Á0A-N)r   r   r   rl  rp  rr  rw  r   r   r   rj  rj  2  sS   € € € € € ðð ð ð'ð 'ð 'ð
Bð Bð Bðð ð ð ð r   rj  c                   óD   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )ÚTestBrokenGreenletsc                 óè   — d„ }t           j                             |¦  «        }d|_        |                      t
          d¦  «        5  |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nc                  ó    — t          d¦  «        ‚)NzNever get here)ÚAssertionErrorr   r   r   r  z<TestBrokenGreenlets.test_failed_to_initialstub.<locals>.funcW  s   € Ý Ð!1Ñ2Ô2Ð2r   Tz;Failed to switch stacks into a greenlet for the first time.)r   Ú	_greenletÚUnswitchableGreenletÚforce_switch_errorÚassertRaisesRegexÚSystemErrorr   )r?   r  r-   s      r   Útest_failed_to_initialstubz.TestBrokenGreenlets.test_failed_to_initialstubV  s¿   € ð	3ð 	3ð 	3õ Ô×3Ò3°DÑ9Ô9ˆØ#ˆÔà×#Ò#¥KØ$añcô cð 	ð 	à�HŠH‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÁA'Á'A+Á.A+c                 ó  ‡— g Šˆfd„}t           j                             |¦  «        }|                     ¦   «          |                      ‰dg¦  «         |                     ¦   «          |                      ‰ddg¦  «         d|_        |                      t          d¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d|_        |                     ¦   «          |                      ‰g d¢¦  «         d S )Nc                  ó.  •— ‰                       d¦  «         t          j        ¦   «         j                             ¦   «          ‰                       d¦  «         t          j        ¦   «         j                             ¦   «          ‰                       d¦  «         d S )Nr   r9   r4   r5   )Úrunss   €r   r  zDTestBrokenGreenlets.test_failed_to_switch_into_running.<locals>.funcd  sp   ø€ Ø�KŠK˜‰NŒNˆNÝÔÑ!Ô!Ô(×/Ò/Ñ1Ô1Ð1Ø�KŠK˜‰NŒNˆNÝÔÑ!Ô!Ô(×/Ò/Ñ1Ô1Ð1Ø�KŠK˜‰NŒNˆNˆNˆNr   r   r9   Tz0Failed to switch stacks into a running greenlet.F)r   r9   r4   )r   r}  r~  r   r<   r  r€  r�  )r?   r  r-   r…  s      @r   Ú"test_failed_to_switch_into_runningz6TestBrokenGreenlets.test_failed_to_switch_into_runningb  sC  ø€ Øˆð	ð 	ð 	ð 	ð 	õ Ô×3Ò3°DÑ9Ô9ˆØ	�Š‰
Œ
ˆ
Ø×Ò˜ ˜sÑ#Ô#Ð#Ø	�Š‰
Œ
ˆ
Ø×Ò˜  1˜vÑ&Ô&Ð&Ø#ˆÔà×#Ò#¥KØ$VñXô Xð 	ð 	à�HŠH‰JŒJˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð  %ˆÔØ	�Š‰
Œ
ˆ
Ø×Ò˜˜y˜y˜yÑ)Ô)Ð)Ð)Ð)s   Â!CÃCÃ	Cc                 óÀ   — |                       d¦  «        }|                      d|j        ¦  «         |                      |j        |                      ¦   «         ¦  «         d S )Nzfail_slp_switch.pyzfail_slp_switch is running)ÚassertScriptRaisesrI   ÚoutputÚ
returncodeÚ,get_expected_returncodes_for_aborted_process©r?   Úexs     r   Ú&test_failed_to_slp_switch_into_runningz:TestBrokenGreenlets.test_failed_to_slp_switch_into_running~  sU   € Ø×$Ò$Ð%9Ñ:Ô:ˆà�ŠÐ2°B´IÑ>Ô>Ð>Ø�Š�b”m T×%VÒ%VÑ%XÔ%XÑYÔYÐYÐYÐYr   c                 ó8  — |                       d¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         d S )Nz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 g2©Ú
run_scriptrI   ©r?   r‰  s     r   Ú#test_reentrant_switch_two_greenletsz7TestBrokenGreenlets.test_reentrant_switch_two_greenlets„  s•   € à—’Ð!?Ñ@Ô@ˆØ�Š�k 6Ñ*Ô*Ð*Ø�Š�g˜vÑ&Ô&Ð&Ø�Š�m VÑ,Ô,Ð,Ø�ŠÐ/°Ñ8Ô8Ð8Ø�ŠÐ1°6Ñ:Ô:Ð:Ø�ŠÐ-¨vÑ6Ô6Ð6Ð6Ð6r   c                 ó    — |                       dd¬¦  «        }|                      d|j        ¦  «         |                      d|j        ¦  «         d S )Nzfail_switch_three_greenlets.py)r   )Ú	exitcodesrý   zpositional arguments)rˆ  rI   r‰  rŒ  s     r   Ú%test_reentrant_switch_three_greenletsz9TestBrokenGreenlets.test_reentrant_switch_three_greenletsŽ  sQ   € ð ×$Ò$Ð%EÐQUÐ$ÑVÔVˆà�Š�k 2¤9Ñ-Ô-Ð-Ø�ŠÐ,¨b¬iÑ8Ô8Ð8Ð8Ð8r   c                 ó\   — |                       d¦  «        }|                      d|¦  «         d S )Nz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')]r‘  r“  s     r   Ú&test_reentrant_switch_three_greenlets2z:TestBrokenGreenlets.test_reentrant_switch_three_greenlets2—  s@   € ð —’Ð!BÑCÔCˆØ�Šð=ð ñ		
ô 		
ð 		
ð 		
ð 		
r   c                 ó\   — |                       d¦  «        }|                      d|¦  «         d S )Nz#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)]r‘  r“  s     r   Ú4test_reentrant_switch_GreenletAlreadyStartedInPythonzHTestBrokenGreenlets.test_reentrant_switch_GreenletAlreadyStartedInPython©  s>   € Ø—’Ð!FÑGÔGˆà�Šð1ð
 ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó\   — |                       d¦  «        }|                      d|¦  «         d S )Nzfail_clearing_run_switches.pyz„RESULTS [('G.__getattribute__', 'run'), ('RunCallable', '__del__'), ('main: g.switch()', 'from RunCallable'), ('run_func', 'enter')]r‘  r“  s     r   Ú*test_reentrant_switch_run_callable_has_delz>TestBrokenGreenlets.test_reentrant_switch_run_callable_has_delµ  s>   € Ø—’Ð!@ÑAÔAˆØ�Šðð ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 ó”   — t           s|                      d¦  «         |                      d¦  «        }|                      d|¦  «         d S )Nz0Only free-threaded builds take critical sectionszfail_switch_critical_section.pyzSWITCH CS OK)r   ÚskipTestr’  rI   r“  s     r   Ú+test_switch_leaves_no_critical_section_heldz?TestBrokenGreenlets.test_switch_leaves_no_critical_section_held¿  sL   € õ +ð 	NØ�MŠMÐLÑMÔMÐMØ—’Ð!BÑCÔCˆØ�Š�n fÑ-Ô-Ð-Ð-Ð-r   N)r   r   r   r‚  r†  rŽ  r”  r—  r™  r›  r�  r   r   r   r   ry  ry  R  sž   € € € € € ð
ð 
ð 
ð*ð *ð *ð8Zð Zð Zð7ð 7ð 7ð9ð 9ð 9ð
ð 
ð 
ð$

ð 

ð 

ð
ð 
ð 
ð.ð .ð .ð .ð .r   ry  c                   óV   — e Zd Z ej         eed¦  «        d¦  «        d„ ¦   «         ZdS )Ú
TestModuleÚ_is_gil_enabledz,Needs 3.13 and above for sys._is_gil_enabledc                 ó°   — t           r(|                      t          j        ¦   «         ¦  «         d S |                      t          j        ¦   «         ¦  «         d S r'   )r   rÉ   r    r£  rÇ   rB   s    r   Útest_no_gil_on_free_threadedz'TestModule.test_no_gil_on_free_threadedÏ  sP   € õ 'ð 	3Ø×Ò�SÔ0Ñ2Ô2Ñ3Ô3Ð3Ð3Ð3à�OŠO�CÔ/Ñ1Ô1Ñ2Ô2Ð2Ð2Ð2r   N)r   r   r   rõ  Ú
skipUnlessr  r    r¥  r   r   r   r¢  r¢  Í  sU   € € € € € à€XÔ˜˜ Ð&7Ñ8Ô8ØGñIô Ið3ð 3ñIô Ið3ð 3ð 3r   r¢  Ú__main__)"rŸ   r    r–   rq   rõ  Úabcr   r   r   r,   rÙ  r   r   r	   r
   r   r   Ú	leakcheckr   r   r   r   r  r   r$   r/   r1   rù  rA  rj  ry  r¢  r   r  r   r   r   ú<module>rª     s¿  ðØ 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø &Ð &Ð &Ð &Ð &Ð &Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø (Ð (Ð (Ð (Ð (Ð (Ø +Ð +Ð +Ð +Ð +Ð +ð	ð 	ð 	ð 	ð 	�	ñ 	ô 	ð 	ðð ð ðð ð ðtð tð tð tð t�8ñ tô tð tðnjDð jDð jDð jDð jD (ñ jDô jDð jDðZSð Sð Sð Sð Sˆxñ Sô Sð Sðlð ð ð ð �xñ ô ð ð@y.ð y.ð y.ð y.ð y.˜(ñ y.ô y.ð y.ðv3ð 3ð 3ð 3ð 3�ñ 3ô 3ð 3ð ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   