
    -h%%                     H   S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  SSK J"r"  SSK J#r#   " S S\5      r$S \%S!\\$   4S" jr&S#\S!S$4S% jr'S#\S!S$4S& jr(S#\S!S$4S' jr)S#\S!S$4S( jr*S#\S!S$4S) jr+S#\S!S$4S* jr,S#\S!S$4S+ jr-S#\S!\4S, jr.S#\\\4   S!S$4S- jr/S.\S/\S!S$4S0 jr0g$)1z"
Mypy plugin for SQLAlchemy ORM.

    )Callable)List)Optional)Tuple)Type)Union)nodes)calculate_mro)MroError)Block)ClassDef)GDEF)MypyFile)NameExpr)SymbolTable)SymbolTableNode)TypeInfo)AttributeContext)ClassDefContext)DynamicClassDefContext)Plugin)SemanticAnalyzerPluginInterface)get_proper_type)Instance   )
decl_class)names)utilc                      \ rS rSrS\S\\\/S4      4S jrS\S\\\	/S4      4S jr
S\S\\\	/S4      4S jrS\S\\\	/S4      4S jrS\S\\\	/S4      4S	 jrS\S\\\/\4      4S
 jrS\S\\\\\4      4S jrSrg)SQLAlchemyPlugin2   fullnamereturnNc                 ^    [         R                  " U5      [         R                  L a  [        $ g N)r   type_id_for_fullnameDECLARATIVE_BASE_dynamic_class_hookselfr"   s     oC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/ext/mypy/plugin.pyget_dynamic_class_hook'SQLAlchemyPlugin.get_dynamic_class_hook3   s&     %%h/53I3II&&    c                     [         $ r%   )_fill_in_decoratorsr)   s     r+   get_customize_class_mro_hook-SQLAlchemyPlugin.get_customize_class_mro_hook:   s
     #"r.   c                 >   U R                  U5      nUb  UR                  b|  [        R                  " UR                  5      nU[        R                  L a  [
        $ U[        R                  [        R                  4;   a  [        $ U[        R                  L a  [        $ g r%   )lookup_fully_qualifiednoder   type_id_for_named_nodeMAPPED_DECORATOR_cls_decorator_hookAS_DECLARATIVEAS_DECLARATIVE_BASE_base_cls_decorator_hookDECLARATIVE_MIXIN_declarative_mixin_hook)r*   r"   symtype_ids       r+   get_class_decorator_hook)SQLAlchemyPlugin.get_class_decorator_hook?   s     ))(3?sxx322388<G%000**$$))  0/E333..r.   c                 ^    [         R                  " U5      [         R                  L a  [        $ g r%   )r   r&   DECLARATIVE_META_metaclass_cls_hookr)   s     r+   get_metaclass_hook#SQLAlchemyPlugin.get_metaclass_hookS   s(     %%h/53I3II '&r.   c                     U R                  U5      nU(       aJ  [        UR                  [        5      (       a+  [        R
                  " UR                  5      (       a  [        $ g r%   )r4   
isinstancer5   r   r   has_declarative_base_base_cls_hook)r*   r"   r>   s      r+   get_base_class_hook$SQLAlchemyPlugin.get_base_class_hook]   sH     ))(3 388X..))#((33!!r.   c                 <    UR                  S5      (       a  [        $ g )Nz-sqlalchemy.orm.attributes.QueryableAttribute.)
startswith_queryable_getattr_hookr)   s     r+   get_attribute_hook#SQLAlchemyPlugin.get_attribute_hookk   s%     ;
 
 +*r.   filec                 
    SS/$ )N)
   sqlalchemy.orm.attributes)rT   zsqlalchemy.orm.decl_apirV    )r*   rR   s     r+   get_additional_deps$SQLAlchemyPlugin.get_additional_depsu   s     2/
 	
