
    i`                        d dl mZ d dlmZmZ 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	Z	d dlmZ d dlmZ d dlmZ d dlmZ ej        d             Z G d	 d
ej                  Z G d de          Z G d de          Zd>dZd Zd\  ZZZ G d de          ZdZdZej        rej         sej!        sej"        rdZ G d de          Z# G d de#          Z$ej%         G d de#                      Z&ej%         G d de#                      Z' G d  d!e          Z( G d" d#e          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/ d0e          Z0d1 Z1 G d2 d3e          Z2d d4l	m3Z3  ej4         e5e	j6        d5          d6           G d7 d8e                      Z7 G d9 d:ej                  Z8 G d; d<e          Z9e:d=k    r ej;                     dS dS )?    )print_function)timesleepN)
ThreadPool)InvalidThreadUseErrorExpectedException)PYPYc               #      K   t          j                    } t          j                     	 d V  | rt          j                     d S d S # | rt          j                     w w xY wN)gc	isenableddisableenable)was_enableds    H/usr/local/lib/python3.11/dist-packages/gevent/tests/test__threadpool.pydisabled_gcr      sh      ,..KJLLL 	IKKKKK	 	; 	IKKKK	s   A Ac                   H    e Zd Zej        ZdZdZeZ	d Z
ej        fdZd ZdS )TestCaseN c                     | j         S r   )ClassUnderTestselfs    r   _FUTzTestCase._FUT*   s    ""    c                      |                                  |          x| _        }| xj        |fz  c_        |r|| j        _        |S r   )r   pool
_all_poolssize)r   maxsizecreate_all_worker_threadsr   s       r   _makeOnezTestCase._makeOne-   sH    &499;;w///	DD7"$ 	%$DINr   c                     d | _         | j        dc}| _        |D ].}t          |dd           pt          |d          } |             ~/t          j        r%t          d          D ]}t          j                     d S d S )Nr   killshutdown   )r   r   getattr	greentestRUN_LEAKCHECKSranger   collect)r   	all_poolsr   r%   _s        r   cleanupzTestCase.cleanup5   s    	%)_b"	4? 	 	D4..K'$
2K2KDDFFF# 	 1XX  
	 	 r   )__name__
__module____qualname__r)   LARGE_TIMEOUT__timeout__r   r   r   r   r   r*   r#   r/   r   r   r   r   r   #   sf        )KDJN# # # ;D:R        r   r   c                   4    e Zd Zd Zd Zd Zde_        d ZdS )PoolBasicTestsc                    |                      d          }g }|                    |j        d          }|                                 |                     |dg           t          j        d           |                    |j        d           |                     |dg           |                    |j        d           |                     |dg           |                    |j        d           |                     |dg           t          j        d           |                     t          |          g d           d S )	N      r   )r8   )r'   )   {Gz?)r9   r8   r'   r:   )
r#   spawnappendgetassertEqualgeventr   apply_asyncassertEqualFlakyRaceConditionsorted)r   r   rfirsts       r   test_execute_asyncz!PoolBasicTests.test_execute_asyncI   s%   }}Q

18Q''		QC   Q5)))QC   5)))QC   5)))QC   T**6!99lllCCCCCr   c                     |                      d          }|                    d d          }|                     |d           d S )Nr9   c                 
    d| fS )Nfoor   )as    r   <lambda>z+PoolBasicTests.test_apply.<locals>.<lambda>^   s
    uaj r   )r9   )rI   r9   )r#   applyr?   )r   r   results      r   
test_applyzPoolBasicTests.test_apply\   sF    }}Q00%88,,,,,r   c                     |                      d          }d }|                     t                    5  |                    |           d d d            d S # 1 swxY w Y   d S )Nr9   c                      t                      r   r   r   r   r   raiserz0PoolBasicTests.test_apply_raises.<locals>.raiserd   s    #%%%r   )r#   assertRaisesr	   rL   )r   r   rQ   s      r   test_apply_raisesz PoolBasicTests.test_apply_raisesa   s    }}Q	& 	& 	& 011 	 	JJv	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAFc                     d| _         |                     t                    5  |                     d           d d d            d S # 1 swxY w Y   d S )NF)switch_expectedrR   
ValueErrorr#   r   s    r   test_init_valueerrorz#PoolBasicTests.test_init_valueerrorn   s    $z** 	 	MM"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA	A	N)r0   r1   r2   rF   rN   rS   error_fatalrX   r   r   r   r6   r6   G   s^        D D D&- - -
   %*!    r   r6   c                       e Zd Zd Zd ZdS )TimingWrapperc                 "    || _         d | _        d S r   )funcelapsed)r   the_funcs     r   __init__zTimingWrapper.__init__y   s    	r   c                     t                      }	  | j        |i |t                      |z
  | _        S # t                      |z
  | _        w xY wr   )r   r]   r^   )r   argskwdsts       r   __call__zTimingWrapper.__call__}   sP    FF	&49d+d++66A:DLL466A:DL%%%%s	   3 AN)r0   r1   r2   r`   re   r   r   r   r[   r[   w   s2          & & & & &r   r[           c                 *    t          |           | | z  S r   )r   )xwaits     r   sqrrj      s    	$KKKq5Lr   c                 R    t          t          j                    dz             | | z  S )N皙?)r   randomrh   s    r   sqr_random_sleepro      s$    	&-//C
   q5Lr   )gˡE?gQ?gQ?c                   <    e Zd ZdZdZd Zej        d             ZdS )_AbstractPoolTestr9   Fc                 x    t           j                            |            |                     | j                   d S r   )r)   r   setUpr#   r    r   s    r   rs   z_AbstractPoolTest.setUp   s3      &&&di     r   c                      j         j        } j        r fd}                      |t          t          d                    t          t          t          t          d                                                               |t          t          d                    t          t          t          t          d                                          j                                           ` ~d S )Nc                 T    t          j                            | |                    S r   )listr   map)fir   s     r   rK   z,_AbstractPoolTest.test_map.<locals>.<lambda>   s    TY]]1a%8%8 9 9 r   
   d   )r   rw   
