o
    tBh[n                     @  sp  U d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z. dd	l/m0Z0m1Z1m2Z2m3Z3m4Z4 dd
l5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZC dZDdeEd< dZFdeEd< dZGdeEd< G dd dZHdS )zZSemantic analysis of named tuple definitions.

This is conceptually part of mypy.semanal.
    )annotations)contextmanager)IteratorListMappingcast)Final)TypeTranslationErrorexpr_to_unanalyzed_type)ARG_NAMED_OPTARG_OPTARG_POSMDEFArgumentAssignmentStmtBlockCallExprClassDefContext	DecoratorEllipsisExpr
ExpressionExpressionStmtFuncBaseFuncDefListExprNamedTupleExprNameExprPassStmtRefExprStrExprSymbolTableSymbolTableNodeTempNode	TupleExprTypeInfoTypeVarExprVar)Options)PRIORITY_FALLBACKSSemanticAnalyzerInterfacecalculate_tuple_fallbackhas_placeholderset_callable_name)TYPED_NAMEDTUPLE_NAMESAnyTypeCallableTypeLiteralType	TupleTypeType	TypeOfAnyTypeTypeTypeVarLikeTypeTypeVarTypeUnboundTypehas_type_vars)get_unique_redefinition_name)__new____init__	__slots____getnewargs___fields_field_defaults_field_types_make_replace_asdict_source__annotations__r   NAMEDTUPLE_PROHIBITED_NAMESzYInvalid statement in NamedTuple definition; expected "field_name: field_type [= default]"NAMEDTUP_CLASS_ERROR_NTSELF_TVAR_NAMEc                   @  st   e Zd ZdDddZdEddZdFddZdGddZdHd"d#ZdId&d'ZdJd-d.Z	dKd9d:Z
edLd=d>ZdMdAdBZdCS )NNamedTupleAnalyzeroptionsr(   apir*   returnNonec                 C  s   || _ || _d S N)rL   rM   )selfrL   rM    rR   n/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypy/semanal_namedtuple.pyr<   ]   s   
zNamedTupleAnalyzer.__init__defnr   is_stub_fileboolis_func_scopetuple[bool, TypeInfo | None]c              	   C  s   |j D ]f}t|tri| j| |jtv ri| ||}|du r" dS |\}}}|r:d|jvr:| jdt	|j
 7  _d}	t|jtrF|jj}	| |j||||j
|	}
t|
dd|_|j
|j_
|j|j_d|
f  S qdS )a  Analyze if given class definition can be a named tuple definition.

        Return a tuple where first item indicates whether this can possibly be a named tuple,
        and the second item is the corresponding TypeInfo (may be None if not ready and should be
        deferred).
        N)TN@Tis_typed)FN)base_type_exprs
isinstancer   rM   acceptfullnamer.   check_namedtuple_classdefnamestrlineanalyzedr   infobuild_namedtuple_typeinfocolumn)rQ   rT   rU   rW   	base_exprresultitemstypesdefault_itemsexisting_infore   rR   rR   rS   analyze_namedtuple_classdefa   s,   
	




z.NamedTupleAnalyzer.analyze_namedtuple_classdef:tuple[list[str], list[Type], dict[str, Expression]] | Nonec           	      C  s  | j jdk r|s| d| g g i fS t|jdkr | d| g }g }i }|jjD ]}t|ts]t|t	sAt|t
rBt|jtrBq*t|ttfrJq*t|t
rVt|jtrVq*| t| q*t|jdkslt|jd tss| t| q*|jd j}|| |jdu r|ttj n| jj|j| j jo| j  d}|du r dS || |dr| d	| | |jdu st|d
r|js| t| q*t|j t!r|r| d| q*|j ||< q*|||fS )zParse and validate fields in named tuple class definition.

        Return a three tuple:
          * field names
          * field types
          * field default values
        or None, if any of the types are not ready.
        )      z7NamedTuple class syntax is only supported in Python 3.6   z"NamedTuple should be a single baser   Nallow_placeholder_z7NamedTuple field name cannot start with an underscore: 
new_syntaxz:Non-default NamedTuple fields cannot follow default fields)"rL   python_versionfaillenr\   defsbodyr]   r   r   r   exprr   r   r   r    rH   lvaluesr   ra   appendtyper/   r4   unannotatedrM   	anal_typeenable_recursive_aliasesrW   
startswithhasattrrv   rvaluer#   )	rQ   rT   rU   rj   rk   rl   stmtra   rd   rR   rR   rS   r`      sb   










