§
    VøÁi7½  ã                   ó   — 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  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)ÚRUNNING_ON_FREETHREAD_BUILD)Úfails_leakcheckc                   ó   — e Zd ZdS )Ú	SomeErrorN©Ú__name__Ú
__module__Ú__qualname__© ó    úf/var/www/html/jarvis.com/web/backend/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>.crasher.   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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!d1d„¦   «         Z"e!d„ ¦   «         Z#d„ Z$e!d „ ¦   «         Z%d!„ Z&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,„ Z0d-„ Z1d.„ Z2d/„ Z3d0S )2Ú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>.f9   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)Úselfr4   r)   r3   s      @r   Ú_do_simple_testzTestGreenlet._do_simple_test6   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_simpleE   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_AttributeErrorH   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 rA   )r(   rC   rD   Úthrowr   rE   rF   rG   rH   s      r   Ú'test_throw_no_run_raises_AttributeErrorz4TestGreenlet.test_throw_no_run_raises_AttributeErrorO   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_NoneV   sK   € Ý˜tÐ$Ñ$Ô$ˆØ×Ò˜QÑÔÐØ�Š�a”h¥Ô 3Ñ 5Ô 5Ñ6Ô6Ð6Ð6Ð6r   c                 ó„   — t          d ¬¦  «        }|                      |¦  «         |                      |j        ¦  «         d S )N)rB   )r(   rN   ÚassertIsNonerB   rP   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   Úextendr2   s   €r   r4   z)TestGreenlet.test_two_children.<locals>.fc   sL   ø€ Ø�JŠJ�q‰MŒMˆMÝÔÑ!Ô!Ô(×/Ò/Ñ1Ô1Ð1Ø�JŠJ˜˜1�vÑÔÐÐÐr   r   r5   r6   Té   )r(   r   r8   ÚlenÚdead)r;   r4   r)   Úhr3   s       @r   Útest_two_childrenzTestGreenlet.test_two_children`   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Úbr1   r2   s   €r   r4   z3TestGreenlet.test_two_recursive_children.<locals>.fw   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)   r4   r3   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   r5   r   )ra   r_   rb   )r8   r   Úgetrefcountr
   r(   r   )r;   r)   r4   r3   s     @@r   Útest_two_recursive_childrenz(TestGreenlet.test_two_recursive_childrent   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   r4   z$TestGreenlet.test_threads.<locals>.f�   s-   ø€ Ø× Ò Ñ"Ô"Ð"Ø�NŠN˜4Ñ Ô Ð Ð Ð r   c                 ó:   •— g | ]}t          j        ‰¬ ¦  «        ‘ŒS )©Útarget)Ú	threadingÚThread)Ú.0Úir4   s     €r   ú
<listcomp>z-TestGreenlet.test_threads.<locals>.<listcomp>�   s'   ø€ Ð=Ð=Ð=¨a�yÔ qÐ)Ñ)Ô)Ð=Ð=Ð=r   é
   )r:   ÚstartÚjoinr8   rY   )r;   ÚthsÚthr4   rh   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                 ó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   r8   rC   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   rC   ÚKeyErrorr+   r8   )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   r8   ÚgcÚcollectr   ÚGreenletExit)r;   r   r*   ry   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„ }t          |¦  «        }|                     ¦   «          t          j        }ddlm}  |¦   «         x}t          _        	 ~|t          _        n# |t          _        w xY w|                     ¦   «         }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         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   rB   zHTestGreenlet.test_dealloc_catches_GreenletExit_throws_other.<locals>.runÉ   sQ   € ð*ÝÔ#Ñ%Ô%Ô,×3Ò3Ñ5Ô5Ð5Ð5Ð5øÝÔ(ð *ð *ð *Ý TÐ)ð*øøøs	   ‚*. ®Ar   )ÚStringIOÚ	ExceptionÚignoredr   )r(   r   r   ÚstderrÚior†   ÚgetvaluerE   )r;   rB   r)   Ú	oldstderrr†   r‰   Úvs          r   Ú.test_dealloc_catches_GreenletExit_throws_otherz;TestGreenlet.test_dealloc_catches_GreenletExit_throws_otherÈ   sÏ   € ð	*ð 	*ð 	*õ ˜ÑÔˆØ	�Š‰
