o
    HXhG                     @   sj   	 d dl Z d dlZd dlZd dlmZ dd Zdd Zdd	d
ZG dd dejZ	e
dkr3e  dS dS )    Ncheck_syntax_errorc                C      | |fS N abr   r   G/opt/python-3.10.19/usr/lib/python3.10/test/test_positional_only_arg.pyglobal_pos_only_f
      r   c                C   r   r   r   r   r   r   r
   global_pos_only_and_normal   r   r         c                C   r   r   r   r   r   r   r
   global_pos_only_defaults   r   r   c                   @   s   e Zd Zd=ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<S )>PositionalOnlyTestCaseinvalid syntaxc                 C   sB   |  t| t|d dd W d    d S 1 sw   Y  d S )N
<test>single)assertRaisesRegexSyntaxErrorcompile)selfZcodestrZregexr   r   r
   assertRaisesSyntaxError   s   "z.PositionalOnlyTestCase.assertRaisesSyntaxErrorc                 C      t | dd t | dd t | dd t | dd t | d t | d t | d t | d	 t | d
 t | d t | d t | d t | dd t | dd t | d t | d t | d t | d t | d d S )Nzdef f(a, b = 5, /, c): pass-non-default argument follows default argumentzdef f(a = 5, b, /, c): passz%def f(a = 5, b=1, /, c, *, d=2): passzdef f(a = 5, b, /): passzdef f(*args, /): passzdef f(*args, a, /): passzdef f(**kwargs, /): passzdef f(/, a = 1): passzdef f(/, a): passzdef f(/): passzdef f(*, a, /): passzdef f(*, /, a): passzdef f(a, /, a): pass-duplicate argument 'a' in function definitionzdef f(a, /, *, a): passzdef f(a, b/2, c): passzdef f(a, /, c, /): passzdef f(a, /, c, /, d): passz def f(a, /, c, /, d, *, e): passzdef f(a, *, c, /, d, e): passr   r   r   r   r
   test_invalid_syntax_errors   &   











z1PositionalOnlyTestCase.test_invalid_syntax_errorsc                 C   r   )Nz!async def f(a, b = 5, /, c): passr   z!async def f(a = 5, b, /, c): passz(async def f(a = 5, b=1, /, c, d=2): passzasync def f(a = 5, b, /): passzasync def f(*args, /): passzasync def f(*args, a, /): passzasync def f(**kwargs, /): passzasync def f(/, a = 1): passzasync def f(/, a): passzasync def f(/): passzasync def f(*, a, /): passzasync def f(*, /, a): passzasync def f(a, /, a): passr   zasync def f(a, /, *, a): passzasync def f(a, b/2, c): passzasync def f(a, /, c, /): passz async def f(a, /, c, /, d): passz&async def f(a, /, c, /, d, *, e): passz#async def f(a, *, c, /, d, e): passr   r   r   r   r
    test_invalid_syntax_errors_async.   r    z7PositionalOnlyTestCase.test_invalid_syntax_errors_asyncc                 C   s  ddd}|  |dddd |  |dddd	d | td
 |dddd W d    n1 s2w   Y  |  |ddd | td
 |ddd W d    n1 sWw   Y  |  |ddd	d ddd}|  |dddd |  |dddd	d | td
 |dddd W d    n1 sw   Y  |  |ddd | td
 |ddd W d    n1 sw   Y  |  |ddd	d d S )N
   d   c                S      | | | S r   r   r   r	   cr   r   r
   fD      zDPositionalOnlyTestCase.test_optional_positional_only_args.<locals>.fr   r         r&   If\(\) got some positional-only arguments passed as keyword arguments: 'b'r	   r&   g   r	      c                S   r$   r   r   r%   r   r   r
   r'   Q   r(   )r"   r#   )r   r"   r#   assertEqualr   	TypeErrorr   r'   r   r   r
   "test_optional_positional_only_argsC   s,   

z9PositionalOnlyTestCase.test_optional_positional_only_argsc                 C   ,   dd dd tdD  }t|dd d S )Ndef f(%s, /):
  pass
