o
    2g                     @  s  U 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m	Z	m
Z
 eejZded< ee jZded< eejZded	< ejejejeeefZded
< h dZded< eeeeedehZded< eeee hZ!ded< ej"hZ#ded< d(ddZ$d)ddZ%d)ddZ&d*dd Z'd+d&d'Z(dS ),z.Find all objects reachable from a root object.    )annotationsN)Iterable)FinalIteratorMappingr   method_descriptor_typemethod_wrapper_typewrapper_descriptor_typeFUNCTION_TYPES>   __doc____dict____name__	__class__ATTR_BLACKLISTATOMIC_TYPE_BLACKLISTCOLLECTION_TYPE_BLACKLISTTYPE_BLACKLISToobjectattrstrreturnboolc                 C  s   t tt| |d tS N)
isinstancegetattrtypeproperty)r   r    r   L/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/server/objgraph.py
isproperty#   s   r    Iterator[tuple[object, object]]c              	   c  s    dt t| dv rd S t| tvrBt| D ]+}z |tvr7t| |r7t| |s7t | |}t|tvr7||fV  W q tyA   Y qw t	| t
rP|  E d H  d S t	| trht	| tsjt| D ]\}}||fV  q^d S d S d S )N__getattribute__r   )r   r   r   dirr   hasattrr    r   AssertionErrorr   r   itemsr   r   	enumerate)r   r   eir   r   r   get_edge_candidates'   s*   


r*   c                 c  s    t | D ]?\}}t|tr9t|dr|df|jfV  t|dr8|j}|| ur8|t| ur8t|dr8|j|fV  qt|tvrD||fV  qd S )N__closure____self__)r*   r   r
   r$   r+   r,   r   r   )r   sr(   ser   r   r   	get_edges;   s   



r/   root7tuple[dict[int, object], dict[int, tuple[int, object]]]c                 C  sx   i }t | | i}| g}|r8| }t|D ] \}}t ||v r qt ||f|t |< ||t |< || q|s||fS r   )idpopr/   append)r0   parentsseenworklistr   r-   r(   r   r   r   get_reachable_graphL   s   	r8   r6   dict[int, object]r5   dict[int, tuple[int, object]]list[tuple[object, object]]c                 C  sN   g }t | |v r!|t |  \}}|| } ||| f t | |v s|  |S r   )r2   r4   reverse)r   r6   r5   pathpidr   r   r   r   get_path\   s   r?   )r   r   r   r   r   r   )r   r   r   r!   )r0   r   r   r1   )r   r   r6   r9   r5   r:   r   r;   ))r   
__future__r   typesweakrefcollections.abcr   typingr   r   r   r   r   __dir__r   __annotations____ne__r   r	   BuiltinFunctionTypeFunctionType
MethodTyper
   r   r   intfloatr   r   listsetdicttupler   ReferenceTyper   r    r*   r/   r8   r?   r   r   r   r   <module>   s2    	



