
    daf                         d Z ddlZddlZddlmZmZmZ ddlmZ  G d dej                        Z
 G d dej                        Zed	k(  r ej                          yy)
z
Test suite for PEP 380 implementation

adapted from original tests written by Greg Ewing
see <http://www.cosc.canterbury.ac.nz/greg.ewing/python/yield-from/YieldFrom-Python3.1.2-rev5.zip>
    N)captured_stderr
disable_gc
gc_collect)supportc                       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 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$y#)$TestPEP380Operationz
    Test semantics.
    c                     g fd}fd |       D ]  }j                  d|        | j                  g d       y)zH
        Test delegation of initial next() call to subgenerator
        c               3   t   K   j                  d                E d {    j                  d       y 7 wNStarting g1Finishing g1appendg2traces   //root/Python-3.12.4/Lib/test/test_yield_from.pyg1zOTestPEP380Operation.test_delegation_of_initial_next_to_subgenerator.<locals>.g1   s-     LL'tOOLL(    868c               3   Z   K    j                  d       d  j                  d       y w)NStarting g2*   Finishing g2r   r   s   r   r   zOTestPEP380Operation.test_delegation_of_initial_next_to_subgenerator.<locals>.g2   s$     LL'HLL(s   (+Yielded )r   r   z
Yielded 42r   r   Nr   assertEqualselfr   xr   r   s      @@r   /test_delegation_of_initial_next_to_subgeneratorzCTestPEP380Operation.test_delegation_of_initial_next_to_subgenerator   sK     	)	)  	.ALL,-	.  
 	    c                    g fd}fd	  |       D ]  }j                  d|        	 | j                  d       | j                  g d       y# t        $ r)}| j                  |j                  d   d       Y d}~Bd}~ww xY w)	z?
        Test raising exception in initial next() call
        c               3      K   	 j                  d                E d {    j                  d       y 7 # j                  d       w xY wwr   r   r   s   r   r   zKTestPEP380Operation.test_raising_exception_in_initial_next_call.<locals>.g11   s?     -]+4^,  ^,s%   A9 79 A9 AAc                  j    	  j                  d       t        d      #  j                  d       w xY w)Nr   spanish inquisition occurredr   r   
ValueErrorr   s   r   r   zKTestPEP380Operation.test_raising_exception_in_initial_next_call.<locals>.g27   s.    -]+ !?@@^,s    2r   'subgenerator failed to raise ValueErrorr   r&   N)r   r   r   r   r   failr(   r   argsr   r   r    er   r   s       @@r   +test_raising_exception_in_initial_next_callz?TestPEP380Operation.test_raising_exception_in_initial_next_call,   s     	-	-	AT 2Q012
 II?@  
 		  	HQVVAY(FGG	H    A 	B
!BB
c                     g fd}fd |       D ]  }j                  d|        | j                  g d       y)z@
        Test delegation of next() call to subgenerator
        c               3      K   j                  d       d          E d {    d j                  d       y 7 wNr   g1 hamg1 eggsr   r   r   s   r   r   zLTestPEP380Operation.test_delegation_of_next_call_to_subgenerator.<locals>.g1P   s7     LL'NtOOOLL( s    A >A c               3   b   K    j                  d       d d  j                  d       y wNr   g2 spamg2 more spamr   r   r   s   r   r   zLTestPEP380Operation.test_delegation_of_next_call_to_subgenerator.<locals>.g2V   s*     LL'O  LL(   ,/r   )r   Yielded g1 hamr   Yielded g2 spamYielded g2 more spamr   Yielded g1 eggsr   Nr   r   s      @@r   ,test_delegation_of_next_call_to_subgeneratorz@TestPEP380Operation.test_delegation_of_next_call_to_subgeneratorK   sK     	)	)
  	.ALL,-	. 	 
 		r"   c                    g fd}fd	  |       D ]  }j                  d|        	 | j                  d       | j                  g d       y# t        $ r)}| j                  |j                  d   d       Y d}~Bd}~ww xY w)	zA
        Test raising exception in delegated next() call
        c               3      K   	 j                  d       d          E d {    d j                  d       y 7 # j                  d       w xY wwr3   r   r   s   r   r   zMTestPEP380Operation.test_raising_exception_in_delegated_next_call.<locals>.g1m   K     -]+4^,   ^,)   AA ?A AA AAc               3   z   K   	  j                  d       d t        d      #  j                  d       w xY ww)Nr   r8   hovercraft is full of eelsr   r'   r   s   r   r   zMTestPEP380Operation.test_raising_exception_in_delegated_next_call.<locals>.g2u   s8     -]+ !=>> ^,s   ; % 8;r   r)   r   rE   Nr   r;   r   r<   r   r   r*   r-   s       @@r   -test_raising_exception_in_delegated_next_callzATestPEP380Operation.test_raising_exception_in_delegated_next_callh   s     	-	-	AT 2Q012
 II?@  
 		  	FQVVAY(DEE	Fr0   c                     g fd}fd |       }t        |      }d}	 	 |j                  |      }j                  d|       |dz  }+# t        $ r Y nw xY w| j	                  g d       y)z+
        Test delegation of send()
        c               3      K   j                  d       d} j                  d|                E d {    d} j                  d|        j                  d       y 7 .wNr   r4   zg1 received r5   r   r   r    r   r   s    r   r   z7TestPEP380Operation.test_delegation_of_send.<locals>.g1   Y     LL'ALLQ01tOOALLQ01LL(    4A(A&/A(c               3      K   j                  d       d} j                  d|        d} j                  d|        j                  d       y w)Nr   r8   g2 received r9   r   r   r    r   s    r   r   z7TestPEP380Operation.test_delegation_of_send.<locals>.g2   sL     LL'ALLQ01$$ALLQ01LL(s   AA   r   )r   g1 received 1r   r<   g2 received 2r=   zg2 received 3r   r>   zg1 received 4r   N)nextsendr   StopIterationr   )r   r   gyr    r   r   s        @@r   test_delegation_of_sendz+TestPEP380Operation.test_delegation_of_send   s     	)	) DG	FF1IQ01Q   		  
 	s   ,A 	AAc                     g fdfdfd}| j                  t        |       | j                  g d       y)zA
        Test handling exception while delegating 'send'
        c               3      K   j                  d       d} j                  d|                E d {    d} j                  d|        j                  d       y 7 .wrJ   r   rK   s    r   r   zMTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.g1   rL   rM   c               3   t   K   j                  d       d} j                  d|        t        d      w)Nr   r8   rO   rE   r'   rP   s    r   r   zMTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.g2   s5     LL'ALLQ019::s   58c                              } t        |       }d}	 	 | j                  |      }j                  d|       |dz  }+# t        $ r j                  d       Y y w xY w)NrQ   r   rV   )rT   rU   r   rV   )rW   rX   r    r   r   s      r   runzNTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.run   sg    AQAA.q	ALL!45FA  ! ._-.s   ,A A A )r   rR   r   r<   rS   N)assertRaisesr(   r   r   r^   r   r   r   s     @@@r   -test_handling_exception_while_delegating_sendzATestPEP380Operation.test_handling_exception_while_delegating_send   s@     	)	)
	. 	*S)  
 	r"   c                     g fd}fd |       }t        d      D ]!  }t        |      }j                  d|       # |j                          | j	                  g d       y)z)
        Test delegating 'close'
        c               3      K   	 j                  d       d          E d {    d j                  d       y 7 # j                  d       w xY wwr3   r   r   s   r   r   z5TestPEP380Operation.test_delegating_close.<locals>.g1   rB   rC   c               3      K   	  j                  d       d d  j                  d       y #  j                  d       w xY wwr7   r   r   s   r   r   z5TestPEP380Operation.test_delegating_close.<locals>.g2   ;     -]+$$^,^,   A0 AAA   r   rF   N)rangerT   r   closer   )r   r   rW   ir    r   r   s        @@r   test_delegating_closez)TestPEP380Operation.test_delegating_close   sh     	-	- Dq 	.AQALL,-	. 	
	  
 	r"   c                    g fd}fd	  |       }t        d      D ]!  }t        |      }j                  d|       # |j                          | j	                  d       | j                  g d	       y# t
        $ rI}| j                  |j                  d   d       | j                  |j                  t               Y d}~bd}~ww xY w)