r.   rW   )__name__
__module____qualname____firstlineno__strr   r   r   r,   r   r1   r@   rE   rK   r   r   rP   r   r   r   intrX   __static_attributes__rW   r.   r+   r    r    2   s   	(23T9:	;##	(O,d23	4#
	(O,d23	4(	(O,d23	4	(O,d23	4	(,-t34	5

	eCcM"	#
r.   r    versionr#   c                     [         $ r%   )r    )ra   s    r+   pluginrc   ~   s    r.   ctxNc                    [        U 5        [        U R                  [        / 5      5      nU R                  R                  U R                  5      Ul        [        [        5       XR                  R                  5      nX!l
        [        U R                  U5        [        R                  " U R                  S[        4S9nUb  [!        UR"                  [        5      (       aq  [        R$                  " UR"                  5        [&        R(                  " UR"                  R*                  U R                  SS9  [-        UR"                  / 5      /Ul        O1U R                  R1                  [2        R4                  5      nU/Ul         [7        U5        U R                  R?                  U R                  [A        [B        U5      5        [        R$                  " U5        g! [8         ag    [        R:                  " U R                  SU R                  5        U R                  R1                  [2        R4                  5      nU/Ul        SUl         Nf = f)zVGenerate a declarative Base class when the declarative_base() function
is encountered.cls)
expr_typesNTis_mixin_scanz.Not able to calculate MRO for declarative base)"_add_globalsr   namer   apiqualified_namer"   r   r   
cur_mod_idinfo_set_declarative_metaclassr   get_callexpr_kwargcallr   rH   r5   set_is_baser   ,scan_declarative_assignments_and_apply_typesdefnr   bases
named_typer   NAMED_TYPE_BUILTINS_OBJECTr
   r   failfallback_to_anyadd_symbol_table_noder   r   )rd   rf   ro   cls_argobjs        r+   r(   r(      s    
388U2Y
'C77))#((3CLKM3(:(:;DHsww,%%chh8+NGz',,AA&??LLswwd	
 w||R01
gg  !A!ABU
$d GG!!#((OD$,GHT  $		GGEsxx	
 gg  !A!ABU
#$s   G A.I
	I
c                    U R                   R                   GH  n[        U[        R                  5      (       aP  [        UR
                  [        R                  5      (       a'  UR
                  R                  S:X  a  UR
                  nO4[        U[        R                  5      (       a  UR                  S:X  a  UnOM  [        UR                  [        5      (       a0  U R                  R                  UR                  R                  USS9nOM  U(       d  GM  UR                  (       d  GM  [        UR                  5      n[        U[        5      (       a-  UR                  R                    SUR                   3Ul        GMm  ["        R$                  " U R                  SUR                  -  UR                  5        GM     g )Nas_declarative_basemappedT)suppress_errors.zClass decorator called %s(), but we can't tell if it's from an ORM registry.  Please annotate the registry assignment, e.g. my_registry: registry = registry())rf   
decoratorsrH   r	   CallExprcallee
MemberExprrk   exprr   rl   lookup_qualifiedr5   r   typer   r"   r   ry   )rd   	decoratortargetr>   sym_types        r+   r0   r0      sF   WW''	 y%..119++U-=-=>>  %%)>>%%Fy%"2"233(*Ffkk8,,''**  &$ + C 33888&sxx0H(H--%-]]%;%;$<Afkk]"K 		GG9 <B;;G HHW (r.   c                 T   [        U 5        [        U R                  [        R                  5      (       d   eU R                  R
                  n[        U[        R                  5      (       a)  [        UR                  [        R                  5      (       d   e[        UR                  R                  5      n[        U[        5      (       a1  [        R                  " UR                  5      [        R                  L d   e[        R                   " U R"                  U R$                  5        g r%   )rj   rH   reasonr	   r   r   RefExprr5   Varr   r   r   r   r6   REGISTRYr   rt   rf   rl   )rd   r   	node_types      r+   r8   r8      s    cjj%"2"23333::??DdEMM**z$))UYY/O/OOO		/I 	9h''((8ENNJ	K ;;CGGSWWMr.   c                     [        U 5        U R                  n[        U R                  U5        [        R
                  " U R                  R                  5        [        R                  " XR                  SS9  g NTrh   )	rj   rf   rp   rl   r   rs   ro   r   rt   )rd   rf   s     r+   r;   r;      sN    
''Csww,SWW\\";;WWDr.   c                     [        U 5        [        R                  " U R                  R                  5        [
        R                  " U R                  U R                  SS9  g r   )rj   r   rs   rf   ro   r   rt   rl   rd   s    r+   r=   r=      s=    SWW\\";;r.   c                 X    [         R                  " U R                  R                  5        g r%   )r   rs   rf   ro   r   s    r+   rD   rD     s    SWW\\"r.   c                 p    [        U 5        [        R                  " U R                  U R                  5        g r%   )rj   r   rt   rf   rl   r   s    r+   rJ   rJ   	  s"    ;;CGGSWWMr.   c                     U R                   $ r%   )default_attr_typer   s    r+   rO   rO     s        r.   c                 6    [         R                  " U SSS5        g)zXAdd __sa_DeclarativeMeta and __sa_Mapped symbol to the global space
for all class defs

rU   Mapped__sa_MappedN)r   
add_globalr   s    r+   rj   rj     s     	OOC4hNr.   rl   
target_clsc                     UR                   nU R                  S5      nUb  [        UR                  [        5      (       d   e[        UR                  / 5      =Ul        Ul        g )Nz'sqlalchemy.orm.decl_api.DeclarativeMeta)ro   lookup_fully_qualified_or_nonerH   r5   r   r   declared_metaclassmetaclass_type)rl   r   ro   r>   s       r+   rp   rp     sX     ??D

,
,1C ?z#((H====4<SXXr4JJDd1r.   )1__doc__typingr   r   r   r   r   
TypingTyper   mypyr	   mypy.mror
   r   
mypy.nodesr   r   r   r   r   r   r   r   mypy.pluginr   r   r   r   r   
mypy.typesr   r    r   r   r   r    r^   rc   r(   r0   r8   r;   r=   rD   rJ   rO   rj   rp   rW   r.   r+   <module>r      sl       %   "       " &  ( ' .  7 &     I
v I
XC J'78 $3 $ $N3_ 3 3lN_ N N"
/ 
d 
 T #_ # #N ND N
!!1 !d !OeO-CCD O OK	(K6>K	Kr.   