§
    eŠtj§K  ã                  ó¤  — 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(„Z#d>d)„Z$d>d*„Z%d=d+„Z&d>d,„Z'	 d?d@d0„Z(	 	 dAdBd5„Z)dCd7„Z*dDd8„Z+dEd<„Z,d-S )Fé    )Úannotations)ÚOptional)ÚSequence)Úmap_instance_to_supertype)ÚAssignmentStmt)ÚCallExpr)Ú
Expression)ÚFuncDef)Ú
LambdaExpr)Ú
MemberExpr)ÚNameExpr)ÚRefExpr)ÚStrExpr)ÚTypeInfo)ÚVar)ÚSemanticAnalyzerPluginInterface)Ú
is_subtype)ÚAnyType)ÚCallableType)Úget_proper_type)ÚInstance)ÚNoneType)Ú
ProperType)Ú	TypeOfAny)Ú	UnionTypeé   )Únames)ÚutilÚapir   Ústmtr   Únoder   Úleft_hand_explicit_typeúOptional[ProperType]Úinfer_from_right_sider   Úreturnc                óÆ  — t          j        |¦  «        }|€d S |t           j        u rt          | ||||¦  «        }n¦|t           j        u rt          | |||¦  «        }n…|t           j        u rt          | |||¦  «        }nd|t           j        u rt          | |||¦  «        }nC|t           j
        u rt          | ||¦  «        }n#|t           j        u rt          | |||¦  «        }nd S |S ©N)r   Útype_id_for_calleeÚMAPPEDÚ_infer_type_from_mappedÚCOLUMNÚ_infer_type_from_decl_columnÚRELATIONSHIPÚ_infer_type_from_relationshipÚCOLUMN_PROPERTYÚ%_infer_type_from_decl_column_propertyÚSYNONYM_PROPERTYÚ#infer_type_from_left_hand_type_onlyÚCOMPOSITE_PROPERTYÚ(_infer_type_from_decl_composite_property)r   r    r!   r"   r$   Útype_idÚpython_type_for_types          úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sqlalchemy/ext/mypy/infer.pyÚ#infer_type_from_right_hand_nameexprr8   (   s7  € õ Ô&Ð'<Ñ=Ô=€GØ€ØˆtØ	•E”LÐ	 Ð	 Ý6Ø��tÐ4Ð6Kñ 
ô  
ÐÐð 
•E”LÐ	 Ð	 Ý;Ø��tÐ4ñ 
ô  
ÐÐð 
•EÔ&Ð	&Ð	&Ý<Ø��tÐ4ñ 
ô  
ÐÐð 
•EÔ)Ð	)Ð	)ÝDØ��tÐ4ñ 
ô  
ÐÐð 
•EÔ*Ð	*Ð	*ÝBØ�Ð.ñ 
ô  
ÐÐð 
•EÔ,Ð	,Ð	,ÝGØ��tÐ4ñ 
ô  
ÐÐð ˆtàÐó    c                ó¦  — t          |j        t          ¦  «        sJ ‚|j        j        d         }d}t          |t          ¦  «        r1t          |j        t          ¦  «        r|j        }t          |g ¦  «        }t          j	        |j        d¦  «        }t          j	        |j        d¦  «        }d}	|�@|  
                    |¦  «        du r)|€'d}	|�!|                      t          j        |g¦  «        }�nù|�|  
                    |¦  «        du �rW|��Td}	t          |t          ¦  «        r|j        }t          |t          ¦  «        r4t          |j        t          ¦  «        r|�t          |j        |g¦  «        }�nut          |t          ¦  «        rºt          |j        t          ¦  «        r |j        j        �”|�‘t          |j        j        t"          ¦  «        rrt%          |j        j        j        ¦  «        }
t          |
t"          ¦  «        r?t%          |
j        ¦  «        }t          |t          ¦  «        rt          |j        |g¦  «        }n¦t          j        | d|j        ¦  «         d}nˆ|�T|  
                    |¦  «        du r=|�t          j        | d|j        ¦  «         |�t+          |t-          ¦   «         g¦  «        }n2|€0d	}t          j        | |                     |j        ¦  «        |¦  «         |€t3          | ||¦  «        S |�T|	r@t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t5          | |||¦  «        S t7          | |||¦  «        S |S )
