
    miz                       U d Z ddlmZ ddlZddl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 ddlmZmZ dd	l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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZM dZNdeOd<   dZPdeOd<   dZQdeOd<    G d d          ZRdS )zZSemantic analysis of named tuple definitions.

This is conceptually part of mypy.semanal.
    )annotationsN)	ContainerIteratorMapping)contextmanager)Finalcast)ARG_TYPE	ErrorCode)TypeTranslationErrorexpr_to_unanalyzed_type)MessageBuilder) ARG_NAMED_OPTARG_OPTARG_POSMDEFArgumentAssignmentStmtBlockCallExprClassDefContext	DecoratorEllipsisExpr
ExpressionExpressionStmtFuncBaseFuncDefListExprNamedTupleExprNameExprPassStmtPlaceholderNodeRefExpr	StatementStrExprSymbolTableSymbolTableNodeTempNode	TupleExprTypeInfoTypeVarExprVaris_StrExpr_list)Options)PRIORITY_FALLBACKSSemanticAnalyzerInterfacecalculate_tuple_fallbackhas_placeholderset_callable_name)TYPED_NAMEDTUPLE_NAMESAnyTypeCallableTypeLiteralType	TupleTypeType	TypeOfAnyTypeType	TypeVarId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                  x    e Zd ZdAd	ZdBdZdCdZdDdZdEd ZdFd#ZdGd)Z	dHd4Z
edId7            ZdJd;ZdKdLd@Zd<S )MNamedTupleAnalyzeroptionsr/   apir1   msgr   returnNonec                0    || _         || _        || _        d S N)rU   rV   rW   )selfrU   rV   rW   s       o/var/www/html/bestrading.cuttalo.com/scripts/kaggle-env/lib/python3.11/site-packages/mypy/semanal_namedtuple.pyrD   zNamedTupleAnalyzer.__init__d   s         defnr   is_stub_fileboolis_func_scopetuple[bool, TypeInfo | None]c           	     j   |j         D ])}t          |t                    r| j                            |           |j        t          v r|                     ||          }| dS |\  }}}}	|r.d|j        vr%|xj        dt          |j
                  z   z  c_        d}
