U
    ø×ccú  ã                   @   sœ  U 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 e d¡Zeed< e d¡Zeed< e d¡Zeed< e d¡Zeed< e d¡Z eed< e d¡Z!eed< e d¡Z"eed< e d¡Z#eed< e d¡Z$eed< e d¡Zeed< e d ¡Z%eed < e d!¡Z&eed!< e d"¡Z'eed"< e d#¡Z(eed#< e d$¡Z)eed$< e d%¡Z*eed%< e d&¡Z+eed&< e d'¡Z,eed'< d(Z-d)Z.d*Z/d+Z0ed,d-hfed.d/hfed0d1hfed2d3hfe%d4d5hfe&d6d7hfe(d8d9hfe d:hfe!d+hfe"d;d<d=hfe#d>d?d@hfe$dAdBhfe)dCdDdEhfe*dFdGhfe'dHdIhfe+dJdKhfe,dLhfdMœZ1ee2eeee2 f f edN< eee3dOœdPdQ„Z4ee ee3dRœdSdT„Z5eeeee dUœdVdW„Z6e	ee dXœdYdZ„Z7eeeef ee d[œd\d]„Z8e2ee d^œd_d`„Z9daS )bé    )ÚDict)ÚList)ÚOptional)ÚSet)ÚTuple)ÚUnion)ÚClassDef)Ú
Expression)ÚFuncDef)Ú
MemberExpr)ÚNameExpr)Ú
SymbolNode)Ú	TypeAlias)ÚTypeInfo)ÚSemanticAnalyzerPluginInterface)ÚCallableType)Úget_proper_type)ÚInstance)ÚUnboundTypeé   )ÚutilÚCOLUMNÚRELATIONSHIPÚREGISTRYÚCOLUMN_PROPERTYZ	TYPEENGNEÚ
TYPEENGINEÚMAPPEDÚDECLARATIVE_BASEÚDECLARATIVE_METAÚMAPPED_DECORATORÚSYNONYM_PROPERTYÚCOMPOSITE_PROPERTYÚDECLARED_ATTRÚMAPPER_PROPERTYÚAS_DECLARATIVEÚAS_DECLARATIVE_BASEÚDECLARATIVE_MIXINÚQUERY_EXPRESSIONzbuiltins.objectzbuiltins.strzbuiltins.listz sqlalchemy.orm.attributes.Mappedzsqlalchemy.sql.schema.Columnzsqlalchemy.sql.Columnz1sqlalchemy.orm.relationships.RelationshipPropertyz#sqlalchemy.orm.RelationshipPropertyz sqlalchemy.orm.decl_api.registryzsqlalchemy.orm.registryz(sqlalchemy.orm.properties.ColumnPropertyzsqlalchemy.orm.ColumnPropertyz/sqlalchemy.orm.descriptor_props.SynonymPropertyzsqlalchemy.orm.SynonymPropertyz1sqlalchemy.orm.descriptor_props.CompositePropertyz sqlalchemy.orm.CompositePropertyz(sqlalchemy.orm.interfaces.MapperPropertyzsqlalchemy.orm.MapperPropertyz"sqlalchemy.sql.type_api.TypeEnginez+sqlalchemy.ext.declarative.declarative_basezsqlalchemy.orm.declarative_basez(sqlalchemy.orm.decl_api.declarative_basez*sqlalchemy.ext.declarative.DeclarativeMetazsqlalchemy.orm.DeclarativeMetaz'sqlalchemy.orm.decl_api.DeclarativeMetaz'sqlalchemy.orm.decl_api.registry.mappedzsqlalchemy.orm.registry.mappedz)sqlalchemy.ext.declarative.as_declarativez&sqlalchemy.orm.decl_api.as_declarativezsqlalchemy.orm.as_declarativez4sqlalchemy.orm.decl_api.registry.as_declarative_basez+sqlalchemy.orm.registry.as_declarative_basez%sqlalchemy.orm.decl_api.declared_attrzsqlalchemy.orm.declared_attrz)sqlalchemy.orm.decl_api.declarative_mixinz sqlalchemy.orm.declarative_mixinzsqlalchemy.orm.query_expression)ZColumnZRelationshipPropertyÚregistryZColumnPropertyZSynonymPropertyZCompositePropertyZMapperPropertyZ
TypeEngineZMappedZdeclarative_baseZDeclarativeMetaZmappedZas_declarativeZas_declarative_baseZdeclared_attrZdeclarative_mixinZquery_expressionÚ_lookup)ÚinfoÚtype_idÚreturnc                 C   sD   | j D ]"}t |jd¡\}}||kr q.qdS |d kr:dS |j|kS ©N©NNF)Úmror)   ÚgetÚnameÚfullname)r*   r+   ÚmrÚcheck_type_idÚ	fullnames© r6   ú=/tmp/pip-unpacked-wheel-8u86ls_i/sqlalchemy/ext/mypy/names.pyÚhas_base_type_id§   s    
r8   )r/   r+   r,   c                 C   sB   | D ]"}t  |jd¡\}}||kr q,qdS |d kr8dS |j|kS r-   ©r)   r0   r1   r2   )r/   r+   r3   r4   r5   r6   r6   r7   Ú
mro_has_idµ   s    r:   )Útype_ÚclsÚapir,   c                 C   s^   |  | j| ¡}|d k	rZt|jtƒrDt|jjƒ}t|tƒrZt|j	ƒS nt|jt
ƒrZt|jƒS d S ©N)Zlookup_qualifiedr1   Ú
isinstanceÚnoder   r   Útargetr   Útype_id_for_named_nodeÚtyper   )r;   r<   r=   ÚsymÚtarget_typer6   r6   r7   Útype_id_for_unbound_typeÃ   s    

rF   )Úcalleer,   c                 C   s    t | ttfƒrœt | jtƒrX| jjrTt | jjtƒrTt| jjjƒ}t |t	ƒrTt
|jjƒS d S t | jtƒrˆt| jjƒ}t |t	ƒrœt
|jjƒS nt | jtƒrœt| ƒS d S r>   )r?   r   r   r@   r
   rC   r   r   Úret_typer   Útype_id_for_fullnamer2   r   rA   r   rB   )rG   rH   rE   r6   r6   r7   Útype_id_for_calleeÒ   s    

rJ   )r@   r,   c                 C   s<   t  | jd¡\}}|d ks"|d kr&d S | j|kr4|S d S d S )Nr.   r9   )r@   r+   r5   r6   r6   r7   rB   å   s    
rB   )r2   r,   c                 C   sJ   |   d¡}|d }t |d¡\}}|d ks2|d kr6d S | |krB|S d S d S )NÚ.éÿÿÿÿr.   )Úsplitr)   r0   )r2   ÚtokensZ	immediater+   r5   r6   r6   r7   rI   ò   s    
rI   N):Útypingr   r   r   r   r   r   Z
mypy.nodesr   r	   r
   r   r   r   r   r   Zmypy.pluginr   Z
mypy.typesr   r   r   r   Ú r   Úsymbolr   ÚintÚ__annotations__r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   ZNAMED_TYPE_BUILTINS_OBJECTZNAMED_TYPE_BUILTINS_STRZNAMED_TYPE_BUILTINS_LISTZNAMED_TYPE_SQLA_MAPPEDr)   ÚstrÚboolr8   r:   rF   rJ   rB   rI   r6   r6   r6   r7   Ú<module>   s
   þþþþþþþþþþþþþþýþ	ýþ	þþýþ	þþþþþþþ˜"o  þþ