o
    E6d"&                     @  s,  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 e5d*d+ ej67d,D Z8e8d-kZ9ed.eeef d/Z:G d0d1 d1Z;dd6d7Z<dd>d?Z=ddAdBZ>ddCdDZ?ddEdFZ@ddGdHZAddIdJZBddKdLZCddMdNZDddOdPZEddTdUZFddZd[Zdd^d_ZGddcddZHddidjZIe	dkdlddqdrZJe	ddudrZJddlddwdrZJdd{d|ZKdddZLdddZMdddZNdS )    )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)	UnionTypec                 C  s    g | ]}t d |rt|qS )z^\d+$)rematchint).0x r/   oC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\sqlalchemy/ext/mypy/util.py
<listcomp>6   s     r1   .)      	_TArgType)boundc                   @  s8   e Zd ZdddZdddZdddZedddZdS )SQLAlchemyAttributenamestrliner,   columntypOptional[Type]infor   returnNonec                 C  s"   || _ || _|| _|| _|| _d S N)r8   r:   r;   typer>   )selfr8   r:   r;   r<   r>   r/   r/   r0   __init__?   s
   
zSQLAlchemyAttribute.__init__r   c                 C  s$   | j sJ | j| j| j| j  dS )N)r8   r:   r;   rB   )rB   r8   r:   r;   	serialize)rC   r/   r/   r0   rE   M   s   
zSQLAlchemyAttribute.serializesub_typec                 C  s&   t | jtsdS t| j|| j| _dS )zxExpands type vars in the context of a subtype when an attribute is
        inherited from a generic super type.
        N)
isinstancerB   r'   r"   r>   )rC   rF   r/   r/   r0   expand_typevar_from_subtypeV   s   z/SQLAlchemyAttribute.expand_typevar_from_subtypedataapir    c                 C  s,   |  }t|d|}| d||d|S )NrB   )r<   r>   r/   )copyr!   pop)clsr>   rI   rJ   r<   r/   r/   r0   deserialize_   s   zSQLAlchemyAttribute.deserializeN)r8   r9   r:   r,   r;   r,   r<   r=   r>   r   r?   r@   )r?   r   )rF   r   r?   r@   )r>   r   rI   r   rJ   r    r?   r7   )__name__
__module____qualname__rD   rE   rH   classmethodrN   r/   r/   r/   r0   r7   >   s    


		r7   r8   r9   r?   boolc                 C  s   t td| S )Nz	^__.+?__$)rS   r*   r+   )r8   r/   r/   r0   name_is_dunderk      rT   r>   r   keyrI   r   r@   c                 C  s   || j di |< d S NZ
sqlalchemymetadata
setdefault)r>   rV   rI   r/   r/   r0   _set_info_metadatao      r[   Optional[Any]c                 C  s   | j di |d S rW   )rY   get)r>   rV   r/   r/   r0   _get_info_metadatas   r\   r_   c                 C  s0   | j r| j D ]}t||}|d ur|  S qd S rA   )mror_   )r>   rV   baserY   r/   r/   r0   _get_info_mro_metadataw   s   

rb   c                 C  s   | j di  d S rW   rX   r>   r/   r/   r0   establish_as_sqlalchemy   s   rd   c                 C     t | dd d S Nis_baseTr[   rc   r/   r/   r0   set_is_base   rU   ri   c                 C     t | d}|du S rf   r_   r>   rg   r/   r/   r0   get_is_base      
rm   c                 C  rj   rf   )rb   rl   r/   r/   r0   has_declarative_base   rn   ro   c                 C  re   NZ	has_tableTrh   rc   r/   r/   r0   set_has_table   rU   rq   c                 C  rj   rp   rk   rl   r/   r/   r0   get_has_table   rn   rr   rJ   r    #Optional[List[SQLAlchemyAttribute]]c                 C  sJ   t | d}|d u rd S g }|D ]}t| ||}||  || q|S )Nmapped_attributes)r_   r7   rN   rH   append)r>   rJ   rt   
attributesrI   attrr/   r/   r0   get_mapped_attributes   s   
rx   typ_r
   optionsr   c                 C  s   t rt| |S t| S rA   )mypy_14_mypy_format_type)ry   rz   r/   r/   r0   r      s   