, c                 s       | ]}d | V  qdS zi%dNr   .0ir   r   r
   	<genexpr>`       zNPositionalOnlyTestCase.test_syntax_for_many_positional_only.<locals>.<genexpr>,  r   r   joinranger   r   Zfundefr   r   r
   $test_syntax_for_many_positional_only^      z;PositionalOnlyTestCase.test_syntax_for_many_positional_onlyc                 C   s   ddddd}|  d|jj |  d|jj |  d|j dd	dd
d}|  d|jj |  d|jj |  d|j d S )Nr   r   )gc               S      d S r   r   r   r	   r&   der'   rG   r   r   r
   r'   d      z:PositionalOnlyTestCase.test_pos_only_definition.<locals>.f   r)   )r      c               S   rH   r   r   rI   r   r   r
   r'   k   rL   r   r   r)   )r2   __code__co_argcountco_posonlyargcount__defaults__r4   r   r   r
   test_pos_only_definitionc   s   z/PositionalOnlyTestCase.test_pos_only_definitionc                 C   s    dd }|  |ddg d d S )Nc                S      | | S r   r   r   r   r   r
   r'   s   r   zBPositionalOnlyTestCase.test_pos_only_call_via_unpacking.<locals>.fr   r   r)   r2   r4   r   r   r
    test_pos_only_call_via_unpackingr   s   z7PositionalOnlyTestCase.test_pos_only_call_via_unpackingc                 C   s   dd }d}|  t| |dd W d    n1 sw   Y  dd }d}|  t| |ddd W d    n1 s>w   Y  d	d }d
}|  t| |ddd W d    d S 1 saw   Y  d S )Nc                S   rH   r   r   r   r   r   r
   r'   y   rL   z@PositionalOnlyTestCase.test_use_positional_as_keyword.<locals>.fIf\(\) got some positional-only arguments passed as keyword arguments: 'a'r   rX   c                S   rH   r   r   r   r   r   r
   r'      rL   r   r   c                S   rH   r   r   r   r   r   r
   r'      rL   zLf\(\) got some positional-only arguments passed as keyword arguments: 'a, b'r   r3   )r   r'   expectedr   r   r
   test_use_positional_as_keywordx   s   "z5PositionalOnlyTestCase.test_use_positional_as_keywordc                 C   s   dd }|  td |dd W d    n1 sw   Y  |  td |d W d    n1 s4w   Y  |  td |  W d    n1 sMw   Y  |  td |ddd	d
 W d    d S 1 skw   Y  d S )Nc                S   rH   r   r   r%   r   r   r
   r'      rL   zLPositionalOnlyTestCase.test_positional_only_and_arg_invalid_calls.<locals>.f1f\(\) missing 1 required positional argument: 'c'r   r   :f\(\) missing 2 required positional arguments: 'b' and 'c'z@f\(\) missing 3 required positional arguments: 'a', 'b', and 'c'z3f\(\) takes 3 positional arguments but 4 were givenr)   rN   rZ   r4   r   r   r
   *test_positional_only_and_arg_invalid_calls   s   
"zAPositionalOnlyTestCase.test_positional_only_and_arg_invalid_callsc                 C   s   d
dd}|dd |  td |d W d    n1 sw   Y  |  td |  W d    n1 s8w   Y  |  td |dddd	 W d    d S 1 sVw   Y  d S )Nr)   c                S   rH   r   r   r%   r   r   r
   r'      rL   zUPositionalOnlyTestCase.test_positional_only_and_optional_arg_invalid_calls.<locals>.fr   r   1f\(\) missing 1 required positional argument: 'b':f\(\) missing 2 required positional arguments: 'a' and 'b'z=f\(\) takes from 2 to 3 positional arguments but 4 were givenrN   )r)   rZ   r4   r   r   r
   3test_positional_only_and_optional_arg_invalid_calls   s   


"zJPositionalOnlyTestCase.test_positional_only_and_optional_arg_invalid_callsc                 C   s  dd }|dddddd |  td |ddddd W d    n1 s&w   Y  |  td	 |ddd W d    n1 sBw   Y  |  td
 |dd W d    n1 s]w   Y  |  td |d W d    n1 sww   Y  |  td |  W d    n1 sw   Y  |  td |ddddddddd W d    n1 sw   Y  |  td |ddddddd W d    d S 1 sw   Y  d S )Nc               S   rH   r   r   )r   r	   r&   rJ   rK   r   r   r
   r'      rL   zSPositionalOnlyTestCase.test_positional_only_and_kwonlyargs_invalid_calls.<locals>.fr   r   r)   )rJ   rK   z-missing 1 required keyword-only argument: 'd')rK   z6missing 2 required keyword-only arguments: 'd' and 'e'r]   r^   z; missing 3 required positional arguments: 'a', 'b', and 'c'zif\(\) takes 3 positional arguments but 6 positional arguments \(and 2 keyword-only arguments\) were givenrN   rM   r*         z,f\(\) got an unexpected keyword argument 'f'8   )rJ   rK   r'   rZ   r4   r   r   r
   1test_positional_only_and_kwonlyargs_invalid_calls   s.   
"zHPositionalOnlyTestCase.test_positional_only_and_kwonlyargs_invalid_callsc                 C   s   dd }|dd |  td |d W d    n1 sw   Y  |  td |  W d    n1 s7w   Y  |  td |ddd W d    d S 1 sTw   Y  d S )	Nc                S   rH   r   r   r   r   r   r
   r'      rL   zDPositionalOnlyTestCase.test_positional_only_invalid_calls.<locals>.fr   r   r`   ra   z3f\(\) takes 2 positional arguments but 3 were givenr)   rZ   r4   r   r   r
   "test_positional_only_invalid_calls   s   

