o
    ØÝ2g 6  ã                   @  sØ   d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZ ddlmZmZ ddlmZ dd	lmZmZmZmZ G d
d„ deƒZddd„Zddd„ZG dd„ deƒZG dd„ deƒZ dS )z/Test cases for type inference helper functions.é    )Úannotations)Úmap_actuals_to_formals)ÚDisjointDictÚgroup_comparison_operands)ÚKey)Ú	ARG_NAMEDÚARG_OPTÚARG_POSÚARG_STARÚ	ARG_STAR2ÚArgKindÚNameExpr)ÚSuiteÚassert_equal)ÚTypeFixture)ÚAnyTypeÚ	TupleTypeÚTypeÚ	TypeOfAnyc                   @  sÄ   e Zd ZdZd6dd„Zd6dd„Zd6dd	„Zd6d
d„Zd6dd„Zd6dd„Z	d6dd„Z
d7dd„Zd6dd„Zd6dd„Zd6dd„Zd6dd„Zd6dd „Zd6d!d"„Zd6d#d$„Zd6d%d&„Zd8d-d.„Zd9d3d4„Zd5S ):ÚMapActualsToFormalsSuitez-Test cases for argmap.map_actuals_to_formals.ÚreturnÚNonec                 C  s   |   g g g ¡ d S ©N)Ú
assert_map©Úself© r   úK/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/test/testinfer.pyÚ
test_basic   ó   z#MapActualsToFormalsSuite.test_basicc                 C  s8   |   tgtgdgg¡ |   ttgttgdgdgg¡ d S ©Nr   é   ©r   r	   r   r   r   r   Útest_positional_only   s   "z-MapActualsToFormalsSuite.test_positional_onlyc                 C  sF   |   g tgg g¡ |   tgtgdgg¡ |   tgttgdgg g¡ d S ©Nr   )r   r   r	   r   r   r   r   Útest_optional   ó   z&MapActualsToFormalsSuite.test_optionalc                 C  sF   |   g tgg g¡ |   tgtgdgg¡ |   ttgtgddgg¡ d S r    )r   r
   r	   r   r   r   r   Útest_callee_star   r&   z)MapActualsToFormalsSuite.test_callee_starc                 C  sl   |   tgtgdgg¡ |   ttgtgddgg¡ |   tgttgdgdgg¡ |   tgttgdgdgg¡ d S r    )r   r
   r	   r   r   r   r   r   Útest_caller_star"   s    z)MapActualsToFormalsSuite.test_caller_starc                 C  s:   |   tgg g ¡ |   tgg g ¡ |   tgtgdgg¡ d S r$   )r   r	   r
   r   r   r   r   Útest_too_many_caller_args(   s   z2MapActualsToFormalsSuite.test_too_many_caller_argsc              	   C  s|   t tjƒ}|  tgtgdgg|  |¡¡ |  tgttgdgdgg|  ||¡¡ |  tgtttgdgdgg g|  ||¡¡ d S r$   )r   r   Úspecial_formÚassert_vararg_mapr
   r	   Ú
