ML i UdZddlmZddlmZddlmZmZddlm Z ddl m Z m Z ddl mZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZmZmZmZm Z m!Z!m"Z"ddl#m$Z$ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4m5Z5m6Z6m7Z7ddl8m9Z9m:Z:m;Z;mZ>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZIddlJmKZKmLZLddlMmNZNgdZOdePd<gdZQdePd<GddeZRGddeNeRZSd%d ZTd&d!ZUd'd"ZVd(d#ZWy$))z?Pattern checker. This file is conceptually part of TypeChecker.) annotations) defaultdict)Final NamedTuple)message_registry)TypeCheckerSharedApi TypeRange)analyze_member_access)expand_type_by_instance) join_types) literal_hash)map_instance_to_supertype)narrow_declared_type)MessageBuilder)ARG_POSContext ExpressionNameExpr TypeAliasTypeInfoVar)Options) AsPattern ClassPatternMappingPattern OrPatternPatternSequencePatternSingletonPatternStarredPattern ValuePattern)Plugin) is_subtype)coerce_to_literalmake_simplified_union"try_getting_str_literals_from_typetuple_fallback)AnyTypeInstance LiteralTypeNoneType ProperType TupleTypeType TypedDictType TypeOfAnyTypeVarTupleType TypeVarTypeUninhabitedType UnionType UnpackTypefind_unpack_in_listget_proper_typesplit_with_prefix_and_suffix) fill_typevarsfill_typevars_with_any)PatternVisitor) builtins.boolbuiltins.bytearraybuiltins.bytes builtins.dictzbuiltins.floatzbuiltins.frozensetz builtins.int builtins.listz builtins.set builtins.strbuiltins.tuplerself_match_type_names)rAr>r=non_sequence_match_type_namesc,eZdZUded<ded<ded<y) PatternTyper.type rest_typedict[Expression, Type]capturesN)__name__ __module__ __qualname____annotations__W/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypy/checkpattern.pyrFrFPs JO$$rPrFceZdZUdZded<ded<ded<ded <d ed <d ed <d ed<d ed<ded< d)dZd*dZd+dZd,dZd-dZ d.dZ d/dZ d0dZ d1dZ d2dZd3dZd4dZd5dZ d6dZ d7d Zd8d!Zd9d"Zd:d#Zd;d$Z dd'Zy()?PatternCheckerzPattern checker. This class checks if a pattern can match a type, what the type can be narrowed to, and what type capture patterns should be inferred as. rchkrmsgr"pluginrsubjectr. subject_type list[Type] type_contextself_match_typesnon_sequence_match_typesroptionsc||_||_||_g|_|j t |_|j t|_||_ yN) rTrUrVrZgenerate_types_from_namesrCr[rDr\r])selfrTrUrVr]s rQ__init__zPatternChecker.__init__rsT  $ > >?T U(,(F(F )) % rPc|jj||j|}|jj|Sr_)rZappendacceptpop)raorZresults rQrezPatternChecker.accepts:   .$  rPcn|jd}|j#|j|j|}|\}}}n|ti}}}t |sR|j F|j j|t|g||\}}t |s|||j <t|||SNdefault) rZpatternrer3is_uninhabitednamerT#conditional_types_with_intersectionget_type_rangerF)rarg current_type pattern_typetyprHtype_map_s rQvisit_as_patternzPatternChecker.visit_as_patterns((, 99 ;;qyy,?L'3 $CH'3_5FHCc"qvv'9XXAA~c23Q BFC"#&#& 3 844rPc`|jd}g}|jD]G}|j||}|j|t |j r<|j }Ig}|D]3}t |j r|j|j 5tt}|djjD]&\}} t|} || j|| f(t|ddD]\} }|jjD chc]\}} t|} }} |j| k7r7|jjt j"|j| |jjD]&\}} t|} || j|| f(i}|j%D].}t'} |D]\} }t)| |g} | ||dd<0t)|}t+|||Scc} }w)Nrkr)rZpatternsrerdrorGrHrlistrJitemsget_var enumeratekeysrUfailrOR_PATTERN_ALTERNATIVE_NAMESvaluesr3r%rF)rargrs pattern_typesrnrttypes capture_typesexprrunodeirwvarsrJ capture_listother union_types rQvisit_or_patternzPatternChecker.visit_or_patterns,((,  zz 6G;;w =L   .!,"3"34+55  6) 0L!,"3"34 \../ 0CNdBS &q)2288: 4ID#4=D $  & &c{ 3 4 )qr):; 8OA|1=1F1F1L1L1NOgdAGDMODO!!#t+ .KKQZZXY][)2288: 8 ct}d#**D#;7 8  8,.)002 /L!#C( :5+S%L9 :,/H\!_Q' (  /+51 :|X>>!Ps(H*c|jd}|jjj|j}t |}|jj |t|g|t|\}}tt|ttfs"t|tj||giSt||iSrj)rZrT expr_checkerrerr$rqrrr7 isinstancer*r3rFr4 make_union)rargrsru narrowed_typerHs rQvisit_value_patternz"PatternChecker.visit_value_patterns((, hh##**1662$#'88#O#O >#./OC#./L$P$  y=)R88rPc  t|jd}|j|s|jSt |j Dcgc]\}}t |ts|}}}d}t|dk(r|d}nt|dk\rJdt|j }||dz}d}t |tr|j} t| }|:t| |z } | dkr|jS| dkDr||jSg} | D]\} t | tr9t | jtrt| jj} | j!| ^| } |j#| }t| dz |kDrZ|X|jS|j%||} | |j&j)d} | gt|j z} g}g}i}|j+| ||}t-|j |D]Q\}}|j/||}|\}}}|j!||j!||j1||S|j3||t| |du}|j3||t| |du}|}t |tr|g}g}t-| |D]S\} }|j&j5| t7|g|| \}}|j!||j!|Ut9d |Drt||j:}n t=}t9d |Drt||j:}nt?d |Ddk(rtt-| |D cgc]\} }tA|r| n|c}} |j:}nt |trCt||j:}!|j&j5|!t7|g||!\}}npt=}|D]}tC||}t |tDr0|jG|j||}"|j#|" }n|jG|||}tI|||Scc}}wcc}} w) Nrkrzrz/Parser should prevent multiple starred patterns)r}builtins.objectrlc34K|]}t| ywr_ro.0rus rQ z8PatternChecker.visit_sequence_pattern..=sKs~c**Kc32K|]}t|ywr_rrs rQrz8PatternChecker.visit_sequence_pattern..BsC3>#&Csc34K|]}t| ywr_rrs rQrz8PatternChecker.visit_sequence_pattern..EsI,,Ir) upper_bound)%r7rZcan_match_sequenceearly_non_matchrr{rr lenr-r}r6r5rGr1rrd copy_modifiedget_sequence_typerT named_typecontract_starred_pattern_typeszipreupdate_type_mapexpand_starred_pattern_typesrqrrallpartial_fallbackr3sumror r2narrow_sequence_childrF)#rargrsrpstar_positions star_positionrequired_patterns unpack_index inner_types size_diffnormalized_inner_typesit inner_typecontracted_new_inner_typescontracted_rest_inner_typesrJcontracted_inner_typestrtrurestrvnew_inner_typesrest_inner_typesrHnarrowed_inner_typesinner_rest_typesnew_inner_typenarrowed_inner_typeinner_rest_typenew_typecurrnew_tuple_type new_bounds# rQvisit_sequence_patternz%PatternChecker.visit_sequence_patterns't'8'8'<= &&|4'') )(1!**(=_1A~A^!__$( ~ ! #*1-M  A % KK K5 O  $  "   lI .&,,K.{;L# ,/@@ q=//11]}'<//11)+&%6B""j1jJZ6['(;(;<*11"5 65 +99@V9W {#a'*;; @U//11// a@J!!XX001BC %,QZZ8K 24"24#+-!%!D!D (9"  $:; 5DAq;;q!,L". Cx & - -c 2 ' . .t 4  8 4  5;; & s;7G]aIa  << 'K8H,^bJb ' lI .<3G#% ! .1+.O 9* NHH@@"^N%C$DaQ[A7$o %++,?@ ''8 9K6JKK$%9<;X;XY*,C2BCC%&6 8U8UV I8HIIQN&+.k;K*L&D$!/t 4$>!11   i 0' 8U8UVN"&(("N"N != >>#O# Hi-.N& A!+NC!@ A, 4 66|7O7OQ_abc '55)5L55lNTUV8Y99k`|sS+SS ct|}t|trttj|St|t rI|j Dcgc]}|j||}}|Dcgc]}|| }}|r t|Sy|jj|rMt|ttfr7t|tr t|}|jj||Sycc}wcc}wr_)r7rr(r0from_another_anyr4r}rr%rTtype_is_iterabler)r-r'iterable_item_type)rarcontextitemr}not_none_itemss rQrz PatternChecker.get_sequence_typebs A  a !955q9 9 a #GHwwOtT++D':OEO/4It8HdINI,^<< 88 $ $Q 'Jq8Y:O,P!Y'"1%88..q': :PIsC83C=;C=c :t|}|E||}t|tsJt|j}t|t r|jj dk(sJ|9|t|z dz}|d|}||jdg|zz }|||dzdz }|Stt|D cgc]} t| tr t|n| !c} |||z \} } } g} | D]B}t|tr| j|jd2| j|Dt| t| gzt| zS||S|d|}t||z }|jt||||z||||zdz }|Scc} w)aj Contracts a list of types in a sequence pattern depending on the position of a starred capture pattern. For example if the sequence pattern [a, *b, c] is matched against types [bool, int, str, bytes] the contracted types are [bool, Union[int, str], bytes]. If star_pos in None the types are returned unchanged. NrBrzr)r6rr5r7rGr)fullnamerargsr8tuplerdr|r%)rarstar_pos num_patternsrunpackunpackedmissing new_typesrprefixmiddlesuffix new_middlem star_lengths rQrz-PatternChecker.contract_starred_pattern_typesus+51  #<(Ffj1 11&v{{3Hh1hmm6L6LP`6` ``&U3a7!-<0 hmmA./'99 U** rPc|j||}t||r.|jj|t |g||\}}|S|}|S)Nrl)construct_sequence_childr#rTrqrr)ra outer_typerctxrrws rQrz$PatternChecker.narrow_sequence_childs`00ZH h +((FF^H56ZGKHa "HrPci}|j9|jjd|jdg}|||j<t |jdt |S)Nr@rk)capturerTrrZrFr3)rargrJ list_types rQvisit_starred_patternz$PatternChecker.visit_starred_patternsa+- 99 33OdFWFWXZF[E\]I"+HQYY 4,,R0/2CXNNrPcrt|jd}d}i}t|j|jD]}\}}|j |||}|d}|j jd}|j||}t|jrd}b|j||j|j|j jd} t|| rXt|t rHt#|| j} |j j%d} t!| | j&} n9|j jd} |j j)d| | g} | ||j<|r|jd}n t+}t-|||S)NrkTFrztyping.Mappingr?)r7rZrrrget_mapping_item_typerTrrerorGrrJrr#rr)rlookup_typeinforrr3rF)rargrs can_matchrJkeyrrrtmapping mapping_inst dict_typeinforH object_typers rQvisit_mapping_patternz$PatternChecker.visit_mapping_patterns&t'8'8'<=  +-affahh/ FJC33A|SIJ!! !XX001BC ;;uj9Ll//0! $$X|/D/DE F 66 hh))*:;G,0Z h5W8w||T $ 8 8 I $]L4E4EF "hh112CD  HH77#k;%?  )HQVV  ((,H&(H8\8<#>#@  A XX++-&!>>w VYZF#224!% & v '') W::7LRUV W ! A A&  W s#:C>&D  D>D DD!cj|jjjd||gtg|\}}|S)N __getitem__)rTrcheck_method_call_by_namer)rarnrrrhrws rQrz+PatternChecker.get_simple_mapping_item_types8HH))CC <# 7  rPc (t|jd}|jj}|t t j }nst|trF|js:|jjtj||jSt|tr t!|}nt|tr |j"}nt|t$r<|j&0tt|j&tr |j&}nt|t$r2|j&&|j&j)|j*}n |j,}|jjtj.j1|||jS|j2j5|t7|g||\}}t9|r|jSt;||}g} t=} i} t?|j@dk7r]|jC|rt?|j@dkDr*|jjtjD||jG|j@d|} t9| j&s5tI| j&tK|| jL| jNS| jN} n|jjQ5} tSd||ddd||j2}| jU}dddrb|jjtjVj1|j)|j*||jSt}t|tXrft[|}t?|j@t?|kDrS|jjtjD||jSdgt?|j@z}t]||j@D],\}}| j_||f|| ja|.t=}d}t]|jb|jdD]\}}| j_||f|| vr<|jjtjfj1||d}n?||vr;|jjtjhj1||d}|ja||r|jSd}| D]Z\}}d}|jjQ5} |tS|||ddd||j2}nt t j }| jU}ddds|t t j }|r|jjd k(sT|jjtjlj1|j)|j*||n||j2jo||}|jG||\}}}t9|rd}:|jq| |t9|rY|}]|s ts}tI||| S#1swYxYw#1swYxYw) Nrkrlrrz__match_args__F) is_lvalueis_super is_operator original_typerTTr):r7rZ class_refrr(r0 from_errorrrno_argsrUrr CLASS_PATTERN_GENERIC_TYPE_ALIASrrr:targetrrGstr_with_optionsr]rpCLASS_PATTERN_TYPE_REQUIREDformatrTrqrrrorsetr positionalsshould_self_match&CLASS_PATTERN_TOO_MANY_POSITIONAL_ARGSrerFr rHrJrr rMISSING_MATCH_ARGSr-get_match_arg_namesrrdadd keyword_keyskeyword_values(CLASS_PATTERN_KEYWORD_MATCHES_POSITIONAL'CLASS_PATTERN_DUPLICATE_KEYWORD_PATTERNrCLASS_PATTERN_UNKNOWN_KEYWORDadd_any_attribute_to_typerr3)rargrs type_inforurprrHr keyword_pairs match_arg_setrJrtrmatch_args_typerproper_match_args_typematch_arg_namesarg_nameposkeyword_arg_sethas_duplicatesrrrkeywordrnkey_typerrinner_capturess rQvisit_class_patternz"PatternChecker.visit_class_patterns &t'8'8'<= KK$$   4 45C  9 -i6G6G HHMM*KKQ O'') )  8 ,(3C  9 -""C y# &*?9>>:GD..C)S)inn.H ~~66t||D ~~ HHMM*FFMMdSUV W'') )"hhJJ >#./LK ) ( #'') ),\8D ;= "%% +- q}}  "%%c*q}}%)HHMM"2"Y"Y[\]#{{1==+;]K %l&7&78&$))"9l.D.DE$-- (00XX++- E&;("'!&$)&) HH 'O(4'B'B'D$ E$HHMM(;;BB00>   //11)8)I&4i@&9:P&QO1==)C,@@ &6&]&]_`a#3355'+fs1==/A&AO%(!--%H4MHc!(((C9+%))(34%anna.>.>? %JC  #u .m# $MMTTUXY[`"&' $LLSSTWXZ_"&    $ % '') )  -# - GW$(H'') A\&4%"'!&$)&. HH H 'y';';#>#@  A 8#3"9#7#78!i&8&8  (#xxAA(GTH:>++gx:X 7Jj)! $$X~>%o6 ,IG# -J&(H8Y99K E E@ A As.[:&A \:\\ ct|}t|tr |j}t|tr|j j dy|jD]}t||syy)Nr FT) r7rr-rr)rGgetr[r#)rarurs rQrz PatternChecker.should_self_matchsjc" c9 %&&C c8 $6F)G)S** E#u% rPc.t|tryt|trtfd|jDSj D]}t ||dsyjjd}t ||xs t ||S)NTc3RK|]}jt| ywr_)rr7)rrras rQrz4PatternChecker.can_match_sequence..s!\$t..t/DE\s$')ignore_promotionsFtyping.Sequence) rr(r4anyr}r\r#rTr)rarursequences` rQrz!PatternChecker.can_match_sequences c7 # c9 %\RUR[R[\\ \22 E#u=   88&&'89#x(EJx,EErPcg}|D]-} |j|jj|/|S#t$r}|j ds|Yd}~Sd}~wwxYw)Nz builtins.)rdrTrKeyError startswith)ra type_namesrrpes rQr`z(PatternChecker.generate_types_from_namesse D  TXX0067   {3G4 s*7 AAAc0|Dchc] }t|}}|jD]f\}}t||vrOt|}|jj t j j|j|b|||<hycc}wr_) r r}r~rUrrMULTIPLE_ASSIGNMENTS_IN_PATTERNrrp)raoriginal_type_mapextra_type_mapralready_capturedrurs rQrzPatternChecker.update_type_maps t|}t|tr|St|trN|jDcgc].}|j t|r|j ||0}}t|S|jjd|g}t||jjdrZt|tr t|}t|tsJt|j }t#||}t#||S|Scc}w)a If outer_type is a child class of typing.Sequence returns a new instance of outer_type, that is a Sequence of inner_type. If outer_type is not a child class of typing.Sequence just returns a Sequence of inner_type For example: construct_sequence_child(List[int], str) = List[str] TODO: this doesn't make sense. For example if one has class S(Sequence[int], Generic[T]) or class T(Sequence[Tuple[T, T]]), there is no way any of those can map to Sequence[str]. r6)r7rr(r4r}rrr%rTrr#rr-r'r)r9rGr ) rarr proper_typerrr8 empty_type partial_types rQrz'PatternChecker.construct_sequence_childs&j1 k7 +  k9 -(--**?4+@A--dJ?E )/ /88../@:,O j$(("5"56G"H I+y1,[9 k84 44&{'7'78J2:xHL*<E EOs3DcFtt|jdiS)Nrk)rFr3rZ)ras rQrzPatternChecker.early_non_matchs?,d.?.?.CRHHrPN) rTrrUrrVr"r]rreturnNone)rgrrZr.rHrF)rgrrHrF)rgrrHrF)rgr!rHrF)rgrrHrF)rgrrHrF)rr.rrrH Type | None)rrYr int | NonerintrHrY) rrYrrKrrLrrrHrY)rr.rr.rrrHr.)rgr rHrF)rgrrHrF)rnrrr.rrrHrJ)rnrrr.rrrHr.)rgrrHrFrur.rHr)rur,rHr)r<z list[str]rHrY)r@rIrArIrHrI)rr.rr.rHr.)rHrF)rKrLrM__doc__rNrbrerxrrrrrrrrrrrrr0rrr`rrrrOrPrQrSrSVs   N ! )(  ' .< FL W^   5"0?d 9 9|:|&//+5/EH/ /b+5BEX\ 8O"=H%59@J .%59@J `:D  F  .!7 .I_ .  .BIrPrScg}|jD]C}t|}|t|dk7r|jd0|j|dE|S)Nrzr)r}r&rrd)rurrrs rQrrsWD #3D9 >S[A- KK  KKq " # KrPczt|tsJ||j}t|tsJ||S)zx Warning: this in only true for expressions captured by a match statement. Don't call it from anywhere else )rrrr)rrs rQr~r~s< dH %+t+ % 99D dC &$& KrPct|}t|tr<|jr0t|jjt r |j}t |dS)NF)is_upper_bound)r7rr)last_known_valuerrr rus rQrrrr(sM # C3!  s++114 8"" S //rPc4tt|tSr_)rr7r3rTs rQroro3s oc*O <rksE"#$!?23 &2*(WWW    $ &@' u (`u_ %*% y I^K0y Ix0=rP