"z9PositionalOnlyTestCase.test_positional_only_invalid_callsc                 C   s   ddd}|d |  td |  W d    n1 sw   Y  |  td |ddd W d    d S 1 s:w   Y  d S )	Nr   c                S   rH   r   r   r   r   r   r
   r'      rL   zRPositionalOnlyTestCase.test_positional_only_with_optional_invalid_calls.<locals>.fr   z1f\(\) missing 1 required positional argument: 'a'z=f\(\) takes from 1 to 2 positional arguments but 3 were givenr)   r   rZ   r4   r   r   r
   0test_positional_only_with_optional_invalid_calls   s   
"zGPositionalOnlyTestCase.test_positional_only_with_optional_invalid_callsc                 C   sT   dd }|dddd |  t |dddd W d    d S 1 s#w   Y  d S )Nc               S   rH   r   r   r%   r   r   r
   r'      rL   z=PositionalOnlyTestCase.test_no_standard_args_usage.<locals>.fr   r   r)   r+   r-   )assertRaisesr3   r4   r   r   r
   test_no_standard_args_usage   s
   "z2PositionalOnlyTestCase.test_no_standard_args_usagec                 C   s6   ddd}|  d|j d|_|  |dddd d S )	Nr   r)   c                S   r$   r   r   r%   r   r   r
   r'      r(   z>PositionalOnlyTestCase.test_change_default_pos_only.<locals>.f)r   r)   rO   r   r*   )r2   rS   r4   r   r   r
   test_change_default_pos_only   s   
z3PositionalOnlyTestCase.test_change_default_pos_onlyc                 C   s   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 S )Nc                S   rU   r   r   r   r   r   r
   <lambda>       z5PositionalOnlyTestCase.test_lambdas.<locals>.<lambda>r   r   r)   r/   c                S   rU   r   r   r   r   r   r
   rm      rn   c                S   rU   r   r   r   r   r   r
   rm      rn   c                S   rU   r   r   r   r   r   r
   rm      rn   rh   rV   )r   xr   r   r
   test_lambdas   s   
z#PositionalOnlyTestCase.test_lambdasc                 C   s   t | dd t | dd t | dd t | d t | d t | d t | d t | d	 t | d
 t | d t | d t | dd t | dd t | d t | d t | d t | d d S )Nzlambda a, b = 5, /, c: Noner   zlambda a = 5, b, /, c: Nonezlambda a = 5, b, /: Nonezlambda *args, /: Nonezlambda *args, a, /: Nonezlambda **kwargs, /: Nonezlambda /, a = 1: Nonezlambda /, a: Nonezlambda /: Nonezlambda *, a, /: Nonezlambda *, /, a: Nonezlambda a, /, a: Noner   zlambda a, /, *, a: Nonezlambda a, /, b, /: Nonezlambda a, /, b, /, c: Nonez lambda a, /, b, /, c, *, d: Nonezlambda a, *, b, /, c: Noner   r   r   r   r
   test_invalid_syntax_lambda   s"   










z1PositionalOnlyTestCase.test_invalid_syntax_lambdac                 C   s   G dd d}|  | ddd |  || ddd | t|jdd d}| t| | jddd W d    d S 1 sCw   Y  d S )Nc                   @      e Zd Zdd ZdS )z<PositionalOnlyTestCase.test_posonly_methods.<locals>.Examplec                S      ||fS r   r   )r   r   r	   r   r   r
   r'      r   z>PositionalOnlyTestCase.test_posonly_methods.<locals>.Example.fN)__name__