MAP_IS_GENr?   rj   r+   rv   r%   )r   pmaps   ` r   test_mapz_AbstractPoolTest.test_map   s    y}? 	:9999Dc599--tCU2YY4G4G/H/HIIIc5::..SeCjj5I5I0J0JKKK	IDDr   N)	r0   r1   r2   r    r|   rs   r)   ignores_leakcheckr~   r   r   r   rq   rq      sL        DJ! ! !  	 	 ! 	 	 	r   rq   rz   i  2   c                   n    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d Zd Zd ZdS )TestPoolc                    ddl m} ddlm} | j                            |          }|                     ||           t          |          }|                     d|           |                     d|           |                     d|           ddl	m
} d                     |                      }|                     d	|           d S )
Nr   )
getcurrent)_WorkerGreenletThreadPoolWorkerthread_identzhub=)format_run_info
z<ThreadPoolWorker)greenletr   gevent.threadpoolr   r   rL   assertIsInstancereprassertIngevent.utilr   join)r   r   r   worker_greenletrD   r   infos          r   test_greenlet_classzTestPool.test_greenlet_class   s    ''''''555555)//*55o???!!(!,,,na(((fa   //////yy**++)400000r   c                     | j         j        }|                      |t          d          t          d                     |                      |t          dddi          t          d                     d S )N)   r   r   rh   r'   rn   )r   rL   r?   rj   )r   papplys     r   rN   zTestPool.test_apply   si    T**CFF333R#q22C!HHH=====r   c                     | j                             t          dt          f          }t	          |j                  }|                      |            d           |                     |j        t          d           d S )N   1   r9   )	r   rA   rj   TIMEOUT1r[   r>   r?   assertTimeoutAlmostEqualr^   r   resr>   s      r   
test_asynczTestPool.test_async   sh    i##C!X88CG$$###%%ck8Q?????r   c                 b   g }| j                             t          dt          f|j                  }t          |j                  }|                      |            d           |                     |j	        t          d           t          j        d           |                     |dg           d S )Nr   )callbackr   r9   r   )r   rA   rj   r   r=   r[   r>   r?   r   r^   r@   r   )r   rM   r   r>   s       r   test_async_callbackzTestPool.test_async_callback   s    i##C!X&-#PPCG$$###%%ck8Q???Q"&&&&&r   c                 D   | j                             t          dt          dz   f          }t	          |j                  }|                     t          j        |t                     | 	                    |j
        t          d           | j                                          d S )N   皙?timeoutr9   )r   rA   rj   TIMEOUT2r[   r>   rR   r@   Timeoutr   r^   r   r   s      r   test_async_timeoutzTestPool.test_async_timeout   s    i##C!X^)<==CG$$&.#x@@@%%ck8Q???	r   c                    | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   d S r   )r   imaprj   r+   SMALL_RANGEr?   rv   rw   r   its     r   test_imap_list_smallzTestPool.test_imap_list_small   s[    Y^^C{!3!344b4C{1C1C(D(D#E#EFFFFFr   c                 &   | j                             t          t          t                              }t          t                    D ](}|                     t          |          ||z             )|                     t          t          |           d S r   )	r   r   rj   r+   r   r?   nextrR   StopIterationr   r   ry   s      r   test_imap_it_smallzTestPool.test_imap_it_small   w    Y^^C{!3!344{## 	. 	.AT"XXq1u-----r22222r   c                 &   | j                             t          t          t                              }t          t                    D ](}|                     t          |          ||z             )|                     t          t          |           d S r   )	r   r   rj   r+   LARGE_RANGEr?   r   rR   r   r   s      r   test_imap_it_largezTestPool.test_imap_it_large   r   r   c                 L   | j                             t          t          t                              }t          t                    D ];}|                     t          |          ||z             t          j                     <| 	                    t          t          |           d S r   )r   r   rj   r+   r   r?   r   r   r,   rR   r   r   s      r   test_imap_gczTestPool.test_imap_gc   s    Y^^C{!3!344{## 	 	AT"XXq1u---JLLLL-r22222r   c                    | j                             t          t          t                              }g }t          t                    D ]7}|                    t          |                     t          j                     8| 	                    t                    5  t          |           d d d            n# 1 swxY w Y   |                     t          |          d t          t                    D                        d S )Nc                     g | ]}||z  S r   r   .0rh   s     r   
<listcomp>z3TestPool.test_imap_unordered_gc.<locals>.<listcomp>   s    )L)L)LA!a%)L)L)Lr   )r   imap_unorderedrj   r+   r   r=   r   r   r,   rR   r   r?   rC   )r   r   rM   r.   s       r   test_imap_unordered_gczTestPool.test_imap_unordered_gc   s   Y%%c5+=+=>>{## 	 	AMM$r((###JLLLL}-- 	 	HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	)L)L{9K9K)L)L)LMMMMMs   B77B;>B;c                    | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   d S r   )	r   r   ro   r+   r   r?   rv   rw   rj   r   s     r   test_imap_randomzTestPool.test_imap_random  s\    Y^^,eK.@.@AAb4C{1C1C(D(D#E#EFFFFFr   c                 "   | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   d S r   )	r   r   rj   r+   r   r?   rC   rv   rw   r   s     r   test_imap_unorderedzTestPool.test_imap_unordered  s    Y%%c5+=+=>>T#c53E3E*F*F%G%GHHHY%%c5+=+=>>T#c53E3E*F*F%G%GHHHHHr   c                    | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   d S r   )
r   r   ro   r+   r   r?   rC   rv   rw   rj   r   s     r   test_imap_unordered_randomz#TestPool.test_imap_unordered_random  s^    Y%%&6k8J8JKKT#c53E3E*F*F%G%GHHHHHr   c                    | j         pd}| j                            t          dg|dz  z            }t	          j        d           	 |                     d| j         z  dz   d          5  | j                                         d d d            n# 1 swxY w Y   |                                 d S # |                                 w xY w)Nrz   rl   r8         ?r   )min_time)r    r   	map_asyncr   r@   runs_in_given_timer%   r   )r   r    rM   s      r   test_terminatezTestPool.test_terminate  s    yB$$USETAX,>??S	((ty3)>(KK ! !	   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! KKMMMMMFKKMMMMs0   "B/ (BB/ BB/ BB/ /Cc                 ^    t          t          |          dz             t          |          S )Ng      $@)r   floatstr)r   rh   s     r   r   zTestPool.sleep  s%    eAhho1vvr   c                     t          | j                            | j        g d                    }| j        j        dk    rg d}ng d}|                     ||           d S )N)rz   r9   r8   r9   )1012)r   r   r   )rv   r   r   r   r    r?   )r   rM   expecteds      r   test_imap_unordered_sleepz"TestPool.test_imap_unordered_sleep  sj    di..tz:::FFGG9>Q'''HH'''H*****r   N)r0   r1   r2   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s       1 1 1 > > >
@ @ @' ' '  G G G3 3 33 3 33 3 3N N NG G GI I II I I    + + + + +r   r   c                   2    e Zd ZdZej        d             ZdS )	TestPool2r8   c                     | j         fd}d                     |          }|                     |d           d S )Nc                  .                                    S r   )rL   )bps   r   rJ   z)TestPool2.test_recursive_apply.<locals>.a/  s    771::r   c                  T    t          j                     t          j        d           dS )NMbP?Br@   r   r   r   r   r   z)TestPool2.test_recursive_apply.<locals>.b2  s$     LNNNL3r   r   )r   rL   r?   )r   rJ   rM   r   r   s      @@r   test_recursive_applyzTestPool2.test_recursive_apply+  se    I	 	 	 	 	 		 	 	 %%%%%r   N)r0   r1   r2   r    r)   r   r   r   r   r   r   r   (  s6        D & & ! & & &r   r   c                       e Zd ZdZdS )	TestPool3r'   Nr0   r1   r2   r    r   r   r   r   r   >  s        DDDr   r   c                       e Zd ZdZdS )
TestPool10rz   Nr   r   r   r   r   r   B  s        DDDr   r   c                   l    e Zd ZdZ ej        ej        oej        oej        d          d             Z	dS )TestJoinEmptyFzqThis sometimes appears to crash in PyPy2 5.9.0, but never crashes on macOS or local Ubunto with same PyPy versionc                 X    |                      d          }|                                 d S Nr9   )r#   r   r   r   s     r   testzTestJoinEmpty.test[  s&     }}Q		r   N)
r0   r1   r2   rV   r)   skipIfr
   LIBUVRUNNING_ON_TRAVISr   r   r   r   r   r   X  sa        OYinXXY=XZ[ [
 [ [
  r   r   c                   R    e Zd ZdZej        d             Zej        d             ZdS )	TestSpawnTc                    |                      d          }|                     t          |          d           g fd}|                    |dd           |                     t          |          d           |                    |dd           |                     t          |          d           t	          j        d           |                     dg           |                     t          |          d           t	          j        d           |                     ddg           |                     t          |          d           d S )	Nr9   r   c                 L    t          |                              |           gS r   )r   r=   )itemsecondslogs     r   rK   z'TestSpawn.test_basics.<locals>.<lambda>m  s    U7^^SZZ=M=M,N r   rJ   rl   r   r8   g333333?)r#   r?   lenr<   r@   r   )r   r   sleep_n_logr   s      @r   test_basicszTestSpawn.test_basicsh  s9   }}QTA&&&NNNN

;S)))TA&&&

;S))) 	TA&&&Tse$$$TA&&&TsCj)))TA&&&&&r   c                    |                      d          }|                      d          fd}|                    |          }|                     t                    5  |                                 d d d            d S # 1 swxY w Y   d S )Nr9   r8   c                  4                          d            d S )Nc                      dS )NHir   r   r   r   rK   zMTestSpawn.test_cannot_spawn_from_other_thread.<locals>.func.<locals>.<lambda>  s     r   )r<   )pool2s   r   r]   z;TestSpawn.test_cannot_spawn_from_other_thread.<locals>.func  s    KK%%%%%r   )r#   r<   rR   r   r>   )r   pool1r]   r   r   s       @r   #test_cannot_spawn_from_other_threadz-TestSpawn.test_cannot_spawn_from_other_thread{  s    
 a  a  	& 	& 	& 	& 	& kk$455 	 	GGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s    BB	BN)r0   r1   r2   rV   r)   r   r   r   r   r   r   r   r   e  sU        O ' ' ! '$    !   r   r   c               #   .   K   dV  dV  t           j        )Nr9   r8   )r)   r	   r   r   r   
error_iterr    s!      
GGG
GGG

%%r   c                       e Zd ZdZd Zd ZdS )TestErrorInIteratorFc                     |                      d          | _        |                     t          j        | j        j        d t                                 t          j        d           d S )Nr'   c                     d S r   r   rn   s    r   rK   z*TestErrorInIterator.test.<locals>.<lambda>  s    PT r   r   )	r#   r   rR   r)   r	   rw   r  r@   r   r   s    r   r   zTestErrorInIterator.test  sU    MM!$$	)5ty}nnV`VbVbcccUr   c                                            d           _         fd}                     t          j        |           t          j        d           d S )Nr'   c                  n    t           j                            d t                                          S )Nc                     d S r   r   rn   s    r   rK   zGTestErrorInIterator.test_unordered.<locals>.unordered.<locals>.<lambda>  s    4 r   )rv   r   r   r  r   s   r   	unorderedz5TestErrorInIterator.test_unordered.<locals>.unordered  s)    	00NNOOOr   r   )r#   r   rR   r)   r	   r@   r   )r   r
  s   ` r   test_unorderedz"TestErrorInIterator.test_unordered  se    MM!$$		P 	P 	P 	P 	P 	)5yAAAUr   N)r0   r1   r2   rY   r   r  r   r   r   r  r    s7        K  
    r   r  c                   4    e Zd Zd Zej        d             ZdS )TestMaxsizec                    |                      d          | _        g }t          j        | j        j        |j        d           t          j        d| j        j        |j        d           t          j        d           |                     |g            d| j        _        t          j        d           | 	                    |ddg           d S )Nr   r9   r;   r8   g{Gz?)
r#   r   r@   r<   r=   spawn_laterr   r?   r!   rB   )r   dones     r   test_inczTestMaxsize.test_inc  s    MM!$$	 	TY_dk15554$+qAAATr"""	T**4!Q88888r   c                    |                      d          x}| _        |                    t          d           |                    t          d           |                    t          d           t	          j        d           |                     |j        d           d|_        t	          j        d           |                     |j        d           d S )Nr'   rl   r   g333333?r8   r   )	r#   r   r<   r   r@   assertGreaterEqualr    r!   rB   r   s     r   test_setzerozTestMaxsize.test_setzero  s    ==+++ty

5#

5#

5#S	1---S**49a88888r   N)r0   r1   r2   r  r)   r   r  r   r   r   r  r    sB        9 9 9  	9 	9 ! 	9 	9 	9r   r  c                   >    e Zd Z ej                    d             ZdS )TestSizec                    |                      dd          x}| _        |                     |j        d           d|_        |                     |j        d           d|_        |                     |j        d           d|_        |                     |j        d           |                     t
                    5  d|_        d d d            n# 1 swxY w Y   |                     t
                    5  d|_        d d d            n# 1 swxY w Y   d|_        |                     |j        d           d|_        |                     |j        d           d S )Nr8   Fr"   r   r9   rU   r'   )r#   r   r?   r    rR   rW   r   s     r   r   zTestSize.test  s   ==e=LLLtyA&&&	A&&&	A&&&	A&&&z** 	 	DI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 z** 	 	DI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	A&&&	A&&&&&s$   :CCC3DDDN)r0   r1   r2   r)   reraises_flaky_race_conditionr   r   r   r   r  r    s9        ,Y,..' ' /.' ' 'r   r  c                       e Zd Zd ZdS )TestRefc                    |                      d          x}| _        g }t                      }||_        |j        }~t                      5  |                    |t                      fdt                      i          }|                     |t                     t          j
        d           |                    t          j        |                     ~~t          r&t          j                     t          j                     |D ]}|                      |                        |                     dt'          |                     d d d            d S # 1 swxY w Y   d S )Nr8   kwarg1rl   r:   )r#   r   	SomeClassrefsr]   r   rL   Objectr   r@   r   r=   weakrefrefr
   r   r,   assertIsNoner?   r   )r   r   r  objr]   rM   rD   s          r   r   zTestRef.test  sz   ==+++tykkx]] 	+ 	+ ZZvxxlXvxx4HIIF!!&&111LKKD))***f 

 ' '!!!!##&&&&QD		***!	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   
C=EEENr0   r1   r2   r   r   r   r   r  r    s#        + + + + +r   r  c                       e Zd ZdS )r   Nr0   r1   r2   r   r   r   r   r     s        Dr   r   c                       e Zd ZdZddZdS )r  Nc                 p    t                      }| j                            d |||fD                        |S )Nc                 6    g | ]}t          j        |          S r   )r!  r"  r   s     r   r   z"SomeClass.func.<locals>.<listcomp>  s     IIIQ'+a..IIIr   )r   r  extend)r   arg1r  rM   s       r   r]   zSomeClass.func  s<    	II42HIIIJJJr   r   )r0   r1   r2   r  r]   r   r   r   r  r    s-        D     r   r  c                      d S r   r   r   r   r   noopr.    s    Dr   c                       e Zd Zd ZdS )TestRefCountc                     |                      d          }|                    t                     t          j        d           |                                 d S )Nr9   r   )r#   r<   r.  r@   r   r%   r   s     r   r   zTestRefCount.test  sC    }}Q

4Q		r   Nr%  r   r   r   r0  r0  	  s#            r   r0  )monkeyThreadPoolExecutorzRequires ThreadPoolExecutorc                       e Zd ZdZdZed             ZdZed             Zed             Z	ed             Z
ej        d             Zej        d	             Zej        d
             ZdS )TestTPEr9   Tc                 $    t           j        j        S r   )r@   
threadpoolr3  r   s    r   r   zTestTPE.ClassUnderTest  s     33r   Fc                     ddl m} |S )Nr   )TimeoutError)concurrent.futuresr9  )r   FutureTimeoutErrors     r   r;  zTestTPE.FutureTimeoutError#  s    IIIIII!!r   c                     ddl m} |S )Nr   )ri   )r:  ri   )r   cf_waits     r   r=  zTestTPE.cf_wait(  s    666666r   c                     ddl m} |S )Nr   )as_completed)r:  r?  )r   cf_as_completeds     r   r@  zTestTPE.cf_as_completed-  s    FFFFFFr   c                 *  	 |                      t          j        d          | j                   | j        }g 	d }d }|                    |          }d|_        |                    |           |                     | j	        |j
        d           d }t          j        |          }|                      |
                                d           |                     |                                           |                     |                                           t          j                     |                      |j        d	           |                     |                                           |                      |j        d
           |                    	fd           |                      	dg           |                     |f          \  }}|                      t+          |          |g           |                      t+          |                     |f                    |g           |                      |j        d	           t          j                     |                      |j        d	           |                                 ~~| `d S )N	threadingc                  .    t          j        d           dS Nr   *   r   r   r   r   fnzTestTPE.test_future.<locals>.fn:      L2r   c                 J    | xj         dz  c_         t          j        d          )Nr9   zExpected, ignored)