a¦  Infer the type of mapping from a relationship.

    E.g.::

        @reg.mapped
        class MyClass:
            # ...

            addresses = relationship(Address, uselist=True)

            order: Mapped["Order"] = relationship("Order")

    Will resolve in mypy as::

        @reg.mapped
        class MyClass:
            # ...

            addresses: Mapped[List[Address]]

            order: Mapped["Order"]

    r   NÚuselistÚcollection_classFTz>Expected Python collection type for collection_class parameterzOSending uselist=False and collection_class at the same time does not make sensezäCan't infer scalar or collection for ORM mapped expression assigned to attribute '{}' if both 'uselist' and 'collection_class' arguments are absent from the relationship(); please specify a type annotation on the left hand side.)Ú
isinstanceÚrvaluer   Úargsr   r!   r   r   r   Úget_callexpr_kwargÚ
parse_boolÚ
named_typer   ÚNAMED_TYPE_BUILTINS_LISTÚcalleer
   Útyper   r   Úret_typeÚfailr   r   ÚformatÚnamer2   Ú3_infer_collection_type_from_left_and_inferred_rightÚ(_infer_type_from_left_and_inferred_right)r   r    r!   r"   Útarget_cls_argr6   Úrelated_object_typeÚuselist_argÚcollection_cls_argÚtype_is_a_collectionÚrtÚcallable_ret_typeÚmsgs                r7   r.   r.   P   sÐ  € õ< �d”k¥8Ñ,Ô,Ð,Ð,Ð,Ø”[Ô% aÔ(€NØ15Ðå�.¥(Ñ+Ô+ð Aµ
