Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_yield_from.cpython-311.pyc
�

�Ke`x���dZddlZddlZddlmZmZmZddlmZGd�dej	��Z
edkrej��dSdS)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���eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z!d �Z"d!�Z#d"�Z$d#S)$�TestPEP380Operationz
    Test semantics.
    c����g���fd�}�fd��|��D]}��d|�����|��gd���dS)zH
        Test delegation of initial next() call to subgenerator
        c3��K���d�����Ed{V����d��dS�N�Starting g1�Finishing g1��append��g2�traces���>/usr/local/apps/python3/lib/python3.11/test/test_yield_from.py�g1zOTestPEP380Operation.test_delegation_of_initial_next_to_subgenerator.<locals>.g1sH������L�L��'�'�'��r�t�t�O�O�O�O�O�O�O��L�L��(�(�(�(�(�c3�h�K���d��dV���d��dS)N�Starting g2�*�Finishing g2r�rs�rrzOTestPEP380Operation.test_delegation_of_initial_next_to_subgenerator.<locals>.g2s:������L�L��'�'�'��H�H�H��L�L��(�(�(�(�(r�Yielded )rrz
Yielded 42rr
N�r�assertEqual��selfr�xrrs   @@r�/test_delegation_of_initial_next_to_subgeneratorzCTestPEP380Operation.test_delegation_of_initial_next_to_subgenerators�������	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�����	.�	.�A��L�L�L���,�-�-�-�-����� 
� 
� 
�	�	�	�	�	rc�>���g���fd�}�fd��	|��D]}��d|�����	|�d��n8#t$r+}|�|jdd��Yd}~nd}~wwxYw|��gd���dS)	z?
        Test raising exception in initial next() call
        c3��K�	��d�����Ed{V����d��dS#��d��wxYwrrrs��rrzKTestPEP380Operation.test_raising_exception_in_initial_next_call.<locals>.g11se�����
-����]�+�+�+��2�4�4�����������^�,�,�,�,�,�����^�,�,�,�,���s�%A�Ac���	��d��td���#��d��wxYw)Nr�spanish inquisition occurredr�r�
ValueErrorrs�rrzKTestPEP380Operation.test_raising_exception_in_initial_next_call.<locals>.g27sB���
-����]�+�+�+� �!?�@�@�@�����^�,�,�,�,���s�$'�>r�'subgenerator failed to raise ValueErrorrr%N)rrrr
�r�failr'r�args�rrr �errs    @@r�+test_raising_exception_in_initial_next_callz?TestPEP380Operation.test_raising_exception_in_initial_next_call,s������	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	A��R�T�T�
2�
2������Q�Q�0�1�1�1�1�
2�

�I�I�?�@�@�@�@���	H�	H�	H����Q�V�A�Y�(F�G�G�G�G�G�G�G�G�����	H����	
���� 
� 
� 
�	�	�	�	�	��%A
�
B�!A=�=Bc����g���fd�}�fd��|��D]}��d|�����|��gd���dS)z@
        Test delegation of next() call to subgenerator
        c3��K���d��dV����Ed{V��dV���d��dS�Nr�g1 ham�g1 eggsr
rrs��rrzLTestPEP380Operation.test_delegation_of_next_call_to_subgenerator.<locals>.g1PsZ������L�L��'�'�'��N�N�N��r�t�t�O�O�O�O�O�O�O��O�O�O��L�L��(�(�(�(�(rc3�p�K���d��dV�dV���d��dS�Nr�g2 spam�g2 more spamrrrs�rrzLTestPEP380Operation.test_delegation_of_next_call_to_subgenerator.<locals>.g2VsF������L�L��'�'�'��O�O�O� � � � ��L�L��(�(�(�(�(rr)r�Yielded g1 hamr�Yielded g2 spam�Yielded g2 more spamr�Yielded g1 eggsr
Nrrs   @@r�,test_delegation_of_next_call_to_subgeneratorz@TestPEP380Operation.test_delegation_of_next_call_to_subgeneratorKs�������	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�
����	.�	.�A��L�L�L���,�-�-�-�-�����	 
�	 
�	 
�		�		�		�		�		rc�>���g���fd�}�fd��	|��D]}��d|�����	|�d��n8#t$r+}|�|jdd��Yd}~nd}~wwxYw|��gd���dS)	zA
        Test raising exception in delegated next() call
        c3���K�	��d��dV����Ed{V��dV���d��dS#��d��wxYwr2rrs��rrzMTestPEP380Operation.test_raising_exception_in_delegated_next_call.<locals>.g1m�w�����
-����]�+�+�+������2�4�4���������������^�,�,�,�,�,�����^�,�,�,�,�����-A	�	A c3��K�	��d��dV�td���#��d��wxYw)Nrr7�hovercraft is full of eelsr8rr&rs�rrzMTestPEP380Operation.test_raising_exception_in_delegated_next_call.<locals>.g2usQ�����
-����]�+�+�+����� �!=�>�>�>�����^�,�,�,�,���s	�(-�Arr(rrCN�rr9rr:rr
r)r,s    @@r�-test_raising_exception_in_delegated_next_callzATestPEP380Operation.test_raising_exception_in_delegated_next_callhs������	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	A��R�T�T�
2�
2������Q�Q�0�1�1�1�1�
2�

�I�I�?�@�@�@�@���	F�	F�	F����Q�V�A�Y�(D�E�E�E�E�E�E�E�E�����	F����	
���� 
� 
� 
�	�	�	�	�	r/c����g���fd�}�fd��|��}t|��}d}		|�|��}��d|����|dz
}�3#t$rYnwxYw|��gd���dS)z+
        Test delegation of send()
        c3���K���d��dV�}��d|�������Ed{V��dV�}��d|������d��dS�Nrr3zg1 received r4r
r�r rrs ��rrz7TestPEP380Operation.test_delegation_of_send.<locals>.g1��������L�L��'�'�'����A��L�L�L�Q�Q�0�1�1�1��r�t�t�O�O�O�O�O�O�O����A��L�L�L�Q�Q�0�1�1�1��L�L��(�(�(�(�(rc3���K���d��dV�}��d|����dV�}��d|������d��dS)Nrr7�g2 received r8rr�r rs �rrz7TestPEP380Operation.test_delegation_of_send.<locals>.g2�sw������L�L��'�'�'����A��L�L�L�Q�Q�0�1�1�1�$�$�$�A��L�L�L�Q�Q�0�1�1�1��L�L��(�(�(�(�(r�r)r�
g1 received 1rr:�
g2 received 2r;z
g2 received 3rr<z
g1 received 4r
N)�next�sendr�
StopIterationr)rr�g�yr rrs     @@r�test_delegation_of_sendz+TestPEP380Operation.test_delegation_of_send�s�������	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�
�B�D�D����G�G��
��	�
��F�F�1�I�I������Q�Q�0�1�1�1��Q���
���	�	�	��D�	�������� 
� 
� 
�	�	�	�	�	s�4A � 
A-�,A-c�����g���fd���fd����fd�}|�t|��|��gd���dS)zA
        Test handling exception while delegating 'send'
        c3���K���d��dV�}��d|�������Ed{V��dV�}��d|������d��dSrHrrIs ��rrzMTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.g1�rJrc3��K���d��dV�}��d|����td���)Nrr7rLrCr&rMs �rrzMTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.g2�sJ������L�L��'�'�'����A��L�L�L�Q�Q�0�1�1�1��9�:�:�:rc�������}t|��}d}		|�|��}��d|����|dz
}�3#t$r��d��YdSwxYw)NrNrrS)rQrRrrS)rTrUr rrs   ��r�runzNTestPEP380Operation.test_handling_exception_while_delegating_send.<locals>.run�s��������A��Q���A��A�
.�����q�	�	�A��L�L�L���!4�5�5�5���F�A���!�
.�
.�
.����_�-�-�-�-�-�-�
.���s�4A�A5�4A5)rrOrr:rPN)�assertRaisesr'r�rr[rrrs  @@@r�-test_handling_exception_while_delegating_sendzATestPEP380Operation.test_handling_exception_while_delegating_send�s��������	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�
	.�
	.�
	.�
	.�
	.�
	.�	
���*�S�)�)�)����� 
� 
� 
�	�	�	�	�	rc����g���fd�}�fd��|��}td��D])}t|��}��d|�����*|���|��gd���dS)z)
        Test delegating 'close'
        c3���K�	��d��dV����Ed{V��dV���d��dS#��d��wxYwr2rrs��rrz5TestPEP380Operation.test_delegating_close.<locals>.g1�r@rAc3��K�	��d��dV�dV���d��dS#��d��wxYwr6rrs�rrz5TestPEP380Operation.test_delegating_close.<locals>.g2��c�����
-����]�+�+�+�����$�$�$�$����^�,�,�,�,�,�����^�,�,�,�,����	�9�A�rrDN)�rangerQr�closer)rrrT�ir rrs     @@r�test_delegating_closez)TestPEP380Operation.test_delegating_close�s�������	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�
�B�D�D���q���	.�	.�A��Q���A��L�L�L���,�-�-�-�-�	���	�	�	����� 
� 
� 
�	�	�	�	�	rc�����g���fd�}�fd��	|��}td��D])}t|��}��d|�����*|���|�d��nX#t
$rK}|�|jdd��|�|j	t��Yd}~nd}~wwxYw|��gd	���dS)
zB
        Test handling exception while delegating 'close'
        c3���K�	��d��dV����Ed{V��dV���d��dS#��d��wxYwr2rrs��rrzMTestPEP380Operation.test_handing_exception_while_delegating_close.<locals>.g1	r@rAc3���K�	��d��dV�dV���d��td���#��d��td���xYw)Nrr7r8r�"nybbles have exploded with delightr&rs�rrzMTestPEP380Operation.test_handing_exception_while_delegating_close.<locals>.g2s������
G����]�+�+�+�����$�$�$�$����^�,�,�,� �!E�F�F�F�����^�,�,�,� �!E�F�F�F�F�F�Fs�A�%A+rdrr(rrlNrD)rerQrrfr*r'rr+�assertIsInstance�__context__�
GeneratorExit�rrrTrgr r-rrs      @@r�-test_handing_exception_while_delegating_closezATestPEP380Operation.test_handing_exception_while_delegating_closesW������	-�	-�	-�	-�	-�	-�	G�	G�	G�	G�	G�
	A�����A��1�X�X�
2�
2����G�G������Q�Q�0�1�1�1�1�
�G�G�I�I�I�

�I�I�?�@�@�@�@��	�	@�	@�	@����Q�V�A�Y�(L�M�M�M��!�!�!�-��?�?�?�?�?�?�?�?�����	@����
	
���� 
� 
� 
�	�	�	�	�	s�AA>�>
C�AC�Cc����g���fd�}�fd��	|��}td��D])}t|��}��d|�����*td��}|�|��|�d��n8#t$r+}|�|jdd��Yd}~nd}~wwxYw|��gd	���dS)
z)
        Test delegating 'throw'
        c3���K�	��d��dV����Ed{V��dV���d��dS#��d��wxYwr2rrs��rrz5TestPEP380Operation.test_delegating_throw.<locals>.g12r@rAc3��K�	��d��dV�dV���d��dS#��d��wxYwr6rrs�rrz5TestPEP380Operation.test_delegating_throw.<locals>.g2:rbrcrdr�tomato ejectedr(rNrD�rerQrr'�throwr*rr+rps      @@r�test_delegating_throwz)TestPEP380Operation.test_delegating_throw-sF������	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�	-�
	A�����A��1�X�X�
2�
2����G�G������Q�Q�0�1�1�1�1��+�,�,�A�
�G�G�A�J�J�J�
�I�I�?�@�@�@�@���	:�	:�	:����Q�V�A�Y�(8�9�9�9�9�9�9�9�9�����	:����	
���� 
� 
� 
�	�	�	�	�	s�A'B�
C�!B>�>Cc����g��fd�}t��}||��td��}||��d|_||��|��gd���dS)zC
        Test 'value' attribute of StopIteration exception
        c�����|jj�d|������d|j����dS)Nz: zvalue = )r�	__class__�__name__�value)r-rs �r�pexzPTestPEP380Operation.test_value_attribute_of_StopIteration_exception.<locals>.pexZsH����L�L�Q�[�%9�%9�%9�1�1�=�>�>�>��L�L�L����2�3�3�3�3�3r�spam�eggs)zStopIteration: zvalue = None�StopIteration: spamzvalue = spamr�zvalue = eggsN)rSr}r)rr~r-rs   @r�/test_value_attribute_of_StopIteration_exceptionzCTestPEP380Operation.test_value_attribute_of_StopIteration_exceptionUs������	4�	4�	4�	4�	4�
�O�O����A�����&�!�!����A���������A�������� 
� 
� 
�	�	�	�	�	rc�p���fd�}d��|�t|����dg��dS)Nc3�,�K����Ed{V��dS�N�)rs�rrz:TestPEP380Operation.test_exception_value_crash.<locals>.g1ps"������r�t�t�O�O�O�O�O�O�O�O�Orc3�K�dV�dgS)Nrrr�r�rrrz:TestPEP380Operation.test_exception_value_crash.<locals>.g2rs�����J�J�J��4�Krr)r�list)rrrs  @r�test_exception_value_crashz.TestPEP380Operation.test_exception_value_crashmsW���	�	�	�	�	�	�	�	�	
����b�b�d�d���d�V�,�,�,�,�,rc����g���fd�}d�fd�	�|��D]}��d|�����|��gd���dS)z-
        Test generator return value
        c3�<�K���d��dV����Ed{V��}��d|����ddtd��fD]+}�|��Ed{V��}��d|�����,dV���d��dS)	Nrr3zg2 returned rN�rd�r4r
)rrS)�ret�vrrs  ��rrz;TestPEP380Operation.test_generator_return_value.<locals>.g1}s�������L�L��'�'�'��N�N�N��R�T�T�/�/�/�/�/�/�C��L�L�L�S�S�2�3�3�3���m�A�.�.�.�
8�
8��!#��A���&�&�&�&�&�&��������6�7�7�7�7��O�O�O��L�L��(�(�(�(�(rNc3�x�K���d��dV�dV���d��|r|SdSr6r)r�rs �rrz;TestPEP380Operation.test_generator_return_value.<locals>.g2�sW������L�L��'�'�'��O�O�O� � � � ��L�L��(�(�(��
���
�
rr)rr9rr:r;rzg2 returned Nonerr:r;rz
g2 returned 1rr:r;rzg2 returned (2,)rr:r;rzg2 returned StopIteration(3)r<r
r�rrs   @@r�test_generator_return_valuez/TestPEP380Operation.test_generator_return_valuexs�������		)�		)�		)�		)�		)�		)�	�	�	�	�	�	�����	.�	.�A��L�L�L���,�-�-�-�-����� 
� 
� 
�	�	�	�	�	rc��g}d�}|��D]}|�d|�����|�|gd���dS)z<
        Test delegation of next() to non-generator
        c3�4K�td��Ed{V��dS�Nr��rer�rrrTzGTestPEP380Operation.test_delegation_of_next_to_non_generator.<locals>.g��*�����Q�x�x���������rr)�	Yielded 0�	Yielded 1�	Yielded 2Nr)rrrTr s    r�(test_delegation_of_next_to_non_generatorz<TestPEP380Operation.test_delegation_of_next_to_non_generator�s|����	 �	 �	 �����	.�	.�A��L�L�L���,�-�-�-�-����� 
� 
� 
�	�	�	�	�	rc���g}d�}|��}td��D]/}|�d��}|�d|�����0|�|gd���dS)z9
        Test conversion of send(None) to next()
        c3�4K�td��Ed{V��dSr�r�r�rrrTzBTestPEP380Operation.test_conversion_of_sendNone_to_next.<locals>.g�r�rr�N�	Yielded: )z
Yielded: 0z
Yielded: 1z
Yielded: 2)rerRrr)rrrT�gir rUs      r�#test_conversion_of_sendNone_to_nextz7TestPEP380Operation.test_conversion_of_sendNone_to_next�s�����	 �	 �	 �
�Q�S�S���q���	/�	/�A�����
�
�A��L�L�L�!�!�-�.�.�.�.����� 
� 
� 
�	�	�	�	�	rc�<��g��fd�}|��}t|��t��5}|���ddd��n#1swxYwY|�|���d��|��ddg��dS)z=
        Test delegation of close() to non-generator
        c3���K�	��d��td��Ed{V����d����d��dS#��d��wxYw�N�
starting gr�zg should not be here�finishing g�rrers�rrTzHTestPEP380Operation.test_delegation_of_close_to_non_generator.<locals>.g�������
,����\�*�*�*� ��8�8�#�#�#�#�#�#�#����3�4�4�4����]�+�+�+�+�+�����]�+�+�+�+�����?A�A2N�r�r�)rQrrfr�getvalue)rrTr��outputrs    @r�)test_delegation_of_close_to_non_generatorz=TestPEP380Operation.test_delegation_of_close_to_non_generator�s������	,�	,�	,�	,�	,��Q�S�S���R����
�
�
�	�&��H�H�J�J�J�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�������*�*�B�/�/�/������� 
�	�	�	�	�	s�A�A�Ac���g��fd�}	|��}td��D])}t|��}��d|�����*td��}|�|��|�d��n8#t$r+}|�|jdd��Yd}~nd}~wwxYw|��gd���dS)	z:
        Test delegating 'throw' to non-generator
        c3��K�	��d��td��Ed{V����d��dS#��d��wxYw)N�
Starting g�
�Finishing gr�rs�rrTzETestPEP380Operation.test_delegating_throw_to_non_generator.<locals>.g�sl�����
,����\�*�*�*� ��9�9�$�$�$�$�$�$�$����]�+�+�+�+�+�����]�+�+�+�+���s�*A�A�rrur(rN)r�r�r�r�z	Yielded 3z	Yielded 4r�rv)rrTr�rgr r-rs      @r�&test_delegating_throw_to_non_generatorz:TestPEP380Operation.test_delegating_throw_to_non_generator�s'�����	,�	,�	,�	,�	,�
	A�����B��1�X�X�
2�
2����H�H������Q�Q�0�1�1�1�1��+�,�,�A��H�H�Q�K�K�K�
�I�I�?�@�@�@�@���	9�	9�	9����Q�V�A�Y�'7�8�8�8�8�8�8�8�8�����	9����	
���� 
� 
� 
�	�	�	�	�	s�A'B�
B<�!B7�7B<c���g��fd�}	|��}t|��td��D]/}|�d��}��d|�����0	|�d��n8#t
$r+}|�d|jd��Yd}~nd}~wwxYw|��d	d
g��dS)z:
        Test attempting to send to non-generator
        c3���K�	��d��td��Ed{V����d����d��dS#��d��wxYwr�r�rs�rrTzGTestPEP380Operation.test_attempting_to_send_to_non_generator.<locals>.gr�r�r�rzShould not have yielded: z#was able to send into non-generatorrRrNr�r�)	rQrerRrr*�AttributeError�assertInr+r)rrTr�r rUr-rs      @r�(test_attempting_to_send_to_non_generatorz<TestPEP380Operation.test_attempting_to_send_to_non_generators�����	,�	,�	,�	,�	,�		=�����B���H�H�H��1�X�X�
C�
C���G�G�B�K�K������a�a�A�B�B�B�B�
C�
�I�I�;�<�<�<�<���	-�	-�	-��M�M�&�!�&��)�,�,�,�,�,�,�,�,�����	-����	
������ 
�	�	�	�	�	s�AA9�9
B.�!B)�)B.c�*��Gd�d����fd�}|�t��5|��}|�t|��d��|�d��ddd��n#1swxYwY|�t��5|��}|�t|��d��|�t��ddd��n#1swxYwYtj��5}|��}|�t|��d��|�	��|�t|j
j��ddd��dS#1swxYwYdS)zG
        Test subiterator with a broken getattr implementation
        c� �eZdZd�Zd�Zd�ZdS)�@TestPEP380Operation.test_broken_getattr_handling.<locals>.Brokenc��|Sr�r��rs r�__iter__zITestPEP380Operation.test_broken_getattr_handling.<locals>.Broken.__iter__"����rc��dS)NrNr�r�s r�__next__zITestPEP380Operation.test_broken_getattr_handling.<locals>.Broken.__next__$s���qrc��ddzdS�NrNrr�)r�attrs  r�__getattr__zLTestPEP380Operation.test_broken_getattr_handling.<locals>.Broken.__getattr__&s���!����rN)r|�
__module__�__qualname__r�r�r�r�rr�Brokenr�!sA������
�
�
�
�
�
�
�
�
�
�
rr�c3�,�K����Ed{V��dSr�r�)r�s�rrTz;TestPEP380Operation.test_broken_getattr_handling.<locals>.g)s+������v�x�x���������rrNN)r\�ZeroDivisionErrorrrQrRrwr�r�catch_unraisable_exceptionrf�
unraisable�exc_type)rrTr��cmr�s    @r�test_broken_getattr_handlingz0TestPEP380Operation.test_broken_getattr_handlings`���	�	�	�	�	�	�	�	�	 �	 �	 �	 �	 ��
�
�0�
1�
1�	�	�����B����T�"�X�X�q�)�)�)��G�G�A�J�J�J�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�
�
�
�0�
1�
1�	%�	%�����B����T�"�X�X�q�)�)�)��H�H�^�$�$�$�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%�	%����	%�	%�	%�	%�
�
/�
1�
1�	H�R�����B����T�"�X�X�q�)�)�)��H�H�J�J�J����.��
�0F�G�G�G�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H�	H����	H�	H�	H�	H�	H�	Hs8�AA=�=B�B�"AC6�6C:�=C:�A'F�F�Fc�����g���fd��d���fd�}|�t|��|��dg��dS)z7
        Test exception in initial next() call
        c3��K���d�����Ed{V����d��dS)N�g1 about to yield from g2�g1 should not be hererrs��rrzCTestPEP380Operation.test_exception_in_initial_next_call.<locals>.g1BsJ������L�L�4�5�5�5��r�t�t�O�O�O�O�O�O�O��L�L�0�1�1�1�1�1rc3�K�ddzV�dSr�r�r�rrrzCTestPEP380Operation.test_exception_in_initial_next_call.<locals>.g2Fs�����A�#�I�I�I�I�Irc�:�����}t|��dSr�)rQ)r�rs �rr[zDTestPEP380Operation.test_exception_in_initial_next_call.<locals>.runHs�������B���H�H�H�H�Hrr�N)r\r�rr]s  @@@r�#test_exception_in_initial_next_callz7TestPEP380Operation.test_exception_in_initial_next_call=s��������	2�	2�	2�	2�	2�	2�	�	�	�	�	�	�	�	�	