z,NamedTupleAnalyzer.check_namedtuple_classdefnoder   var_name
str | None9tuple[str | None, TypeInfo | None, list[TypeVarLikeType]]c                 C  s  t |ts
ddg fS |}|j}t |tsddg fS |j}|dkr#d}n|tv r*d}nddg fS | ||}|r@|\}	}
}}}}n>|rP|}|rO|dt|j 7 }n	dt|j  }}| 	|g g i |jd}| 
|||| ||ksr|ry| j|| ||g fS |s|dg fS |r|}n|}|du s|r|dt|j 7 }t|dkrdd	 t|	t| d |D }ni }d}t |jtr|jj}| 	||	|
||j|}|r| 
|||| nt||d
|_|j| ||ks|r| j|| |||fS )a  Check if a call defines a namedtuple.

        The optional var_name argument is the name of the variable to
        which this is assigned, if any.

        Return a tuple of two items:
          * Internal name of the named tuple (e.g. the name passed as an argument to namedtuple)
            or None if it is not a valid named tuple
          * Corresponding TypeInfo, or None if not ready.

        If the definition is invalid but looks like a namedtuple,
        report errors but return (some) TypeInfo.
        Ncollections.namedtupleFTrY   znamedtuple@r   c                 S  s   i | ]\}}||qS rR   rR   ).0arg_namedefaultrR   rR   rS   
