
    -hD                        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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&   S2S$\S%\S&\'S'\\\&RP                        4S( jjr)S$\S%\S)\*S*\S+\\&RP                     S'S,4S- jr+S$\S%\S.\S+\\&RP                     S'S,4
S/ jr,S$\S%\S.\S+\\&RP                     S'S,4
S0 jr-S$\S%\S'S,4S1 jr.g,)3    )List)Optional)Union)AssignmentStmt)CallExpr)ClassDef)	Decorator)
LambdaExpr)ListExpr)
MemberExpr)NameExpr)PlaceholderNode)RefExpr)StrExpr)
SymbolNode)SymbolTableNode)TempNode)TypeInfo)Var)SemanticAnalyzerPluginInterface)AnyType)CallableType)get_proper_type)Instance)NoneType)
ProperType)Type)	TypeOfAny)UnboundType)	UnionType   )apply)infer)names)utilclsapiis_mixin_scanreturnc                 "   [         R                  " X5      nUc  g U R                  R                  S5      (       a  g [         R                  " X15      n[         R
                  " U5        Ub   U(       d  [        R                  " XU5        U$ / nU R                  R                  (       d1  UR                  R                  5        H  u  pV[        XXVU5        M     Ow[         R                  " U R                  R                  5       HI  n[        U[        5      (       a  [!        XXt5        M&  [        U["        5      (       d  M=  [%        XXt5        MK     ['        X5        U(       d  [        R(                  " XU5        [         R*                  " X45        U$ )Nbuiltins)r%   info_for_clsfullname
startswithget_mapped_attributesestablish_as_sqlalchemyr"    re_apply_declarative_assignmentsdefsbodyr$   items_scan_symbol_table_entryflatten_typechecking
isinstancer   !_scan_declarative_assignment_stmtr	    _scan_declarative_decorator_stmt_scan_for_mapped_basesadd_additional_orm_attributesset_mapped_attributes)r&   r'   r(   infomapped_attributessym_namesymstmts           sC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/ext/mypy/decl_class.py,scan_declarative_assignments_and_apply_typesrC   4   s@    S&D|		 	 	,	, 	""4- 
 	  &$
  223=NO  88== "ZZ--/MH$(): 0
 --chhmm<D$//1d D),,0d = 3$++C6GHt7    namevalue
attributesNc           
         [        UR                  5      n[        U[        5      (       d  gSn[        R
                  " UR                  5      nSnU[        R                  [        R                  [        R                  [        R                  [        R                  [        R                  1;   a/  UR                  (       a  [        UR                  S   5      nGOcSnGO_U[        R                  L GaK  UR                  (       d  SnGO6[        UR                  S   5      n	[        U	[        5      (       a  U	R                  n	[        U	[        [        45      (       a  UR!                  U	R"                  U	5      n
U
b  [        U
R$                  [        5      (       a  [        R&                  " U
R$                  [        R(                  5      (       a5  [+        [,        R.                  " XR$                  / 5      [1        5       /5      nO;[2        R4                  " USR7                  U
R$                  R8                  5      U5        U(       aK  Sn[2        R4                  " XR7                  X R"                  5      U 5        [;        [<        R>                  5      nUbi  UR$                  c   eURA                  [2        RB                  " UUR$                  RD                  UR$                  RF                  UU RH                  S95        gg)zYExtract mapping information from a SymbolTableNode that's in the
type.names dictionary.

NFr   T4Column type should be a TypeEngine subclass not '{}'zCan't infer type from attribute {} on class {}. please specify a return type from this function that is one of: Mapped[<python type>], relationship[<target class>], Column[<TypeEngine>], MapperProperty[<python type>]rE   linecolumntypr=   )%r   typer7   r   r$   type_id_for_named_nodeMAPPEDRELATIONSHIPCOMPOSITE_PROPERTYMAPPER_PROPERTYSYNONYM_PROPERTYCOLUMN_PROPERTYargsCOLUMNr   r   lookup_qualifiedrE   nodehas_base_type_id
TYPEENGINEr    r#   #extract_python_type_from_typeenginer   r%   failformatr-   r   r   special_formappendSQLAlchemyAttributerK   rL   r=   )r&   r'   rE   rF   rG   
value_typeleft_hand_explicit_typetype_iderrtypeengine_argr@   msgs               rB   r5   r5   w   sA    !,Jj(++"**:??;G C     ??&5jooa6H&I#C	ELL	 C:I";N .(33!/!4!4.;*ABB**>+>+>O?z#((H'E'E--chh8H8HII2; % I I$'2!" !)
	3/ 		006sxx7H7H0I&	 B 	 			#zz$137"))*@*@"A*zz%%%$$ZZ__zz((+XX	
 +rD   rA   c           
      d
   UR                    HN  n[        U[        [        [        45      (       d  M%  [
        R                  " U5      [
        R                  L d  MN    O   gU R                  R                  R                  U5      nSn[        R                  " UR                  5      (       a  [        [        R                   5      n[        UR"                  R                  5      nUR"                  Ul        ['        U/[)        U5      5      n	UR$                  R*                  U	l        XR                  R                  U'   g[        UR,                  R*                  [.        5      (       Ga  UR,                  R*                  R0                  n
[        U
[2        5      (       a  [
        R4                  " XU5      nOgU[
        R6                  [
        R8                  [
        R:                  [
        R<                  [
        R>                  [
        R@                  1;   a+  U
RB                  (       a  [E        U
RB                  S   5      nGO,U[
        RF                  L Ga  U
RB                  (       Ga  U
RB                  S   n[        U[2        5      (       a  URI                  UR                  U5      nUb  [        UR$                  [J        5      (       a  [
        RL                  " UR$                  [
        RN                  5      (       a5  [Q        [R        RT                  " XR$                  / 5      [W        5       /5      nO;[        RX                  " USR[                  UR$                  R\                  5      U
5        UcU  Sn[        RX                  " XR[                  UR"                  R                  5      U5        [        [        R                   5      n[        UR"                  R                  5      nUR"                  Ul        [        U[2        5      (       a  [E        [        R^                  " X5      5      nURa                  [
        Rb                  U/5      UR$                  l        [        Rd                  " [g        UR,                  Rh                  UR,                  R                  5      5      n['        U/U5      n	UR$                  R*                  U	l        URk                  [        Rl                  " UR                  URn                  URp                  UU Rr                  S95        XR                  R                  U'   g)ax  Extract mapping information from a @declared_attr in a declarative
class.

E.g.::

    @reg.mapped
    class MyClass:
        # ...

        @declared_attr
        def updated_at(cls) -> Column[DateTime]:
            return Column(DateTime)

Will resolve in mypy as::

    @reg.mapped
    class MyClass:
        # ...

        updated_at: Mapped[Optional[datetime.datetime]]

Nr   rI   zCan't infer type from @declared_attr on function '{}';  please specify a return type from this function that is one of: Mapped[<python type>], relationship[<target class>], Column[<TypeEngine>], MapperProperty[<python type>]rJ   ):
decoratorsr7   r   r   r   r$   rO   DECLARED_ATTRr2   r3   indexr%   name_is_dunderrE   r   r   r_   varrY   r   r   rN   funcr   ret_typer   type_id_for_unbound_typerP   rQ   rR   rS   rT   rU   rV   r   rW   rX   r   rZ   r[   r    r#   r\   r   r]   r^   r-   unbound_to_instance
named_typeNAMED_TYPE_SQLA_MAPPEDexpr_to_mapped_constructorr
   	argumentsr`   ra   rK   rL   r=   )r&   r'   rA   rG   dec	dec_indexrc   any_	left_nodenew_stmt	func_typerd   rf   r@   rg   rvalues                   rB   r9   r9      s   8 sXz:>??,,S1U5H5HH  	##D)I48499%% y--.TXX]]+		!9+x~>!++#+i 	DIINNL	1	1IINN++	i--44YSIG  ""((%%&&%% &5innQ6G&H#$&^^A.N.+66**>+>+>O?z#((H'E'E--chh8H8HII2; % I I$'2!" !)
	3/ 		006sxx7H7H0I%	 &
B 	 			#zz$((--0$7"))*@*@"A'IXXIN );77"1$$SB#
 ..$$'>&?INN ,,499&&		7F yk62HNN''HM  ;;'	
  (HHMM)rD   c           
         UR                   S   n[        U[        5      (       d  gU R                  R                  R                  UR                  5      nUc   eUR                  n[        U[        5      (       a  gXdR                  L d   e[        U[        5      (       d   eUR                  S:X  a?  UR                  UR                  5      SL a   [        R                  " U R                  5        gUR                  S:X  a!  [        R                  " U R                  5        OUR                  R                  S5      (       a  gUR                  S:X  a  [        UR                  [         5      (       d  [        R"                  " USU5        OQUR                  R$                   H7  n[        U[        [&        45      (       d  M   [(        R*                  " XXs5        M9     SnSn	UR,                  (       d  UR.                  c  [        UR.                  [0        5      (       a  UR.                  n	UR.                  R                  S	:X  a  UR3                  S	U 5      n
U
bl  U
R                  b_  [        R4                  " U
R                  5      [        R6                  L a.  [9        UR.                  R:                  S   5      n	UR.                  nOz[9        UR.                  5      n[        U[<        5      (       aL  [        R4                  " UR.                  5      [        R6                  L a  [9        UR:                  S   5      n	UnOUn	Sn[        UR                  [>        5      (       a  Ub  U	nOz[        UR                  [@        5      (       aZ  [        UR                  RB                  [D        5      (       a1  [F        RH                  " XXiUR                  RB                  5      nUc  gOgUc   eURK                  [        RL                  " UR                  URN                  URP                  UU R                  S
95        [(        RR                  " UUUU	U5        g)zRExtract mapping information from an assignment statement in a
declarative class.

r   N__abstract__T__tablename_____mypy_mapped_attrsz+_mypy_mapped_attrs is expected to be a listMappedrJ   )*lvaluesr7   r   r=   r$   getrE   rY   r   r   
parse_boolr|   r%   set_is_baseset_has_tabler.   r   r]   r4   r   r"   apply_mypy_mapped_attris_inferredrN   r   rX   rO   rP   r   rV   r   r   r   calleer   r#   #infer_type_from_right_hand_nameexprr`   ra   rK   rL   apply_type_to_mapped_statement)r&   r'   rA   rG   lvaluer@   rY   itemleft_hand_mapped_typerc   
mapped_sym	node_typepython_type_for_types                rB   r8   r8   m  sY    \\!_Ffh''
((..

V[[
)C
 ??88D$((;;dC    yyN">>$++&$.SXX&	o	%388$			d	#	#	*	*$++x00IIcH$O))dXw$788004L * -148499,dii-- '+ii#yy~~) 11(C@
*"344Z__E||$ />		q)/+ -1II) $DII.	y(++,,Y^^<L '6innQ6G&H#$-! '0#$(!$++x((-B-N
  7	DKK	*	*zG0 0  %HHtdkk6H6H 
  ' ( 	+++  ;;$	
 
((rD   c                     [         R                  " X5      nUc  gUR                  SS  H:  nUR                  R	                  S5      (       a  M%  [        UR                  USS9  M<     g)zGiven a class, iterate through its superclass hierarchy to find
all other classes that are considered as ORM-significant.

Locates non-mapped mixins and scans them for mapped attributes to be
applied to subclasses.

Nr!   r+   T)r(   )r%   r,   mror-   r.   rC   defn)r&   r'   r=   	base_infos       rB   r:   r:     s_     S&D|XXa^	((44
 	5NNCt	
 $rD   )F)/typingr   r   r   
mypy.nodesr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   mypy.pluginr   
mypy.typesr   r   r   r   r   r   r   r   r   r     r"   r#   r$   r%   boolra   rC   strr5   r9   r8   r:    rD   rB   <module>r      s      %     !  !  &   ! &    7  # &   !    "        @	@	(@ @ d4++,-	@FW
	W
	(W
 W
 	W

 T--.W
 
W
tY(	Y(	(Y( Y( T--.	Y(
 
Y(x@	@	(@ @ T--.	@
 
@F
	
	(
 

rD   