���+�C�0�0�0�����'� 
�	�	�	�	�	rc�F����g���fd�}��fd��	|����D]}��d|�����	|�d��n8#t$r+}|�|jdd��Yd}~nd}~wwxYw|��gd���dS)	z0
        Test attempted yield-from loop
        c3��K���d��dV���d�����Ed{V����d��dS)N�g1: starting�y1�g1: about to yield from g2r�rrs��rrz>TestPEP380Operation.test_attempted_yield_from_loop.<locals>.g1Use������L�L��(�(�(��J�J�J��L�L�5�6�6�6��r�t�t�O�O�O�O�O�O�O��L�L�0�1�1�1�1�1rc3��K���d��dV���d���Ed{V����d��dS)N�g2: starting�y2�g2: about to yield from g1zg2 should not be herer)r�rs��rrz>TestPEP380Operation.test_attempted_yield_from_loop.<locals>.g2\s_������L�L��(�(�(��J�J�J��L�L�5�6�6�6��M�M�M�M�M�M�M��L�L�0�1�1�1�1�1rr�z$subgenerator didn't raise ValueErrorrzgenerator already executingN)r�zYielded: y1r�r�zYielded: y2r�r))rrrUr-rr�rs    @@@r�test_attempted_yield_from_loopz2TestPEP380Operation.test_attempted_yield_from_loopPs&�������	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	>�����B��
3�
3������a�a�1�2�2�2�2�
3�

�I�I�<�=�=�=�=���	F�	F�	F����Q�V�A�Y�'D�E�E�E�E�E�E�E�E�����	F����	
���� 
� 
� 
�	�	�	�	�	s�'A�
B�!B�Bc�~����g���fd�}��fd��Gd�dt���|��}td��D])}t|��}��d|�����*�d��}|�|��|D]}��d|�����|��gd���d	S)
z=
        Test returning value from delegated 'throw'
        c3���K�	��d��dV����Ed{V��dV���d��dS#��d��wxYwr2rrs��rrzITestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.g1xr@rAc3��K�	��d��dV�dV�dS#�$r!��d��dV�dV�YdSwxYw)Nrr7r8�Caught LunchError in g2zg2 lunch savedzg2 yet more spamr)�
LunchErrorrs��rrzITestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.g2�s������
)����]�+�+�+�����$�$�$�$�$�$���
)�
)�
)����6�7�7�7�&�&�&�&�(�(�(�(�(�(�(�
)���s�$�"A
�	A
c��eZdZdS)�QTestPEP380Operation.test_returning_value_from_delegated_throw.<locals>.LunchErrorN�r|r�r�r�rrr�r����������Drr�rdrru)rr9rr:r�zYielded g2 yet more spamr<r
N)�	ExceptionrerQrrwr)	rrrTrgr r-r�rrs	      @@@r�)test_returning_value_from_delegated_throwz=TestPEP380Operation.test_returning_value_from_delegated_throwss6�������	-�	-�	-�	-�	-�	-�	)�	)�	)�	)�	)�	)�	�	�	�	�	��	�	�	��B�D�D���q���	.�	.�A��Q���A��L�L�L���,�-�-�-�-��J�'�(�(��	����
�
�
��	.�	.�A��L�L�L���,�-�-�-�-�����	 
�	 
�	 
�		�		�		�		�		rc�����g���fd�}�fd��|d��|d��|d��|td����|��gd���dS)z1
        Test next and return with value
        c����|��}t|��	��d��t|����d��dS#t$r#}��d|����Yd}~dSd}~wwxYw)N�f resuming g�f SHOULD NOT BE HERE�	f caught )rQrrS��rr�r-rTrs   ��r�fz>TestPEP380Operation.test_next_and_return_with_value.<locals>.f�s������1���B���H�H�H�
3����^�,�,�,��R�������3�4�4�4�4�4�� �
3�
3�
3�����a�a�1�2�2�2�2�2�2�2�2�2�����
3���s�9A�
B�"B�Bc3�n�K���d��dV���d|����|S)N�
g starting�g returning r)r�rs �rrTz>TestPEP380Operation.test_next_and_return_with_value.<locals>.g�s@������L�L��&�&�&��E�E�E��L�L�L�Q�Q�0�1�1�1��HrNrNr�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))�rSr�rr�rTrs  @@r�test_next_and_return_with_valuez3TestPEP380Operation.test_next_and_return_with_value�s�������	3�	3�	3�	3�	3�	3�	�	�	�	�	�
	
��$����	��!����	��$����	��-��
�
�������� 
� 
� 
�	�	�	�	�	rc�����g���fd�}�fd��|d��|d��|d��|td����|��gd���dS)z1
        Test send and return with value
        c����|��}t|��	��d��|�d����d��dS#t$r#}��d|����Yd}~dSd}~wwxYw)N�f sending spam to grr�r�)rQrrRrSr�s   ��rr�z>TestPEP380Operation.test_send_and_return_with_value.<locals>.f�s������1���B���H�H�H�
3����2�3�3�3�����������3�4�4�4�4�4�� �
3�
3�
3�����a�a�1�2�2�2�2�2�2�2�2�2�����
3���s�?A�
B�(B�Bc3��K���d��dV�}��d|������d|����|S)Nr�zg received r�r)r�r rs  �rrTz>TestPEP380Operation.test_send_and_return_with_value.<locals>.g�sY������L�L��&�&�&����A��L�L�L�A�A�/�0�0�0��L�L�L�Q�Q�0�1�1�1��HrNrNr�r�)r�r�g received 'spam'r�r�r�rrr�r�r�rrr�r�r�rrr�r�r�r�s  @@r�test_send_and_return_with_valuez3TestPEP380Operation.test_send_and_return_with_value�s�������	3�	3�	3�	3�	3�	3�	�	�	�	�	�	
��$����	��!����	��$����	��-��
�
��������!
�!
�!
�	�	�	�	�	rc
�t������fd����fd�}ddtd��fD]��g�|��}��t|������t|�t
������|��ddd��d�t���g����d	S)
ze
        Test catching an exception thrown into a
        subgenerator and returning a value
        c3�b�K�	dV�n%#t$r��d��YnwxYw�S)NrN�inner caught ValueError)r'r)rr}s��r�innerzTTestPEP380Operation.test_catching_exception_from_subgen_and_returning.<locals>.inner�sP�����
8��������
8�
8�
8����6�7�7�7�7�7�
8�����Ls�
�,�,c3�f�K����Ed{V��}��d|�d���|V�dS)N�inner returned �	 to outerr)r�r
rs ��r�outerzTTestPEP380Operation.test_catching_exception_from_subgen_and_returning.<locals>.outersL����� �5�7�7�"�"�"�"�"�"�A��L�L�L����<�=�=�=��G�G�G�G�Grrdr�rNr	rr
N)rSrrQ�reprrwr'r)rrrTr
rr}s   @@@r�1test_catching_exception_from_subgen_and_returningzETestPEP380Operation.test_catching_exception_from_subgen_and_returning�s������
	�	�	�	�	�	�	�	�	�	�	�	�
��m�A�.�.�.�
	�
	�E��E�����A��L�L��a���!�!�!��L�L��a�g�g�j�1�1�2�2�3�3�3����U��)�)�05���7��U���	%�
�
�
�
�
	�
	rc����g��fd����fd�}	|��}t|��|�t��|�d��n#t$rYnwxYw|��ddg��dS)zo
        Test throwing GeneratorExit into a subgenerator that
        catches it and returns normally.
        c3��K�	��d��dV���d��dS#t$rYdSwxYw�N�Enter f�Exit f�rrors�rr�zSTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returns.<locals>.fsa�����
����Y�'�'�'��������X�&�&�&�&�&�� �
�
�
����
���s�.5�
A�Ac3��K���d�����Ed{V����d��dS�N�Enter gzExit gr�r�rs��rrTzSTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returns.<locals>.g!�H������L�L��#�#�#��q�s�s�N�N�N�N�N�N�N��L�L��"�"�"�"�"r�*subgenerator failed to raise GeneratorExitrrN)rQrwror*r)rrTr�r�rs   @@r�4test_throwing_GeneratorExit_into_subgen_that_returnszHTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_returnss�����
��	�	�	�	�	�	#�	#�	#�	#�	#�	#�	D�����B���H�H�H��H�H�]�#�#�#�
�I�I�B�C�C�C�C���	�	�	��D�	����	
������ 
�	�	�	�	�	s�3A�
A'�&A'c�X���g��fd����fd�}	|��}t|��|�t��|�d��n8#t$r+}|�|jdd��Yd}~nd}~wwxYw|��ddg��dS)	ze
        Test throwing GeneratorExit into a subgenerator that
        catches it and yields.
        c3��K�	��d��dV���d��dS#t$rdV�YdSwxYwrrrs�rr�zXTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yields.<locals>.f8si�����
����Y�'�'�'��������X�&�&�&�&�&�� �
�
�
��������
���s�.5�A�Ac3��K���d�����Ed{V����d��dSrrrs��rrTzXTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yields.<locals>.g?rrrrzgenerator ignored GeneratorExitNrr)rQrwror*�RuntimeErrorrr+�rrTr�r-r�rs    @@r�9test_throwing_GeneratorExit_into_subgenerator_that_yieldszMTestPEP380Operation.test_throwing_GeneratorExit_into_subgenerator_that_yields2s
����
��	�	�	�	�	�	#�	#�	#�	#�	#�	#�	D�����B���H�H�H��H�H�]�#�#�#�
�I�I�B�C�C�C�C���	K�	K�	K����Q�V�A�Y�(I�J�J�J�J�J�J�J�J�����	K����	
������ 
�	�	�	�	�	s�3A�
B�$!B
�
Bc����g��fd����fd�}	|��}t|��|�t��|�d��nX#t$rK}|�|jdd��|�|jt��Yd}~nd}~wwxYw|��ddg��dS)	z{
        Test throwing GeneratorExit into a subgenerator that
        catches it and raises a different exception.
        c3��K�	��d��dV���d��dS#t$rtd���wxYw)Nrr�Vorpal bunny encountered)rror'rs�rr�zRTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raises.<locals>.fVsi�����
=����Y�'�'�'��������X�&�&�&�&�&�� �
=�
=�
=� �!;�<�<�<�
=���s	�.5�Ac3��K���d�����Ed{V����d��dSrrrs��rrTzRTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raises.<locals>.g]rrr(rr&Nrr)	rQrwror*r'rr+rmrnr"s    @@r�3test_throwing_GeneratorExit_into_subgen_that_raiseszGTestPEP380Operation.test_throwing_GeneratorExit_into_subgen_that_raisesPs"����
��	=�	=�	=�	=�	=�	#�	#�	#�	#�	#�	#�	A�����B���H�H�H��H�H�]�#�#�#�

�I�I�?�@�@�@�@��	�	@�	@�	@����Q�V�A�Y�(B�C�C�C��!�!�!�-��?�?�?�?�?�?�?�?�����	@����
	
������ 
�	�	�	�	�	s�3A�
B/�$AB*�*B/c�^�d�}|�tt|����dS)Nc3�K�dEd{V��dS)Nr�r�r�rrrTz4TestPEP380Operation.test_yield_from_empty.<locals>.gps�����M�M�M�M�M�M�M�M�Mr)r\rSrQ)rrTs  r�test_yield_from_emptyz)TestPEP380Operation.test_yield_from_emptyos5��	�	�	����-��q�q�s�s�3�3�3�3�3rc��������fd�}�fd��|�����t���gd���|���t���g}		|���d�����)#t
$rYnwxYw��|gd���Gd�dt�����fd�}��fd	��|���t���g}		|���������)#t
$rYn��|gd����xYwG��fd
�dt����fd�}|���t�����	��dS)
Nc3�<�K�dV����Ed{V��dV�dS�Nrr�r�)�twos�r�onezOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.onevs;������G�G�G��s�u�u���������G�G�G�G�Grc3�P�K�dV�	�Ed{V��n#t$rYnwxYwdV�dS�NrNrd�r')rs�rr/zOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.twozsU������G�G�G�
��
�
�
�
�
�
�
�
���
�
�
���
�����G�G�G�G�Gs��
�)rrNrdr�Trc��eZdZdS)�QTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyErrNr�r�rr�MyErrr5�r�rr6c3�p�K�	dV�n#�$rYnwxYw���Ed{V��	dV�dS#�$rYdSwxYwr.r�)r6r/s��rr0zOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.one�s������
��������
�
�
���
�����s�u�u��������
���������
�
�
����
���s�
���,�5�5c3��K�	dV�n#�$rYnwxYw	�Ed{V��n#t$rYnwxYw	dV�dS#�$rYdSwxYwr2r3)r6rs��rr/zOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.two�s������
��������
�
�
���
����
��
�
�
�
�
�
�
�
���
�
�
���
����
���������
�
�
����
���s$�
����
,�,�6�?�?c�(��eZdZd�Zd�Z��fd�ZdS)�PTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyItc��|Sr�r�r�s rr�zYTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.__iter__�r�rc��dS�Nrr�r�s rr�zYTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.__next__�����rrc�~�����j����tt���dSr�)�
assertTrue�
gi_runningr\r'rQ)�self_rrs ��rrfzVTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.MyIt.close�s5�������
�.�.�.��!�!�*�d�B�7�7�7�7�7rN)r|r�r�r�r�rf)rrs��r�MyItr:�sQ�������
�
�
�
�
�
�
8�
8�
8�
8�
8�
8�
8�
8rrCc3�,�K����Ed{V��dSr�r�)rCs�rr0zOTestPEP380Operation.test_delegating_generators_claim_to_be_running.<locals>.one�s+������t�v�v���������r)
rr�rQrrRrSr�rw�objectrf)rr0�resr6rCrr/s`  @@@@r�.test_delegating_generators_claim_to_be_runningzBTestPEP380Operation.test_delegating_generators_claim_to_be_runningtsD�������	�	�	�	�	�	�	�	�	�	��S�U�U������b���<�<�<�0�0�0�
�S�U�U���B�x�x�j��	�
(��
�
�2�7�7�2�;�;�'�'�'�
(���	�	�	��D�	��������l�l�l�+�+�+�	�	�	�	�	�I�	�	�	�		�		�		�		�		�		�	�	�	�	�	�	��S�U�U���B�x�x�j��	�
,��
�
�2�8�8�E�?�?�+�+�+�
,���	�	�	��D�	����S�,�,�,�/�/�/�����	8�	8�	8�	8�	8�	8�	8�	8�6�	8�	8�	8�	�	�	�	�	�
�S�U�U���R����
���
�
�
�
�
s$�*B�
B�B�&*D�
D6�D6c����d���fd�}d�}d�}||����D]}|�d|v���|||������D]}|�d|vod|v���dS)Nc�<�d�tj��D��S)Nc��g|]
}|d��S)r�r�)�.0r�s  r�
<listcomp>zaTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.call_stack.<locals>.<listcomp>�s��2�2�2�Q�A�a�D�2�2�2r)�inspect�stackr�rr�
call_stackzMTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.call_stack�s��2�2�'�-�/�/�2�2�2�2rc3�T�K����V����V����V�dSr�r�)rOs�r�genzFTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.gen�sC������*�,�,�����*�,�,�����*�,�,�����rc3�K�|Ed{V��dSr�r��rTs rrzGTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.spam�������L�L�L�L�L�L�L�L�Lrc3�K�|Ed{V��dSr�r�rSs rr�zGTestPEP380Operation.test_delegator_is_visible_to_debugger.<locals>.eggs�rTrrr�)r@)rrQrr�rNrOs     @r�%test_delegator_is_visible_to_debuggerz9TestPEP380Operation.test_delegator_is_visible_to_debugger�s����	3�	3�	3�	�	�	�	�	�
	�	�	�	�	�	��T�#�#�%�%�[�[�	-�	-�E��O�O�F�e�O�,�,�,�,��T�$�$�s�s�u�u�+�+�&�&�	A�	A�E��O�O�F�e�O�?��%��@�@�@�@�	A�	Arc����Gd�d�����fd�}d�t|����|��d��dS)Nc��eZdZd�Zd�ZdS)�?TestPEP380Operation.test_custom_iterator_return.<locals>.MyIterc��|Sr�r�r�s rr�zHTestPEP380Operation.test_custom_iterator_return.<locals>.MyIter.__iter__�r�rc� �td���r=)rSr�s rr�zHTestPEP380Operation.test_custom_iterator_return.<locals>.MyIter.__next__�s��#�B�'�'�'rN)r|r�r�r�r�r�rr�MyIterrY�s2������
�
�
�
(�
(�
(�
(�
(rr\c3�,�K����Ed{V���dSr�r�)r\r�s��rrQz<TestPEP380Operation.test_custom_iterator_return.<locals>.gen�s(�����#�V�X�X�%�%�%�%�%�%�C�C�Crr)r�r)rrQr\r�s  @@r�test_custom_iterator_returnz/TestPEP380Operation.test_custom_iterator_return�s~����	(�	(�	(�	(�	(�	(�	(�	(�
	&�	&�	&�	&�	&�	&����S�S�U�U��������b�!�!�!�!�!rc�2��d���fd�}d�}t��5|��}|��}|�d��|�|��|�|��~~t��ddd��dS#1swxYwYdS)Nc3�K�dV�dSr�r�r�rr�	innermostzDTestPEP380Operation.test_close_with_cleared_frame.<locals>.innermost�s�����E�E�E�E�Erc3�4�K�dV�}���Ed{V��dSr�r�)�	outer_genras �rr
z@TestPEP380Operation.test_close_with_cleared_frame.<locals>.inner�s4��������I� �y�{�{�"�"�"�"�"�"�"�"�"rc3�"K�dV�}|Ed{V��dSr�r�)�	inner_gens rrz@TestPEP380Operation.test_close_with_cleared_frame.<locals>.outer�s-�������I� � � � � � � � � � r)rrRr)rr
rrercras     @r�test_close_with_cleared_framez1TestPEP380Operation.test_close_with_cleared_frame�s���&	�	�	�	#�	#�	#�	#�	#�	!�	!�	!��\�\�		�		�����I�����I��N�N�4� � � ��N�N�9�%�%�%��N�N�9�%�%�%����L�L�L�		�		�		�		�		�		�		�		�		�		�		�		����		�		�		�		�		�		s�A$B�B�Bc����G�fd�d����fd�}|��}t|��d�|�d��|��d��dS)Nc�&��eZdZd�Zd�Z�fd�ZdS)�HTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGenc��|Sr�r�r�s rr�zQTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.__iter__r�rc��dSr=r�r�s rr�zQTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.__next__r>rc���|�dSr�r�)r�whatr�s  �rrRzMTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.MyGen.sends
������trN)r|r�r�r�r�rR)r�s�r�MyGenrisL�������
�
�
�
�
�
�
�
�
�
�
�
�
rrnc3�,�K����Ed{V��}dSr�r�)r�rns �rrzHTestPEP380Operation.test_send_tuple_with_custom_generator.<locals>.outers(����� �5�7�7�"�"�"�"�"�"�A�A�Ar)rNrdr��)rQrRr)rrrTrnr�s   @@r�%test_send_tuple_with_custom_generatorz9TestPEP380Operation.test_send_tuple_with_custom_generator	s�����	�	�	�	�	�	�	�	�	�	�	#�	#�	#�	#�	#��E�G�G���Q������	���|��������L�)�)�)�)�)rN)%r|r�r��__doc__r!r.r=rErVr^rhrqrxr�r�r�r�r�r�r�r�r�r�r�r�rrrrr#r(r+rGrVr^rfrqr�rrrrs%�����������.���>���:#�#�#�J*�*�*�X'�'�'�R � � �D'�'�'�R&�&�&�P���0-�-�-�1�1�1�f
�
�
� ���"���,���@���6H�H�H�@���&!�!�!�F)�)�)�V(�(�(�T-�-�-�^���:���<���<���>4�4�4�
I�I�I�VA�A�A�*"�"�"�%�%�%�N*�*�*�*�*rr�__main__)
rr�unittestrM�test.supportrrr�testr�TestCaserr|�mainr�rr�<module>rys�������������@�@�@�@�@�@�@�@�@�@�������J*�J*�J*�J*�J*�(�+�J*�J*�J*�Z �z����H�M�O�O�O�O�O��r