
    hM(              	         d dl m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 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 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-m0Z0 d d&l-m1Z1 d d
l-mZ d d'l-m2Z2 d d(l-m3Z3 d d)l-m4Z4  e5ejl                  jo                  d*      D  cg c]  } ejq                  d+|       s e9|        c}       Z:e:d,k\  Z; ed-eeef   .      Z< G d/ d0      Z=dJd1Z>dKd2Z?dLd3Z@dLd4ZAdMd5ZBdMd6ZCdNd7ZDdNd8ZEdMd9ZFdNd:ZG	 	 	 	 	 	 dOd;ZHdPd<Z	 	 	 	 	 	 dQd=ZIdRd>ZJ	 	 	 	 	 	 	 	 	 	 dSd?ZKe	d@dA	 	 	 	 	 	 	 dTdB       ZLe		 	 	 	 	 	 	 	 dUdC       ZLddA	 	 	 	 	 	 	 dVdDZLdWdEZMdXdFZN	 	 	 	 	 	 dYdGZO	 	 	 	 	 	 dZdHZPd[dIZQyc c} w )\    )annotationsN)Any)Iterable)Iterator)List)Optional)overload)Tuple)Type)TypeVar)Union)version)format_type)CallExpr)ClassDef)CLASSDEF_NO_INFO)Context)
Expression)FuncDef)IfStmt)JsonDict)
MemberExpr)NameExpr)	Statement)SymbolTableNode)	TypeAlias)TypeInfo)Options)ClassDefContext)DynamicClassDefContext)SemanticAnalyzerPluginInterface)deserialize_and_fixup_type)map_type_from_supertype)CallableType)get_proper_type)Instance)NoneType)TypeVarType)UnboundType)	UnionType.z^\d+$)      	_TArgType)boundc                  ^    e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZe	 	 	 	 	 	 	 	 d	d       Zy)
SQLAlchemyAttributec                J    || _         || _        || _        || _        || _        y N)namelinecolumntypeinfo)selfr4   r5   r6   typr8   s         AD:\EasyAligner\venv\Lib\site-packages\sqlalchemy/ext/mypy/util.py__init__zSQLAlchemyAttribute.__init__?   s'     				    c                    | j                   sJ | j                  | j                  | j                  t	        | j                         dS )N)r4   r5   r6   r7   )r7   r4   r5   r6   serialize_type)r9   s    r;   	serializezSQLAlchemyAttribute.serializeM   s9    yyyIIIIkk"499-	
 	
r=   c                    t        | j                  t              syt        | j                  || j                        | _        y)zxExpands type vars in the context of a subtype when an attribute is
        inherited from a generic super type.
        N)