make_tupler   )r   Úany_typer   r   r   Útest_tuple_star-   s   
ÿ
üz(MapActualsToFormalsSuite.test_tuple_starÚargsr   r   c                 G  s   t t|ƒtƒ jƒS r   )r   Úlistr   Ú	std_tuple)r   r/   r   r   r   r,   :   r   z#MapActualsToFormalsSuite.make_tuplec                 C  sD   |   dgtdfgdgg¡ |   ddgtdftdfgdgdgg¡ d S )NÚxr   Úyr!   r"   r   r   r   r   Útest_named_args=   s   *z(MapActualsToFormalsSuite.test_named_argsc                 C  s.   |   dgtdftdftdfgg dgg g¡ d S )Nr3   r2   Úzr   ©r   r   r   r   r   r   Útest_some_named_argsA   ó   .z-MapActualsToFormalsSuite.test_some_named_argsc                 C  s   |   dgtdfgg g¡ d S )Nr3   r2   r6   r   r   r   r   Útest_missing_named_argD   s   z/MapActualsToFormalsSuite.test_missing_named_argc                 C  s"   |   ddgtdfgddgg¡ d S ©Nr2   r   r!   r6   r   r   r   r   Útest_duplicate_named_argG   s   "z1MapActualsToFormalsSuite.test_duplicate_named_argc                 C  sD   |   tgttdfgdgg g¡ |   tdgttdfgdgdgg¡ d S r:   )r   r
   r   r   r   r   r   Útest_varargs_and_bare_asteriskJ   s   &z7MapActualsToFormalsSuite.test_varargs_and_bare_asteriskc                 C  sx   |   dgtgdgg¡ |   dtgtgddgg¡ |   dtgtdftgdgdgg¡ |   ttgtdftgdgdgg¡ d S r:   )r   r   r	   r   r   r   r   Útest_keyword_varargsN   s   "&z-MapActualsToFormalsSuite.test_keyword_varargsc                 C  s.   |   ttgtdftdfgddgddgg¡ d S )Nr2   r3   r   r!   ©r   r
   r   r	   r   r   r   r   Útest_both_kinds_of_varargsT   r8   z3MapActualsToFormalsSuite.test_both_kinds_of_varargsc                 C  sr   |   tgttgdgg g¡ |   ttgttgdgdgg¡ |   tgtdftgdgdgg¡ |   tgtgdgg¡ d S )Nr   r!   r2   r>   r   r   r   r   Útest_special_casesW   s    z+MapActualsToFormalsSuite.test_special_casesÚcaller_kinds_úlist[ArgKind | str]Úcallee_kinds_ú#list[ArgKind | tuple[ArgKind, str]]Úexpectedúlist[list[int]]c           	      C  s:   t |ƒ\}}t|ƒ\}}t||||dd„ ƒ}t||ƒ d S )Nc                 S  s
   t tjƒS r   )r   r   r*   ©Úir   r   r   Ú<lambda>j   s   
 z5MapActualsToFormalsSuite.assert_map.<locals>.<lambda>)Úexpand_caller_kindsÚexpand_callee_kindsr   r   )	r   rA   rC   rE   Úcaller_kindsÚcaller_namesÚcallee_kindsÚcallee_namesÚresultr   r   r   r   ]   s   ûz#MapActualsToFormalsSuite.assert_maprL   úlist[ArgKind]rN   Úvararg_typec                   s&   t |g |g ‡ fdd„ƒ}t||ƒ d S )Nc                   s   ˆ S r   r   rG   ©rR   r   r   rI   u   s    z<MapActualsToFormalsSuite.assert_vararg_map.<locals>.<lambda>)r   r   )r   rL   rN   rE   rR   rP   r   rS   r   r+   n   s   z*MapActualsToFormalsSuite.assert_vararg_mapN©r   r   )r/   r   r   r   )rA   rB   rC   rD   rE   rF   r   r   )
rL   rQ   rN   rQ   rE   rF   rR   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r#   r%   r'   r(   r)   r.   r,   r4   r7   r9   r;   r<   r=   r?   r@   r   r+   r   r   r   r   r      s(    
















r   Úkinds_or_namesrB   r   ú&tuple[list[ArgKind], list[str | None]]c                 C  sN   g }g }| D ]}t |tƒr| t¡ | |¡ q| |¡ | d ¡ q||fS r   )Ú
isinstanceÚstrÚappendr   )rY   ÚkindsÚnamesÚkr   r   r   rJ   y   s   


rJ   Úkinds_and_namesrD   c                 C  sV   g }g }| D ] }t |tƒr| |d ¡ | |d ¡ q| |¡ | d ¡ q||fS r    )r[   Útupler]   )ra   r^   r_   Úvr   r   r   rK   ˆ   s   