ØÔ�Xñ1ô 1ð Að -Ô1ÐÝ'Ð(;¸RÑ@Ô@Ðõ  Ô)¨$¬+°yÑAÔA€KÝ/3Ô/FØŒÐ'ñ0ô 0Ðð !Ðð 	ÐØ�NŠN˜;Ñ'Ô'¨4Ð/Ð/ØÐ&à#ÐØÐ+Ø#&§>¢>ÝÔ.Ð1EÐ0Fñ$ô $Ð ùð 	Ð˜sŸ~š~¨kÑ:Ô:¸dÐBÑBØ
Ñ
(Ø#ÐÝÐ(­(Ñ3Ô3ð 	;Ø!3Ô!:ÐåÐ(­(Ñ3Ô3ð $	(½
ØÔ#¥Xñ9
ô 9
ð $	(ð $Ð/õ (0Ø&Ô+Ð.BÐ-Cñ(ô (Ð$ùõ Ð)­8Ñ4Ô4ð	(åÐ-Ô2µGÑ<Ô<ð	(ð #Ô'Ô,Ð8à#Ð/õ
 Ð0Ô5Ô:½LÑIÔIð 	Ý(Ð);Ô)@Ô)EÔ)NÑOÔO�Bå! "¥lÑ3Ô3ð Ý,;¸B¼KÑ,HÔ,HÐ)Ý%Ð&7½ÑBÔBð Ý3;Ø 1Ô 6Ø!5Ð 6ñ4ô 4Ð0øõ
 ŒIØð-à”ñ	ô ð ð $(Ð Ð Ø	Ð	  S§^¢^°KÑ%@Ô%@ÀEÐ%IÐ%IØÐ)ÝŒIØð&à”ñ	ô ð ð  Ð+Ý#,Ø%¥x¡z¤zÐ2ñ$ô $Ð øð
 #Ð*ð9ð õ ŒI�c˜3Ÿ:š: d¤iÑ0Ô0°$Ñ7Ô7Ð7àÐ#Ý2Ø�Ð.ñ
ô 
ð 	
ð 
!Ð	,Øð 	ÝÐ5µxÑ@Ô@Ð@Ð@Ð@ÝÐ2µHÑ=Ô=Ð=Ð=Ð=ÝFØ�TÐ2Ð4Hñô ð õ <ØØØ'Ø$ñ	ô ð ð $Ð#r9   c                óF  — t          |j        t          ¦  «        sJ ‚|j        j        d         }d}t          |t          ¦  «        r2t          |j        t          ¦  «        r|j        }t          |g ¦  «        }nd}|€t          | ||¦  «        S |�t          | |||¦  «        S |S )z+Infer the type of mapping from a Composite.r   N)
r=   r>   r   r?   r   r!   r   r   r2   rK   )r   r    r!   r"   rL   r6   rM   s          r7   r4   r4   ö   sÎ   € õ �d”k¥8Ñ,Ô,Ð,Ð,Ð,Ø”[Ô% aÔ(€NØÐå�.¥(Ñ+Ô+ð $µ
ØÔ�Xñ1ô 1ð $ð -Ô1ÐÝ'Ð(;¸RÑ@Ô@ÐÐà#ÐàÐ#Ý2Ø�Ð.ñ
ô 
ð 	
ð 
!Ð	,Ý7Ø�Ð.Ð0Dñ
ô 
ð 	
ð $Ð#r9   c                ó„   — t          |j        t          ¦  «        sJ ‚t          j        |¦  «        }t          | ||¦  «        S )zVInfer the type of mapping from a right side expression
    that returns Mapped.


    )r=   r>   r   r   Útype_for_calleer2   )r   r    r!   r"   r$   Úthe_mapped_types         r7   r*   r*     sI   € õ �d”k¥8Ñ,Ô,Ð,Ð,Ð,õ Ô*Ð+@ÑAÔA€Oå.ØˆTÐ*ñô ð r9   c                óè  — t          |j        t          ¦  «        sJ ‚|j        j        rb|j        j        d         }t          |t          ¦  «        r;t	          j        |j        ¦  «        }|t          j        u rt          | ||||¬¦  «        S t          |j        t          ¦  «        r>t	          j        |j        j        ¦  «        }|t          j	        u rt          | |||¦  «        S t          | ||¦  «        S )zœInfer the type of mapping from a ColumnProperty.

    This includes mappings against ``column_property()`` as well as the
    ``deferred()`` function.

    r   )Úright_hand_expression)r=   r>   r   r?   r   r(   rD   r+   r,   ÚQUERY_EXPRESSIONr2   )r   r    r!   r"   Úfirst_prop_argr5   s         r7   r0   r0   6  s  € õ �d”k¥8Ñ,Ô,Ð,Ð,Ð,à„{Ôð ØœÔ)¨!Ô,ˆå�n¥hÑ/Ô/ð 	ÝÔ.¨~Ô/DÑEÔEˆGð �%œ,Ð&Ð&Ý3ØØØØ+Ø*8ðñ ô ð õ �$”+�xÑ(Ô(ð ÝÔ*¨4¬;Ô+=Ñ>Ô>ˆð •eÔ,Ð,Ð,Ý/ØØØØ'ñ	ô ð õ /ØˆTÐ*ñô ð r9   NrY   úOptional[CallExpr]c                ó8  — t          |t          ¦  «        sJ ‚d}|€#t          |j        t          ¦  «        sdS |j        }|j        dd…         D ]®}t          |t          ¦  «        r+t          |j        t          ¦  «        r|j        }|j        } nnŒBt          |t          t          f¦  «        r!t          |j	        t          ¦  «        r|}d} n1Œt          |t          f¦  «        rŒ–t          |t          f¦  «        rŒ­J ‚|€dS t          |j	        t          ¦  «        rpt          j        |j	        j        t          j        ¦  «        rGt#          | |j	        |¦  «        }|�t%          | |||¦  «        S t'          |t)          ¦   «         g¦  «        S t+          | ||¦  «        S )aá  Infer the type of mapping from a Column.

    E.g.::

        @reg.mapped
        class MyClass:
            # ...

            a = Column(Integer)

            b = Column("b", String)

            c: Mapped[int] = Column(Integer)

            d: bool = Column(Boolean)

    Will resolve in MyPy as::

        @reg.mapped
        class MyClass:
            # ...

            a: Mapped[int]

            b: Mapped[str]

            c: Mapped[int]

            d: Mapped[bool]

    Nr   é   © )r=   r   r>   r   r?   rD   r   r   r   r!   r   r   r   r   Ú