Œ
ˆ
õ
 ”Jˆ	ØÐÐÐÐÐØ&˜h™jœjÐ(ˆ•”ð	#Øà"�CŒJˆJø˜�CŒJÐ"Ð"Ð"Ð"à�OŠOÑÔˆØ�Š�k 1Ñ%Ô%Ð%Ø�Š�i Ñ#Ô#Ð#Ø�Š�k 1Ñ%Ô%Ð%Ð%Ð%s   Á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 )Nr0   )r(   r    r   r   r€   r�   ÚsetÚwait)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   r4   z1TestGreenlet.test_dealloc_other_thread.<locals>.fó   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   rj   rq   r   r0   )rl   ÚEventrm   rr   r’   r8   rY   r   r€   r�   r‘   r   r‚   rs   )	r;   r4   Útr“   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   Ú	_getframer8   Úf_backr   r   r   r   )r4   r;   s    €r   Úf1z#TestGreenlet.test_frame.<locals>.f1"  sP   ø€ Ý”˜aÑ Ô ˆAØ×Ò˜QœX tÑ,Ô,Ð,ÝÔÑ!Ô!Ô(×/Ò/°Ñ2Ô2Ð2Ø$Ð$r   r�   )r(   r   Ú
assertTrueÚgr_frameÚassertFalser8   )r;   r    r)   ÚframeÚfrom_gs   `    r   Ú
test_framezTestGreenlet.test_frame!  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#   )ÚtimeÚsleep©Úxs   €r   ú<lambda>z>TestGreenlet.test_thread_bug.<locals>.runner.<locals>.<lambda>3  s   ø€ ¥D¤J¨q¡M¤M€ r   r'   )r­   r)   s   ` r   Úrunnerz,TestGreenlet.test_thread_bug.<locals>.runner2  s+   ø€ ÝÐ1Ð1Ð1Ð1Ñ2Ô2ˆAØ�HŠH‰JŒJˆJˆJˆJr   )gš™™™™™É?©rk   Úargs)g333333Ó?rq   )rl   rm   rr   rs   )r;   r¯   Út1Út2s       r   Útest_thread_bugzTestGreenlet.test_thread_bug1  sy   € ð	ð 	ð 	õ Ô V°&Ð9Ñ9Ô9ˆÝÔ V°&Ð9Ñ9Ô9ˆØ
�Š‰
Œ
ˆ
Ø
�Š‰
Œ
ˆ
Ø
�Š�‰ŒˆØ
�Š�‰Œˆˆˆr   c                 ó†   ‡ — ˆ fd„}t          |¦  «                             dd¬¦  «        }‰                      |d¦  «         d S )Nc                 ó`   •— ‰                      | d¦  «         ‰                      |d¦  «         dS )Nr6   r5   é*   )r8   )ra   r_   r;   s     €r   rB   z,TestGreenlet.test_switch_kwargs.<locals>.run=  s4   ø€ Ø×Ò˜Q Ñ"Ô"Ð"Ø×Ò˜Q Ñ"Ô"Ð"Ø�2r   r6   r5   )ra   r_   r·   ©r(   r   r8   )r;   rB   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¬   r5   r0   ©r   r   r   r   r¬   s    r   rB   z6TestGreenlet.test_switch_kwargs_to_parent.<locals>.runE  sX   € ÝÔÑ!Ô!Ô(×/Ò/°!Ð/Ñ4Ô4Ð4ÝÔÑ!Ô!Ô(×/Ò/°°QÐ/Ñ7Ô7Ð7Ø�a˜1‘f�9Ðr   r­   r0   )r5   )r0   é	   )r(   r8   r   )r;   rB   r)   s      r   Útest_switch_kwargs_to_parentz)TestGreenlet.test_switch_kwargs_to_parentD  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>T  ó   € ¨D€ r   r)   rq   ©r(   r‘   r’   ©Úcreated_eventÚdataÚ
done_events   €€€r   rB   z7TestGreenlet.test_switch_to_another_thread.<locals>.runS  ó@   ø€ Ý# L LÑ1Ô1ˆD�‰IØ×ÒÑÔÐØ�OŠO˜BÑÔÐÐÐr   rj   rq   r)   )rl   r˜   rm   rr   r’   rC   r   Úerrorr   r‘   rs   Úclear)r;   rB   ÚthreadrÅ   rÆ   rÇ   s      @@@r   Útest_switch_to_another_threadz*TestGreenlet.test_switch_to_another_threadN  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   r8   )r   r[   r;   s    €€r   r4   z&TestGreenlet.test_exc_state.<locals>.fb  sg   ø€ ð;Ý  Ñ'Ô'Ð'øð;Ýœ<™>œ>�Ý˜A‘”×%Ò%Ñ'Ô'Ð'Ø× Ò  ­3¬<©>¬>Ñ:Ô:Ð:Ð:Ð:Ð:øøøs
   ƒ ’AA2c                  óV   •— ‰                       t          j        ¦   «         d¦  «         d S )N)NNN)r8   r   r   r>   s   €r   r[   z&TestGreenlet.test_exc_state.<locals>.hj  s&   ø€ Ø×Ò�Sœ\™^œ^Ð-?Ñ@Ô@Ð@Ð@Ð@r   r'   )r;   r4   r[   s   ` @r   Útest_exc_statezTestGreenlet.test_exc_statea  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   r4   z*TestGreenlet.test_instance_dict.<locals>.fp  s   € Ø)+�HÔÑ!Ô!Ô&Ð&Ð&r   c                 ó
   — | ` d S r#   ©Ú__dict__)r)   s    r   Údeldictz0TestGreenlet.test_instance_dict.<locals>.deldictr  s   € Ø�
�
�
r   c                 ó   — || _         d S r#   rØ   )r)   rz   s     r   Úsetdictz0TestGreenlet.test_instance_dict.<locals>.setdictt  s   € ØˆAŒJˆJˆJr   r·   rÖ   )r(   r8   rÙ   r   rÖ   rC   Ú	TypeError)r;   r4   rÚ   rÜ   r)   s        r   Útest_instance_dictzTestGreenlet.test_instance_dicto  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 rA   )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   )ÚcopyrC   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¡   rO   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(   rC   rD   r   )r;   r*   ry   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#   )r‡   r(   Ú__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(   rC   r   rK   )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   rj   rq   r   úBcannot switch to a different thread (which happens to have exited)zCannot switchrÊ   T)rl   rm   rr   rs   Úwait_for_pending_cleanupsrC   r   rÉ   rK   r   rF   rG   r¡   r8   rá   r¢   ÚRuntimeErrorrÊ   Úf_localsrS   Ú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=c                 ó.   — |                       ¦   «          d S r#   ©r  r>   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 rg   r  r>   s    r   Ú+test_throw_to_dead_thread_doesnt_crash_waitz8TestGreenlet.test_throw_to_dead_thread_doesnt_crash_waitý  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__Úcountr>   s    r   r  z@TestGreenlet.test_recursive_startup.<locals>.convoluted.__init__  s   € ÝÔ$ TÑ*Ô*Ð*Ø�”
�
�
r   c                 ó†   — |dk    r'| j         dk    rd| _         |                      d¦  «         t          j        | |¦  «        S )NrB   r   r   é+   )r  r   r(   rù   rú   s     r   rù   zHTestGreenlet.test_recursive_startup.<locals>.convoluted.__getattribute__  s>   € Ø˜5’=�= T¤Z°1¢_ _Ø!"�D”JØ—K’K ‘O”O�OÝ"Ô3°D¸$Ñ?Ô?Ð?r   c                 ó:   — 	 | j                              |¦  «         Œr#   ©r   r   )r;   rz   s     r   rB   z;TestGreenlet.test_recursive_startup.<locals>.convoluted.run  s"   € ð.Ø”K×&Ò& uÑ-Ô-Ð-ð.r   N)r   r   r   r  rù   rB   r   r   r   Ú
convolutedr    sD   € € € € € ðð ð ð@ð @ð @ð
.ð .ð .ð .ð .r   r  r·   r  T)r(   r8   r   r  )r;   r  r)   s      r   Útest_recursive_startupz#TestGreenlet.test_recursive_startup   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__  s#   ø€ ð —’‘”�Ø—’‘”���r   N©r   r   r   r(  ©r&  r'  s   €€r   Ú	finalizedr!    s3   ø€ € € € € ð ð  ð  ð  ð  ð  ð  ð  r   r+  c                  óZ   — t          j        ¦   «         j                             ¦   «          d S r#   r¼   r   r   r   Údeallocatorz=TestGreenlet.test_threaded_updatecurrent.<locals>.deallocator%  r  r   c                  óú   •— ‰                      ¦   «          t          j        ¦   «          ‰ d= ‰                     ¦   «          ‰                      ¦   «          t          j        ¦   «          ‰                     ¦   «          d S r   ©r%  r   r   r$  )r)   r&  r'  s   €€€r   Úfthreadz9TestGreenlet.test_threaded_updatecurrent.<locals>.fthread'  s`   ø€ Ø�MŠM‰OŒOˆOÝÔÑ!Ô!Ð!Ø�!�Ø�MŠM‰OŒOˆOØ�MŠM‰OŒOˆOÝÔÑ!Ô!Ð!Ø�MŠM‰OŒOˆOˆOˆOr   r   rj   rq   )rl   ÚLockr%  Úobjectr   r   r(   Úbombr   rm   rr   r$  r8   rs   )	r;   r+  r-  r0  rí   r™   r)   r&  r'  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   )rz   Ú	initiatorr   rï   s    €€€r   rï   z>TestGreenlet.test_dealloc_switch_args_not_lost.<locals>.workerG  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   r7  zATestGreenlet.test_dealloc_switch_args_not_lost.<locals>.initiatorT  ó   € Ø�2r   r   r·   )r(   r   r¡   r8   )r;   rz   r7  r   rï   s     @@@r   Ú!test_dealloc_switch_args_not_lostz.TestGreenlet.test_dealloc_switch_args_not_lostE  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ã   ra   Úks      r   Ú_applyz0TestGreenlet.test_tuple_subclass.<locals>._applym  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__r>   s    r   rC  z9TestGreenlet.test_tuple_subclass.<locals>.mytuple.__len__q  s/   € ÝÔ#Ñ%Ô%×,Ò,Ñ.Ô.Ð.Ý—}’} TÑ*Ô*Ð*r   N)r   r   r   rC  r   r   r   Úmytupler@  p  s#   € € € € € ð+ð +ð +ð +ð +r   rD  r·   )ra   c                  óX   •—  ‰ t          j        ¦   «         j        j        ‰‰¦  «         d S r#   r¼   )r>  r±   Úkwargss   €€€r   Úswitchapplyz5TestGreenlet.test_tuple_subclass.<locals>.switchapplyv  s,   ø€ ØˆF•8Ô&Ñ(Ô(Ô/Ô6¸¸fÑEÔEÐEÐEÐEr   )rB  Údictr(   r8   r   )r;   rD  rG  r)   r>  r±   rF  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ÚAbstractSubclassrB   c                 ó   — d S r#   r   r>   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   ÚBadSubclassrN  �  ó   € € € € € ØˆDr   rO  c                   ó   — e Zd Zd„ ZdS )ú;TestGreenlet.test_abstract_subclasses.<locals>.GoodSubclassc                 ó   — d S r#   r   r>   s    r   rB   z?TestGreenlet.test_abstract_subclasses.<locals>.GoodSubclass.run…  s   € Ø�r   N)r   r   r   rB   r   r   r   ÚGoodSubclassrR  „  s#   € € € € € ðð ð ð ð r   rT  )r   r(   r   rC   rÝ   )r;   rK  rO  rT  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#   r/  r*  s   €€r   Úanother_threadzWTestGreenlet.test_implicit_parent_with_threads.<locals>.attempt.<locals>.another_thread—  s0   ø€ Ø—’‘”�ÝÔ#Ñ%Ô%Ð%Ø—’‘”���r   rj   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   r#  )r;   r&  r'  Úrecycleds    €€€r   r(  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   Nr)  )r&  r'  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   r  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   r  )r_  s   €r   Úgarbagera  ¢  s.   ø€ € € € € ð2ð 2ð 2ð 2ð 2ð 2ð 2r   re  r5   r   rq   T)rl   r1  r%  rm   rr   r2  r:   r   r   rs   r(   r   r€   r�   r8   r   )rZ  r™   re  Úlr­   Úcurrentr)   Ú_Úlastr_  r&  r'  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   r7   )r€   Ú	isenabledÚget_thresholdr:   )r;   rk  rh  rj  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   ÚGreenletrr  Ë  rP  r   rs  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rq   )r   r   r‚   r(   r   rc   ru  r:   r   r   ÚassertGreaterEqualr8   )r;   rs  Úinitial_refsrv  rh  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   )rm   )r˜   rp  c                   ó   — e Zd ZdS )úSTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.MyGreenletNr   r   r   r   Ú
MyGreenletr|  ú  rP  r   r}  c                  óJ   •—  ‰ ¦   «         j                              ¦   «          d S r#   r  rp  s   €r   rv  zVTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.greenlet_main   s$   ø€ ØˆJ‰LŒLÔ×&Ò&Ñ(Ô(Ð(Ð(Ð(r   c                 óØ   •—  ‰‰¦  «        }‰                      |¦  «         |                     ¦   «          ~|                      ¦   «          ‰                     d¦  «          ‰¦   «          d S )Nrq   )r   r   r‘   r’   )Úgreenlet_running_eventÚminer}  r   ru  rv  Úref_cleareds     €€€€€r   Úthread_mainzTTestGreenlet.test_issue_245_reference_counting_subclass_threads.<locals>.thread_main  sm   ø€ Ø�:˜mÑ,Ô,ˆDØ�LŠL˜ÑÔÐà�KŠK‰MŒMˆMàà"×&Ò&Ñ(Ô(Ð(ð ×Ò˜RÑ Ô Ð ð ˆJ‰LŒLˆLˆLˆLr   é-   rW  r°   rq   )rl   rm   r˜   r   r   r(   r   rc   r   r:   r   rr   r’   r‘   r  r8   )r;   rm   r˜   rƒ  rx  Úthread_ready_eventsÚthread_countrh  ÚeventrË   rÇ   r}  r   ru  rv  r‚  s              @@@@@r   Ú2test_issue_245_reference_counting_subclass_threadsz?TestGreenlet.test_issue_245_reference_counting_subclass_threadsì  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:  r9  r   c                  ó   — dS rÕ   r   r   r   r   ÚleafzYTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_raises_error.<locals>.leaf?  r9  r   )r(   rC   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_error9  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_argI  s   € Ø�r�7ˆNr   c                  ó   — dS rÕ   r   r   r   r   rŽ  zRTestGreenlet.test_falling_off_end_switches_to_unstarted_parent_works.<locals>.leafN  r9  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_worksH  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 rA   )r   rú   s     r   rù   ziTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parent.<locals>.Parent.__getattribute__X  s   € Ø˜5’=�=Ý#�Oð !�=r   Nrü   r   r   r   ÚParentr›  W  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(   rC   r   r   r8   )r;   r�  r�  r�  r   s       @r   Ú;test_switch_to_dead_greenlet_with_unstarted_perverse_parentzHTestGreenlet.test_switch_to_dead_greenlet_with_unstarted_perverse_parentV  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>m  s   ø€ °4·;²;¸r±?´?€ r   c                  ó.   •— ‰                       d¦  «        S rÕ   rŸ  r   s   €r   r®   zDTestGreenlet.test_switch_to_dead_greenlet_reparent.<locals>.<lambda>n  r   r   r·   r•  )r(   r   r8   r   rS   )r;   r�  r�  rî   r   s       @r   Ú%test_switch_to_dead_greenlet_reparentz2TestGreenlet.test_switch_to_dead_greenlet_reparentk  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   rN   r¢   r8   Úf_codeÚco_namerŸ   rS   )r;   rª  rì   Ú	unrelatedr©  rí   s       @@r   Ú,test_can_access_f_back_of_suspended_greenletz9TestGreenlet.test_can_access_f_back_of_suspended_greenlety  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   )r�   rµ  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   r7   r�   rq   i°  )Ú	functoolsr´  Ú rµ  r(   r   r¢   r:   r8   r
  rŸ   rS   )r;   Úgrr¤   ro   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   r8   r¯  r°  rS   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   N)F)4r   r   r   r<   r?   rI   rL   rQ   rT   r\   rd   rv   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  r4  r:  rI  rU  rn  ry  rˆ  r‘  r˜  r¡  r¥  r²  r¼  rÁ  r   r   r   r-   r-   4   s;  € € € € € ð.ð .ð .ðð ð ð1ð 1ð 1ð1ð 1ð 1ð7ð 7ð 7ð