zB
        Test handling exception while delegating 'close'
        c               3      K   	 j                  d       d          E d {    d j                  d       y 7 # j                  d       w xY wwr3   r   r   s   r   r   zMTestPEP380Operation.test_handing_exception_while_delegating_close.<locals>.g1	  rB   rC   c               3      K   	  j                  d       d d  j                  d       t        d      #  j                  d       t        d      xY ww)Nr   r8   r9   r   "nybbles have exploded with delightr'   r   s   r   r   zMTestPEP380Operation.test_handing_exception_while_delegating_close.<locals>.g2  sW     G]+$$^, !EFF ^, !EFFs   A: AAArg   r   r)   r   ro   NrF   )rh   rT   r   ri   r+   r(   r   r,   assertIsInstance__context__GeneratorExitr   r   rW   rj   r    r.   r   r   s         @@r   -test_handing_exception_while_delegating_closezATestPEP380Operation.test_handing_exception_while_delegating_close  s     	-	G
	AA1X 2GQ012 GGI
 II?@  
 	  	@QVVAY(LM!!!--??	@s   AA= =	C?C

Cc                 |   g fd}fd	  |       }t        d      D ]!  }t        |      }j                  d|       # t        d      }|j	                  |       | j                  d       | j                  g d	       y# t        $ r)}| j                  |j                  d   d       Y d}~Bd}~ww xY w)
z)
        Test delegating 'throw'
        c               3      K   	 j                  d       d          E d {    d j                  d       y 7 # j                  d       w xY wwr3   r   r   s   r   r   z5TestPEP380Operation.test_delegating_throw.<locals>.g12  rB   rC   c               3      K   	  j                  d       d d  j                  d       y #  j                  d       w xY wwr7   r   r   s   r   r   z5TestPEP380Operation.test_delegating_throw.<locals>.g2:  re   rf   rg   r   tomato ejectedr)   r   NrF   rh   rT   r   r(   throwr+   r   r,   rs   s         @@r   test_delegating_throwz)TestPEP380Operation.test_delegating_throw-  s     	-	-
	AA1X 2GQ012 +,AGGAJ II?@  
 		  	:QVVAY(899	:s   AB	 		B;B66B;c                     g fd}t               } ||       t        d      } ||       d|_         ||       | j                  g d       y)zC
        Test 'value' attribute of StopIteration exception
        c                     j                  | j                  j                  d|        j                  d| j                         y )Nz: zvalue = )r   	__class____name__value)r.   r   s    r   pexzPTestPEP380Operation.test_value_attribute_of_StopIteration_exception.<locals>.pexZ  s1    LLQ[[%9%91=>LL23r"   spameggs)zStopIteration: zvalue = NoneStopIteration: spamzvalue = spamr   zvalue = eggsN)rV   r   r   )r   r   r.   r   s      @r   /test_value_attribute_of_StopIteration_exceptionzCTestPEP380Operation.test_value_attribute_of_StopIteration_exceptionU  sS     	4 OA&!AA  
 	r"   c                 X    fd}d | j                  t         |             dg       y )Nc               3   0   K            E d {    y 7 wN )r   s   r   r   z:TestPEP380Operation.test_exception_value_crash.<locals>.g1p  s     tOO   c               3      K   d dgS w)Nr   r   r   r   r"   r   r   z:TestPEP380Operation.test_exception_value_crash.<locals>.g2r  s     J4Ks   
r   )r   list)r   r   r   s     @r   test_exception_value_crashz.TestPEP380Operation.test_exception_value_crashm  s'    		 	bddV,r"   c                     g fd}dfd	 |       D ]  }j                  d|        | j                  g d       y)z-
        Test generator return value
        c               3     K   j                  d       d         E d {   } j                  d|        ddt        d      fD ]&  } |      E d {   } j                  d|        ( d j                  d       y 7 e7 2w)	Nr   r4   zg2 returned rQ   rg      r5   r   )r   rV   )retvr   r   s     r   r   z;TestPEP380Operation.test_generator_return_value.<locals>.g1}  s     LL'NT/CLLS23mA.. 8!#A&678 OLL( " 's!    BB	4BB1BBNc              3   j   K   j                  d       d d j                  d       | r| S y wr7   r   )r   r   s    r   r   z;TestPEP380Operation.test_generator_return_value.<locals>.g2  s7     LL'O  LL( s   03r   )r   r;   r   r<   r=   r   zg2 returned Noner   r<   r=   r   zg2 returned 1r   r<   r=   r   zg2 returned (2,)r   r<   r=   r   zg2 returned StopIteration(3)r>   r   r   r   r   s      @@r   test_generator_return_valuez/TestPEP380Operation.test_generator_return_valuex  sK     		)	  	.ALL,-	.  
 	r"   c                 v    g }d } |       D ]  }|j                  d|        | j                  |g d       y)z<
        Test delegation of next() to non-generator
        c               3   6   K   t        d      E d {    y 7 wNr   rh   r   r"   r   rW   zGTestPEP380Operation.test_delegation_of_next_to_non_generator.<locals>.g       Qx   r   )	Yielded 0	Yielded 1	Yielded 2Nr   )r   r   rW   r    s       r   (test_delegation_of_next_to_non_generatorz<TestPEP380Operation.test_delegation_of_next_to_non_generator  sC     	  	.ALL,-	.  
 	r"   c                     g }d } |       }t        d      D ]'  }|j                  d      }|j                  d|       ) | j                  |g d       y)z9
        Test conversion of send(None) to next()
        c               3   6   K   t        d      E d {    y 7 wr   r   r   r"   r   rW   zBTestPEP380Operation.test_conversion_of_sendNone_to_next.<locals>.g  r   r   r   N	Yielded: )z
Yielded: 0z
Yielded: 1z
Yielded: 2)rh   rU   r   r   )r   r   rW   gir    rX   s         r   #test_conversion_of_sendNone_to_nextz7TestPEP380Operation.test_conversion_of_sendNone_to_next  s[     	 Sq 	/AALL!-.	/ 	  
 	r"   c                     g fd} |       }t        |       t               5 }|j                          ddd       | j                  j	                         d       | j                  ddg       y# 1 sw Y   >xY w)z=
        Test delegation of close() to non-generator
        c               3      K   	  j                  d       t        d      E d {     j                  d        j                  d       y 7 '#  j                  d       w xY wwN
starting gr   zg should not be herefinishing gr   rh   r   s   r   rW   zHTestPEP380Operation.test_delegation_of_close_to_non_generator.<locals>.g  R     ,\* 8##34]+ $ ]++   A$A AA A$A A!!A$N r   r   )rT   r   ri   r   getvalue)r   rW   r   outputr   s       @r   )test_delegation_of_close_to_non_generatorz=TestPEP380Operation.test_delegation_of_close_to_non_generator  sw     	, SR 	&HHJ	*B/ 
 		 	s   A33A<c                 n   g fd}	  |       }t        d      D ]!  }t        |      }j                  d|       # t        d      }|j	                  |       | j                  d       | j                  g d       y# t        $ r)}| j                  |j                  d   d       Y d}~Bd}~ww xY w)	z:
        Test delegating 'throw' to non-generator
        c               3      K   	  j                  d       t        d      E d {     j                  d       y 7 #  j                  d       w xY ww)N
Starting g
   Finishing gr   r   s   r   rW   zETestPEP380Operation.test_delegating_throw_to_non_generator.<locals>.g  sC     ,\* 9$$]+ %]+s%   A= ;= A= AA   r   rx   r)   r   N)r   r   r   r   z	Yielded 3z	Yielded 4r   ry   )r   rW   r   rj   r    r.   r   s         @r   &test_delegating_throw_to_non_generatorz:TestPEP380Operation.test_delegating_throw_to_non_generator  s     	,
	AB1X 2HQ012 +,AHHQK II?@  
 		  	9QVVAY'788	9s   AB 	B4B//B4c                 Z   g fd}	  |       }t        |       t        d      D ]'  }|j                  d      }j                  d|       ) 	 | j	                  d       | j                  d	d
