o
    i                     @   s6  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 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 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 edd dD ZeddhZdedefddZdeddfddZG dd deZdedeje fd d!ZdS )"    N)expr_to_unanalyzed_type)AssignmentStmt)CallExpr)ClassDef)
MemberExpr)NameExpr)StrExpr)Var)ClassDefContext)MethodContext)Plugin)make_simplified_union)FunctionLike)Instance)
ProperType)Typec                 C   s   h | ]}d | qS )zenvier.env.Env.%s ).0mr   r   ?/home/ubuntu/.local/lib/python3.10/site-packages/envier/mypy.py	<setcomp>   s    r   )vdvarderz	envier.Enz
envier.Envctxreturnc                 C   sV   | j d d }t|trt| jd d | jjS t|ts!J |tdd |j	D S )Nr   c                 S      h | ]}|j qS r   )ret_typer   _r   r   r   r   #       z(_envier_attr_callback.<locals>.<setcomp>)
	arg_types
isinstancer   r   argsapioptionsr   r   items)r   arg_typer   r   r   _envier_attr_callback   s
   
r)   c                 C   s@  | j jjD ]}t|trR|j}t|jdks*t|tr*t	
tt	
t|jjjtvr+q|j\}t|tr:t|jts>J || jt|jd | jj|j_d|_qt|trdd |jD t@ rd|jjv rdd |jjD D ]}dd	d |jD v r~ nqp d S t|jtsJ |j| j jj|j | j jj|jj!< qd S )
N   r   Fc                 S   r   r   )fullnamer   r   r   r   r   A   s    z._envier_base_class_callback.<locals>.<setcomp>__item__c                 s   s    | ]
}t |tr|V  qd S N)r#   r   r   r   r   r   	<genexpr>D   s    z._envier_base_class_callback.<locals>.<genexpr>c                 S   r   r   )namer   r   r   r   r   E   r!   )"clsdefsbodyr#   r   rvaluelenlvaluesr   tcastr   r   calleeexprr+   _envier_base_classesnoder	   r%   	anal_typer   r$   r&   typeis_inferred_defr   base_type_exprsinfonamesr   popr/   value)r   stmtdeclattrsr   r   r   _envier_base_class_callback&   s@   

 rH   c                   @   sT   e Zd Zdedejejegef  fddZ	dedejeje
gdf  fddZdS )EnvierPluginr+   r   c                 C      |t v rtS d S r-   )_envier_attr_makersr)   selfr+   r   r   r   get_method_hookR   s   zEnvierPlugin.get_method_hookNc                 C   rJ   r-   )r:   rH   rL   r   r   r   get_base_class_hook]   s   z EnvierPlugin.get_base_class_hook)__name__
__module____qualname__strr6   OptionalCallabler   r   rN   r
   rO   r   r   r   r   rI   Q   s    
rI   versionc                 C   s   t S r-   )rI   )rV   r   r   r   pluginh   s   rW   )typingr6   mypy.exprtotyper   
mypy.nodesr   r   r   r   r   r   r	   mypy.pluginr
   r   r   mypy.typeopsr   
mypy.typesr   r   r   r   	frozensetrK   r:   r)   rH   rI   rS   rW   r   r   r   r   <module>   s2    
+