o
    2g
                     @  sn   U d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZmZ dZded< dddZdddZdS )z*Check for duplicate AST nodes after merge.    )annotations)Final)	DecoratorFakeInfoFuncDef
SymbolNodeVar)get_pathget_reachable_graphFr   DUMP_MISMATCH_NODESoobjectreturnNonec                 C  s\  t | \}}t| }dd |D }i }|D ]}t|trq|j}|du r'qt|ttfr/qt|tr8|j	r8q||vrB|||j< q||| }}	t
|t
|	urRqt|||}
t|	||}||v rtdt
|jd|d tdt|t|
f  tdt|	t|f  tr||v rtd	 tt|| td	 tt|	|	 |j|vsJ qdS )
zFail if there are two AST nodes with the same fullname reachable from 'o'.

    Raise AssertionError on failure and print some debugging output.
    c                 S  s   g | ]	}t |tr|qS  )
isinstancer   ).0xr   r   N/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/server/mergecheck.py
<listcomp>   s    z%check_consistency.<locals>.<listcomp>Nz
Duplicate z nodes with fullname z found:z
[1] %d: %sz
[2] %d: %sz---)r
   listvaluesr   r   fullnamer   r   r   is_overloadtyper	   print__name__idpath_to_strr   )r   seenparents	reachablesymsmsymfnsym1sym2path1path2r   r   r   check_consistency   sB   

r*   pathlist[tuple[object, object]]strc              	   C  s   d}| D ]D\}}t |j}|dv r|dt| d7 }qt|tr1|d| d| d|j d7 }q|d	v r=|d| 7 }q|d| d| d7 }q|S )
Nz<root>)dicttupleSymbolTabler   [].(:))BuildManagerFineGrainedBuildManager)r   r   reprr   r   name)r+   resultattrobjtr   r   r   r   D   s   

 r   N)r   r   r   r   )r+   r,   r   r-   )__doc__
__future__r   typingr   
mypy.nodesr   r   r   r   r   mypy.server.objgraphr	   r
   r   __annotations__r*   r   r   r   r   r   <module>   s    
6