g       y# t
        $ r)}| j                  d|j                  d          Y d}~Bd}~ww xY w)z:
        Test attempting to send to non-generator
        c               3      K   	  j                  d       t        d      E d {     j                  d        j                  d       y 7 '#  j                  d       w xY wwr   r   r   s   r   rW   zGTestPEP380Operation.test_attempting_to_send_to_non_generator.<locals>.g  r   r   r   r   zShould not have yielded: z#was able to send into non-generatorrU   r   Nr   r   )	rT   rh   rU   r   r+   AttributeErrorassertInr,   r   )r   rW   r   r    rX   r.   r   s         @r   (test_attempting_to_send_to_non_generatorz<TestPEP380Operation.test_attempting_to_send_to_non_generator  s     	,		=BH1X CGGBKaABC II;< 
 		  	-MM&!&&),,	-s   AA8 8	B*B%%B*c                     G d d      fd}| j                  t              5   |       }| j                  t        |      d       |j	                  d       ddd       | j                  t              5   |       }| j                  t        |      d       |j                  t               ddd       t        j                         5 } |       }| j                  t        |      d       |j                          | j                  t        |j                  j                         ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)zG
        Test subiterator with a broken getattr implementation
        c                       e Zd Zd Zd Zd Zy)@TestPEP380Operation.test_broken_getattr_handling.<locals>.Brokenc                     | S r   r   r   s    r   __iter__zITestPEP380Operation.test_broken_getattr_handling.<locals>.Broken.__iter__"      r"   c                      y)NrQ   r   r   s    r   __next__zITestPEP380Operation.test_broken_getattr_handling.<locals>.Broken.__next__$  s    r"   c                     ddz   y NrQ   r   r   )r   attrs     r   __getattr__zLTestPEP380Operation.test_broken_getattr_handling.<locals>.Broken.__getattr__&  s	    !r"   N)r   