calledbackr)   r	   )futures    r   r   z%TestTPE.test_future.<locals>.callback>  s(    "-.ABBBr   r   r   r   c                      dS N  r   r   r   r   spawnedz$TestTPE.test_future.<locals>.spawnedG      4r   rE  r9   rM  c                 .                         d          S )NTr=   )rx   rI  s    r   rK   z%TestTPE.test_future.<locals>.<lambda>[  s    :+<+<T+B+B r   T)r?   r2  is_module_patchedMONKEY_PATCHEDr   submitrI  add_done_callbackrR   r;  rM   r@   r<   
assertTruer  assertFalse	cancelledr   readyvaluer=  rv   r@  r%   )
r   r   rF  r   rJ  rN  spawned_greenletr  	_not_donerI  s
            @r   test_futurezTestTPE.test_future2  sz   1+>>,	. 	. 	.y
	 	 		C 	C 	C R  ***$16=%PPP	 	 	 "<00
 	"---&&&))++,,, 	*A...(..00111)/666 	  !B!B!B!BCCCdV,,, ,,y11idfX...d22F9==>>III*A...*A...		IIIr   c                    |                      t          j        d          | j                   | j        }d }|                    |          }| j        r|                     |fd          \  }}|                      t          |          |g           d }t          j	        |          }|                     |f          \  }}	|                      t          |          |g           | 
                    |                                           |                      |j        d           n"|                     t          | j        |f           |                                 ~~| `d S )NrB  c                  .    t          j        d           dS rD  r   r   r   r   rF  z4TestTPE.test_future_wait_module_function.<locals>.fnv  rG  r   r   r   c                      dS rL  r   r   r   r   rN  z9TestTPE.test_future_wait_module_function.<locals>.spawned  s    tr   rM  )r?   r2  rR  rS  r   rT  r=  rv   r@   r<   rV  rY  rZ  rR   AttributeErrorr%   )