mro_has_idÚmroÚ
TYPEENGINEÚ#extract_python_type_from_typeenginerK   r   r   r2   )	r   r    r!   r"   rY   rD   Ú
column_argÚ	type_argsr6   s	            r7   r,   r,   g  sÍ  € õL �d�CÑ Ô Ð Ð Ð à€FàÐ$Ý˜$œ+¥xÑ0Ô0ð 	Ø�4à $¤Ðà+Ô0°°1°Ô5ð ð ˆ
Ý�j¥(Ñ+Ô+ð 	Ý˜*Ô+­WÑ5Ô5ð à#Ô*�Ø2<´/�	Ø�ð	õ
 ˜
¥X­zÐ$:Ñ;Ô;ð 	Ý˜*œ/­8Ñ4Ô4ð à#�Ø�	Ø�ð Ý˜
¥W JÑ/Ô/ð 	àÝ˜
¥Z MÑ2Ô2ð 	ð à�5à€~Øˆtå�&”+�xÑ(Ô(ð 
­UÔ-=ØŒŒ�Ô)ñ.ô .ð 
õ  CØ�”˜iñ 
ô  
Ðð #Ð.Ý;Ø�TÐ2Ð4Hñô ð õ
 Ð2µH±J´JÐ?Ñ@Ô@Ð@õ 3Ø�Ð.ñ
ô 
ð 	
r9   r   r6   Úorig_left_hand_typeÚorig_python_type_for_typec                ó<  — |€|}|€|}t          ||¦  «        sƒ|                      t          j        |g¦  «        }d}t	          j        | |                     |j        t	          j        || j	        ¦  «        t	          j        || j	        ¦  «        ¦  «        |¦  «         |S )z�Validate type when a left hand annotation is present and we also
    could infer the right hand side::

        attrname: SomeType = Column(SomeDBType)

    NzRLeft hand assignment '{}: {}' not compatible with ORM mapped expression of type {})
r   rB   r   ÚNAMED_TYPE_SQLA_MAPPEDr   rG   rH   rI   Úformat_typeÚoptions)r   r!   r"   r6   rf   rg   Úeffective_typerS   s           r7   rK   rK   Ê  sº   € ð Ð"Ø5ÐØ Ð(Ø$8Ð!åÐ-Ð/CÑDÔDð 
ØŸšÝÔ(Ð+DÐ*Eñ
ô 
ˆð
4ð 	õ 	Œ	ØØ�JŠJØ”	ÝÔ Ð!4°c´kÑBÔBÝÔ  °´Ñ=Ô=ñô ð
 ñ	
ô 	
ð 	
ð Ðr9   r   c                ó,  — |}|}|j         r5t          |j         d         ¦  «        }t          |j         d         ¦  «        }n|}|}t          |t          t          f¦  «        sJ ‚t          |t          t          f¦  «        sJ ‚t          | |||||¬¦  «        S )Nr   )rf   rg   )r?   r   r=   r   r   rK   )r   r!   r"   r6   rf   rg   Úleft_hand_argÚpython_type_args           r7   rJ   rJ   ô  s²   € ð 2ÐØ 4ÐàÔ#ð /Ý'Ð(?Ô(DÀQÔ(GÑHÔHˆÝ)Ð*>Ô*CÀAÔ*FÑGÔGˆˆà/ˆØ.ˆå�m¥hµ	Ð%:Ñ;Ô;Ð;Ð;Ð;Ý�o­µ)Ð'<Ñ=Ô=Ð=Ð=Ð=å3ØØØØØ/Ø";ðñ ô ð r9   c                óÚ   — |€hd}t          j        | |                     |j        ¦  «        |¦  «         |                      t
          j        t          t          j	        ¦  «        g¦  «        S |S )z‘Determine the type based on explicit annotation only.

    if no annotation were present, note that we need one there to know
    the type.

    Nz”Can't infer type from ORM mapped expression assigned to attribute '{}'; please specify a Python type or Mapped[<python type>] on the left hand side.)