r   rv   List[SQLAlchemyAttribute]c                 C  s   t | ddd |D  d S )Nrt   c                 S  s   g | ]}|  qS r/   )rE   )r-   	attributer/   r/   r0   r1      s    z)set_mapped_attributes.<locals>.<listcomp>rh   )r>   rv   r/   r/   r0   set_mapped_attributes   s
   r   msgctxr   c                 C  s   d| }|  ||S )Nz[SQLAlchemy Mypy plugin] %s)fail)rJ   r   r   r/   r/   r0   r      s   r   .Union[ClassDefContext, DynamicClassDefContext]modulesymbol_nameasnamec                 C  s<   | j j| j j j}||vr| j j| j| }|||< d S d S rA   )rJ   modulesZ
cur_mod_idnames)r   r   r   r   module_globalsZ
lookup_symr/   r/   r0   
add_global   s   r   .)
expr_typescallexprr   r   #Optional[Union[CallExpr, NameExpr]]c                C     d S rA   r/   r   r8   r   r/   r/   r0   get_callexpr_kwarg   s   r   !Tuple[TypingType[_TArgType], ...]Optional[_TArgType]c                C  r   rA   r/   r   r/   r/   r0   r      s   %Optional[Tuple[TypingType[Any], ...]]c                C  sR   z| j |}W n
 ty   Y d S w | j| }t||d ur |nttfr'|S d S rA   )	arg_namesindex
ValueErrorargsrG   r   r   )r   r8   r   Zarg_idxkwargr/   r/   r0   r      s   
stmtsIterable[Statement]Iterator[Statement]c                 c  sT    | D ]$}t |tr$t |jd tr$|jd jdkr$|jd jE d H  q|V  qd S )Nr   ztyping.TYPE_CHECKING)rG   r   exprr   fullnamebody)r   stmtr/   r/   r0   flatten_typechecking   s   r   calleer   #Optional[Union[Instance, TypeInfo]]c                 C  s   t | ttfrFt | jtr(| jjr&t | jjtr&t| jjj}t |t	r&|S d S t | jt
r=t| jj}t |t	r;|S d S t | jtrF| jS d S rA   )rG   r   r   noder   rB   r#   r$   ret_typer%   r   targetr   )r   r   Ztarget_typer/   r/   r0   type_for_callee  s   

r   r<   c                   s   t |ts|S |jdkrt t fdd|jD t g S  |j|}|durEt |trEt |j	t
rE|j	}t| fdd|jD S |S )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   c                   s   g | ]}t  |qS r/   )unbound_to_instance)r-   Ztyp_argrJ   r/   r0   r1   -  s    z'unbound_to_instance.<locals>.<listcomp>Nc                   s$   g | ]}t |trt |n|qS r/   )rG   r(   r   )r-   argr   r/   r0   r1   =  s    )rG   r(   r8   r   r)   r   r&   lookup_qualifiedr   r   r   r%   )rJ   r<   r   Z
bound_typer/   r   r0   r     s2   
	



r   rM   r   Optional[TypeInfo]c                 C  sD   | j tu r|| j| }|d u rd S |rt|jtsJ |jS | j S rA   )r>   r   r   r8   rG   r   r   )rM   rJ   symr/   r/   r0   info_for_clsH  s   
r   )r8   r9   r?   rS   )r>   r   rV   r9   rI   r   r?   r@   )r>   r   rV   r9   r?   r]   )r>   r   r?   r@   )r>   r   r?   rS   )r>   r   rJ   r    r?   rs   )ry   r
   rz   r   r?   r9   )r>   r   rv   r}   r?   r@   )rJ   r    r   r9   r   r   r?   r@   )
r   r   r   r9   r   r9   r   r9   r?   r@   )r   r   r8   r9   r   r@   r?   r   )r   r   r8   r9   r   r   r?   r   )r   r   r8   r9   r   r   r?   r]   )r   r   r?   r   )r   r   r?   r   )rJ   r    r<   r
   r?   r
   )rM   r   rJ   r    r?   r   )O
__future__r   r*   typingr   r   r   r   r   r   r	   r
   Z
TypingTyper   r   Zmypyr   Zmypy.messagesr   r|   Z
mypy.nodesr   r   r   r   r   r   r   r   r   r   r   r   r   r   Zmypy.optionsr   Zmypy.pluginr   r   r    Zmypy.plugins.commonr!   Zmypy.typeopsr"   Z
mypy.typesr#   r$   r%   r&   r'   r(   r)   tuple__version__splitZ_versr{   r5   r7   rT   r[   r_   rb   rd   ri   rm   ro   rq   rr   rx   r   r   r   r   r   r   r   r   r/   r/   r/   r0   <module>   s   
-



	













0