ó
    øÞ j_)  ã                  ó  • 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" jr(        S)S# jr)            S*S$ jr*        S)S% jr+          S+S& jr,g'),é    )Úannotations)ÚList)ÚOptional)ÚUnion)ÚARG_NAMED_OPT)ÚArgument)ÚAssignmentStmt)ÚCallExpr)ÚClassDef)ÚMDEF)Ú
MemberExpr)ÚNameExpr)ÚRefExpr)ÚStrExpr)ÚSymbolTableNode)ÚTempNode)ÚTypeInfo)ÚVar)ÚSemanticAnalyzerPluginInterface)Úadd_method_to_class)ÚAnyType)Úget_proper_type)ÚInstance)ÚNoneTyp)Ú
ProperType)Ú	TypeOfAny)ÚUnboundType)Ú	UnionTypeé   )Úinfer)Úutil)Úexpr_to_mapped_constructor)ÚNAMED_TYPE_SQLA_MAPPEDc           
     ó.  • [        U[        5      (       a  UR                  nO#[        U[        5      (       a  UR                  nOg U R
                  R                   H]  n[        U[        5      (       d  M  [        UR                  S   [        5      (       d  M>  UR                  S   R                  U:X  d  M]    O   [        R                  " USU 3U 5        g UR                  c  [        R                  " USU5        g [        UR                  5      n[        U[        [        [        45      (       d   eUR!                  [        R"                  " UUR$                  UR&                  UU R(                  S95        [+        XUR                  S   US 5        g )Nr   zCan't find mapped attribute zBStatement linked from _mypy_mapped_attrs has no typing information)ÚnameÚlineÚcolumnÚtypÚinfo)Ú
isinstancer   r%   r   ÚvalueÚdefsÚbodyr	   Úlvaluesr!   ÚfailÚtyper   r   r   r   ÚappendÚSQLAlchemyAttributer&   r'   r)   Úapply_type_to_mapped_statement)ÚclsÚapiÚitemÚ
attributesr%   ÚstmtÚleft_hand_explicit_types          ÚS/var/www/html/gaurav/venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/apply.pyÚapply_mypy_mapped_attrr;   -   sJ  € ô �$œ×!Ñ!Ø�y‰y‰Ü	�Dœ'×	"Ñ	"Ø�z‰z‰àà—‘—”ˆä�tœ^×,Ó,Ü˜4Ÿ<™<¨™?¬H×5Ó5Ø—‘˜Q‘×$Ñ$¨Õ,áñ ô 	�	Š	�#Ð5°d°VÐ<¸cÔBØà‡y�yÑÜ�	Š	Øð!àô		
ð ä-¨d¯i©iÓ8ÐÜØ¤(¬I´{Ð!C÷ñ ð ð ð ×ÑÜ× Ò ØØ—‘Ø—;‘;Ø'Ø—‘ñ	
ôô #Ø�4—<‘< ‘?Ð$;¸Tõó    c           	     ó„  • U Vs0 sH  o3R                   U_M     nnSnU R                  R                   GHZ  n[        U[        5      (       d  M  [        UR
                  S   [        5      (       d  M?  UR
                  S   R                   U;   d  M^  [        UR
                  S   R                  [        5      (       d  MŒ  UR
                  S   R                  nUUR
                  S   R                      R                  n[        UR                  5      n	[        U[        5      (       Gaù  [        U	[        5      (       Gdã  [        UR                  [        5      (       GaÃ  [        UR                  R                  [        5      (       Ga™  [        UR                  R                  R                   [        5      (       Gae  UR                  R                  R                   R                  Gb9  UR                  R                  R                   R                  R"                  [$        :X  aý  UR                  R                  R                   S:X  aÙ  [        UR                  R&                  S   [        5      (       a­  [        UR                  R&                  S   R                  [(        5      (       aw  [*        R,                  " UUUU	UR                  R&                  S   R                  5      n
U
b9  [        U
[        5      (       d$  U
nUXFR
                  S   R                      l	        Sn[        UR                  [.        5      (       a+  UR                  R                  R"                  [$        :w  d  GM9  Uc   eUR1                  [$        U/5      Ul	        GM]     U(       a"  [2        R4                  " U R6                  U5        ggs  snf )zdFor multiple class passes, re-apply our left-hand side types as mypy
seems to reset them in place.

Fr   NÚ_empty_constructorT)r%   r,   r-   r*   r	   r.   r   Únoder   r0   r   r   Úrvaluer
   Úcalleer   ÚexprÚfullnamer#   Úargsr   r    Ú#infer_type_from_right_hand_nameexprr   Ú
named_typer!   Úset_mapped_attributesr)   )r4   r5   r7   ÚattrÚmapped_attr_lookupÚupdate_cls_metadatar8   Ú	left_nodeÚpython_type_for_typeÚleft_node_proper_typeÚnew_python_type_for_types              r:   Ú re_apply_declarative_assignmentsrO   b   sÍ  € ñ 7AÓA±j¨dŸ)™) Tš/±jÐÐAØÐà—‘—•ˆô �tœ^×,Ó,Ü˜4Ÿ<™<¨™?¬H×5Ó5Ø—‘˜Q‘×$Ñ$Ð(:Õ:Ü˜4Ÿ<™<¨™?×/Ñ/´×5Ó5àŸ™ Q™×,Ñ,ˆIà#5Ø—‘˜Q‘×$Ñ$ñ$ç‰dð !ô %4°I·N±NÓ$CÐ!ô Ð/´×=Ò=Ü"Ð#8¼+×FÒFä˜tŸ{™{¬H×5Ò5Ü" 4§;¡;×#5Ñ#5´z×BÒBÜ" 4§;¡;×#5Ñ#5×#:Ñ#:¼H×EÒEØŸ™×*Ñ*×/Ñ/×4Ñ4Ò@ØŸ™×*Ñ*×/Ñ/×4Ñ4×=Ñ=Ü-ó.àŸ™×*Ñ*×/Ñ/Ð3GÓGÜ" 4§;¡;×#3Ñ#3°AÑ#6¼×AÑAÜ" 4§;¡;×#3Ñ#3°AÑ#6×#=Ñ#=¼w×GÑGô ×=Ò=ØØØ!Ø-ØŸ™×(Ñ(¨Ñ+×2Ñ2óð )ð ,Ñ7Ä
Ø,¬k÷Añ Að ,DÐ(ð
 -ð '§|¡|°A¡×';Ñ';Ñ<ÔAð +/Ð'ô ˜yŸ~™~¬x×8Ñ8Ø—>‘>×&Ñ&×/Ñ/Ô3IÖIà+Ñ7Ð7Ð7Ø!$§¡Ü*Ð-AÐ,Bó"�	—ñC öJ Ü×"Ò" 3§8¡8¨ZÕ8ð ùòQ Bs   …N=c                ó|  • UR                   n[        U[        5      (       d   eUb$  SUl        U R	                  [
        U/5      Ul        O@SUl        U R	                  [
        Uc  [        [        R                  5      /OU/5      Ul        [        UR                  5      Ul        UR                  b  Ub  XAl        ggg)a®  Apply the Mapped[<type>] annotation and right hand object to a
declarative assignment statement.

This converts a Python declarative class statement such as::

    class User(Base):
        # ...

        attrname = Column(Integer)

To one that describes the final Python behavior to Mypy::

... format: off

    class User(Base):
        # ...

        attrname : Mapped[Optional[int]] = <meaningless temp node>

... format: on

NF)r?   r*   r   Úis_inferred_defrF   r#   r0   r   r   Úspecial_formr"   r@   )r5   r8   Úlvaluer9   rL   rK   s         r:   r3   r3   ·   s·   € ð: —‘€IÜ�i¤×%Ñ%Ð%Ð%ð Ñ*Ø!&ˆÔØŸ™Ü"Ð%<Ð$=ó
ˆ	�ð "'ˆÔØŸ™Ü"ð (Ñ/ô œ×/Ñ/Ó0Ñ1à*Ð+ó
ˆ	Œô* -¨T¯[©[Ó9€D„Kà‡y�yÑÐ!5Ñ!AØ(�	ð "BÐr<   c           
     ód  • [         R                  " X5      nUc  g[         R                  " U5      nSUR                  ;  Ga  U(       Gd  U Vs0 sH  oUR                  UR
                  _M     nnUR                  SS  H_  nSUR                  ;  a  M  [         R                  " Xq5      nUc  M0  U H)  nUR                  UR                  UR
                  5        M+     Ma     / n	UR                  5        HR  u  p«Uc  [        [        R                  5      nU	R                  [        [!        X«5      U[#        U5      [$        S95        MT     ['        XSU	[)        5       5        SUR                  ;  a(  [         R*                  " U5      (       a  [-        XSS5        U(       d  [-        XS	S
5        ggs  snf )zCApply __init__, __table__ and other attributes to the mapped class.NÚ__init__r   éÿÿÿÿÚ
sqlalchemy)ÚvariableÚtype_annotationÚinitializerÚkindÚ	__table__zsqlalchemy.sql.schema.Tablezsqlalchemy.orm.mapper.MapperÚ
__mapper__)r!   Úinfo_for_clsÚget_is_baseÚnamesr%   r0   ÚmroÚmetadataÚget_mapped_attributesÚ
setdefaultÚitemsr   r   rR   r1   r   r   r   r   r   r   Úget_has_tableÚ _apply_placeholder_attr_to_class)r4   r5   r7   r)   Úis_baserH   Úmapped_attr_namesÚbaseÚbase_cls_attributesÚ	argumentsr%   r(   s               r:   Úadd_additional_orm_attributesrm   ÿ   ss  € ô ×Ò˜SÓ&€Dà�|Øä×Ò˜tÓ$€Gà˜Ÿ™Ô#¯GÙ>HÓI¹j°dŸY™Y¨¯	©	Ò1¹jÐÐIà—H‘H˜Q˜r“NˆDØ 4§=¡=Ó0Ùä"&×"<Ò"<¸TÓ"GÐØ"Ñ*Ùã+�Ø!×,Ñ,¨T¯Y©Y¸¿	¹	ÖBó ,ñ #ð ˆ	Ø*×0Ñ0Ö2‰IˆDØ‰{Üœi×4Ñ4Ó5�Ø×ÑÜÜ  ›^Ø$'Ü (¨£Ü&ñ	öñ 3ô 	˜C j°)¼W»YÔGà˜$Ÿ*™*Ó$¬×);Ò);¸D×)AÑ)AÜ(ØÐ3°[ô	
ö Ü(ØÐ4°lõ	
ð ùòA Js   ÁF-c                ó–  • U R                  U5      nU(       a8  [        UR                  [        5      (       d   e[	        UR                  / 5      nO[        [        R                  5      n[        U5      nUR                  S-   U-   Ul
        UR                  Ul        XVl        [        [        U5      UR                  R                  U'   g )NÚ.)Úlookup_fully_qualified_or_noner*   r?   r   r   r   r   rR   r   rC   Ú	_fullnamer)   r0   r   r   r`   )r5   r4   Úqualified_nameÚattrnameÚsymÚtype_Úvars          r:   rg   rg   4  s•   € ð ×
,Ñ
,¨^Ó
<€CÞ
Ü˜#Ÿ(™(¤H×-Ñ-Ð-Ð-Ü$ S§X¡X¨rÓ2‰äœ	×.Ñ.Ó/ˆÜ
ˆh‹-€CØ—L‘L 3Ñ&¨Ñ1€C„MØ�x‰x€C„HØ„HÜ.¬t°SÓ9€C‡H�H‡N�N�8Òr<   N)
r4   r   r5   r   r6   zUnion[NameExpr, StrExpr]r7   úList[util.SQLAlchemyAttribute]ÚreturnÚNone)r4   r   r5   r   r7   rw   rx   ry   )r5   r   r8   r	   rS   r   r9   úOptional[ProperType]rL   rz   rx   ry   )
r5   r   r4   r   rr   Ústrrs   r{   rx   ry   )-Ú
__future__r   Útypingr   r   r   Ú
mypy.nodesr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Úmypy.pluginr   Úmypy.plugins.commonr   Ú
mypy.typesr   r   r   r   r   r   r   r   Ú r    r!   r`   r"   r#   r;   rO   r3   rm   rg   © r<   r:   Ú<module>r„      sl  ðõ #å Ý Ý å $Ý Ý %Ý Ý Ý Ý !Ý Ý Ý Ý &Ý Ý Ý Ý 7Ý 3Ý Ý &Ý Ý Ý !Ý  Ý "Ý  å Ý Ý -Ý )ð2Ø	ð2à	(ð2ð #ð2ð /ð	2ð
 
ô2ðjR9Ø	ðR9à	(ðR9ð /ðR9ð 
ô	R9ðjE)Ø	(ðE)à
ðE)ð ðE)ð 2ð	E)ð
 /ðE)ð 
ôE)ðP2
Ø	ð2
à	(ð2
ð /ð2
ð 
ô	2
ðj:Ø	(ð:à	ð:ð ð:ð ð	:ð
 
õ:r<   