rK   c                   @  sB   e Zd ZdZddd„Zddd„Zdd	d
„Zddd„Zddd„ZdS )ÚOperandDisjointDictSuitezTTest cases for checker.DisjointDict, which is used for type inference with operands.r   úDisjointDict[int, str]c                 C  s   t ƒ S r   )r   r   r   r   r   Únewš   s   zOperandDisjointDictSuite.newr   c                 C  sv   |   ¡ }| ddhdh¡ | h d£dh¡ | h d£dh¡ |  | ¡ ddhdhfh d£dhfh d£dhfg¡ d S )Nr   r!   Úgroup1¾   é   é   é   Úgroup2>   é   é   é   Úgroup3©rf   Úadd_mappingÚassertEqualÚitems©r   Údr   r   r   Útest_independent_maps   s   ,ÿz.OperandDisjointDictSuite.test_independent_mapsc                 C  s¤   |   ¡ }| ddhdh¡ | ddhdh¡ | ddhdh¡ | d	dhd
h¡ | d	dhdh¡ | ddhdh¡ |  | ¡ h d£h d£fh d£ddhfg¡ d S )Nr   r!   rg   ri   rl   rj   rk   rp   rm   Úgroup4rn   Úgroup5ro   Úgroup6>   r   r!   ri   rm   rn   >   rg   rl   rx   ry   >   rj   rk   ro   rq   ru   r   r   r   Útest_partial_merging§   s   þþz-OperandDisjointDictSuite.test_partial_mergingc                 C  s–   |   ¡ }| h d£dh¡ | h d£dh¡ | h d£dh¡ | h d£dh¡ | h d	£d
h¡ | ddhdh¡ |  | ¡ h d£h d£fg¡ d S )N¾   r   r!   ri   Úarh   Úb>   é
   é   é   Úc>   é   é   é   rv   >   r   r„   é   Úer   r   Úf>   r   r!   ri   rj   rk   r   r€   r   rƒ   r„   r…   r†   >   r}   r~   r‚   rv   r‡   rˆ   rq   ru   r   r   r   Útest_full_merging¸   s   þz*OperandDisjointDictSuite.test_full_mergingc                 C  s„   |   ¡ }| h d£dh¡ | h d£dh¡ | h d£dh¡ | h d£dh¡ | h d£d	h¡ |  | ¡ h d
£h d£fg¡ d S )Nr|   r}   >   rj   rk   rm   r~   >   r!   ri   rk   rm   r‚   >   r!   ri   rk   rm   rn   rv   r‡   >   r   r!   ri   rj   rk   rm   rn   >   r}   r~   r‚   rv   r‡   rq   ru   r   r   r   Ú!test_merge_with_multiple_overlapsÆ   s   "z:OperandDisjointDictSuite.test_merge_with_multiple_overlapsN)r   re   rT   )	rU   rV   rW   rX   rf   rw   r{   r‰   rŠ   r   r   r   r   rd   —   s    




rd   c                   @  sV   e Zd ZdZddd„Zdd	d
„Zddd„Zddd„Zddd„Zddd„Z	ddd„Z
dS )ÚOperandComparisonGroupingSuitez1Test cases for checker.group_comparison_operands.Úassignable_operandsúdict[int, NameExpr]r   údict[int, Key]c                 C  s(   i }|  ¡ D ]\}}d|jf||< q|S )NÚFakeExpr)rt   Úname)r   rŒ   ÚoutputÚindexÚexprr   r   r   Úliteral_keymapÔ   s   z-OperandComparisonGroupingSuite.literal_keymapr   c           
   
   C  sd  t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}d||fd||fd||fd||fg}|  i ¡}|  |||||dœ¡}||fD ]u}	|  t||	tƒ ƒdd	d
gfdd
dgfdddgfdddgfg¡ |  t||	dhƒdg d¢fdddgfdddgfg¡ |  t||	dhƒdd	d
gfdd
dgfdddgfdddgfg¡ |  t||	ddhƒdg d¢fdddgfdddgfg¡ q:d S )NÚx0Úx1Úx2Úx3Úx4ú==ú<©r   r!   ri   rj   rk   r   r!   ri   rj   rk   ©r   r!   ri   )r   r”   rs   r   Úset)
r   r•   r–   r—   r˜   r™   Úbasic_inputÚnone_assignableÚall_assignableÚ
assignabler   r   r   Útest_basic_casesÚ   s4   $
*þ þ*þ þóz/OperandComparisonGroupingSuite.test_basic_casesc              
   C  s„  t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}|  td||fd||fd||fd||fg|  i ¡ddhƒdg d	¢fdg d
