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

�Ke�@���ddlZddlZddlZddlmZddlmZddlmZddl	Z	ddl
Z
ddlZe
jd��Z
d�ZGd�dej��ZGd	�d
ej��Zedkrej��dSdS)�N)�support)�
import_helper)�dedentz\((\S+).py, line (\d+)c�|�t�t|����}|�dd��S)N��)�rx�search�str�group)�msg�mos  �:/usr/local/apps/python3/lib/python3.11/test/test_future.py�get_error_locationrs+��	���3�s�8�8�	�	�B�
�8�8�A�q�>�>��c�p�eZdZdd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�ZdS)�
FutureTestrc�8�|�d||fzt|����|�tj�|j��|dz��|�|j|��|�|j|��dS)Nz%s.py, line %dz.py)	�assertInr�assertEqual�os�path�basename�filename�lineno�offset)�self�errrrrs     r�check_syntax_errorzFutureTest.check_syntax_errors����
�
�&�(�F�);�;�S��X�X�F�F�F������)�)�#�,�7�7��E�9I�J�J�J������V�,�,�,������V�,�,�,�,�,rc��tjd��5ddlm}|�|jd��ddd��dS#1swxYwYdS)N�future_test1r)r!�)r�CleanImport�testr!r�result)rr!s  r�test_future1zFutureTest.test_future1���
�
&�~�
6�
6�	5�	5�)�)�)�)�)�)����\�0�!�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�	5�	5��"A�A�Ac��tjd��5ddlm}|�|jd��ddd��dS#1swxYwYdS)N�future_test2r)r*r")rr#r$r*rr%)rr*s  r�test_future2zFutureTest.test_future2 r'r(c�l�tjd��5ddlm}ddd��dS#1swxYwYdS)N�test_future3r)r-)rr#r$r-)rr-s  rr-zFutureTest.test_future3%s���
�
&�~�
6�
6�	*�	*�)�)�)�)�)�)�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�	*�	*��)�-�-c��|�t��5}ddlm}ddd��n#1swxYwY|�|jdd��dS)Nr)�badsyntax_future3r0�)�assertRaises�SyntaxErrorr$r0r�	exception)r�cmr0s   r�test_badfuture3zFutureTest.test_badfuture3)���
�
�
�{�
+�
+�	/�r�.�.�.�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/������.A�1�E�E�E�E�E��.�2�2c��|�t��5}ddlm}ddd��n#1swxYwY|�|jdd��dS)Nr)�badsyntax_future4r:r1)r2r3r$r:rr4)rr5r:s   r�test_badfuture4zFutureTest.test_badfuture4.r7r8c��|�t��5}ddlm}ddd��n#1swxYwY|�|jdd��dS)Nr)�badsyntax_future5r=�)r2r3r$r=rr4)rr5r=s   r�test_badfuture5zFutureTest.test_badfuture53r7r8c��|�t��5}ddlm}ddd��n#1swxYwY|�|jdd��dS)Nr)�badsyntax_future6rAr1)r2r3r$rArr4)rr5rAs   r�test_badfuture6zFutureTest.test_badfuture68r7r8c��|�t��5}ddlm}ddd��n#1swxYwY|�|jddd��dS)Nr)�badsyntax_future7rDr1�5)r2r3r$rDrr4)rr5rDs   r�test_badfuture7zFutureTest.test_badfuture7=s���
�
�
�{�
+�
+�	/�r�.�.�.�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/������.A�1�b�I�I�I�I�Ir8c��|�t��5}ddlm}ddd��n#1swxYwY|�|jdd��dS)Nr)�badsyntax_future8rHr1)r2r3r$rHrr4)rr5rHs   r�test_badfuture8zFutureTest.test_badfuture8Br7r8c��|�t��5}ddlm}ddd��n#1swxYwY|�|jdd��dS)Nr)�badsyntax_future9rKr1)r2r3r$rKrr4)rr5rKs   r�test_badfuture9zFutureTest.test_badfuture9Gr7r8c��|�t��5}ddlm}ddd��n#1swxYwY|�|jdd��dS)Nr)�badsyntax_future10rNr1)r2r3r$rNrr4)rr5rNs   r�test_badfuture10zFutureTest.test_badfuture10Ls���
�
�
�{�
+�
+�	0�r�/�/�/�/�/�/�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0������.B�A�F�F�F�F�Fr8c��d�tjD��}|d�tt��D��z}|�t|�����|�����dS)Nc�n�i|]2}d|�����tt|��j��3S)�
CO_FUTURE_)�upper�getattr�
__future__�
compiler_flag)�.0�futures  r�
<dictcomp>z;FutureTest.test_ensure_flags_dont_clash.<locals>.<dictcomp>UsG��
�
�
��
*������)�)�7�:�v�+F�+F�+T�
�
�
rc�d�i|]-}|�d���|tt|����.S)�PyCF_)�
startswithrT�ast)rW�flags  rrYz;FutureTest.test_ensure_flags_dont_clash.<locals>.<dictcomp>ZsE��
�
�
��D�O�O�G�$<�$<�
��'�#�t�$�$�
�
�
r)rU�all_feature_names�dirr]�assertCountEqual�set�values)r�flagss  r�test_ensure_flags_dont_clashz'FutureTest.test_ensure_flags_dont_clashQs���
�
�$�6�
�
�
��
	�
�
��C���
�
�
�	
��	
���c�%�,�,�.�.�1�1�5�<�<�>�>�B�B�B�B�Brc���	td��|�d��n#t$rYnwxYw	td��|�d��dS#t$rYdSwxYw)Nz.from __future__ import print_function; print 0zsyntax error didn't occurz0from __future__ import (print_function); print 0)�exec�failr3�rs r�test_parserhackzFutureTest.test_parserhack`s���	3��A�B�B�B�
�I�I�1�2�2�2�2���	�	�	��D�	����
	3��C�D�D�D�
�I�I�1�2�2�2�2�2���	�	�	��D�D�	���s�'�
4�4�A�
A,�+A,c�l�tjd��5ddlm}ddd��dS#1swxYwYdS)Nztest.test_future5r)�test_future5)rr#r$rl)rrls  r�test_multiple_featuresz!FutureTest.test_multiple_featurests���
�
&�':�
;�
;�	*�	*�)�)�)�)�)�)�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�	*�	*r.c�n�i}tdi|��|�|dt��dS)Nz/from __future__ import unicode_literals; x = ''�x)rg�assertIsInstancer)r�scopes  r�test_unicode_literals_execz%FutureTest.test_unicode_literals_execxs:�����
>��E�J�J�J����e�C�j�#�.�.�.�.�.rN)r)�__name__�
__module__�__qualname__rr&r+r-r6r;r?rBrFrIrLrOrerjrmrr�rrrrs$������-�-�-�-�5�5�5�
5�5�5�
*�*�*�F�F�F�
F�F�F�
F�F�F�
F�F�F�
J�J�J�
F�F�F�
F�F�F�
G�G�G�

C�
C�
C�3�3�3�(*�*�*�/�/�/�/�/rrc�d�eZdZed��Zd�Z	dd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�ZdS)�AnnotationsFutureTestCasea�
        from __future__ import annotations
        def f() -> {ann}:
            ...
        def g(arg: {ann}) -> None:
            ...
        async def f2() -> {ann}:
            ...
        async def g2(arg: {ann}) -> None:
            ...
        class H:
            var: {ann}
            object.attr: {ann}
        var: {ann}
        var2: {ann} = None
        object.attr: {ann}
        c�
�i}t|j�|���i|��|djd}|djd}|djd}|djd}|dd	}|dd
}|�||��|�||��|�||��|�||��|�||��|S)N)�ann�f�return�g�arg�f2�g2�__annotations__�var�var2)rg�template�formatr�r)	r�
annotationrq�func_ret_ann�func_arg_ann�async_func_ret_ann�async_func_arg_ann�var_ann1�var_ann2s	         r�	getActualz#AnnotationsFutureTestCase.getActual�s�����T�]�
!�
!�j�
!�
1�
1�2�u�=�=�=��S�z�1�(�;���S�z�1�%�8��"�4�[�8��B��"�4�[�8��?���*�+�E�2���*�+�F�3������|�4�4�4�����'9�:�:�:�����'9�:�:�:�����x�0�0�0�����x�0�0�0��rNFc��|�|��}|�|s|n	|dd�}|r@|�||��|�dd���dd��}|�||��dS)Nr����(��))r��assertNotEqual�replacer)rr��expected�drop_parens�is_tuple�actuals      r�assertAnnotationEqualz/AnnotationsFutureTestCase.assertAnnotationEqual�s������
�+�+����)1�G�z�z�z�!�B�$�7G�H��	>������1�1�1��^�^�C��,�,�4�4�S�"�=�=�F������*�*�*�*�*rc�0�i}td|z|��|S)Nz#from __future__ import annotations
)rg)r�coderqs   r�_exec_futurez&AnnotationsFutureTestCase._exec_future�s.�����2��
��	
�	
�	
��rc�
�|j}|d��|d��|d��|d��|d��|d��|d��|d��|d	��|d
��|d��|d��|d
��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d��|d ��|d!��|d"��|d#��|d$��|d%��|d&��|d'��|d(��|d)��|d*��|d+��|d,��|d-��|d.��|d/��|d0��|d1��|d2��|d3��|d4��|d5��|d6��|d7��|d8��|d9��|d:��|d;��|d<��|d=��|d>��|d?��|d@��|dA��|dB��|dC��|dD��|dE��|dF��|dG��|dH��|dI��|dJ��|dK��|dL��|dM��|dN��|dO��|dP��|dQ��|dR��|dS��|dT��|dU��|dV��|dW��|dX��|dY��|dZ��|d[��|d\��|d]��|d^��|d_��|d`��|da��|db��|dc��|dd��|de��|df��|dg��|dh��|di��|dj��|dk��|dl��|dm��|dn��|do��|dp��|dq��|dr��|ds��|dt��|du��|dv��|dw��|dx��|dy��|dz��|d{��|d|��|d}��|d~��|d��|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d���|d�d���|d�dE��|d���dS)�Nz...z
'some_string'zu'some_string'zb'\xa3'�Name�None�True�False�1z1.0�1jz
True or FalsezTrue or False or NonezTrue and FalsezTrue and False and NonezName1 and Name2 or Name3zName1 and (Name2 or Name3)zName1 or Name2 and Name3z(Name1 or Name2) and Name3z"Name1 and Name2 or Name3 and Name4z!Name1 or Name2 and Name3 or Name4za + b + (c + d)za * b * (c * d)z(a ** b) ** c ** dzv1 << 2z1 >> v2z1 % finishedz"1 + v2 - v3 * 4 ^ 5 ** v6 / 7 // 8z	not greatz
not not greatz~greatz+valuez++valuez-1z!~int and not v1 ^ 123 + v2 | Trueza + (not b)zlambda: Nonezlambda arg: Nonezlambda a=True: azlambda a, b, c=True: az-lambda a, b, c=True, *, d=1 << v2, e='str': az9lambda a, b, c=True, *vararg, d, e='str', **kwargs: a + bz<lambda a, /, b, c=True, *vararg, d, e='str', **kwargs: a + bzlambda x, /: xzlambda x=1, /: xzlambda x, /, y: x + yzlambda x=1, /, y=2: x + yzlambda x, /, y=1: x + yz#lambda x, /, y=1, *, z=3: x + y + zz%lambda x=1, /, y=2, *, z=3: x + y + zz#lambda x=1, /, y=2, *, z: x + y + zz>lambda x=1, y=2, z=3, /, w=4, *, l, l2: x + y + z + w + l + l2zHlambda x=1, y=2, z=3, /, w=4, *, l, l2, **kwargs: x + y + z + w + l + l2z!lambda x, /, y=1, *, z: x + y + zzlambda x: lambda y: x + yz1 if True else 2z4str or None if int or True else str or bytes or Nonez;str or None if (1 if True else 2) else str or bytes or Nonez"0 if not x else 1 if x > 0 else -1z (1 if x > 0 else -1) if x else 0z+{'2.7': dead, '3.7': long_live or die_hard}z@{'2.7': dead, '3.7': long_live or die_hard, **{'3.6': verygood}}z{**a, **b, **c}zC{'2.7', '3.6', '3.7', '3.8', '3.9', '4.0' if gilectomy else '3.10'}z{*a, *b, *c}z?({'a': 'b'}, True or False, +value, 'string', b'bytes') or Nonez()z(a,)z(a, b)z	(a, b, c)z(*a, *b, *c)z[]z6[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]z[*a, *b, *c]z{i for i in (1, 2, 3)}z{i ** 2 for i in (1, 2, 3)}z3{i ** 2 for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))}z2{i ** 2 + j for i in (1, 2, 3) for j in (1, 2, 3)}z[i for i in (1, 2, 3)]z ** 2 for i in (1, 2, 3)]z3[i ** 2 for i, _ in ((1, 'a'), (2, 'b'), (3, 'c'))]z2[i ** 2 + j for i in (1, 2, 3) for j in (1, 2, 3)]z(i for i in (1, 2, 3))z(i ** 2 for i in (1, 2, 3))z3(i ** 2 for i, _ in ((1, 'a'), (2, 'b'), (3, 'c')))z2(i ** 2 + j for i in (1, 2, 3) for j in (1, 2, 3))z{i: 0 for i in (1, 2, 3)}z1{i: j for i, j in ((1, 'a'), (2, 'b'), (3, 'c'))}z[(x, y) for x, y in (a, b)]z[(x,) for x, in (a,)]zPython3 > Python2 > COBOLzLife is Lifezcall()z	call(arg)zcall(kwarg='hey')zcall(arg, kwarg='hey')z&call(arg, *args, another, kwarg='hey')z6call(arg, another, kwarg='hey', **kwargs, kwarg2='ho')zlukasz.langa.plzcall.me(maybe)z1 .realz1.0.realz
....__class__z	list[str]zdict[str, int]z	set[str,]z	tuple[()]ztuple[str, ...]ztuple[str, *types]ztuple[str, int, (str, int)]z!tuple[*int, str, str, (str, int)]z&tuple[str, int, float, dict[str, int]]zslice[0]z
slice[0:1]zslice[0:1:2]zslice[:]z
slice[:-1]z	slice[1:]zslice[::-1]z	slice[:,]zslice[1:2,]z
slice[1:2:3,]z
slice[1:2, 1]zslice[1:2, 2, 3]z	slice[()]zslice[*Ts,]z
slice[1, *Ts]z
slice[*Ts, 2]zslice[1, *Ts, 2]zslice[*Ts, *Ts]zslice[1, *Ts, *Ts]zslice[*Ts, 1, *Ts]zslice[*Ts, *Ts, 1]zslice[1, *Ts, *Ts, 2]zslice[1:2, *Ts]zslice[*Ts, 1:2]zslice[1:2, *Ts, 3:4]zslice[a, b:c, d:e:f]zslice[(x for x in a)]zCstr or None if sys.version_info[0] > (3,) else str or bytes or Nonez5f'f-string without formatted values is just a string'zf'{{NOT a formatted value}}'z:f'some f-string with {a} {few():.2f} {formatted.values!r}'zf"{f'{nested} inner'} outer"z:f'space between opening braces: { {a for a in (1, 2, 3)}}'zf'{(lambda x: x)}'z!f'{(None if a else lambda x: x)}'zf'{x}'zf'{x!r}'zf'{x!a}'z[x for x in (a if b else c)]z![x for x in a if (b if c else d)]zf(x for x in a)zf(1, (x for x in a))zf((x for x in a), 2)z(((a)))�az
(((a, b)))z	1 + 2 + 3�r�)r�eqs  r�test_annotationsz*AnnotationsFutureTestCase.test_annotations�s�	��
�
'��
��5�	�	�	�
��?����
������
��:����
��6�
�
�
�
��6�
�
�
�
��6�
�
�
�
��7����
��3����
��5�	�	�	�
��4����
��?����
��"�#�#�#�
������
��$�%�%�%�
��%�&�&�&�
��'�(�(�(�
��%�&�&�&�
��'�(�(�(�
��/�0�0�0�
��.�/�/�/�
������
������
��� � � �
��9�
�
�
�
��9�
�
�
�
��>����
��/�0�0�0�
��;����
��?����
��8����
��8����
��9�
�
�
�
��4����
��.�/�/�/�
��=����
��>����
������
������
��#�$�$�$�
��:�;�;�;�
��F�G�G�G�
��I�J�J�J�
������
������
��"�#�#�#�
��&�'�'�'�
��$�%�%�%�
��0�1�1�1�
��2�3�3�3�
��0�1�1�1�
��K�L�L�L�
��U�V�V�V�
��.�/�/�/�
��&�'�'�'�
������
��A�B�B�B�
��H�I�I�I�
��/�0�0�0�
��-�.�.�.�
��8�9�9�9�
��M�N�N�N�
������
��P�Q�Q�Q�
��>����
��L�M�M�M�
��4����
��6�
�
�
�
��8����
��;����
��>����
��4����
��C�D�D�D�
��>����
��#�$�$�$�
��(�)�)�)�
��@�A�A�A�
��?�@�@�@�
��#�$�$�$�
��(�)�)�)�
��@�A�A�A�
��?�@�@�@�
��#�$�$�$�
��(�)�)�)�
��@�A�A�A�
��?�@�@�@�
��&�'�'�'�
��>�?�?�?�
��(�)�)�)�
��"�#�#�#�
��&�'�'�'�
��>����
��8����
��;����
������
��#�$�$�$�
��3�4�4�4�
��C�D�D�D�
������
������
��9�
�
�
�
��:����
��?����
��;����
������
��;����
��;����
������
��� � � �
��(�)�)�)�
��.�/�/�/�
��3�4�4�4�
��:����
��<����
��>����
��:����
��<����
��;����
��=����
��;����
��=����
��?����
��?����
������
��;����	��=����
��?����
��?����
������
������
��� � � �
��� � � �
��� � � �
��"�#�#�#�
������
������
��!�"�"�"�
��!�"�"�"�
��"�#�#�#�
��P�Q�Q�Q�
��B�C�C�C�
��)�*�*�*�
��G�H�H�H�
��-�.�.�.�
��G�H�H�H�
��� � � �
��.�/�/�/�
��8����
��:����
��:����
��)�*�*�*�
��.�/�/�/�
������
��!�"�"�"�
��!�"�"�"�
��9�c����
��<��"�"�"�
��;�����rc��|�dd���|�dd���|�dd���|�dd���|�dd	���|�d
d���dS)Nz	f'{x=!r}'z
f'x={x!r}'�r�zf'{x=:}'z	f'x={x:}'zf'{x=:.2f}'zf'x={x:.2f}'z	f'{x=!a}'z
f'x={x!a}'zf'{x=!s:*^20}'zf'x={x!s:*^20}'r�ris r�test_fstring_debug_annotationsz8AnnotationsFutureTestCase.test_fstring_debug_annotationsZs���	
�"�"�;��"�F�F�F��"�"�:��"�D�D�D��"�"�=�>�"�J�J�J��"�"�;��"�F�F�F��"�"�;��"�F�F�F��"�"�#3�>O�"�P�P�P�P�Prc��dttjjdz��z}|�d�}|�d|���|�d|���|�dd|�����|�d	d
|�����|�dd|�d
|�d����|�d��|�dd|�d|�d����|�dd|�d|�d����dS)N�1er�j�1e1000r��1e1000jz-1e1000�-z	3+1e1000jz3 + z(1e1000, 1e1000j)r�z, r�z'inf'z"('inf', 1e1000, 'infxxx', 1e1000j)z('inf', z, 'infxxx', z(1e1000, (1e1000j,))z, (z,)))�repr�sys�
float_info�
max_10_expr�)r�inf�infjs   r�test_infinity_numbersz/AnnotationsFutureTestCase.test_infinity_numbersds@���T�#�.�3�a�7�8�8�8���y�y�y���"�"�8�c�"�:�:�:��"�"�9�t�"�<�<�<��"�"�9�y�3�y�y�"�A�A�A��"�"�;�����"�G�G�G��"�"�#6�AS�S�AS�AS�D�AS�AS�AS�"�T�T�T��"�"�7�+�+�+��"�"�#G�Ru�]`�Ru�Ru�nr�Ru�Ru�Ru�"�v�v�v��"�"�#9�DY��DY�DY�PT�DY�DY�DY�"�Z�Z�Z�Z�Zrc��|�t��5td��ddd��dS#1swxYwYdS)Nz8from __future__ import annotations
object.__debug__: int)r2r3rgris r�#test_annotation_with_complex_targetz=AnnotationsFutureTestCase.test_annotation_with_complex_targetps���
�
�
�{�
+�
+�	�	��(�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�8�<�<c�H�|�td����}|�d��}|�|��j��|�|jjd��|�|��jjd��dS)Nz�
        from __future__ import annotations

        def foo():
            outer = 1
            def bar():
                inner: outer = 1
            return bar
        �foorv)	r�r�pop�assertIsNone�__closure__r�__code__�co_cellvars�co_freevars)r�	namespacer�s   r�"test_annotations_symbol_table_passz<AnnotationsFutureTestCase.test_annotations_symbol_table_passws����%�%�f�.�'