__module____qualname__r   r   r   r   r"   r   Brokenr   !  s    r"   r   c               3   0   K            E d {    y 7 wr   r   )r   s   r   rW   z;TestPEP380Operation.test_broken_getattr_handling.<locals>.g)  s     xr   rQ   N)r_   ZeroDivisionErrorr   rT   rU   rz   r   r   catch_unraisable_exceptionri   
unraisableexc_type)r   rW   r   cmr   s       @r   test_broken_getattr_handlingz0TestPEP380Operation.test_broken_getattr_handling  s   	 		  01 	BT"Xq)GGAJ	
 01 	%BT"Xq)HH^$	%
 //1 	HRBT"Xq)HHJ.0F0FG	H 	H	 	
	% 	%
	H 	Hs$   4D178D=AE	1D:=E	Ec                 |    g fdd fd}| j                  t        |       | j                  dg       y)z7
        Test exception in initial next() call
        c               3   t   K   j                  d                E d {    j                  d       y 7 w)Ng1 about to yield from g2g1 should not be herer   r   s   r   r   zCTestPEP380Operation.test_exception_in_initial_next_call.<locals>.g1B  s/     LL45tOOLL01 r   c               3      K   ddz   y wr   r   r   r"   r   r   zCTestPEP380Operation.test_exception_in_initial_next_call.<locals>.g2F  s     A#Is   	c                  *            } t        |        y r   )rT   )r   r   s    r   r^   zDTestPEP380Operation.test_exception_in_initial_next_call.<locals>.runH  s    BHr"   r   N)r_   r   r   r`   s     @@@r   #test_exception_in_initial_next_callz7TestPEP380Operation.test_exception_in_initial_next_call=  sD     	2		 	+C0' 
 	r"   c                 "   g fd}fd	  |       D ]  }j                  d|        	 | j                  d       | j                  g d       y# t        $ r)}| j                  |j                  d   d       Y d}~Bd}~ww xY w)	z0
        Test attempted yield-from loop
        c               3      K   j                  d       d j                  d                E d {    j                  d       y 7 w)Ng1: startingy1g1: about to yield from g2r   r   r   s   r   r   z>TestPEP380Operation.test_attempted_yield_from_loop.<locals>.g1U  s@     LL(JLL56tOOLL01 s   1AAAc               3      K   j                  d       d j                  d        E d {    j                  d       y 7 w)Ng2: startingy2g2: about to yield from g1zg2 should not be herer   )r   r   s   r   r   z>TestPEP380Operation.test_attempted_yield_from_loop.<locals>.g2\  s>     LL(JLL56MMLL01 s   ,AAAr   z$subgenerator didn't raise ValueErrorr   zgenerator already executingN)r   zYielded: y1r   r   zYielded: y2r   r*   )r   r   rX   r.   r   r   r   s       @@@r   test_attempted_yield_from_loopz2TestPEP380Operation.test_attempted_yield_from_loopP  s     	2	2	>B 3a123
 II<=  
 		  	FQVVAY'DEE	Fs   "A 	B%B		Bc                 @   g fd}fd G d dt                |       }t        d      D ]!  }t        |      }j                  d|       #  d      }|j	                  |       |D ]  }j                  d|        | j                  g d       y	)
z=
        Test returning value from delegated 'throw'
        c               3      K   	 j                  d       d          E d {    d j                  d       y 7 # j                  d       w xY wwr3   r   r   s   r   r   zITestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.g1x  rB   rC   c               3      K   	 j                  d       d d y #  $ r j                  d       d d Y y w xY ww)Nr   r8   r9   Caught LunchError in g2zg2 lunch savedzg2 yet more spamr   )
LunchErrorr   s   r   r   zITestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.g2  sJ     )]+$$ )67&&(()s#   A AA AA  Ac                       e Zd Zy)QTestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.LunchErrorNr   r   r   r   r"   r   r   r         r"   r   rg   r   rx   )r   r;   r   r<   r   zYielded g2 yet more spamr>   r   N)	Exceptionrh   rT   r   rz   r   )	r   r   rW   rj   r    r.   r   r   r   s	         @@@r   )test_returning_value_from_delegated_throwz=TestPEP380Operation.test_returning_value_from_delegated_throws  s     	-	)	 	Dq 	.AQALL,-	. '(	
 	.ALL,-	. 	 
 		r"   c                     g fd}fd |d        |d        |d        |t        d             | j                  g d       y)z1
        Test next and return with value
        c                      |       }t        |       	 j                  d       t        |       j                  d       y # t        $ r}j                  d|       Y d }~y d }~ww xY w)Nf resuming gf SHOULD NOT BE HERE	f caught )rT   r   rV   rr   r.   rW   r   s      r   fz>TestPEP380Operation.test_next_and_return_with_value.<locals>.f  sZ    1BH3^,R34  3a1223s   -A 	A+A&&A+c              3   b   K   j                  d       d  j                  d|        | S w)N
g startingg returning r   )r   r   s    r   rW   z>TestPEP380Operation.test_next_and_return_with_value.<locals>.g  s*     LL&LLQ01Hr:   NrQ   r   r   )r   r   g returning Nonef caught StopIteration()r   r   g returning 1f caught StopIteration(1)r   r   g returning (2,)f caught StopIteration((2,))r   r   g returning StopIteration(3)(f caught StopIteration(StopIteration(3))rV   r   r   r   rW   r   s     @@r   test_next_and_return_with_valuez3TestPEP380Operation.test_next_and_return_with_value  sM     	3	
 	
$	!	$	-
  
 	r"   c                     g fd}fd |d        |d        |d        |t        d             | j                  g d       y)z1
        Test send and return with value
        c                      |       }t        |       	 j                  d       |j                  d       j                  d       y # t        $ r}j                  d|       Y d }~y d }~ww xY w)Nf sending spam to gr   r   r   )rT   r   rU   rV   r   s      r   r   z>TestPEP380Operation.test_send_and_return_with_value.<locals>.f  s_    1BH32334  3a1223s   3A
 
	A1A,,A1c              3      K   j                  d       d }j                  d|       j                  d|        | S w)Nr   zg received r   r   )r   r    r   s     r   rW   z>TestPEP380Operation.test_send_and_return_with_value.<locals>.g  s;     LL&ALLA/0LLQ01Hs   A ANrQ   r   r   )r   r  g received 'spam'r   r   r   r  r
  r   r   r   r  r
  r   r   r   r  r
  r  r  r  r  s     @@r   test_send_and_return_with_valuez3TestPEP380Operation.test_send_and_return_with_value  sM     	3	 	
$	!	$	-
 !
 	r"   c           
      .   fdfd}ddt        d      fD ]u  g  |       }j                  t        |             j                  t        |j	                  t
                           | j                  ddddt              g       w y	)
ze
        Test catching an exception thrown into a
        subgenerator and returning a value
        c               3   \   K   	 d S # t         $ r  j                  d       Y S w xY ww)NrQ   inner caught ValueError)r(   r   )r   r   s   r   innerzTTestPEP380Operation.test_catching_exception_from_subgen_and_returning.<locals>.inner  s:     8 L  867L8s   , ,),),c               3   b   K           E d {   } j                  d| d       |  y 7 w)Ninner returned 	 to outerr   )r   r  r   s    r   outerzTTestPEP380Operation.test_catching_exception_from_subgen_and_returning.<locals>.outer  s*      7"ALL<=G #s   /-/rg   r   rQ   r  r  r  N)rV   r   rT   reprrz   r(   r   )r   r  rW   r  r   r   s      @@@r   1test_catching_exception_from_subgen_and_returningzETestPEP380Operation.test_catching_exception_from_subgen_and_returning  s    
		
 mA.. 
	EEALLa!LLaggj123U)057U	% 
	r"   c                     g fdfd}	  |       }t        |       |j                  t               | j                  d       | j	                  ddg       y# t        $ r Y  w xY w)zo
        Test throwing GeneratorExit into a subgenerator that
        catches it and returns normally.
        c               3   z   K   	  j                  d       d   j                  d       y # t        $ r Y y w xY wwNEnter fExit fr   rr   r   s   r   r   zSTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returns.<locals>.f  s8     Y'X&  s   ;&, ;	8;8;c               3   t   K   j                  d                E d {    j                  d       y 7 wNEnter gzExit gr   r   r   s   r   rW   zSTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returns.<locals>.g!  -     LL#sNNLL" r   *subgenerator failed to raise GeneratorExitr  r  N)rT   rz   rr   r+   r   )r   rW   r   r   r   s      @@r   4test_throwing_GeneratorExit_into_subgen_that_returnszHTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returns  sr    
 		#	DBHHH]# IIBC 
 		  		s   'A 	A*)A*c                 &   g fdfd}	  |       }t        |       |j                  t               | j                  d       | j                  ddg       y# t        $ r)}| j                  |j                  d   d       Y d}~Bd}~ww xY w)	ze
        Test throwing GeneratorExit into a subgenerator that
        catches it and yields.
        c               3      K   	  j                  d       d   j                  d       y # t        $ r d  Y y w xY wwr  r  r   s   r   r   zXTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yields.<locals>.f8  s8     Y'X&  s   ?&, ?<?<?c               3   t   K   j                  d                E d {    j                  d       y 7 wr  r   r  s   r   rW   zXTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yields.<locals>.g?  r   r   r!  r   zgenerator ignored GeneratorExitNr  r  )rT   rz   rr   r+   RuntimeErrorr   r,   r   rW   r   r.   r   r   s       @@r   9test_throwing_GeneratorExit_into_subgenerator_that_yieldszMTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yields2  s    
 		#	DBHHH]# IIBC 
 		  	KQVVAY(IJJ	Ks   'A 	B'BBc                 f   g fdfd}	  |       }t        |       |j                  t               | j                  d       | j                  ddg       y# t        $ rI}| j                  |j                  d   d       | j                  |j                  t               Y d}~bd}~ww xY w)	z{
        Test throwing GeneratorExit into a subgenerator that
        catches it and raises a different exception.
        c               3      K   	  j                  d       d   j                  d       y # t        $ r t        d      w xY ww)Nr  r  Vorpal bunny encountered)r   rr   r(   r   s   r   r   zRTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raises.<locals>.fV  sA     =Y'X&  = !;<<=s   A&, AAAc               3   t   K   j                  d                E d {    j                  d       y 7 wr  r   r  s   r   rW   zRTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raises.<locals>.g]  r   r   r)   r   r+  Nr  r  )	rT   rz   rr   r+   r(   r   r,   rp   rq   r'  s       @@r   3test_throwing_GeneratorExit_into_subgen_that_raiseszGTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raisesP  s    
 	=	#	ABHHH]#
 II?@ 
 	  	@QVVAY(BC!!!--??	@s   'A 	B0'?B++B0c                 J    d }| j                  t        t         |              y )Nc               3   $   K   dE d {    y 7 w)Nr   r   r   r"   r   rW   z4TestPEP380Operation.test_yield_from_empty.<locals>.gp  s     MM   )r_   rV   rT   )r   rW   s     r   test_yield_from_emptyz)TestPEP380Operation.test_yield_from_emptyo  s    	-qs3r"   c                 x    fd}fd |        j                  t              g d        |       t              g}	 	 |j                  j	                  d             !# t
        $ r Y nw xY w j                  |g d        G d dt              fd}fd |       t              g}	 	 |j                  j                               !# t
        $ r Y n  j                  |g d        xY w G  fd	d
t              fd} |       t               j                          y )Nc               3   @   K   d          E d {    d y 7 	wNr   r   r   )twos   r   onezOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.onev  s!     GuG s   
c               3   V   K   d 	  E d {    d y 7 	# t         $ r Y w xY wwNrQ   rg   r(   )r   s   r   r5  zOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.twoz  s5     G G  s(   )  ) 	&)&))r   rQ   rg   r   r   c                       e Zd Zy)QTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyErrNr   r   r"   r   MyErrr;    r   r"   r<  c               3   p   K   	 d         E d {    	 d y #  $ r Y w xY w7 #  $ r Y y w xY wwr4  r   )r<  r5  s   r   r6  zOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.one  sR      u	    s<   6 
6)6+ 6&6&63636c               3      K   	 d 	 E d {    	 d y #  $ r Y w xY w7 # t         $ r Y w xY w#  $ r Y y w xY wwr8  r9  )r<  r   s   r   r5  zOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.two  sd           sX   A ' %' 6 A"A"A' 	3A3A>A>Ac                   &    e Zd Zd Zd Z fdZy)PTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyItc                     | S r   r   r   s    r   r   zYTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.__iter__  r   r"   c                      yNr   r   r   s    r   r   zYTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.__next__      r"   c                 r    j                  j                         j                  t        t               y r   )
assertTrue
gi_runningr_   r(   rT   )self_r   r   s    r   ri   zVTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.close  s%    .!!*dB7r"   N)r   r   r   r   r   ri   )r   r   s   r   MyItr@    s    8r"   rI  c               3   0   K            E d {    y 7 wr   r   )rI  s   r   r6  zOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.one  s     vr   )
r   r   rT   r   rU   rV   r   rz   objectri   )r   r6  resr<  rI  r   r5  s   `  @@@@r   .test_delegating_generators_claim_to_be_runningzBTestPEP380Operation.test_delegating_generators_claim_to_be_runningt  s   		 Ub<0UBxj	