isinstancer7   r(   r#   r8   )r9   sub_types     r;   expand_typevar_from_subtypez/SQLAlchemyAttribute.expand_typevar_from_subtypeV   s-     $))[1+DIIxK	r=   c                n    |j                         }t        |j                  d      |      } | d||d|S )Nr7   )r:   r8    )copyr"   pop)clsr8   dataapir:   s        r;   deserializezSQLAlchemyAttribute.deserialize_   s9     yy{(&)93?.s...r=   N)r4   strr5   intr6   rN   r:   zOptional[Type]r8   r   returnNone)rO   r   )rC   r   rO   rP   )r8   r   rJ   r   rK   r!   rO   r1   )__name__
__module____qualname__r<   r@   rD   classmethodrL   rF   r=   r;   r1   r1   >   s      	
   

L // / -	/
 
/ /r=   r1   c                @    t        t        j                  d|             S )Nz	^__.+?__$)boolrematch)r4   s    r;   name_is_dunderrY   k   s    t,--r=   c                B    || j                   j                  di       |<   y N
sqlalchemymetadata
setdefault)r8   keyrJ   s      r;   _set_info_metadatara   o   s    6:DMM\2.s3r=   c                Z    | j                   j                  di       j                  |d       S r[   )r^   get)r8   r`   s     r;   _get_info_metadatard   s   s&    ==\2.223==r=   c                b    | j                   r#| j                   D ]  }t        ||      }||c S  y r3   )mrord   )r8   r`   baser^   s       r;   _get_info_mro_metadatarh   w   s3    xxHHD)$4H#  r=   c                <    | j                   j                  di        y r[   r]   r8   s    r;   establish_as_sqlalchemyrk      s    MM\2.r=   c                    t        | dd       y Nis_baseTra   rj   s    r;   set_is_baserp      s    tY-r=   c                "    t        | d      }|du S rm   rd   r8   rn   s     r;   get_is_basert      s     y1Gd?r=   c                "    t        | d      }|du S rm   )rh   rs   s     r;   has_declarative_baserv      s    $T95Gd?r=   c                    t        | dd       y N	has_tableTro   rj   s    r;   set_has_tablerz      s    t[$/r=   c                "    t        | d      }|du S rx   rr   rs   s     r;   get_has_tabler|      s     {3Gd?r=   c                    t        | d      }|y g }|D ];  }t        j                  | ||      }|j                  |        |j	                  |       = |S Nmapped_attributes)rd   r1   rL   rD   append)r8   rK   r   
attributesrJ   attrs         r;   get_mapped_attributesr      sh     3E!3  ,.J!"..tT3?((.$ "
 r=   c                <    t         rt        | |      S t        |       S r3   )mypy_14_mypy_format_type)typ_optionss     r;   r   r      s     w// &&r=   c           	     `    t        | d|D cg c]  }|j                          c}       y c c}w r~   )ra   r@   )r8   r   	attributes      r;   set_mapped_attributesr      s2     0:;
9			
; 	<s   +c                0    d|z  }| j                  ||      S )Nz[SQLAlchemy Mypy plugin] %s)fail)rK   msgctxs      r;   r   r      s    
'#
-C88Cr=   c                    | j                   j                  | j                   j                     j                  }||vr,| j                   j                  |   j                  |   }|||<   y y r3   )rK   modules
cur_mod_idnames)r   modulesymbol_nameasnamemodule_globals
lookup_syms         r;   
add_globalr      s_     WW__SWW%7%78>>N^#&)ggoof&=&C&C'

 ",v $r=   .)
expr_typesc                    y r3   rF   callexprr4   r   s      r;   get_callexpr_kwargr      s     +.r=   c                    y r3   rF   r   s      r;   r   r      s     r=   c                   	 | j                   j                  |      }| j                  |   }t	        |||nt
        t        f      r|S y # t        $ r Y y w xY wr3   )	arg_namesindex
ValueErrorargsrB   r   r   )r   r4   r   arg_idxkwargs        r;   r   r      sd    $$**40 MM'"EZ3z(H9M   s   A	 		AAc              #     K   | D ]q  }t        |t              r[t        |j                  d   t              r>|j                  d   j                  dk(  r"|j
                  d   j
                  E d {    n| s y 7 w)Nr   ztyping.TYPE_CHECKING)rB   r   exprr   fullnamebody)stmtsstmts     r;   flatten_typecheckingr      sd     tV$499Q<2		!%%)??yy|((((J  )s   A+A<-A:.A<c                6   t        | t        t        f      rt        | j                  t              rv| j                  j
                  r_t        | j                  j
                  t              r;t        | j                  j
                  j                        }t        |t              r|S y t        | j                  t              r2t        | j                  j                        }t        |t              r|S y t        | j                  t              r| j                  S y r3   )rB   r   r   noder   r7   r$   r%   ret_typer&   r   targetr   )calleer   target_types      r;   type_for_calleer     s    &:x01fkk7+{{Jv{{/?/?$N*6;;+;+;+D+DEh1#OY/)&++*<*<=K+x0""  X.;;r=   c                
   t        |t              s|S |j                  dk(  rCt        | t	        |j
                  D cg c]  }t        | |       c}t               gz               S | j                  |j                  |      }|vt        |t              rft        |j                  t              rL|j                  }t        ||j
                  D cg c]   }t        |t              rt        | |      n|" c}      S |S c c}w c c}w )zTake the UnboundType that we seem to get as the ret_type from a FuncDef
    and convert it into an Instance/TypeInfo kind of structure that seems
    to work as the left-hand type of an AssignmentStatement.

    r   )rB   r)   r4   unbound_to_instancer*   r   r'   lookup_qualifiedr   r   r   r&   )rK   r:   typ_argr   