__module____qualname__r'   r   r   r   r
   Example       rw   r   r   r   r   r,   r/   )r2   r'   rj   r3   r   )r   rw   r[   r   r   r
   test_posonly_methods   s   "z+PositionalOnlyTestCase.test_posonly_methodsc                 C   s8   |  td t  W d    d S 1 sw   Y  d S )Nra   )r   r3   r   r   r   r   r
   test_module_function  s   "z+PositionalOnlyTestCase.test_module_functionc                 C   sV  dd }|  |ddddd | td |ddd W d    n1 s(w   Y  | td	 |ddddd
 W d    n1 sGw   Y  dd }|  |ddddd dd }|  |ddddd | td |ddd W d    n1 sw   Y  | td	 |ddddd
 W d    d S 1 sw   Y  d S )Nc                        fdd}|S )Nc                        |  | S r   r   Zx2Zy2ro   yr   r
   rG        :PositionalOnlyTestCase.test_closures.<locals>.f.<locals>.gr   ro   r   rG   r   r   r
   r'        z/PositionalOnlyTestCase.test_closures.<locals>.fr   r   r)   rN   r"   z2g\(\) missing 1 required positional argument: 'y2'z3g\(\) takes 2 positional arguments but 3 were givenrM   c                   r|   )Nc                    r}   r   r   r~   r   r   r
   rG     r   r   r   r   r   r   r
   r'     r   c                   r|   )Nc                   r}   r   r   r~   r   r   r
   rG   !  r   r   r   r   r   r   r
   r'      r   r1   r4   r   r   r
   test_closures  s$   "z$PositionalOnlyTestCase.test_closuresc                 C   s"   dd }G dd d}dd }d S )Nc                  S      dt fdd} | S )Nro   c                S   rH   r   r   ro   r   r   r
   r'   .      zZPositionalOnlyTestCase.test_annotations_in_closures.<locals>.inner_has_pos_only.<locals>.fintr'   r   r   r
   inner_has_pos_only-     zOPositionalOnlyTestCase.test_annotations_in_closures.<locals>.inner_has_pos_onlyc                   @   rr   )zFPositionalOnlyTestCase.test_annotations_in_closures.<locals>.Somethingc                 S   s   dt fdd}|S )Nro   c                S   rH   r   r   r   r   r   r
   r'   5  r   zXPositionalOnlyTestCase.test_annotations_in_closures.<locals>.Something.method.<locals>.fr   r4   r   r   r
   method4  r   zMPositionalOnlyTestCase.test_annotations_in_closures.<locals>.Something.methodNrt   ru   rv   r   r   r   r   r
   	Something3  rx   r   c                  S   s   dd } |  S )Nc                  S   r   )Nro   c                S   rH   r   r   r   r   r   r
   r'   <  r   zsPositionalOnlyTestCase.test_annotations_in_closures.<locals>.multiple_levels.<locals>.inner_has_pos_only.<locals>.fr   r   r   r   r
   r   ;  r   zhPositionalOnlyTestCase.test_annotations_in_closures.<locals>.multiple_levels.<locals>.inner_has_pos_onlyr   )r   r   r   r
   multiple_levels:  s   zLPositionalOnlyTestCase.test_annotations_in_closures.<locals>.multiple_levelsr   )r   r   r   r   r   r   r
   test_annotations_in_closures+  s   z3PositionalOnlyTestCase.test_annotations_in_closuresc                 C   sr   dd }|  |ddddddif | td |dd W d    n1 s(w   Y  |  |ddi f d S )Nc                [   r   r   r   )	somethingkwargsr   r   r
   r'   C  r   zMPositionalOnlyTestCase.test_same_keyword_as_positional_with_kwargs.<locals>.f*   )r   r   z9f\(\) missing 1 required positional argument: 'something'r1   r4   r   r   r
   +test_same_keyword_as_positional_with_kwargsB  s   zBPositionalOnlyTestCase.test_same_keyword_as_positional_with_kwargsc                 C   sH   G dd d}|  |  d |  |  d |  |  d d S )Nc                   @   s0   e Zd ZdddZdddZdddd	d
ZdS )z/PositionalOnlyTestCase.test_mangling.<locals>.Xr   c                S   s   |S r   r   )r   _X__ar   r   r
   r'   O  rL   z1PositionalOnlyTestCase.test_mangling.<locals>.X.f+   c                S   rs   r   r   )r   r   _X__br   r   r
   f2R  r   z2PositionalOnlyTestCase.test_mangling.<locals>.X.f2,   )_X__cc               S   s
   |||fS r   r   )r   r   r   r   r   r   r
   f3U     
z2PositionalOnlyTestCase.test_mangling.<locals>.X.f3N)r   r   r   )rt   ru   rv   r'   r   r   r   r   r   r
   XN  s    

r   r   r   )r   r   r   )r2   r'   r   r   )r   r   r   r   r
   test_manglingM  s   
