o
    2g                     @  st   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ddZ
G dd deZ	ddddZdddZdS )    )annotations)Callable)TypeInfo)Instance)
type_stateNinfor   obj_typeCallable[[], Instance] | NonereturnNonec                 C  sF   t | |}|sJ d|  || _tdd | jD | _t|  dS )zbCalculate and set mro (method resolution order).

    Raise MroError if cannot determine mro.
    z#Could not produce a MRO at all for c                 s  s    | ]}|j V  qd S N)fallback_to_any).0baseinfo r   @/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/mro.py	<genexpr>   s    z calculate_mro.<locals>.<genexpr>N)linearize_hierarchymroanyr   r   reset_all_subtype_caches_for)r   r   r   r   r   r   calculate_mro
   s
   
r   c                   @  s   e Zd ZdZdS )MroErrorz<Raised if a consistent mro cannot be determined for a class.N)__name__
__module____qualname____doc__r   r   r   r   r      s    r   list[TypeInfo]c                 C  s   | j r| j S |  }|s| jdkr|d ur| jg}g }|D ]}|d us/J d| j d| |t|| q|| | gt| S )Nzbuiltins.objectzCannot linearize bases for  )r   direct_base_classesfullnametypeappendr   merge)r   r   bases	lin_basesbaser   r   r   r      s   

r   seqslist[list[TypeInfo]]c                   s   dd | D } g }	 dd | D } | s|S | D ]}|d   fdd| D s( nqt  |  | D ]}|d  u r>|d= q3q
)Nc                 S  s   g | ]}|  qS r   )copyr   sr   r   r   
<listcomp>/       zmerge.<locals>.<listcomp>Tc                 S  s   g | ]}|r|qS r   r   r*   r   r   r   r,   2   r-   r   c                   s    g | ]} |d d v r|qS )   Nr   r*   headr   r   r,   7   s     )r   r"   )r'   resultseqr+   r   r/   r   r#   .   s$   
r#   r   )r   r   r   r	   r
   r   )r   r   r   r	   r
   r   )r'   r(   r
   r   )
__future__r   typingr   
mypy.nodesr   
mypy.typesr   mypy.typestater   r   	Exceptionr   r   r#   r   r   r   r   <module>   s    