ML i[yUdZddlmZddlZddlmZmZmZddlm Z ddl m Z m Z ddl mZmZddlmZmZdd lmZdd lmZmZmZmZmZmZmZmZmZmZm 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/m0Z0m1Z1m2Z2m3Z3m4Z4dd l5m6Z6dd l7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJddlKmLZLdZMdeNd<dZOdeNd<dZPdeNd<GddZQy)zZSemantic analysis of named tuple definitions. This is conceptually part of mypy.semanal. ) annotationsN) ContainerIteratorMapping)contextmanager)Finalcast)ARG_TYPE ErrorCode)TypeTranslationErrorexpr_to_unanalyzed_type)MessageBuilder) ARG_NAMED_OPTARG_OPTARG_POSMDEFArgumentAssignmentStmtBlockCallExprClassDefContext Decorator EllipsisExpr ExpressionExpressionStmtFuncBaseFuncDefListExprNamedTupleExprNameExprPassStmtRefExpr StatementStrExpr SymbolTableSymbolTableNodeTempNode TupleExprTypeInfo TypeVarExprVaris_StrExpr_list)Options)PRIORITY_FALLBACKSSemanticAnalyzerInterfacecalculate_tuple_fallbackhas_placeholderset_callable_name) TYPED_NAMEDTUPLE_NAMESAnyType CallableType LiteralType TupleTypeType TypeOfAnyTypeType TypeVarIdTypeVarLikeType TypeVarType UnboundType has_type_vars)get_unique_redefinition_name) __new____init__ __slots____getnewargs___fields_field_defaults _field_types_make_replace_asdict_source__annotations__rNAMEDTUPLE_PROHIBITED_NAMESzYInvalid statement in NamedTuple definition; expected "field_name: field_type [= default]"NAMEDTUP_CLASS_ERROR_NTSELF_TVAR_NAMEceZdZ d dZ ddZ ddZ ddZ ddZ ddZ ddZ ddZ e dd Z dd Z ddd Zy )NamedTupleAnalyzerc.||_||_||_yN)optionsapimsg)selfrVrWrXs ]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypy/semanal_namedtuple.pyrCzNamedTupleAnalyzer.__init__cs c |jD]S}t|ts|jj ||j t vsC|j||}|y|\}}}} |r9d|jvr+|xjdt|jzz c_d} t|jtr|jj} |j|j||||j| } t| d|_ |j|j_ |j|j_| |j _d| fcSy)aAnalyze 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@Tis_typed)FN)base_type_exprs isinstancer#rWacceptfullnamer4check_namedtuple_classdefnamestrlineanalyzedr infobuild_namedtuple_typeinfocolumndefsbody) rYdefn is_stub_file is_func_scope base_exprresultitemstypes default_items statements existing_inforis rZanalyze_namedtuple_classdefz.NamedTupleAnalyzer.analyze_namedtuple_classdefjs$-- &I)W- *%%)??!;;D,OF~)>D;E5-$DII)= S3tyy>%99 $(M!$--@(, (:(: 99 5% =D%34$$GDM)-DMM&+/;;DMM(%/DIIN:%- &0r[ct|jdkDr|jd|g}g}i}g}|jjD]}|j |t |tst |ts*t |trt |jtr`t |ttfrwt |trt |jtr|j|j j ||jt"|t|j$dkDst |j$dt&sC|j|j j ||jt"|\|j$dj(}|j ||j*)|j t-t.j0nW|j2j5|j*|j2j7 dd} | y|j | |j9dr|jd |||j*t;|d r$|j<s|jt"|tt |j>t@r|s|jd ||j>||<|jBr0d } |jBD]} |jDjG| | |!||||fS) aParse 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 baserNNamedTuple item type NamedTupleallow_placeholderprohibit_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")$lenr`failrlrmappendrarr"rexprrrrr%popremoved_statementsrOlvaluesr!retyper5r: unannotatedrW anal_typerp startswithhasattrrrvaluer(keywordsrX(unexpected_keyword_argument_for_function) rYrnrorsrtrurvstmtrerh for_functionkeys rZrdz,NamedTupleAnalyzer.check_namedtuple_classdefs t## $q ( II:D A/1 &( IINN8 6D   d #dN3dH-t^4DII|9\dY$9:dN3 499g8V ''..t4 .5T\\"Q&ja(.S ''..t4 .5||A++ T"99$LL)>)>!?@ $xx11 .2hh.D.D.F*F+A;G 2 H  '#LL*??3'IIQRVQWXZ^99$l(CDOOII2D9 X6$ XZ^+/++M$'q8 6r ==EL}} [AA,PSUYZ [e]J66r[cjt|tsddgfS|}|j}t|tsddgfS|j}|dk(rd}n|t vrd}nddgfS|j ||}|r |\} } } } } }n|r |}|r6|dt|jzz }ndt|jzx}}|j|ggi|jd}|j||||||k7s|r|jj||||gfS|s| dgfS|r|}n| }||r|dt|jzz }| r-t| t|  d| Dcic]\}}|| }}}ni}d}t|jt r|jj"}|j|| | ||j|}|r|j||||n-t!|||_|jj%|||k7s|r|jj||| || fScc}}w)aCheck 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. Ncollections.namedtupleFTr]z namedtuple@r^)rarcalleer#rcr4parse_namedtuple_argsrfrgrjstore_namedtuple_inforWadd_symbol_skip_localziprrhr riset_line)rYnodevar_namerpcallrrcr_rrrsrtdefaultstypename tvar_defsokreriarg_namedefaultrurws rZcheck_namedtuplez#NamedTupleAnalyzer.check_namedtuples` $)r> !&'*r> !?? / /H / /Hr> !++D(; >D ;E5(Hi C#dii.00D"/#dii."@@x11$BDIItTD  & &tXtX Fx=..tT:T2% %T2% % DD  } C#dii.( (D ;>uc(m^EU?VX`;a&7h'!MM dmm^ 4 MM..M-- % tyy-    & &tXtX F*4(CDM MM " "4 ( 8 } HH * *4 6y((Is H/c|jj|||t|||_|jj |y)Nr^)rW add_symbolr rhr)rYrirerr_s rZrz(NamedTupleAnalyzer.store_namedtuple_infoKs: D$-&th?  t$r[cZ|tvrdnd}|j}t|dkr|jd|d|yg}d}t|dkDr|tvr|jd|yt |j dddD]\}}|d k(rS||} t | ttfrt| j}<|jd j|| ^|d k(sd||} t | tr| jd vr| jd k(}|jd|d| t|jddt t gk7r|jd|d|yt |dt"s|jd|d|y|dj$} g} g} t |dttfsk|dk(rDt |dt"r1|d} | j$j'ddj)}n|jdj||y|d}|dk(rLt+|js|jd|y|jDcgc]}|j$}}n|jDcgc]9}t |tr't|jdk(r|jd;}}|j,j/|} |j1|j|}|y|\}} }}|sggg| gdfS| s&|Dcgc]}t3t4j6} }g}t9}t |D]}\}}|j;||}|#|j=||j?|=|s|jd|d||d|}|j=||j?|t|t|kDr$|jd|d||dt|}|| || | dfScc}wcc}wcc}w)aParse 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| namedtuplezToo few arguments for "z()"NFz%Too many arguments for "NamedTuple()"rz?List or tuple literal expected as the defaults argument to {}()rename)TrueFalserz5Boolean literal expected as the "rename" argument to z()codezUnexpected arguments to "r"z2()" expects a string literal as the first argumentrzr, z?List or tuple literal expected as the second argument to "{}()"z.String literal expected as "namedtuple()" itemz()" rz$Too many defaults given in call to "T) r4argsrr enumerate arg_namesrarr)listrsformatr!rer arg_kindsrr%valuereplacesplitr-rWget_and_bind_all_tvars"parse_namedtuple_fields_with_typesr5r:rsetcheck_namedtuple_field_nameradd)rYrrc type_namerrrirargrrtrstr_exprrslistexpritemt type_exprsrrrrprocessed_items seen_namesproblemnew_names rZrz(NamedTupleAnalyzer.parse_namedtuple_argsRs2%-0F$FLL yy t9q= II/ {#> E%' t9q=11 A4H();Q?  8z)q'C"#)'<=#' ? ##)6)#4 )q'C!#x0SXXAR5R!$V!3 ST]S^^`a!)"% . >>"1 '7!3 3 II1)C@$ G$q'7+ II)$VWY] ^7== $q'Hi#8933 47G8T7 ..sC8>>@ U\\!  AwH33&x~~6IINPTU08???&^^!!Y/CLA4EGGAJ  !HH;;JG @@QUV>&,#uar2xU::=BCWY223CEC"u  ' )GAt66tZHG&&t,t$II)D :DA qc7&&x0x( ) x=3u: % IIP#" P(cg}g}|D]K}t|tr%t|jdk7r|j d|y|j\}}t|t r|j |jn|j d|y t||j|jj}|jj||jj dd} t| trt!t"j$} | gggd fcS|j | :|j d |y||gd fS#t$r|j d|YywxYw) zParse typed named tuple fields. Return (names, types, defaults, whether types are all ready), or None if error occurred. rz'Invalid "NamedTuple()" field definitionNz!Invalid "NamedTuple()" field namezInvalid field typer{r|r}Fz&Tuple expected as "NamedTuple()" fieldT)rar)rrsrr%rrr rVrWror rrpr?r5r: from_error) rYnodescontextrsrtrre type_noderrhs rZrz5NamedTupleAnalyzer.parse_namedtuple_fields_with_typess_ D$ *tzz?a'IIGN"&**idG,LL,IIA4H 29dllDHHLaLabD  88--*.((*@*@*B&B'=7C .h 4&y';'; s+EE;:E;c ~ |jjd}ttj}|jjd|g} |jjd||g} |jjd||g} |jjd|g} |jj d|g} |jjd|Dcgc]}t ||}}t|| }|xs|jj|| d_ t|| jrKtjjr,|jjddjk7j_d |j#ij$d <ts.t's#|jj)t*fd  d& d'fd }t-||Dcgc]\}}t/||}}}|D] }||d t-||Dcgc]\}}t/||}}}t|Dcgc]}|c}| }|t/d|d|t/d| d|t/d| d|t/d|d|t/d| d|t/d|d|j0j2dk\r|t/d|djJt5t6j8dt6|jj:j=gjttj> d& d(fd }|dd|Dcgc]&}tA||jBtEtF(c}|j0j2dk\r;|dd|Dcgc]&}tA||jBtEtF(c}d)fd }|dd|Dcgc] }|| c}d |d!g| "|d#ddtAt/d$| | dtHg%tKt6j8dzt6zgjttj>}tMtN|jPt6<Scc}wcc}}wcc}}wcc}wcc}wcc}wcc}w)*Nz builtins.strzbuiltins.tuplez builtins.dictztyping.Iterablezbuiltins.functionTzNamedTuple item)force_progressfieldsrctSrU)r1) tuple_basesrZz>NamedTupleAnalyzer.build_namedtuple_typeinfo..s ,DZ,Pr[c|_||_||_jd|j|_t t|j|j<y)N.) riis_initialized_in_class is_propertyrcre _fullnamer'rnames)varrrris rZ add_fieldz?NamedTupleAnalyzer.build_namedtuple_typeinfo..add_field"sNCH*AC ')CO#}}oQsxxj9CM#24#=DJJsxx r[)rrF)rrHrGrLrM__doc__) __match_args__r)rercidvalues upper_boundrcjd|}jtjj|}||}|s|r0t t dtj|dtg}nt t d|dtg}||z}|Dcgc]}|j} }|Dcgc]}|jj} }|Dcgc]}|j} }d| vsJttt t"| | | |} |f| _t'||t)g} | _|| _t/| | | _|| _| _|rkt || j0}d|_|_| j2|_d| _t;| t=dg|}|_t?t@|}nt?t@| }d|_!|jD|<ycc}wcc}wcc}w)Nr) namespace)r_cls_selfT classmethod)#rc copy_modifiedr<rraw_idrr,r;make_normalizedrtype_annotationvariablerekindr6r rr9 variablesrrriis_classr3rrrgis_classmethod is_decoratedrr!r'rplugin_generatedr)funcnameretrris_newrc self_typefirstrrtrsr signaturefuncvdecsym function_typerirgshared_self_types rZ add_methodz@NamedTupleAnalyzer.build_namedtuple_typeinfo..add_methodIs--(4H(66-00778L7I{!#f+x/G/G /RTXZabc!#g, 4IJ4&?C%dC0%dD1#'C #&DJJx 1:72s!G;:HHrJ)rr)r __replace__cj|jd}|tnt}t ||j ||SrU)getrerrrr)rrrrus rZ make_init_argzCNamedTupleAnalyzer.build_namedtuple_typeinfo..make_init_args9#''$7G%o77DC7D9 9r[rB)rrrrK)rrrIiterable)rrr)FF)rr,rboolrr returnNone) rrfrz Type | Nonerzlist[Argument]rr rr r r )rr,r r))rW named_typer5r: special_formnamed_type_or_noner7r8basic_new_typeinfois_named_tuple special_aliasr2targetprocess_placeholder tuple_typeupdate_tuple_typergcopymetadatar@schedule_patchr/rr,rVpython_versionr>rQrc tvar_scopenew_unique_func_idfrom_omitted_genericsrrrrrr+r'rr)rYrersrtrurgrwstrtype implicit_anybasetuple_typedictypeordereddictypefallback iterable_typerliteralsmatch_args_typertyprrvarsrtuple_of_stringsrr self_tvar_exprrrirrs `` @@@@rZrjz,NamedTupleAnalyzer.build_namedtuple_typeinfos((%%n5y556 ,,-= ~N((%%o7NO,,_w >UV88&&'7,H334E ~V ++,?@ GLMt D' :MM#Hn=Q ; ;D(D Q"uh/   /$2D2D2K2K"L HH ( ('jDOO>[ )  z* '/&> l# z*=3L HH # #"$P  RW > >/3 >JN >  >36eU2CDYT3#dC.DD -C ct , - 14E50AB94D#BB$u%=!g%=~N#i!12DQ#ng.M#'14P#i)4H#'8RVW#i)4H << & &' 1 c*O: 3z=9=$PWXY  %  MMC . 0  OO I33 4  &5T>%J >" [ N@EC%=JZ ^.Rs*-T'T T% T++T0 $+T5 %T: c#^K|j}t|_dtD]e}||jvs|j||j|ur3|j|j}|J|j d|d|g|j D]\}}||jvrg|dk(r|j|}t|jttfr |jsVt||j}||j|<||j|<yw)ajPreserve 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 "rr) rr&rNrrrrsrarrrrA) rYnamed_tuple_infont_names prohibitedctxrrrr_keys rZsave_namedtuple_bodyz'NamedTupleAnalyzer.save_namedtuple_bodys7$))!, 6 XJ-333<< +/?/E/Ej/QQ&,,Z8==& CJsG[G[5S:J:P:PQ03 &&u-*/  " "3 ' 0s 7D-C3D-c||vrd|dS|jsd|dS|jdrd|dStj|rd|dSy) zDReturn None for valid fields, a string description for invalid ones.zhas duplicate field name "rz field name "z" is not a valid identifierrz" starts with an underscorez" is a keywordN) isidentifierrkeyword iskeyword)rYfieldrs rZrz.NamedTupleAnalyzer.check_namedtuple_field_namess J /wa8 8##%!%(CD D   c "!%(CD D   u %!%7 7r[Nc@|jj|||y)Nr)rWr)rYrXr0rs rZrzNamedTupleAnalyzer.fails  c3T *r[)rVr.rWr0rXrr r )rnrror rpr r ztuple[bool, TypeInfo | None])rnrror r zKtuple[list[str], list[Type], dict[str, Expression], list[Statement]] | None)rrr str | Nonerpr r z9tuple[str | None, TypeInfo | None, list[TypeVarLikeType]]) rir*rerfrrr_r r r )rrrcrfr zWNone | tuple[list[str], list[Type], list[Expression], str, list[TypeVarLikeType], bool])rzlist[Expression]rrr z;tuple[list[str], list[Type], list[Expression], bool] | None)rerfrsz list[str]rtz list[Type]ruzMapping[str, Expression]rgintrwzTypeInfo | Noner r*)r-r*r zIterator[None])r7rfrzContainer[str]r r9rU)rXrfr0rrzErrorCode | Noner r )__name__ __module__ __qualname__rCrxrdrrrrrjrr2rrr[rZrSrSbs|%>ES !!,0!AE! %!FO7O7,0O7 TO7bk)k)*4k)EIk) Bk)Z%%$'%/7%CG% %vKvK(+vK bvKp*&%*&07*& D*&Xbbb b 0 b  b'b bH%0%0R +r[rS)Rr __future__rr5collections.abcrrr contextlibrtypingrr mypy.errorcodesr r mypy.exprtotyper r mypy.messagesr mypy.nodesrrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r- mypy.optionsr.mypy.semanal_sharedr/r0r1r2r3 mypy.typesr4r5r6r7r8r9r:r;r<r=r>r?r@ mypy.utilrArNrMrOrQrSr>r[rZrKs #88%/I(         B!3 &U  `eo +o +r[