z$PositionalOnlyTestCase.test_manglingc                 C   r6   )Nr7   r8   c                 s   r9   r:   r   r;   r   r   r
   r>   ^  r?   zAPositionalOnlyTestCase.test_too_many_arguments.<locals>.<genexpr>r@   r   r   rA   rD   r   r   r
   test_too_many_arguments\  rF   z.PositionalOnlyTestCase.test_too_many_argumentsc                 C   s(  t t}t t}t t}t |}t |}t |}| |ddd d}| t| |ddd W d    n1 s@w   Y  | |ddd d}| t| |ddd W d    n1 sgw   Y  | | d d}| t| |ddd W d    d S 1 sw   Y  d S )Nr   r   ry   z\global_pos_only_f\(\) got some positional-only arguments passed as keyword arguments: 'a, b'r   zbglobal_pos_only_and_normal\(\) got some positional-only arguments passed as keyword arguments: 'a'z`global_pos_only_defaults\(\) got some positional-only arguments passed as keyword arguments: 'a')	pickledumpsr   r   r   loadsr2   r   r3   )r   Zpickled_posonlyZpickled_optionalZpickled_defaultsZunpickled_posonlyZunpickled_optionalZunpickled_defaultsr[   r   r   r
   test_serializationa  s*   





"z)PositionalOnlyTestCase.test_serializationc                    sx   d
dd  td  ddd W d    n1 sw   Y   fdd}|dd |ddd	 |d |  d S )Nr   r   c                   s
   | |fS r   r   r   r   r   r
   r'   ~  s   z,PositionalOnlyTestCase.test_async.<locals>.frY   r   c               
      sX   z | i |}| d  W n ty# } z	|j}W Y d }~nd }~ww |d d S )Nry   )sendStopIterationvaluer2   )argsr   cororK   resultr'   r   r   r
   _check_call  s   z6PositionalOnlyTestCase.test_async.<locals>._check_callr/   ry   rZ   )r   r   r   r   r
   
test_async|  s   


z!PositionalOnlyTestCase.test_asyncc                 C   s   ddd}|  td |ddd W d    n1 sw   Y  |dd}| t|d |ddd}| t|d |d}| t|d | }| t|d d S )	Nr   r   c                s   s    | |fV  d S r   r   r   r   r   r
   r'     s   z0PositionalOnlyTestCase.test_generator.<locals>.frY   r   ry   r/   )r   r3   r2   next)r   r'   genr   r   r
   test_generator  s   

z%PositionalOnlyTestCase.test_generatorc                    s>   t   G  fddd}G dd d|}| |    d S )Nc                       s   e Zd Z fddZdS )z,PositionalOnlyTestCase.test_super.<locals>.Ac                    s    S r   r   r   sentinelr   r
   r     rL   z3PositionalOnlyTestCase.test_super.<locals>.A.methodNr   r   r   r   r
   A  s    r   c                       s   e Zd Z fddZ  ZS )z,PositionalOnlyTestCase.test_super.<locals>.Cc                   s
   t   S r   )superr   r   	__class__r   r
   r     r   z3PositionalOnlyTestCase.test_super.<locals>.C.method)rt   ru   rv   r   __classcell__r   r   r   r
   C  s    r   )objectr2   r   )r   r   r   r   r   r
   
test_super  s   z!PositionalOnlyTestCase.test_superc                 C   s8   dd }dd t |D }| d| | d| d S )Nc                  S   s   dt t ufdd} d S )Nro   c                S   rH   r   r   r   r   r   r
   r'     r   zKPositionalOnlyTestCase.test_annotations_constant_fold.<locals>.g.<locals>.fr   r   r   r   r
   rG     s   z@PositionalOnlyTestCase.test_annotations_constant_fold.<locals>.gc                 S   s   g | ]}|j |jfqS r   )opnameZargvalr;   r   r   r
   
<listcomp>  s    zIPositionalOnlyTestCase.test_annotations_constant_fold.<locals>.<listcomp>)Z	UNARY_NOTN)ZIS_OPr   )disZget_instructionsZassertNotInZassertIn)r   rG   Zcodesr   r   r
   test_annotations_constant_fold  s   z5PositionalOnlyTestCase.test_annotations_constant_foldN)r   ) rt   ru   rv   r   r   r!   r5   rE   rT   rW   r\   r_   rb   rf   rg   ri   rk   rl   rp   rq   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   r      s<    

r   __main__ry   )r   r   ZunittestZtest.supportr   r   r   r   ZTestCaser   rt   mainr   r   r   r
   <module>   s    
   ,