!ð !ð !ð
'ð 'ð 'ð(Dð Dð Dð,1ð 1ð 1ð,ð ,ð ,ð8+ð +ð +ðOð Oð Oð&ð &ð &ð6 €X„_ØÐ&Ð&ØGñô ð5ð 5ñô ð5ðn+ð +ð +ð 	ð 	ð 	ð ð  ð  ð-ð -ð -ðð ð ð& ð  ð  ð5ð 5ð 5ð"	+ð 	+ð 	+ðCð Cð Cð
ð ð ð6ð ð ð	;ð 	;ð 	;ð ð7)ð 7)ð 7)ñ „_ð7)ðr ð:ð :ñ „_ð:ð>ð >ð >ð ð)ð )ñ „_ð)ð*-ð -ð -ð^$ð $ð $ð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ð:.ð .ð .ð&(ð (ð (ð (ð (r   r-   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>É  rÂ   r   r)   rq   rÃ   rÄ   s   €€€r   rB   z?TestGreenletSetParentErrors.test_threaded_reparent.<locals>.runÈ  rÈ   r   c                  óZ   — t          j        ¦   «         j                             ¦   «          d S r#   r¼   r   r   r   ÚblankzATestGreenletSetParentErrors.test_threaded_reparent.<locals>.blankÍ  r  r   rj   rq   r)   z&parent cannot be on a different thread)rl   r˜   rm   rr   r’   r(   r   rC   rÐ   r   r‘   rs   r8   rF   rG   )	r;   rB   rÊ  rË   r)   r$   rÅ   rÆ   rÇ   s	         @@@r   Útest_threaded_reparentz2TestGreenletSetParentErrors.test_threaded_reparentÃ  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>ß  ó   €  D€ r   )r(   r   r   )r)   Úanothers    €r   rï   zGTestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.workerÞ  s5   ø€ Ý˜L˜LÑ)Ô)ˆAØ�NŠN˜1ÑÔÐØ�HŠH‰JŒJˆJˆJˆJr   rj   rq   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 ©NrB   r   ©r   r(   rù   ©r;   rû   rÐ  s     €r   rù   z\TestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.convoluted.__getattribute__ú  ó*   ø€ Ø˜5’=�=Ø")¨!¤*�D”KÝ"Ô3°D¸$Ñ?Ô?Ð?r   Nrü   ©rÐ  s   €r   r  rÓ  ù  ó5   ø€ € € € € ð@ð @ð @ð @ð @ð @ð @r   r  c                  ó   — d S r#   r   r   r   r   r®   zITestGreenletSetParentErrors.test_unexpected_reparenting.<locals>.<lambda>þ  rÿ   r   r  )rl   rm   rr   rs   r  Úmain_greenlets_before_testr(   rC   r   rÉ   r   r8   rF   rG   )r;   rï   r™   r  r)   r$   rÐ  s         @r   Útest_unexpected_reparentingz7TestGreenletSetParentErrors.test_unexpected_reparentingÜ  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>  rÏ  r   rq   )r(   r   r   r‘   r’   )r)   rÐ  Úkeep_main_aliveÚswitched_to_greenlets    €€€r   rï   zVTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running.<locals>.worker  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  rj   rq   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)rl   r˜   r(   rm   rr   r’   rC   r   rÉ   r   rE   rF   rG   r‘   rs   )	r;   rï   r  r™   r)   r$   rÐ  rá  râ  s	         @@@r   Ú*test_unexpected_reparenting_thread_runningzFTestGreenletSetParentErrors.test_unexpected_reparenting_thread_running  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(   rO   r   r   r   rC   rD   r8   rF   rG   )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î  ©rC   rD   r   r   r   r8   rF   rG   ©r;   r$   s     r   Ú!test_cannot_delete_parent_of_mainz=TestGreenletSetParentErrors.test_cannot_delete_parent_of_main1  sž   € Ø×Ò�~Ñ.Ô.ð 	-°#ÝÔ#Ñ%Ô%Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-à×Ò�˜Sœ]Ñ+Ô+Ð-EÑFÔFÐFÐFÐFs   ›;»?Á?c                 ó\   — |                       t          j        ¦   «         j        ¦  «         d S r#   )rS   r   r   r   r>   s    r   Ú!test_main_greenlet_parent_is_nonez=TestGreenletSetParentErrors.test_main_greenlet_parent_is_none7  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 )rC   rÝ   r   r8   rF   rG   Ú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ø  rþ  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>X  rç  r   úcyclic parent chain)r(   rC   rÐ   r   r8   rF   rG   )r;   rü  r$   s      r   Útest_trivial_cyclez.TestGreenletSetParentErrors.test_trivial_cycleW  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>d  ró   r   c                  ó   — d S r#   r   r   r   r   r®   z?TestGreenletSetParentErrors.test_deeper_cycle.<locals>.<lambda>e  ró   r   c                  ó   — d S r#   r   r   r   r   r®   z?TestGreenletSetParentErrors.test_deeper_cycle.<locals>.<lambda>f  ró   r   r  )r(   r   rC   rÐ   r8   rF   rG   )r;   r*   ry   Úg3r$   s        r   Útest_deeper_cyclez-TestGreenletSetParentErrors.test_deeper_cyclec  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õ  rÿ  r  r  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   r  zTestRepr.assertEndsWithr  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   r  ©r;   Úrs     r   Útest_main_while_runningz TestRepr.test_main_while_runningu  s5   € Ý•Ô$Ñ&Ô&Ñ'Ô'ˆØ×Ò˜AÐ>Ñ?Ô?Ð?Ð?Ð?r   c                 óª   ‡— t          j        ¦   «         Šˆfd„}t          |¦  «        }|                     ¦   «         }|                      |d¦  «         d S )Nc                  ó"   •— t          ‰ ¦  «        S r#   )r  r¬  s   €r   rB   z-TestRepr.test_main_in_background.<locals>.run{  s   ø€ Ý˜‘:”:Ðr   ú suspended active started main>)r   r   r(   r   r  )r;   rB   r)   r  rí   s       @r   Útest_main_in_backgroundz TestRepr.test_main_in_backgroundy  sc   ø€ ÝÔ"Ñ$Ô$ˆð	ð 	ð 	ð 	ð 	õ ˜ÑÔˆØ�HŠH‰JŒJˆØ×Ò˜AÐ@ÑAÔAÐAÐAÐAr   c                 óh   — t          t          ¦   «         ¦  «        }|                      |d¦  «         d S )Nz	 pending>)r  r(   r  r  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#   )r  Úoriginal_mainr   r   Ú	main_gletrƒ  )r;   rí   s    €r   rB   z3TestRepr.test_main_from_other_thread.<locals>.T.runŒ  s9   ø€ Ý%)¨$¡Z¤Z�Ô"Ý!)Ô!4Ñ!6Ô!6�”Ý#'¨¬Ñ#7Ô#7�Ô Ð Ð r   )r   r   r   r#  rƒ  r$  rB   r¬  s   €r   ÚTr!  ‰  s=   ø€ € € € € Ø*.Ð.ˆM˜KØˆIð8ð 8ð 8ð 8ð 8ð 8ð 8r   r%  rq   r  r  r0   gü©ñÒMbP?z (thread exited) dead>)r   r   rl   rm   rr   rs   r  r#  rƒ  r:   rª   r«   r¡   r$  rZ   r  )r;   r%  r™   rh  r  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   r  r  ÚassertNotInrP   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   ÚassertIsInstancerF   )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   r  r  r  r  r&  r-  r5  r   r   r   r  r  o  s£   € € € € € àˆ7�8Ð-Ñ.Ô.ð Bð	Bð 	Bð 	Bð 	Bð@ð @ð @ðBð Bð Bð,ð ,ð ,ð!=ð !=ð !=ðF,ð ,ð ,ðð ð ð ð r   r  c                   ó    — e 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í   )r  r   r   rû  )r;   r™   s     r   Ú_check_current_is_mainz'TestMainGreenlet._check_current_is_mainÉ  sV   € à��hÔ1Ñ3Ô3Ñ4Ô4Ð4Ð4Ð4Ð4å•Ô$Ñ&Ô&Ñ'Ô'ˆØ�T !™WœWÐ$Ð$Ð$Ð$Øˆr   c                 ó|   — |                       ¦   «         }t          d|fi ¦  «        }|                      |¦  «         d S )NÚsubclass)r9  rû  rN   )r;   Ú	main_typer;  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#   )r9  r1  r   r   r(   r>   s    r   Útest_main_greenlet_is_greenletz/TestMainGreenlet.test_main_greenlet_is_greenletÖ  s9   € Ø×#Ò#Ñ%Ô%Ð%Ø×Ò�hÔ1Ñ3Ô3µ[ÑAÔAÐAÐAÐAr   N)r   r   r   r9  r=  r?  r   r   r   r7  r7  Å  sF   € € € € € ðð ð ð'ð 'ð 'ð
Bð Bð Bð Bð Br   r7  c                   ó>   — e 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>.funcá  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_initialstubà  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   r5   r0   r1   )Úrunss   €r   rã   zDTestBrokenGreenlets.test_failed_to_switch_into_running.<locals>.funcî  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   r5   Tz0Failed to switch stacks into a running greenlet.F)r   r5   r0   )r   rE  rF  r   r8   rG  rH  rI  )r;   rã   r)   rM  s      @r   Ú"test_failed_to_switch_into_runningz6TestBrokenGreenlets.test_failed_to_switch_into_runningì  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)ÚassertScriptRaisesrE   Ú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_scriptrE   ©r;   rQ  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)rP  rE   rQ  rT  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')]rY  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)]rY  r[  s     r   Ú4test_reentrant_switch_GreenletAlreadyStartedInPythonzHTestBrokenGreenlets.test_reentrant_switch_GreenletAlreadyStartedInPython3  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')]rY  r[  s     r   Ú*test_reentrant_switch_run_callable_has_delz>TestBrokenGreenlets.test_reentrant_switch_run_callable_has_del?  s>   € Ø—’Ð!@ÑAÔAˆØ�Šðð ñ	
ô 	
ð 	
ð 	
ð 	
r   N)r   r   r   rJ  rN  rV  r\  r_  ra  rc  re  r   r   r   rA  rA  Ü  s�   € € € € € ð
ð 
ð 
ð*ð *ð *ð8Zð Zð Zð7ð 7ð 7ð9ð 9ð 9ð
ð 
ð 
ð$

ð 

ð 

ð
ð 
ð 
ð 
ð 
r   rA  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   rh  r¡   r>   s    r   Útest_no_gil_on_free_threadedz'TestModule.test_no_gil_on_free_threadedK  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   rj  r   r   r   rg  rg  I  sU   € € € € € à€XÔ˜˜ Ð&7Ñ8Ô8ØGñIô Ið3ð 3ñIô Ið3ð 3ð 3r   rg  Ú__main__)r€   r   rª   rl   rÂ  Úabcr   r   r   r(   rº  r   r   r	   r
   r   Ú	leakcheckr   r‡   r   r    r+   r-   rÅ  r  r7  rA  rg  r   rí   r   r   r   ú<module>ro     s~  ðØ 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø &Ð &Ð &Ð &Ð &Ð &ð	ð 	ð 	ð 	ð 	�	ñ 	ô 	ð 	ðð ð ðð ð ðK(ð K(ð K(ð K(ð K(�8ñ K(ô K(ð K(ð\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Bð Bð Bð Bð B�xñ Bô Bð Bð.k
ð k
ð k
ð k
ð k
˜(ñ k
ô k
ð k
ðZ	3ð 	3ð 	3ð 	3ð 	3�ñ 	3ô 	3ð 	3ð ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   