<dictcomp>  s    
z7NamedTupleAnalyzer.check_namedtuple.<locals>.<dictcomp>rZ   )r]   r   calleer   r_   r.   parse_namedtuple_argsrb   rc   rf   store_namedtuple_inforM   add_symbol_skip_localry   ziprd   r   re   set_line)rQ   r   r   rW   callr   r_   r[   ri   rj   rk   defaultstypename	tvar_defsokra   re   rl   rm   rR   rR   rS   check_namedtuple   sf   






	
z#NamedTupleAnalyzer.check_namedtuplere   r%   ra   rb   r   r   r[   c                 C  s.   | j ||| t||d|_|j| d S )NrZ   )rM   
add_symbolr   rd   r   )rQ   re   ra   r   r[   rR   rR   rS   r   8  s   z(NamedTupleAnalyzer.store_namedtuple_infor_   WNone | tuple[list[str], list[Type], list[Expression], str, list[TypeVarLikeType], bool]c                 C  s  |t v rdnd}|j}t|dk r| d| d| dS g }t|dkr`|t v r1| d| dS t|jdd dD ]$\}}|dkr_|| }t|ttfrTt	|j
}n	| d	||  nq;|jdd ttgkrw| d
| d| dS t|d ts| d| d| dS tt|jd j}	g }
g }t|d ttfs|dkrt|d tr|d }|jdd }n[| d|| dS |d }|dkrtdd |j
D r| d| dS dd |j
D }n-dd |j
D }| j|}| |j
|}|du rdS |\}}
}}|sg g g |	g dfS |
sdd |D }
dd |D }|r7| d| dd| | t|t|krR| d| d| |dt| }||
||	|dfS ) aN  Parse a namedtuple() call into data needed to construct a type.

        Returns a 5-tuple:
        - List of argument names
        - List of argument types
        - List of default values
        - First argument of namedtuple
        - Whether all types are ready.

        Return None if the definition didn't typecheck.
        
NamedTuple
namedtuple   zToo few arguments for "z()"Nz%Too many arguments for "NamedTuple()"r   z?List or tuple literal expected as the defaults argument to {}()zUnexpected arguments to "r   "z2()" expects a string literal as the first argumentrr   r   , z?List or tuple literal expected as the second argument to "{}()"c                 s  s    | ]	}t |t V  qd S rP   )r]   r    r   itemrR   rR   rS   	<genexpr>  s    z;NamedTupleAnalyzer.parse_namedtuple_args.<locals>.<genexpr>z.String literal expected as "namedtuple()" itemc                 S  s   g | ]}t t|jqS rR   )r   r    valuer   rR   rR   rS   
<listcomp>  s    z<NamedTupleAnalyzer.parse_namedtuple_args.<locals>.<listcomp>c                 S  s.   g | ]}t |trt|jd kr|jd qS )r   rr   )r]   r$   ry   rj   )r   trR   rR   rS   r     s    Fc                 S  s   g | ]}t tjqS rR   )r/   r4   r   r   ru   rR   rR   rS   r         c                 S  s   g | ]	}| d r|qS )ru   )r   r   rR   rR   rS   r         z1()" field names cannot start with an underscore: z, z$Too many defaults given in call to "T)r.   argsry   rx   	enumerate	arg_namesr]   r   r$   listrj   format	arg_kindsr   r    r   r   replacesplitanyrM   get_and_bind_all_tvars"parse_namedtuple_fields_with_typesjoin)rQ   r   r_   	type_namer   r   ir   argr   rk   r   str_exprrj   listexpr
type_exprsri   ru   r   
underscorerR   rR   rS   r   ?  s   

z(NamedTupleAnalyzer.parse_namedtuple_argsnodeslist[Expression]contextr   ;tuple[list[str], list[Type], list[Expression], bool] | Nonec           
   	   C  s  g }g }|D ]}t |trt|jdkr| d|  dS |j\}}t |tr.||j n	| d|  dS zt|| j	| j
j}W n tyS   | d| Y  dS w | j
j|| j	joa| j
  d}	t |	trnttj}	|	du rzg g g df  S ||	 q| d|  dS ||g d	fS )
zParse typed named tuple fields.

        Return (names, types, defaults, whether types are all ready), or None if error occurred.
        r   z'Invalid "NamedTuple()" field definitionNz!Invalid "NamedTuple()" field namezInvalid field typers   Fz&Tuple expected as "NamedTuple()" fieldT)r]   r$   ry   rj   rx   r    r~   r   r
   rL   rM   rU   r	   r   r   rW   r8   r/   r4   
from_error)
rQ   r   r   rj   rk   r   ra   	type_noder   rd   rR   rR   rS   r     s>   





z5NamedTupleAnalyzer.parse_namedtuple_fields_with_typesrj   	list[str]rk   
list[Type]rl   Mapping[str, Expression]rc   intrm   TypeInfo | Nonec                   sN  | j dttj}| j d|g}| j d|gp!| j d}	| j d|gp0| j d}
| j d|g}| j d|g}| j dfdd|D }t||}|p^| j ||d	_t||j	rwt
j	jrw| j jd	d
  _d| ijd< t
sts| j tfdd 	dAdBfdd}dd t||D }|D ]}||d	d qdd t||D }tfdd|D |}|td|d	d |td|	d	d |td |	d	d |td!d	d |td"|
d	d |td#d	d | jjd$kr|td%|d	d jd usJ ttjd& t | j j g j		dAdCfd/d0}|d1d2d |D d3 dD fd5d6|d7fd8d|D d	d9 |d:g |
d; ttj}|d<d	ttd=||d tttd>|t  t!ttd?|t  t!gd@ t"tjd& t g j}t#t$|j%t< S )ENzbuiltins.strzbuiltins.tuplezbuiltins.dictzbuiltins.objectztyping.Iterablezbuiltins.functionc                   s   g | ]}t | qS rR   )r1   r   strtyperR   rS   r     r   z@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<listcomp>T)force_progressfieldsr   c                     s   t  S rP   )r+   rR   )
tuple_baserR   rS   <lambda>  s    z>NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<lambda>Fvarr'   is_initialized_in_classrV   is_propertyrN   rO   c                   s<    | _ || _|| _ j d| j | _tt|  j| j< d S )N.)	re   r   r   r_   ra   	_fullnamer"   r   names)r   r   r   )re   rR   rS   	add_field  s
   z?NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.add_fieldc                 S     g | ]	\}}t ||qS rR   r'   r   r   typrR   rR   rS   r     r   )r   c                 S  r   rR   r   r   rR   rR   rS   r   
  r   c                   s   g | ]} qS rR   rR   r   r   rR   rS   r     s    r?   )r   rA   r@   rE   rF   __doc__)rp   
   __match_args__r   funcnamerb   retr3   r   list[Argument]is_classmethodis_newc                   sB  |s|rt tdtd tg}n
t tdd tg}|| }dd |D }dd |D }dd |D }d |vs;J tttt |||| }	g|	_	t
| |tg }
|
_||
_t|	|
|
_jd |  |
_|
_|rt| |
j}d|_|_|
j|_d|
_t|
td	g|}|_tt|}ntt|
}d|_|j| < d S )
N_cls_selfc                 S     g | ]}|j qS rR   )type_annotationr   r   rR   rR   rS   r   -      zTNamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.add_method.<locals>.<listcomp>c                 S  s   g | ]}|j jqS rR   )variablera   r   rR   rR   rS   r   .      c                 S  r   rR   )kindr   rR   rR   rS   r   /  r   r   Tclassmethod)r   r'   r5   make_normalizedr   r0   r   r   r3   	variablesr   r   re   is_classr-   r   r_   r   rc   r   is_decoratedr   r   r"   r   plugin_generatedr   )r   r   r   r   r   firstrk   rj   r   	signaturefuncvdecsym)function_typere   rc   selftypetvdrR   rS   
add_method   s8   
z@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.add_methodrC   c                 S  s   g | ]}t ||jt tqS rR   )r   r   r   r   r   r   rR   rR   rS   r   J  s    )r   r   r   c                   s.     | jd }|d u rtnt}t| | j||S rP   )getra   r   r   r   r   )r   r   r   )rl   rR   rS   make_init_argM  s   zCNamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.make_init_argr;   c                   s   g | ]} |qS rR   rR   r   )r   rR   rS   r   R  r   )r   r   r   rD   )r   r   rB   iterablenewry   )r   r   r   )FF)r   r'   r   rV   r   rV   rN   rO   )r   rb   r   r3   r   r   r   rV   r   rV   rN   rO   )r   r'   rN   r   )&rM   
named_typer/   r4   special_formnamed_type_or_noner2   basic_new_typeinfois_named_tuplespecial_aliasr,   targetdeferupdate_tuple_typerc   copymetadatar9   schedule_patchr)   r   r'   rL   rw   
tuple_typer7   rJ   r_   
tvar_scopenew_unique_func_idr   r   r   r   r&   r"   r   r   )rQ   ra   rj   rk   rl   rc   rm   implicit_anybasetuple_typedictypeordereddictypefallbackiterable_typeliteralsmatch_args_typer   r   r   varstuple_of_stringsr   special_form_anyself_tvar_exprrR   )	rl   r   re   rc   r   r   r   r   r   rS   rf     s   	





	
'
z,NamedTupleAnalyzer.build_namedtuple_typeinfonamed_tuple_infoIterator[None]c           	      c  s    |j }t |_ dV  tD ](}||j v r5|||j | u rq|j | j}|dus+J | d| d| q| D ]/\}}||j v rd|dkrHq:|j | }t|jtt	frY|j
sYq:t||j }||j |< ||j |< q:dS )aj  Preserve the generated body of class-based named tuple and then restore it.

        Temporarily clear the names dict so we don't get errors about duplicate names
        that were already set in build_namedtuple_typeinfo (we already added the tuple
        field names while generating the TypeInfo, and actual duplicates are
        already reported).
        Nz'Cannot overwrite NamedTuple attribute "r   r   )r   r!   rG   r   r   rx   rj   r]   r   r   r   r:   )	rQ   r  nt_names
prohibitedctxkeyr   r   r_keyrR   rR   rS   save_namedtuple_bodyf  s.   	



z'NamedTupleAnalyzer.save_namedtuple_bodymsgr!  c                 C  s   | j || d S rP   )rM   rx   )rQ   r%  r!  rR   rR   rS   rx     s   zNamedTupleAnalyzer.failN)rL   r(   rM   r*   rN   rO   )rT   r   rU   rV   rW   rV   rN   rX   )rT   r   rU   rV   rN   ro   )r   r   r   r   rW   rV   rN   r   )
re   r%   ra   rb   r   r   r[   rV   rN   rO   )r   r   r_   rb   rN   r   )r   r   r   r   rN   r   )ra   rb   rj   r   rk   r   rl   r   rc   r   rm   r   rN   r%   )r  r%   rN   r  )r%  rb   r!  r   rN   rO   )__name__
__module____qualname__r<   rn   r`   r   r   r   r   rf   r   r$  rx   rR   rR   rR   rS   rK   \   s    


"
H
m

b
+ )rK   N)Ir   
__future__r   
contextlibr   typingr   r   r   r   typing_extensionsr   mypy.exprtotyper	   r
   
mypy.nodesr   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'   mypy.optionsr(   mypy.semanal_sharedr)   r*   r+   r,   r-   
mypy.typesr.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   	mypy.utilr:   rG   rF   rH   rJ   rK   rR   rR   rR   rS   <module>   s     |8