r   rG   rH   rI   rB   r   ri   r   r   Úspecial_form)r   r!   r"   rS   s       r7   r2   r2     sl   € ð Ð&ð;ð 	õ 	Œ	�#�s—z’z $¤)Ñ,Ô,¨dÑ3Ô3Ð3à�~Š~ÝÔ(­7µ9Ô3IÑ+JÔ+JÐ*Kñ
ô 
ð 	
ð 'Ð&r9   r   re   úSequence[Expression]c                óR  — |j         dk    r‹|r‰|d         }t          |t          ¦  «        rLt          |j        t          ¦  «        r2|j        j        D ]$}|j         dk    rt          |j        g ¦  «        c S Œ%n |                      t          j	        g ¦  «        S | 
                    d¦  «        sJ d|z  ¦   «         ‚|                      d¦  «        }|�t          |j        t          ¦  «        sJ ‚t          t          |g ¦  «        |j        ¦  «        }t          |j        d         ¦  «        S )Nzsqlalchemy.sql.sqltypes.Enumr   z	enum.Enumz"sqlalchemy.sql.type_api.TypeEnginez+could not extract Python type from node: %séÿÿÿÿ)Úfullnamer=   r   r!   r   ra   r   rB   r   ÚNAMED_TYPE_BUILTINS_STRÚhas_baseÚlookup_fully_qualified_or_noner   r   r?   )r   r!   re   Ú	first_argÚbase_Útype_engine_symÚtype_engines          r7   rc   rc   .  sV  € ð
 „}Ð6Ò6Ð6¸9Ð6Ø˜a”Lˆ	Ý�i¥Ñ)Ô)ð 	E­jØŒN�Hñ/
ô /
ð 	Eð #œÔ+ð 8ð 8�Ø”> [Ò0Ð0Ý# I¤N°BÑ7Ô7Ð7Ð7Ð7ð 1ð8ð
 —>’>¥%Ô"?ÀÑDÔDÐDà�=Š=Ð=Ñ>Ô>ð ð Ø5¸Ñ<ñô Ð>ð ×8Ò8Ø,ñô €Oð Ð&­:ØÔ�hñ,ô ,Ð&Ð&ð õ ,Ý��rÑÔØÔñô €Kõ ˜;Ô+¨BÔ/Ñ0Ô0Ð0r9   )r   r   r    r   r!   r   r"   r#   r$   r   r%   r#   )
r   r   r    r   r!   r   r"   r#   r%   r#   r'   )r   r   r    r   r!   r   r"   r#   rY   r\   r%   r#   )NN)r   r   r!   r   r"   r   r6   r   rf   r#   rg   r#   r%   r#   )
r   r   r!   r   r"   r   r6   r   r%   r#   )r   r   r!   r   r"   r#   r%   r#   )r   r   r!   r   re   rr   r%   r   )-Ú
__future__r   Útypingr   r   Úmypy.maptyper   Ú
mypy.nodesr   r   r	   r
   r   r   r   r   r   r   r   Úmypy.pluginr   Úmypy.subtypesr   Ú
mypy.typesr   r   r   r   r   r   r   r   Ú r   r   r8   r.   r4   r*   r0   r,   rK   rJ   r2   rc   r_   r9   r7   ú<module>r…      sæ  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð% ð % ð % ð % ðPc$ð c$ð c$ð c$ðL$ð $ð $ð $ð@ð ð ð ð@.ð .ð .ð .ðl 15ð`
ð `
ð `
ð `
ð `
ðP 15Ø6:ð'ð 'ð 'ð 'ð 'ðTð ð ð ð:'ð 'ð 'ð 'ð: 1ð  1ð  1ð  1ð  1ð  1r9   