bound_typeargs         r;   r   r     s    c;'

 xx: #BE((K(w$S'2(K:,
 	
 #.D 	t_-tyy(+YY
 88 $C "#{3 (S1 $

 
	
 
5 L s   C;%D 
c                    | j                   t        u rI|j                  | j                  |       }|y |rt	        |j
                  t              sJ |j
                  S | j                   S r3   )r8   r   r   r4   rB   r   r   )rI   rK   syms      r;   info_for_clsr   H  sW     xx##""388S1;z#((H555xx88Or=   c                   	 | j                         S # t        $ r Y nw xY wt        | d      r1t        d | j                  D              | _        | j                         S t        | d      r| j                         } | j                         S )Nr   c              3  X   K   | ]"  }t        |d       r|j                         n| $ yw)resolve_string_annotationN)hasattrr   ).0as     r;   	<genexpr>z!serialize_type.<locals>.<genexpr>[  s:      
  19: ++- s   (*r   )r@   	Exceptionr   tupler   r   )r:   s    r;   r?   r?   U  s    }} sF 
 XX
 
 ==? 
1	2++-==?s    	)r4   rM   rO   rV   )r8   r   r`   rM   rJ   r   rO   rP   )r8   r   r`   rM   rO   Optional[Any])r8   r   rO   rP   )r8   r   rO   rV   )r8   r   rK   r!   rO   z#Optional[List[SQLAlchemyAttribute]])r   r   r   r   rO   rM   )r8   r   r   zList[SQLAlchemyAttribute]rO   rP   )rK   r!   r   rM   r   r   rO   rP   )
r   z.Union[ClassDefContext, DynamicClassDefContext]r   rM   r   rM   r   rM   rO   rP   )r   r   r4   rM   r   rP   rO   z#Optional[Union[CallExpr, NameExpr]])r   r   r4   rM   r   z!Tuple[TypingType[_TArgType], ...]rO   zOptional[_TArgType])r   r   r4   rM   r   z%Optional[Tuple[TypingType[Any], ...]]rO   r   )r   zIterable[Statement]rO   zIterator[Statement])r   r   rO   z#Optional[Union[Instance, TypeInfo]])rK   r!   r:   r   rO   r   )rI   r   rK   r!   rO   zOptional[TypeInfo])r:   r   rO   zUnion[str, JsonDict])R
__future__r   rW   typingr   r   r   r   r   r	   r
   r   
TypingTyper   r   mypyr   mypy.messagesr   r   
mypy.nodesr   r   r   r   r   r   r   r   r   r   r   r   r   r   mypy.optionsr   mypy.pluginr   r    r!   mypy.plugins.commonr"   mypy.typeopsr#   
mypy.typesr$   r%   r&   r'   r(   r)   r*   r   __version__splitrX   rN   _versr   r.   r1   rY   ra   rd   rh   rk   rp   rt   rv   rz   r|   r   r   r   r   r   r   r   r   r   r?   )xs   0r;   <module>r      s   # 	        %    :   '  !    !    &      ' . 7 : 0 # &    " "  ((..s3M3rxx!7LSV3M	 6/ KuXx-?'@A	*/ */Z.;>/.

0

8(&'
 9	
,	7,, , 	,
 
,  
9<..!.26.(. 
.
 

 2	
  
 9=	
 6	
 (	&/	(//3/	/d
	
7

 Ns   H2
H