¢fg¡ |  td||fd||fd||fd||fg|  i ¡ddhƒdg d¢fg¡ |  td||fd||fd||fd||fg|  i ¡ddhƒdddgfdg d¢fg¡ |  td||fd||fd||fd||fd||fg|  i ¡ddhƒdg d	¢fdddgfdg d¢fg¡ d S )Nr•   r–   r—   r˜   r™   Úx5rš   Úisr   ©ri   rj   rk   rœ   r   r!   ©r!   ri   rj   rk   r›   ri   rj   ©rj   rk   rm   ©r   rs   r   r”   )r   r•   r–   r—   r˜   r™   r¤   r   r   r   Útest_multiple_groupsú   sL   "ýú"ýú"ýú*ý úz3OperandComparisonGroupingSuite.test_multiple_groupsc           	      C  s2  t dƒ}t dƒ}t dƒ}t dƒ}t dƒ}dg d¢fdd	d
gfdg d¢fg}dg d¢fdd	d
gfg}d||fd||fd||fd||fd||fg}|  t||  ||||||dœ¡dhƒ|d¡ |  t||  ||||dœ¡dhƒ|d¡ |  t||  ||||dœ¡dhƒ|d¡ |  t||  ||dœ¡dhƒ|d¡ d S )Nr•   r–   r—   r˜   r™   rš   r   r›   ri   rj   r¨   )r   r!   ri   rj   rk   rm   z/All vars are assignable, everything is combinedr§   z#x0 is unassignable, so no combining)r   r!   rj   rm   z3Some vars are unassignable but x0 is, so we combine)r   rm   z2All vars are unassignable but x0 is, so we combiner©   )	r   r•   r–   r—   r˜   r™   Únothing_combinedÚeverything_combinedÚ
two_groupsr   r   r   Útest_multiple_groups_coalescing#  sN   "ûÿûÿûÿûýz>OperandComparisonGroupingSuite.test_multiple_groups_coalescingc                 C  sŒ   t dƒ}t dƒ}t dƒ}t dƒ}d||fd||fd||fd||fg}|  |||||dœ¡}|  t||ddhƒdg d¢fdg d	¢fgd
¡ d S )Nr•   r–   r—   r˜   rš   r¥   rœ   r   r¦   z)Different operators can never be combined)r   r”   rs   r   )r   r•   r–   r—   r˜   ÚgroupsÚkeymapr   r   r   Ú(test_multiple_groups_different_operatorsP  s   $ýzGOperandComparisonGroupingSuite.test_multiple_groups_different_operatorsc           
      C  sŠ   t dƒ}t dƒ}d||fg}dddgfg}i d|id|i||dœg}tƒ dhdhg}|D ]}|D ]}|  |¡}	|  t||	|ƒ|¡ q0q,d S )Nr•   r–   rš   r   r!   )r   r!   r¥   )r   rž   r”   rs   r   )
r   r•   r–   Úsingle_comparisonÚexpected_outputÚassignable_combinationsÚto_group_byÚcomboÚ	operatorsr°   r   r   r   Útest_single_pair^  s   

þþÿz/OperandComparisonGroupingSuite.test_single_pairc                 C  s0   |   tg i tƒ ƒg ¡ |   tg i dhƒg ¡ d S )Nrš   )rs   r   rž   r   r   r   r   Útest_empty_pair_listp  s   z3OperandComparisonGroupingSuite.test_empty_pair_listN)rŒ   r   r   rŽ   rT   )rU   rV   rW   rX   r”   r£   rª   r®   r±   r¸   r¹   r   r   r   r   r‹   Ñ   s    


 
)
-
r‹   N)rY   rB   r   rZ   )ra   rD   r   rZ   )!rX   Ú
__future__r   Úmypy.argmapr   Úmypy.checkerr   r   Úmypy.literalsr   Ú
mypy.nodesr   r   r	   r
   r   r   r   Úmypy.test.helpersr   r   Úmypy.test.typefixturer   Ú
mypy.typesr   r   r   r   r   rJ   rK   rd   r‹   r   r   r   r   Ú<module>   s    $
k
: