o
    2g!                     @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z,m-Z- dZ.dZ/dZ0dZ1G dd de#Z2dS )zETest cases for AST merge (used for fine-grained incremental checking)    )annotationsN)build)BuildResult)CompileError)BuildSource)	UNBOUND_IMPORTED
ExpressionMypyFileNodeSymbolTableSymbolTableNodeTypeInfoTypeVarExprVar)Options)get_subexpressions)FineGrainedBuildManager)StrConv)test_temp_dir)DataDrivenTestCase	DataSuite)assert_string_arrays_equalnormalize_error_messagesparse_options)TypeTypeStrVisitor)IdMapper
short_typeSYMTABLEz	 TYPEINFOTYPESASTc                      s   e Zd ZdgZd8 fddZd9d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=d)d*Zd@d,d-ZdAd0d1ZdBd2d3ZdCd6d7Z  ZS )DASTMergeSuitez
merge.testreturnNonec                   sJ   t    tdt d| _| jjd usJ | jj| _t| jt d| _d S )NT)show_idsoptions)r%   )supersetupr   r   str_conv	id_mapperr   type_str_conv)self	__class__ K/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/test/testmerge.pyr'   +   s
   

zASTMergeSuite.setuptestcaser   c                 C  s\  |j }|drt}n|drt}n
|drt}nt}d|j}| ||}|d us1J d|j	j
  t|}g }|jrF||j tjtd}ttjtd| || |||j t|j	jd }	|d	 | |d|\}
}|| |||j |	D ]}t|trq||vsJ q|jrt|}t|j|d
|j  d|j! d d S )N	_symtable	_typeinfo_types
z3cases where CompileError occurred should not be runz	target.pyztarget.py.nexttargetz==>zInvalid output (z, line ))"nameendswithr   TYPEINFOr   r    joininputr   managerfscacheflushr   errorsextendospathr   shutilcopydumptest_modulesr   modulesappendbuild_increment
isinstancer   normalize_outputr   r   outputfileline)r+   r0   r7   kindmain_srcresultfine_grained_manageratarget_pathold_subexprnew_file	new_typesexprr.   r.   r/   run_case2   s@   




zASTMergeSuite.run_casesourcestrBuildResult | Nonec                 C  s   t ||dd}d|_d|_d|_d|_d|_d|_d|_tj	
td}|| j_|| j_t|ddd}|| W d    n1 sBw   Y  ztjt|d d g|td}W |S  tya   Y d S w )	N   )incremental_stepTmainwutf8)encoding)sourcesr%   alt_lib_path)r   incrementalfine_grained_incrementaluse_builtins_fixturesexport_typesshow_tracebackallow_empty_bodiesforce_uppercase_builtinsrA   rB   r:   r   r(   r%   r*   openwriter   r   r   )r+   rZ   r0   r%   	main_pathfrQ   r.   r.   r/   r   b   s0   zASTMergeSuite.buildr<   r   	module_idrB   'tuple[MypyFile, dict[Expression, Type]]c                 C  s<   |   |||fgg  |jj| }|j|  }||fS N)flush_cacheupdater<   rG   graphtype_map)r+   r<   rp   rB   modulerv   r.   r.   r/   rI   |   s
   zASTMergeSuite.build_incrementrO   rF   	list[str]c                   sr    fdd|j j D }|tkr| |S |tkr| |S |tkr(| |S |t	kr2| 
||S J d| )Nc                   s   i | ]\}}| v r||qS r.   r.   ).0r7   rM   rF   r.   r/   
<dictcomp>       z&ASTMergeSuite.dump.<locals>.<dictcomp>FzInvalid kind )r<   rG   itemsr    	dump_astsr9   dump_typeinfosr   dump_symbol_tablesr   
dump_types)r+   r<   rO   rF   rG   r.   rz   r/   rE      s   




zASTMergeSuite.dumprG   dict[str, MypyFile]c                 C  s4   g }t |D ]}|| | j}||  q|S rr   )sortedacceptr(   r@   
splitlines)r+   rG   rS   msr.   r.   r/   r~      s
   zASTMergeSuite.dump_astsc                 C  s.   g }t |D ]}|| ||| j q|S rr   )r   r@   dump_symbol_tablenamesr+   rG   rS   idr.   r.   r/   r      s   z ASTMergeSuite.dump_symbol_tablessymtabler   c              
   C  sJ   | dg}t |D ]}|drq
|d| d| ||   q
|S )N:__z    : )r   
startswithrH   format_symbol_table_node)r+   rp   r   rS   r7   r.   r.   r/   r      s   
"zASTMergeSuite.dump_symbol_tablenoder   c                 C  s   |j d u r|jtkrdS dS t|j tr(tt|j j d| j	|j  d}n	dt|j  d}t|j t
rQ|j jrQ|j jdsQ| |j j}|d| d7 }|S )	Nr   r#   <>z? (r6   ztyping.()r   rO   r   rJ   r
   r[   type__name__r)   r   r   fullnamer   format_type)r+   r   r   typestrr.   r.   r/   r      s    

(
z&ASTMergeSuite.format_symbol_table_nodec                 C  s,   g }t |D ]}|| || j q|S rr   )r   r@   dump_typeinfos_recursiver   r   r.   r.   r/   r      s   zASTMergeSuite.dump_typeinfosr   c                 C  sX   g }t | dd dD ]\}}t|jtr)|| |j || |jj q|S )Nc                 S  s   | d S )Nr   r.   )xr.   r.   r/   <lambda>   s    z8ASTMergeSuite.dump_typeinfos_recursive.<locals>.<lambda>key)	r   r}   rJ   r   r   r@   dump_typeinfor   r   )r+   r   rS   r7   r   r.   r.   r/   r      s   z&ASTMergeSuite.dump_typeinfos_recursiveinfor   c                 C  s(   |j dkrg S |j| j| jd}| S )Nz	enum.Enum)r(   r*   )r   rE   r(   r*   r   )r+   r   r   r.   r.   r/   r      s   
zASTMergeSuite.dump_typeinfoc                   s   g }t |D ]L}|jj |j| j}|d usJ  fddt|D rR|d|  t fdddD ]}| }|t| d|j d	|  q8q|S )	Nc                   s   i | ]}| v r| | qS r.   r.   )ry   r   )	all_typesr.   r/   r{      r|   z,ASTMergeSuite.dump_types.<locals>.<dictcomp>z## c                   s&   | j t| |  jjt|   fS rr   )rN   r   str_with_optionsr(   r%   r[   )n)r+   rv   r.   r/   r      s   z*ASTMergeSuite.dump_types.<locals>.<lambda>r   r   r   )
r   r<   r   ru   treer   rH   r   rN   r   )r+   rG   r<   rS   rp   r   rX   typr.   )r   r+   rv   r/   r      s$   

(zASTMergeSuite.dump_typesr   r   c                 C  s   | | jS rr   )r   r*   )r+   r   r.   r.   r/   r      s   zASTMergeSuite.format_type)r"   r#   )r0   r   r"   r#   )rZ   r[   r0   r   r"   r\   )r<   r   rp   r[   rB   r[   r"   rq   )r<   r   rO   r[   rF   rx   r"   rx   )rG   r   r"   rx   )rp   r[   r   r   r"   rx   )r   r   r"   r[   )r   r   r"   rx   )r   r   r"   rx   )rG   r   r<   r   r"   rx   )r   r   r"   r[   )r   
__module____qualname__filesr'   rY   r   rI   rE   r~   r   r   r   r   r   r   r   r   __classcell__r.   r.   r,   r/   r!   (   s     

0

	







r!   )3__doc__
__future__r   rA   rC   mypyr   
mypy.buildr   mypy.errorsr   mypy.modulefinderr   
mypy.nodesr   r   r	   r
   r   r   r   r   r   mypy.optionsr   mypy.server.subexprr   mypy.server.updater   mypy.strconvr   mypy.test.configr   mypy.test.datar   r   mypy.test.helpersr   r   r   
mypy.typesr   r   	mypy.utilr   r   r   r9   r   r    r!   r.   r.   r.   r/   <module>   s.    ,