2772;'  		l+	I 				 UBxj	

288E?+  		S,/	86 	8	UR

s$   "A* *	A65A6<"C 	C?)C?c                     d fd}d }d } | |             D ]  }| j                  d|v          | | |                   D ]  }| j                  d|v xr d|v         y )Nc                  V    t        j                         D  cg c]  } | d   	 c} S c c} w r   )inspectstack)r   s    r   
call_stackzMTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.call_stack  s     ")--/2QAaD222s   &c               3   D   K                                 y wr   r   )rR  s   r   genzFTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.gen  s     ,,,s    c              3   $   K   | E d {    y 7 wr   r   rW   s    r   r   zGTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.spam       LLr0  c              3   $   K   | E d {    y 7 wr   r   rV  s    r   r   zGTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.eggs  rW  r0  r   r   )rF  )r   rT  r   r   rQ  rR  s        @r   %test_delegator_is_visible_to_debuggerz9TestPEP380Operation.test_delegator_is_visible_to_debugger  su    	3	
		 #%[ 	-EOOFeO,	- $su+& 	AEOOFeO?%@	Ar"   c                 p     G d d      fd}d t         |              | j                  d       y )Nc                       e Zd Zd Zd Zy)?TestPEP380Operation.test_custom_iterator_return.<locals>.MyIterc                     | S r   r   r   s    r   r   zHTestPEP380Operation.test_custom_iterator_return.<locals>.MyIter.__iter__  r   r"   c                     t        d      rC  )rV   r   s    r   r   zHTestPEP380Operation.test_custom_iterator_return.<locals>.MyIter.__next__  s    #B''r"   N)r   r   r   r   r   r   r"   r   MyIterr\    s    (r"   r_  c               3   0   K            E d {   y 7 wr   r   )r_  r   s   r   rT  z<TestPEP380Operation.test_custom_iterator_return.<locals>.gen  s     #X%C%r   r   )r   r   )r   rT  r_  r   s     @@r   test_custom_iterator_returnz/TestPEP380Operation.test_custom_iterator_return  s2    	( 	(
	& SUb!r"   c                     d fd}d }t               5   |       } |       }|j                  d        |j                  |       |j                  |       ~~t                d d d        y # 1 sw Y   y xY w)Nc               3      K   d  y wr   r   r   r"   r   	innermostzDTestPEP380Operation.test_close_with_cleared_frame.<locals>.innermost  s	     s   c               3   8   K   d }         E d {    y 7 wr   r   )	outer_genrd  s    r   r  z@TestPEP380Operation.test_close_with_cleared_frame.<locals>.inner  s     I {""s   c               3   ,   K   d } | E d {    y 7 wr   r   )	inner_gens    r   r  z@TestPEP380Operation.test_close_with_cleared_frame.<locals>.outer  s     I   s   
)r   rU   r   )r   r  r  rh  rf  rd  s        @r   test_close_with_cleared_framez1TestPEP380Operation.test_close_with_cleared_frame  sk    &		#	! \ 		IINN4 NN9%NN9%L		 		 		s   AA..A7c                      G fdd      fd} |       }t        |       d |j                  d       | j                  d       y )Nc                   $    e Zd Zd Zd Z fdZy)HTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGenc                     | S r   r   r   s    r   r   zQTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.__iter__  r   r"   c                      yrC  r   r   s    r   r   zQTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.__next__  rD  r"   c                 
    |y r   r   )r   whatr   s     r   rU   zMTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.send  s    r"   N)r   r   r   r   r   rU   )r   s   r   MyGenrl    s    r"   rq  c               3   0   K           E d {   } y 7 wr   r   )r   rq  s    r   r  zHTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.outer  s      7"A"r   )rQ   rg   r      )rT   rU   r   )r   r  rW   rq  r   s      @@r   %test_send_tuple_with_custom_generatorz9TestPEP380Operation.test_send_tuple_with_custom_generator	  sA    	 		#GQ	|L)r"   N)%r   r   r   __doc__r!   r/   r?   rG   rY   ra   rk   rt   r{   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r(  r-  r1  rM  rY  ra  ri  rt  r   r"   r   r   r      s    .>:#J*X'R D'R&P0-1f ",@6H@&!F)V(T-^:<<>4