t          |j        t                    r|j        j        }
|                     |j        ||||j
        |
          }t          |d          |_        |j
        |j        _
        |j        |j        _        |	|j        _        d|fc S +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$   rV   acceptfullnamer5   check_namedtuple_classdefnamestrlineanalyzedr    infobuild_namedtuple_typeinfocolumndefsbody)r\   r_   r`   rb   	base_exprresultitemstypesdefault_items
statementsexisting_inforq   s               r]   analyze_namedtuple_classdefz.NamedTupleAnalyzer.analyze_namedtuple_classdefk   sA    - 	& 	&I)W-- &	***%)???!;;D,OOF~)zz>D;E5-$ :DI)=)=		S3ty>>%99		$(M!$-@@ ;(,(:99	5%	= D %34$$G$G$GDM)-DM&+/;DM(%/DIN:%%%{r^   Ktuple[list[str], list[Type], dict[str, Expression], list[Statement]] | Nonec                   t          |j                  dk    r|                     d|           g }g }i }g }|j        j        D ]}|                    |           t          |t                    st          |t                    s/t          |t                    rt          |j
        t                    rrt          |t          t          f          rt          |t                    rt          |j
        t                    r|                                 |j                            |           |                     t"          |           
t          |j                  dk    s t          |j        d         t&                    sK|                                 |j                            |           |                     t"          |           |j        d         j        }|                    |           |j        -|                    t-          t.          j                             nU| j                            |j        | j                                         dd          }	|	 dS |                    |	           |                    d          r|                     d	| |           |j        t;          |d
          r$|j        s|                     t"          |           t          |j        t@                    r|r|                     d|           |j        ||<   |j!        r(d}
|j!        D ]}| j"        #                    |
||           ||||fS )a  Parse and validate fields in named tuple class definition.

        Return a four tuple:
          * field names
          * field types
          * field default values
          * valid statements
        or None, if any of the types are not ready.
           z"NamedTuple should be a single baser   NNamedTuple item type
NamedTupleallow_placeholderprohibit_self_type"prohibit_special_class_field_types_z7NamedTuple field name cannot start with an underscore: 
new_syntaxz:Non-default NamedTuple fields cannot follow default fieldsz( for "__init_subclass__" of "NamedTuple")$lenrh   failrt   ru   appendri   r   r"   r   exprr   r   r   r&   popremoved_statementsrP   lvaluesr!   rm   typer6   r;   unannotatedrV   	anal_typerb   
startswithhasattrr   rvaluer)   keywordsrW   (unexpected_keyword_argument_for_function)r\   r_   r`   rx   ry   rz   r{   stmtrm   rp   for_functionkeys               r]   rl   z,NamedTupleAnalyzer.check_namedtuple_classdef   sW    t#$$q((II:DAAA/1&(
IN 8	6 8	6Dd###dN33 66dH-- t^449CDI|9\9\ dY$9:: dN33 
49g8V8V    '..t444		.5555T\""Q&&ja(.S.S&   '..t444		.5555 |A+T"""9$LL)>!?!?@@@@
  $x11	.2h.D.D.F.F*F+A;G	  2    H  '#ttLL***??3'' IIXRVXXZ^   9$l(C(C$DO$II2D9999X66 6$ 		XZ^   +/+M$''= 	[EL} [ [AA,PSUYZZZZe]J66r^   noder   var_name
str | None9tuple[str | None, TypeInfo | None, list[TypeVarLikeType]]c                j   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|r|}|r|dt          |j                  z   z  }ndt          |j                  z   x}}| 	                    |g g i |j        d          }| 
                    ||||           ||k    s|r| j                            ||           ||g fS |s|dg fS |r|}n|}||r|dt          |j                  z   z  }|r1d t          |	t          |           d         |          D             }ni }d}t          |j        t                     r|j        j        }| 	                    ||	|
||j        |          }|r| 
                    ||||           n0t!          ||          |_        |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.namedtupleFTre   znamedtuple@c                    i | ]\  }}||	S  r   ).0arg_namedefaults      r]   
<dictcomp>z7NamedTupleAnalyzer.check_namedtuple.<locals>.<dictcomp>&  s+       &7h'  r^   rf   )ri   r   calleer$   rk   r5   parse_namedtuple_argsrn   ro   rr   store_namedtuple_inforV   add_symbol_skip_localzipr   rp   r    rq   set_line)r\   r   r   rb   callr   rk   rg   rw   rx   ry   defaultstypename	tvar_defsokrm   rq   rz   r|   s                      r]   check_namedtuplez#NamedTupleAnalyzer.check_namedtuple   s     $)) 	"r>!&'** 	"r>!?///HH///HHr>!++D(;; 	&>D;E5(Hi  A  1C#di..00D"/#di.."@@x11$BDItTTD&&tXtXFFFx=..tT:::T2%% 	&T2%%  	DDD} C#di..((D 	 ;>uc(mm^EUEU?VX`;a;a  MM Mdm^44 	/ M.M--%ty-
 
  	)&&tXtXFFFF*4(CCCDMM""4((( 8}H**4666y((r^   rq   r+   rm   rn   r   r   rg   c                    | j                             |||           t          ||          |_        |j                            |           d S )Nrf   )rV   
add_symbolr    rp   r   )r\   rq   rm   r   rg   s        r]   r   z(NamedTupleAnalyzer.store_namedtuple_infoL  sN     	D$---&th???t$$$$$r^   rk   WNone | tuple[list[str], list[Type], list[Expression], str, list[TypeVarLikeType], bool]c                   |t           v rdnd}|j        }t          |          dk     r|                     d| d|           dS g }d}t          |          dk    r|t           v r|                     d|           dS t	          |j        dd         d          D ]\  }}|d	k    rc||         }	t          |	t          t          f          rt          |	j
                  }D|                     d
                    |          |	           n|dk    rS||         }	t          |	t                    r|	j        dv r|	j        dk    }|                     d| d|	t                     |j        dd         t           t           gk    r|                     d| d|           dS t          |d         t"                    s|                     d| d|           dS |d         j        }
g }g }t          |d         t          t          f          s|dk    rQt          |d         t"                    r6|d         }|j                            dd                                          }n|                     d                    |          |           dS |d         }|dk    r>t+          |j
                  s|                     d|           dS d |j
        D             }n[d |j
        D             }| j                            |          }|                     |j
        |          }|dS |\  }}}}|sg g g |
g dfS |sd |D             }g }t3                      }t	          |          D ]\  }}|                     ||          }|+|                    |           |                    |           H|s|                     d| d| |           d| }|                    |           |                    |           t          |          t          |          k    r1|                     d | d|           |dt          |                   }||||
|d!fS )"a  Parse a namedtuple() call into data needed to construct a type.

        Returns a 6-tuple:
        - List of argument names
        - List of argument types
        - List of default values
        - First argument of namedtuple
        - All typevars found in the field definition
        - Whether all types are ready.

        Return None if the definition didn't typecheck.
        r   
namedtuple   zToo few arguments for "z()"NFz%Too many arguments for "NamedTuple()"r   z?List or tuple literal expected as the defaults argument to {}()rename)TrueFalser   z5Boolean literal expected as the "rename" argument to z()codezUnexpected arguments to "r   "z2()" expects a string literal as the first argumentr   r   , z?List or tuple literal expected as the second argument to "{}()"z.String literal expected as "namedtuple()" itemc                    g | ]	}|j         
S r   )value)r   items     r]   
<listcomp>z<NamedTupleAnalyzer.parse_namedtuple_args.<locals>.<listcomp>  s    ??????r^   c                    g | ]<}t          |t                    r%t          |j                  d k    /|j        d         =S )r   r   )ri   r*   r   rx   )r   ts     r]   r   z<NamedTupleAnalyzer.parse_namedtuple_args.<locals>.<listcomp>  sO       !!Y// 58LLA4E4E GAJ4E4E4Er^   c                @    g | ]}t          t          j                  S r   )r6   r;   r   )r   r   s     r]   r   z<NamedTupleAnalyzer.parse_namedtuple_args.<locals>.<listcomp>  s#    CCCWY233CCCr^   z()" r   z$Too many defaults given in call to "T)r5   argsr   r   	enumerate	arg_namesri   r   r*   listrx   formatr!   rm   r
   	arg_kindsr   r&   r   replacesplitr.   rV   get_and_bind_all_tvars"parse_namedtuple_fields_with_typessetcheck_namedtuple_field_namer   add)r\   r   rk   	type_namer   r   r   ir   argr   ry   r   str_exprrx   listexpr
type_exprsrw   r   r   processed_items
seen_namesr   problemnew_names                            r]   r   z(NamedTupleAnalyzer.parse_namedtuple_argsS  s    %-0F$F$FLLL	yt99q==II>	>>>EEE4%'t99q==111		A4HHHt();Q??  8z))q'C "#)'<== #'	??		##)6)#4#4   
 ))q'C!#x00 SXAR5R5R!$V!3		aT]aaa!) "   
 >"1"'7!333II@)@@@$GGG4$q'7++ 	IIW)WWWY]^^^47=	$q'Hi#899 "	;333
47G8T8T37 ..sC88>>@@		U\\!  	   tAwH333&x~66  IINPTUUU4????? %^  

 !H;;JGG	@@QUVV>4&,#ua ;r2xU:: 	DCCUCCCE"uu
 '' 	) 	)GAt66tZHHG&&t,,,t$$$$ BII:)::::DAAA
 #q77&&x000x((((x==3u::%%IIKYKKKTRRR#e**-Hx9dJJr^   nodeslist[Expression]contextr   ;tuple[list[str], list[Type], list[Expression], bool] | Nonec                $   g }g }|D ]}t          |t                    rSt          |j                  dk    r|                     d|            dS |j        \  }}t          |t
                    r|                    |j                   n|                     d|            dS 	 t          || j	        | j
        j                  }n(# t          $ r |                     d|           Y  dS w xY w| j
                            || j
                                         dd          }	t          |	t                    rt!          t"          j                  }	|	g g g d	fc S |                    |	           l|                     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 typer   r   r   Fz&Tuple expected as "NamedTuple()" fieldT)ri   r*   r   rx   r   r&   r   r   r   rU   rV   r`   r   r   rb   r@   r6   r;   
from_error)
r\   r   r   rx   ry   r   rm   	type_noder   rp   s
             r]   r   z5NamedTupleAnalyzer.parse_namedtuple_fields_with_types  s      	  	D$	** tz??a''IIGNNN44"&*idG,,  LL,,,,IIA4HHH44 29dlDHLabbDD+      II2I>>>444   8--*.(*@*@*B*B&B'=7C	 .   h44 =&y';<<H#r2u,,,,X&&&&		BDIIItteR%%s   % C C+*C+rx   	list[str]ry   
list[Type]rz   Mapping[str, Expression]ro   intr|   TypeInfo | Nonec                `	   | j                             d          t          t          j                  }| j                             d|g          }| j                             d|g          }	| j                             d|g          }
| j                             d|g          }| j                             d|g          }| j                             d          fd|D             }t          ||          }|p| j                             ||          d_        t          ||          j	        r@t          j	        j                  r'| j                             d dj        k    	                                          _        d
|                                ij        d<   t                    s2t%                    s#| j                             t(          fd           	 d>d?fd}d t+          ||          D             }|D ]} ||d           d t+          ||          D             }t          fd|D             |          } |t-          d|          d            |t-          d|	          d            |t-          d|	          d            |t-          d          d            |t-          d|
          d            |t-          d           d           | j        j        d!k    r |t-          d"|          d           j        J t3          t4          j         d#t4           | j         j                                        g j        t          t          j                  $          	 	 d>d@fd-} |d.d d/ |D             0           | j        j        d1k    r |d2d d3 |D             0           dAfd5 |d6d fd7|D             d8            |d9g |
:            |d;d dt?          t-          d<|          |d t@                    g=           tC          t4          j        d#z   t4          z   g j        t          t          j                            }tE          tF          |          j$        t4          <   S )BNzbuiltins.strzbuiltins.tuplezbuiltins.dictztyping.Iterablezbuiltins.functionc                0    g | ]}t          |          S r   )r8   )r   r   strtypes     r]   r   z@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<listcomp>  s#    MMMtD' : :MMMr^   TzNamedTuple item)force_progressfieldsr   c                 "    t                     S r[   )r2   )
tuple_bases   r]   <lambda>z>NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<lambda>   s    ,DZ,P,P r^   Fvarr-   is_initialized_in_classra   is_propertyrX   rY   c                    | _         || _        || _        j         d| j         | _        t          t          |           j        | j        <   d S )N.)	rq   r   r   rk   rm   	_fullnamer(   r   names)r   r   r   rq   s      r]   	add_fieldz?NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.add_field#  sR     CH*AC')CO#}99sx99CM#24#=#=DJsx   r^   c                4    g | ]\  }}t          ||          S r   r-   r   r   typs      r]   r   z@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<listcomp>,  s$    DDDYT3#dC..DDDr^   )r   c                4    g | ]\  }}t          ||          S r   r   r   s      r]   r   z@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<listcomp>3  s$    BBB94D#BBBr^   c                    g | ]}S r   r   )r   r   r   s     r]   r   z@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<listcomp>5  s    %=%=%=!g%=%=%=r^   rG   )r   rI   rH   rM   rN   __doc__)   
   __match_args__r   )rm   rk   idvaluesupper_boundr   funcnamern   retType | Noner   list[Argument]is_classmethodis_newc                   j          d|  }                    t          j        j        |                    }||}|s|r8t          t          d          t          j        |          d t                    g}n%t          t          d          |d t                    g}||z   }d |D             }d |D             }	d |D             }
d |vsJ t          t          t          t                   |          |
|	|          }|f|_        t          | |t!          g                     }|_        ||_        t'          ||          |_        ||_        |_        |rrt          | |j                  }d	|_        |_        |j        |_        d	|_        t3          |t5          d
          g|          }|_        t7          t8          |          }nt7          t8          |          }d	|_        |j        | <   d S )Nr   )	namespace)r  _cls_selfc                    g | ]	}|j         
S r   )type_annotationr   r   s     r]   r   zTNamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.add_method.<locals>.<listcomp>]  s    999SS(999r^   c                &    g | ]}|j         j        S r   )variablerm   r  s     r]   r   zTNamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.add_method.<locals>.<listcomp>^  s    7773S\&777r^   c                    g | ]	}|j         
S r   )kindr  s     r]   r   zTNamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.add_method.<locals>.<listcomp>_  s    222c222r^   Tclassmethod)rk   copy_modifiedr=   r  raw_idr   r-   r<   make_normalizedr   r7   r	   r   r:   	variablesr   r   rq   is_classr4   r   r   ro   r  is_decoratedr   r!   r(   r   plugin_generatedr   )r  r	  r   r  r  rk   	self_typefirstry   rx   r   	signaturefuncvdecsymfunction_typerq   ro   shared_self_types                   r]   
add_methodz@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.add_methodJ  s    -44(44H(66-078LLL 7  I { K K!#f++x/G	/R/RTXZabbc!#g,,	4IIJ4<D99D999E77$777E22T222Iu$$$$$T$t*e%<%<iPSUbccI#,,I8T59955DDI*DM))T::DI%DNDI 
2$),,#' "n$(!x'>'>&?CC%dC00%dD11#'C #&DJx   r^   rK   c                ^    g | ]*}t          ||j        t                      t                    +S r   r   r   r   r   r   r   s     r]   r   z@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<listcomp>z  s,    YYYS(3,..-HHYYYr^   )r	  r   )r     __replace__c                ^    g | ]*}t          ||j        t                      t                    +S r   r,  r-  s     r]   r   z@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<listcomp>  s-    ]]]QThsCHlnnmLL]]]r^   r   c                                         | j        d           }|t          nt          }t	          | | j        ||          S r[   )getrm   r   r   r   r   )r   r   r  rz   s      r]   make_init_argzCNamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.make_init_arg  s=    #''$77G%o777DC7D999r^   rC   c                &    g | ]} |          S r   r   )r   r   r3  s     r]   r   z@NamedTupleAnalyzer.build_namedtuple_typeinfo.<locals>.<listcomp>  s#    -Q-Q-QSmmC.@.@-Q-Q-Qr^   )r	  r   r  rL   )r   r	  rJ   iterable)r	  r  r   )FF)r   r-   r   ra   r   ra   rX   rY   )r  rn   r	  r
  r   r  r  ra   r  ra   rX   rY   )r   r-   rX   r   )%rV   
named_typer6   r;   special_formnamed_type_or_noner9   basic_new_typeinfois_named_tuplespecial_aliasr3   targetprocess_placeholder
tuple_typeupdate_tuple_typero   copymetadatarA   schedule_patchr0   r   r-   rU   python_versionr?   rR   rk   
tvar_scopenew_unique_func_idfrom_omitted_genericsr   r   r,   r(   r   r   )r\   rm   rx   ry   rz   ro   r|   implicit_anybasetuple_typedictypeordereddictypefallbackiterable_typeliteralsmatch_args_typer   r   r   varstuple_of_stringsr*  self_tvar_exprr(  rq   r3  r)  r   r   s       ``                @@@@@@r]   rr   z,NamedTupleAnalyzer.build_namedtuple_typeinfo  s    (%%n55y566,,-=~NN(%%o7NOO,,_w>UVV8&&'7,HH 334E~VV++,?@@MMMMuMMM#Hn==Q ; ;D(D Q Q"uh//
 	/$2D2K"L"L 	H(('jDO>[ )    	z***	'/&>l#
 z** 	=3L3L 	H##"$P$P$P$P  
 RW	> 	> 	> 	> 	> 	> 	> ED#eU2C2CDDD 	- 	-CIct,,,,,
 CBE50A0ABBB$%=%=%=%=u%=%=%=~NN	#i!122DQQQQ	#ng..MMMM	#'114PPPP	#i))4HHHH	#'88RVWWWW	#i))4HHHH<&'11Ic*O<<VZ[[[[***&8888x"5577I;<<
 
 
 $) +	' +	' +	' +	' +	' +	' +	' +	' +	' +	'Z 	
YYTXYYY	
 	
 	
 	

 <&'11J]]X\]]]   	: 	: 	: 	: 	: 	:
 	
9$-Q-Q-Q-QD-Q-Q-QZ^____
92>::::
3z=99=$PWXXY		
 	
 	
 	
 %MC.0OI344
 
 &5T>%J%J
>"r^   named_tuple_infoIterator[None]c              #  X  K   |j         }t                      |_         dV  t          D ]^}||j         v rS|                    |          |j         |         u r.|j         |         j        }|J |                     d| d|           _|                                D ]\  }}||j         v rv|dk    r|j         |         }t          |j        t          t          f          r|j
        sKt          |j        t                    st          ||j                   }||j         |<   ||j         |<   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'   rO   r2  r   r   rx   ri   r   r   r   r#   rB   )	r\   rR  nt_names
prohibitedctxr   r   r'  r_keys	            r]   save_namedtuple_bodyz'NamedTupleAnalyzer.save_namedtuple_body  si      $)!, 6 	X 	XJ-333<<
++/?/Ej/QQQ&,Z8=		QJQQQSVWWW
 #..** 	0 	0JC&,,,)##&,S1ch9(=>> sG[  "#(O<< 8 9>N>TUUE47$*51*/"3''!	0 	0r^   fieldr   Container[str]c                    ||v rd| dS |                                 sd| dS |                    d          rd| dS t          j        |          rd| dS dS )	zDReturn None for valid fields, a string description for invalid ones.zhas duplicate field name "r   zfield name "z" is not a valid identifierr   z" starts with an underscorez" is a keywordN)isidentifierr   keyword	iskeyword)r\   rZ  r   s      r]   r   z.NamedTupleAnalyzer.check_namedtuple_field_name  s    J88888##%% 	8D%DDDDc"" 	8D%DDDDu%% 	87%7777tr^   NrW  r   ErrorCode | Nonec                @    | j                             |||           d S )Nr   )rV   r   )r\   rW   rW  r   s       r]   r   zNamedTupleAnalyzer.fail  s"    c3T*****r^   )rU   r/   rV   r1   rW   r   rX   rY   )r_   r   r`   ra   rb   ra   rX   rc   )r_   r   r`   ra   rX   r~   )r   r   r   r   rb   ra   rX   r   )
rq   r+   rm   rn   r   r   rg   ra   rX   rY   )r   r   rk   rn   rX   r   )r   r   r   r   rX   r   )rm   rn   rx   r   ry   r   rz   r   ro   r   r|   r   rX   r+   )rR  r+   rX   rS  )rZ  rn   r   r[  rX   r   r[   )rW   rn   rW  r   r   r`  rX   rY   )__name__
__module____qualname__rD   r}   rl   r   r   r   r   rr   r   rY  r   r   r   r^   r]   rT   rT   c   s          ! ! ! !FO7 O7 O7 O7bk) k) k) k)Z% % % %vK vK vK vKp*& *& *& *&Xb b b bH )0 )0 )0 ^)0Z
 
 
 
+ + + + + + +r^   rT   )Sr  
__future__r   r^  collections.abcr   r   r   
contextlibr   typingr   r	   mypy.errorcodesr
   r   mypy.exprtotyper   r   mypy.messagesr   
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+   r,   r-   r.   mypy.optionsr/   mypy.semanal_sharedr0   r1   r2   r3   r4   
mypy.typesr5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   	mypy.utilrB   rO   rN   rP   rR   rT   r   r^   r]   <module>rq     s    
 # " " " " "  8 8 8 8 8 8 8 8 8 8 % % % % % %         / / / / / / / / I I I I I I I I ( ( ( ( ( (! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !D !                                                     3 2 2 2 2 2&       `          s	+ s	+ s	+ s	+ s	+ s	+ s	+ s	+ s	+ s	+r^   