r   r   rF  rJ  _donenot_donerN  r[  r  r\  s
             r    test_future_wait_module_functionz(TestTPE.test_future_wait_module_functionn  sg    	1+>>,	. 	. 	.y	 	 	 R 	G"llF9elDDOE8T(^^fX666    &|G44"llF955OD)T$ZZ&222OO,2244555-3T:::: ndlVIFFF		IIIr   c                    |                      t          j        d          | j                   | j        }d }|                    |          }d }t          j        |          }t          j        |f          }|                      t          |          |g           | 
                    |                                           |                      |j        d           |                                 ~~| `d S )NrB  c                  .    t          j        d           dS rD  r   r   r   r   rF  z4TestTPE.test_future_wait_gevent_function.<locals>.fn  rG  r   c                      dS rL  r   r   r   r   rN  z9TestTPE.test_future_wait_gevent_function.<locals>.spawned  rO  r   rM  )r?   r2  rR  rS  r   rT  r@   r<   ri   rv   rV  rY  rZ  r%   )r   r   rF  rJ  rN  r[  r  s          r    test_future_wait_gevent_functionz(TestTPE.test_future_wait_gevent_function  s     	1+>>,	. 	. 	.y	 	 	 R	 	 	 "<00{F9%%dfX...(..00111)/666		IIIr   N)r0   r1   r2   r    r|   propertyr   rS  r;  r=  r@  r)   r   r]  rd  rh  r   r   r   r5  r5    s         DJ4 4 X4 N" " X"   X   X  9 9 ! 9v  ! ! ! !F    !   r   r5  c                       e Zd Zd ZdS )TestThreadResultc                 >   g  G d dt                     fd}t          j                            d t          j                    |          fd}t          j        |                                           |                               5  t          d          D ]}t          j	        d           	 d d d            n# 1 swxY w Y   | 
                    ddg           |                     j                   |                     j                   d S )Nc                       e Zd ZdS )MTestThreadResult.test_exception_in_on_async_doesnt_crash.<locals>.MyExceptionNr'  r   r   r   MyExceptionrn    s        Dr   ro  c                  2                         d            r   rQ  )ro  calleds   r   bad_when_readyzPTestThreadResult.test_exception_in_on_async_doesnt_crash.<locals>.bad_when_ready  s    MM!r   c                  \                          d                               d           d S )Nr9   rE  )r=   set)rq  trs   r   wakezFTestThreadResult.test_exception_in_on_async_doesnt_crash.<locals>.wake  s(    MM!FF2JJJJJr   r   r   r9   )	Exceptionr@   r7  ThreadResultget_hubr<   r>   rR   r+   r   r?   r#  rZ  assertIsNotNonereceiver)r   rr  rv  r.   ro  rq  ru  s       @@@r   'test_exception_in_on_async_doesnt_crashz8TestThreadResult.test_exception_in_on_async_doesnt_crash  s    	 	 	 	 	) 	 	 		 	 	 	 	 	 ++D&.2B2BNSS	 	 	 	 	 	 	T    {++ 	$ 	$1XX $ $U####$	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 	!Q((("(###R[)))))s   'CC
C
N)r0   r1   r2   r|  r   r   r   rk  rk    s#         *  *  *  *  *r   rk  c                   N     e Zd ZdZdZ fdZ fdZd Zd Zd Z	d Z
d Z xZS )	TestWorkerProfileAndTraceNc                     t          t          |                                            t          j                                        | _        t          j                                        | _        d S r   )	superr~  rs   r@   r7  _get_thread_profileold_profile_get_thread_trace	old_trace)r   	__class__s    r   rs   zTestWorkerProfileAndTrace.setUp  sQ    '..44666!,@@BB*<<>>r   c                     dd l }|                    | j                   |                    | j                   t          t          |                                            d S Nr   )rB  
setprofiler  settracer  r  r~  tearDown)r   rB  r  s     r   r  z"TestWorkerProfileAndTrace.tearDown  s_    T-...4>***'..7799999r   c                     dd l }|                    |            |                     t          j                                        |            d S r  )rB  r  assertIsr@   r7  r  r   rB  s     r   test_get_profilez*TestWorkerProfileAndTrace.test_get_profile  sK    T"""f';;==tDDDDDr   c                     dd l }|                    |            |                     t          j                                        |            d S r  )rB  r  r  r@   r7  r  r  s     r   test_get_tracez(TestWorkerProfileAndTrace.test_get_trace  sK    4   f'99;;TBBBBBr   c                 R  
 dd l }dd l}t          |d|z             }t          |d|z             dgfd}fd}g g 
|  G 
fddt                    }|| _        |                     dd	
          }t          ||          sJ  ||           |                    |          }	|                     |	d           | 	                    d         d           |
                                 |                     |d |g           |                     
||d g           d S )Nr   rt  r>   c                  (    dxx         dz  cc<   d S )Nr   r9   r   )_argsrq  s    r   r   zETestWorkerProfileAndTrace._test_func_called_in_task.<locals>.callback  s    1IIINIIIIIr   c                  2                                     dS )N  )rz  )getterr   s   r   taskzATestWorkerProfileAndTrace._test_func_called_in_task.<locals>.task  s      (((4r   c                   >    e Zd Z G  fddej                  ZdS )ATestWorkerProfileAndTrace._test_func_called_in_task.<locals>.Poolc                   (    e Zd ZfdZ fdZdS )QTestWorkerProfileAndTrace._test_func_called_in_task.<locals>.Pool._WorkerGreenletc                                          |                                                        t          j        j        | |g|R                                                d S r   )r=   r   r   _before_run_task)r   r]   rb   before_taskr  s      r   r  zbTestWorkerProfileAndTrace._test_func_called_in_task.<locals>.Pool._WorkerGreenlet._before_run_task  so    &&t,,,&&vvxx000.?dRTRRRR&&vvxx00000r   c                                          |                                                        t          j        j        | |g|R                                                d S r   )r=   r   r   _after_run_task)r   r]   rb   
after_taskr  s      r   r  zaTestWorkerProfileAndTrace._test_func_called_in_task.<locals>.Pool._WorkerGreenlet._after_run_task  so    %%d+++%%ffhh///.>tTQDQQQQ%%ffhh/////r   N)r0   r1   r2   r  r  r  r  r  s   r   r   r    sQ        1 1 1 1 1 10 0 0 0 0 0 0 0r   r   N)r0   r1   r2   r   r   r  s   r   Poolr    sV        0 0 0 0 0 0 0 0 0*"< 0 0 0 0 0r   r  r9   Tr  r  )rB  sysr(   r   r   r#   
isinstancerL   r?   r  r%   )r   r]   rB  r  setterr   r  r  r   r   r  r  rq  r  r   s             @@@@@r   _test_func_called_in_taskz3TestWorkerProfileAndTrace._test_func_called_in_task  s   


EDL11edl++	 	 	 	 		 	 	 	 	 	
 
	0 	0 	0 	0 	0 	0 	0 	0 	0: 	0 	0 	0 #}}Q$}??$%%%%% 	x jjd###q	1--- 			 	tT8&<===dHd%;<<<<<r   c                 0    |                      d           d S )Nprofiler  r   s    r   test_profile_called_in_taskz5TestWorkerProfileAndTrace.test_profile_called_in_task0  s    &&y11111r   c                 0    |                      d           d S )Ntracer  r   s    r   test_trace_called_in_taskz3TestWorkerProfileAndTrace.test_trace_called_in_task3  s    &&w/////r   )r0   r1   r2   r  r  rs   r  r  r  r  r  r  __classcell__)r  s   @r   r~  r~    s        
 KI? ? ? ? ?
: : : : :E E E
C C C
== == ==~2 2 20 0 0 0 0 0 0r   r~  __main__)rf   )<
__future__r   r   r   
contextlibrm   r!  r   r   r@   r   gevent.exceptionsr   gevent.testingtestingr)   r	   r
   contextmanagerr   r   r6   objectr[   rj   ro   r   r   TIMEOUT3rq   r   r   WINRUN_COVERAGEr*   r   r   r   r   r   r   r   r  r  r  r  r  r   r  r.  r0  r2  
skipUnlesshasattrr7  r5  rk  r~  r0   mainr   r   r   <module>r     so   % % % % % %               				     ( ( ( ( ( (  3 3 3 3 3 3 " " " " " " , , , , , ,         ! ! ! ! !y! ! ! !H* * * * *X * * *`& & & & &F & & &   
  
  2 (H       , N 	 )? YE]  Kr+ r+ r+ r+ r+  r+ r+ r+j& & & & & & & &,                *
 
 
 
 
H 
 
 
# # # # # # # #J& & &    (   &9 9 9 9 9( 9 9 9:' ' ' ' 'x ' ' '2+ + + + +h + + +<	 	 	 	 	V 	 	 	       	 	 	    8         GF344!# #T T T T T T T# #Tn"* "* "* "* "*y) "* "* "*J`0 `0 `0 `0 `0 `0 `0 `0H zIN r   