�'
���	��m�m�E�"�"�����#�#�%�%�+�,�,�,������1�2�6�6�6���������3�R�8�8�8�8�8rc� �|�t��5|�d��ddd��n#1swxYwY|�t��5|�d��ddd��n#1swxYwY|�t��5|�d��ddd��n#1swxYwY|�t��5|�d��ddd��n#1swxYwY|�t��5|�d��ddd��n#1swxYwY|�t��5|�d��ddd��n#1swxYwY|�t��5|�d��ddd��n#1swxYwY|�t��5|�d��ddd��n#1swxYwY|�t��5|�td	����ddd��dS#1swxYwYdS)
Nz
test: (yield)ztest.test: (yield a + b)ztest[something]: (yield from x)z7def func(test: (yield from outside_of_generator)): passzdef test() -> (await y): passz-async def test() -> something((a := b)): passzBtest: await some.complicated[0].call(with_args=True or 1 is not 1)ztest: f'{(x := 10):=10}'zO            def foo():
                def bar(arg: (yield)): pass
            )r2r3r�rris r�test_annotations_forbiddenz4AnnotationsFutureTestCase.test_annotations_forbidden�s���
�
�
�{�
+�
+�	/�	/����o�.�.�.�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/�	/����	/�	/�	/�	/��
�
�{�
+�
+�	:�	:����8�9�9�9�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:��
�
�{�
+�
+�	A�	A����?�@�@�@�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A�	A����	A�	A�	A�	A��
�
�{�
+�
+�	Y�	Y����W�X�X�X�	Y�	Y�	Y�	Y�	Y�	Y�	Y�	Y�	Y�	Y�	Y����	Y�	Y�	Y�	Y��
�
�{�
+�
+�	?�	?����=�>�>�>�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?�	?����	?�	?�	?�	?��
�
�{�
+�
+�	O�	O����M�N�N�N�	O�	O�	O�	O�	O�	O�	O�	O�	O�	O�	O����	O�	O�	O�	O��
�
�{�
+�
+�	d�	d����b�c�c�c�	d�	d�	d�	d�	d�	d�	d�	d�	d�	d�	d����	d�	d�	d�	d��
�
�{�
+�
+�	:�	:����8�9�9�9�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:�	:����	:�	:�	:�	:��
�
�{�
+�
+�	�	����f�&���
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s��=�A�A�"B�B�B�)C�C�C�0D�D�D�7E�E� E�>F � F$�'F$�G'�'G+�.G+�H.�.H2�5H2�#J�J�
Jc��|�td����}|�d��}|�|d|d��dS)Nz�        class StarredC: pass
        class C:
          def __iter__(self):
            yield StarredC()
        c = C()
        def f(*args: *c): pass
        import typing
        hints = typing.get_type_hints(f)
        �hints�args�StarredC)r�rr�rp)rr�r�s   r�-test_get_type_hints_on_func_with_variadic_argzGAnnotationsFutureTestCase.test_get_type_hints_on_func_with_variadic_arg�sb��
�%�%�f�	.�	'
�	'
�	�	�	��
�
�g�&�&�����e�F�m�Y�z�-B�C�C�C�C�Cr)NFF)rsrtrurr�r�r�r�r�r�r�r�r�r�r�rvrrrxrx}s��������v�	���H�(���"FK�
+�
+�
+�
+����b�b�b�HQ�Q�Q�
[�
[�
[����9�9�9� ���>D�D�D�D�Drrx�__main__)rUr]�unittestr$r�test.supportr�textwraprr�rer��compiler	r�TestCaserrxrs�mainrvrr�<module>r�s1������
�
�
�
�����������&�&�&�&�&�&�������	�	�	�	�	�	�	�	�
�
�
�
��R�Z�)�*�*�����h/�h/�h/�h/�h/��"�h/�h/�h/�TzD�zD�zD�zD�zD�� 1�zD�zD�zD�z	�z����H�M�O�O�O�O�O��r