IVA*"%N*r"   r   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestInterestingEdgeCasesc                    | j                  t              5 }t        |       d d d        | j                  j                  j
                         | j                  |j                  j                         y # 1 sw Y   TxY wr   )r_   rV   rT   assertIsNone	exceptionr   rq   )r   iteratorcaughts      r   assert_stop_iterationz.TestInterestingEdgeCases.assert_stop_iteration  sb    }- 	N	&**001&**667	 	s   A55A>c                 .    | j                  t        d      S )Nz ^generator raised StopIteration$assertRaisesRegexr&  r   s    r   &assert_generator_raised_stop_iterationz?TestInterestingEdgeCases.assert_generator_raised_stop_iteration$  s    %%l4WXXr"   c                 .    | j                  t        d      S )Nz!^generator ignored GeneratorExit$r  r   s    r   'assert_generator_ignored_generator_exitz@TestInterestingEdgeCases.assert_generator_ignored_generator_exit'  s    %%l4XYYr"   c                 V   t               t               t               fdfd}| j                  d      5   |       }| j                  t        |             |j	                          | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                  t              5 }|j                  |       d d d        | j                  j                  |       | j                  |j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                         5 }|j                  |       d d d        | j                  j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                  t              5 }|j                  |       d d d        | j                  j                  |       | j                  |j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                  t              5 }|j                  |       d d d        | j                  j                  |       | j                  |j                  j                         | j                  |       d d d        y # 1 sw Y   6xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   .xY w# 1 sw Y   xY w# 1 sw Y   mxY w# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc               3       K      S wr   r   returnedyielded_firstyielded_seconds   r   r  zATestInterestingEdgeCases.test_close_and_throw_work.<locals>.inner0  s       Os   c               3   .   K            E d {   S 7 wr   r   r  s   r   r  zATestInterestingEdgeCases.test_close_and_throw_work.<locals>.outer5       $w&'&   ri   throw GeneratorExitthrow StopIterationthrow BaseExceptionthrow Exception)rK  subTestassertIsrT   ri   r}  rr   r_   rz   rz  ry  rq   rV   r  BaseExceptionr   	r   r  rW   thrownr|  r  r  r  r  s	        @@@@r   test_close_and_throw_workz2TestInterestingEdgeCases.test_close_and_throw_work*  sE   8	
	( \\'" 	*AMM$q'=1GGI&&q)		* \\/0 	*AMM$q'=1"_F""=1  V MM&**F3f..::;&&q)	* \\/0 		*AMM$q'=1"_F<<>  & MM&**66?f..::FFG&&q)		* \\/0 	*AMM$q'=1"_F""=1  V MM&**F3f..::;&&q)	* \\+, 	*AMM$q'=1[F""9-   MM&**F3f..::;&&q)	* 	*K	* 	*   		* 	*   		* 		*   		* 	*   		* 	*s    AN8AOO1AO$=O,!O3A.O,:AP<O9APAPPAP8OO	
OOO)	$O,,O69P	>PPP	PP(c                 	  	 t               t               	t               	fdfd}| j                  d      5   |       }| j                  t        |             t	               |j                          | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t	               }| j                  t              5 }|j                  |       d d d        | j                  j                  |       | j                  |j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   (xY w# 1 sw Y   xY w# 1 sw Y   AxY w# 1 sw Y   xY w# 1 sw Y   ZxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc               3   0   K   	    #  xY wwr   r   raisedr  r  r  s   r   r  zQTestInterestingEdgeCases.test_close_and_throw_raise_generator_exit.<locals>.innerm  %     ##$$f   	 c               3   .   K            E d {   S 7 wr   r   r  s   r   r  zQTestInterestingEdgeCases.test_close_and_throw_raise_generator_exit.<locals>.outeru  r  r  ri   r  r  r  r  )rK  r  r  rT   rr   ri   r}  r_   rz   rz  ry  rq   rV   r  r   )
r   r  rW   r  r|  r  r  r  r  r  s
        @@@@@r   )test_close_and_throw_raise_generator_exitzBTestInterestingEdgeCases.test_close_and_throw_raise_generator_exitg  s   8		( \\'" 	*AMM$q'=1"_F GGI&&q)	* \\/0 	*AMM$q'=1"_F"_F""=1  V 
 MM&**F3f..::;&&q)	* \\/0 
	*AMM$q'=1"_F"_F""=1  V MM&**F3MM&**66?f..::FFG&&q)
	* \\/0 
	*AMM$q'=1"_F"_F""=1  V MM&**F3MM&**66?f..::FFG&&q)
	* \\+, 
	*AMM$q'=1"_F[F""=1  V MM&**F3MM&**66?f..::FFG&&q)
	* 
	*_	* 	*   	* 	*&   
	* 
	*"   
	* 
	*"   
	* 
	*s   AQ-)AR5Q:AR:AR!RB
R!;AR;R.B
R;<ASSB
S-Q7:R	?RRR	R!!R+.R8	3R;;SS	SSc                 d  	 t               t               	t               	fdfd}| j                  d      5   |       }| j                  t        |             t	               | j                         5 }|j                          d d d        | j                  j                  j                         | j                  |j                  j                  j                  t               | j                  |j                  j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                         5 }|j                  |       d d d        | j                  j                  j                         | j                  |j                  j                  j                  t               | j                  |j                  j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t	               }| j                         5 }|j                  |       d d d        | j                  j                  j                         | j                  |j                  j                  j                  |       | j                  |j                  j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                         5 }|j                  |       d d d        | j                  j                  j                         | j                  |j                  j                  j                  |       | j                  |j                  j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                         5 }|j                  |       d d d        | j                  j                  j                         | j                  |j                  j                  j                  |       | j                  |j                  j                  j                  j                         | j                  |       d d d        y # 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc               3   0   K   	    #  xY wwr   r   r  s   r   r  zQTestInterestingEdgeCases.test_close_and_throw_raise_stop_iteration.<locals>.inner  r  r  c               3   .   K            E d {   S 7 wr   r   r  s   r   r  zQTestInterestingEdgeCases.test_close_and_throw_raise_stop_iteration.<locals>.outer  r  r  ri   r  r  r  r  )rK  r  r  rT   rV   r  ri   rz  rq   rp   rr   ry  r}  rz   r  r   
r   r  rW   r|  r  r  r  r  r  r  s
        @@@@@r   )test_close_and_throw_raise_stop_iterationzBTestInterestingEdgeCases.test_close_and_throw_raise_stop_iteration  s   8		( \\'" 
	*AMM$q'=1"_F<<> &	MM&**66?!!&"2"2">">"J"JMZf..::FFRRS&&q)
	* \\/0 	*AMM$q'=1"_F"_F<<>  & MM&**66? !!&"2"2">">"J"JMZf..::FFRRS&&q)	* \\/0 	*AMM$q'=1"_F"_F<<>  & MM&**66?MM&**66BBFKf..::FFRRS&&q)	* \\/0 	*AMM$q'=1"_F"_F<<>  & MM&**66?MM&**66BBFKf..::FFRRS&&q)	* \\+, 	*AMM$q'=1"_F[F<<>  & MM&**66?MM&**66BBFKf..::FFRRS&&q)	* 	*a 
	* 
	*$   	* 	**   	* 	*&   	* 	*&   	* 	*s   =V>?V1B,V>AWW.B,W3AW2:W%B(W2AXW?&B(X'AX&.X B(X&1V;	6V>>WW	WW"%W/	*W22W<?X		XXX#	X&&X/c                 h  	 t               t               	t               	fdfd}| j                  d      5   |       }| j                  t        |             t	               | j                  t              5 }|j                          d d d        | j                  j                         | j                  |j                  j                  t               | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  t               | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t	               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   5xY w# 1 sw Y   xY w# 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc               3   0   K   	    #  xY wwr   r   r  s   r   r  zQTestInterestingEdgeCases.test_close_and_throw_raise_base_exception.<locals>.inner  r  r  c               3   .   K            E d {   S 7 wr   r   r  s   r   r  zQTestInterestingEdgeCases.test_close_and_throw_raise_base_exception.<locals>.outer  r  r  ri   r  r  r  r  )rK  r  r  rT   r  r_   ri   rz  rp   rq   rr   ry  r}  rz   rV   r   r  s
        @@@@@r   )test_close_and_throw_raise_base_exceptionzBTestInterestingEdgeCases.test_close_and_throw_raise_base_exception  sW   8		( \\'" 		*AMM$q'=1"_F""=1 V	MM&**F3!!&"2"2">">Nf..::FFG&&q)		* \\/0 	*AMM$q'=1"_F"_F""=1  V MM&**F3 !!&"2"2">">Nf..::FFG&&q)	* \\/0 
	*AMM$q'=1"_F"_F""=1  V MM&**F3MM&**66?f..::FFG&&q)
	* \\/0 
	*AMM$q'=1"_F"_F""=1  V MM&**F3MM&**66?f..::FFG&&q)
	* \\+, 
	*AMM$q'=1"_F[F""=1  V MM&**F3MM&**66?f..::FFG&&q)
	* 
	*[ 			* 		*    	* 	*&   
	* 
	*"   
	* 
	*"   
	* 
	*   AUT4BU<AUUBUAU5U(B
U5AVV B
VAV(V!B
V(4T>	9UUU	UU%(U2	-U55U?V	VVV%	!V((V1c                 h  	 t               t               	t               	fdfd}| j                  d      5   |       }| j                  t        |             t	               | j                  t              5 }|j                          d d d        | j                  j                         | j                  |j                  j                  t               | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  t               | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t	               t	               }| j                  t              5 }|j                  |       d d d        | j                  j                         | j                  |j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y    xY w# 1 sw Y   xY w# 1 sw Y   5xY w# 1 sw Y   xY w# 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   gxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc               3   0   K   	    #  xY wwr   r   r  s   r   r  zLTestInterestingEdgeCases.test_close_and_throw_raise_exception.<locals>.innerZ  r  r  c               3   .   K            E d {   S 7 wr   r   r  s   r   r  zLTestInterestingEdgeCases.test_close_and_throw_raise_exception.<locals>.outerb  r  r  ri   r  r  r  r  )rK  r  r  rT   r   r_   ri   rz  rp   rq   rr   ry  r}  rz   rV   r  r  s
        @@@@@r   $test_close_and_throw_raise_exceptionz=TestInterestingEdgeCases.test_close_and_throw_raise_exceptionT  sW   8		( \\'" 		*AMM$q'=1[F""9- 	MM&**F3!!&"2"2">">Nf..::FFG&&q)		* \\/0 	*AMM$q'=1[F"_F""9-   MM&**F3 !!&"2"2">">Nf..::FFG&&q)	* \\/0 
	*AMM$q'=1[F"_F""9-   MM&**F3MM&**66?f..::FFG&&q)
	* \\/0 
	*AMM$q'=1[F"_F""9-   MM&**F3MM&**66?f..::FFG&&q)
	* \\+, 
	*AMM$q'=1[F[F""9-   MM&**F3MM&**66?f..::FFG&&q)
	* 
	*[ 			* 		*    	* 	*&   
	* 
	*"   
	* 
	*"   
	* 
	*r  c                 L	   t               t               t               fdfd}| j                  d      5   |       }| j                  t        |             | j	                         5 }|j                          d d d        | j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j	                         5 }|j                  |       d d d        | j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                  |j                  |             | j                         5 }t        |       d d d        | j                  j                  j                  |       | j                  |j                  j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                  |j                  |             | j!                  t              5 }t        |       d d d        | j                  j                  |       | j                  |j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t#               }| j                  |j                  |             | j!                  t"              5 }t        |       d d d        | j                  j                  |       | j                  |j                  j                         | j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   sxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   HxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc               3   4   K   	    S #  w xY wwr   r   r  s   r   r  zBTestInterestingEdgeCases.test_close_and_throw_yield.<locals>.inner  s&     %##$$O %$s    c               3   .   K            E d {   S 7 wr   r   r  s   r   r  zBTestInterestingEdgeCases.test_close_and_throw_yield.<locals>.outer  r  r  ri   r  r  r  r  )rK  r  r  rT   r  ri   ry  rz  rq   r}  rr   rz   rV   r   r  r  r_   r   )	r   r  rW   r|  r  r  r  r  r  s	        @@@@r   test_close_and_throw_yieldz3TestInterestingEdgeCases.test_close_and_throw_yield  s   8		( \\'" 	*AMM$q'=1 ==? 6	f..::;&&q)	* \\/0 		*AMM$q'=1"_F ==?  6 f..::;&&q)		* \\/0 
	*AMM$q'=1"_FQWWV_n=<<> &QMM&**66?f..::FFG&&q)
	* \\/0 		*AMM$q'=1"_FQWWV_n=""=1 VQMM&**F3f..::;&&q)		* \\+, 		*AMM$q'=1[FQWWV_n=""9- QMM&**F3f..::;&&q)		* 		*O 	* 	*    		* 		*" 
	* 
	*" 		* 		*  		* 		*s    3P33P&>P3=QQ *>QAQ'Q+A.Q'2A#RQ4!ARA#R7RAR&P0	+P33P= Q
	QQQ$	Q''Q14Q>	9RRR	RR#c                 t   t               t               t               fdfd}| j                  d      5   |       }| j                  t        |             |j	                          | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                  t              5 }|j                  |       d d d        | j                  j                  |       | j                  |j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                  t              5 }|j                  |       d d d        | j                  j                  j                         | j                  |j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                  t              5 }|j                  |       d d d        | j                  j                  j                         | j                  |j                  j                         | j                  |       d d d        | j                  d      5   |       }| j                  t        |             t               }| j                  t              5 }|j                  |       d d d        | j                  j                  j                         | j                  |j                  j                         | j                  |       d d d        y # 1 sw Y   ExY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   8xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc               3   6   K   	    S #  c cY S xY wwr   r   r  s   r   r  zCTestInterestingEdgeCases.test_close_and_throw_return.<locals>.inner  s"      ##$$xs    c               3   .   K            E d {   S 7 wr   r   r  s   r   r  zCTestInterestingEdgeCases.test_close_and_throw_return.<locals>.outer  r  r  ri   r  r  r  r  )rK  r  r  rT   ri   r}  rr   r_   rz   rz  ry  rq   rV   r   r  r   r  s	        @@@@r   test_close_and_throw_returnz4TestInterestingEdgeCases.test_close_and_throw_return  sQ   8	 	( \\'" 	*AMM$q'=1 GGI&&q)	* \\/0 
	*AMM$q'=1"_F ""=1  V MM&**F3f..::;&&q)
	* \\/0 	*AMM$q'=1"_F""=1  V MM&**00(;f..::;&&q)	* \\/0 	*AMM$q'=1"_F""=1  V MM&**00(;f..::;&&q)	* \\+, 	*AMM$q'=1[F""=1  V MM&**00(;f..::;&&q)	* 	*Q	* 	*   
	* 
	*    		* 	*   		* 	*   		* 	*s    AOAO!O1AO!$AO;&O.8A$O;5AP7P	A$PAP.P"A$P.OO	O!!O+.O8	3O;;PP	PP"P+	'P..P7N)r   r   r   r}  r  r  r  r  r  r  r  r  r  r   r"   r   rw  rw    sB    8YZ;*zJ*XQ*fL*\L*\E*N@*r"   rw  __main__)ru  unittestrP  test.supportr   r   r   testr   TestCaser   rw  r   mainr   r"   r   <module>r     s_      @ @ J*(++ J*X M*x00 M*` zHMMO r"   