ML idZddlmZddlmZddlmZddlZddl m Z ddl m Z ddl mZmZmZmZmZdd lmZdd lmZmZmZmZmZmZdd lmZmZmZm 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;me d$ d%dZ?ed$d&dZ?d$d&dZ?Gdde4e)Z@d'dZAd(dZBd)dZCd*dZDd+dZEd,dZFd-dZGd.dZHd.dZId-dZJ d/dZKd0dZLd1d ZMd2d!ZNd3d"ZOy)4z3Calculation of the least upper bound types (joins).) annotations)Sequence)overloadN) expand_type)map_instance_to_supertype) CONTRAVARIANT COVARIANT INVARIANTVARIANCE_NOT_READYTypeInfo)state)SubtypeContext find_member is_equivalentis_proper_subtypeis_protocol_implementation is_subtype) AnyType CallableType DeletedType ErasedType FunctionLikeInstance LiteralTypeNoneType Overloaded Parameters ParamSpecType PartialType ProperType TupleTypeType TypeAliasType TypedDictType TypeOfAnyTypeType TypeVarIdTypeVarLikeTypeTypeVarTupleType TypeVarType TypeVisitor UnboundTypeUninhabitedType UnionType UnpackTypefind_unpack_in_listget_proper_typeget_proper_typessplit_with_prefix_and_suffixc$eZdZddZddZddZy)InstanceJoinercg|_yN)seen_instances)selfs O/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypy/join.py__init__zInstanceJoiner.__init__:s ?Ac ||f|jvs||f|jvr t|S|jj||f|j|jk(r%g}|jjr |jj J|jj J|jj }|jj }|jjj|}t|tsJ|j}t|j||\}} } t|j||\} } } |tt| |fz| z}| tt| |fz| z}n|j}|j}t!|||jjjD]\}}}t#|}t#|}d}t|t$rt%t&j(|}nBt|t$rt%t&j(|}nt|t*rI|j,t.t0fvrt3|||}t5|j6dk7r5||j6vr'|jj9t|cSt;||j<s||jj9t|cS|j,t>t@fvr>> HNN3 )R0.x/C/CDD)"b$7H+++ H%c1 &d"*!&&$!7F VV\\/ q.D"I 66q!tjj|}tjj|}t|trt|ts||}}t|tr|St|tr|St|trt|ts||}}t|trt|ts||}}t||\}}|jt!||S)zkReturn the least upper bound of s and t. For example, the join of 'int' and 'object' is 'object'. )mypytypeopsis_recursive_pairrr1 can_be_true can_be_false true_or_falserIr.rrrr-normalize_callablesacceptTypeJoinVisitorrs r:rPrPs!  ||%%a+Aq!!AA q~~&1==!..*II LL & &q ) LL & &q )!Y 1i(@!1!W!Z !Xz!X'>!1!_%jO.L!1 q! $DAq 88OA7 88r<ceZdZdZdddZddZddZddZd dZd!dZ d"d Z d#d Z d$d Z d%d Z d&d Zd'dZd(dZd)dZd*dZd+dZd,dZd-dZd.dZd/dZd0dZd1dZd2dZd3dZy)4rzpImplementation of the least upper bound algorithm. Attributes: s: The other (left) type operand. Nc ||_||_yr7)r\r)r9r\rs r:r;zTypeJoinVisitor.__init__s.r<c4ttjSr7)rr% special_formr9r[s r:visit_unbound_typez"TypeJoinVisitor.visit_unbound_type sy--..r<ct|j|r|Stjj |j|gSr7)rr\rrmake_simplified_unionrs r:visit_union_typez TypeJoinVisitor.visit_union_types2 TVVQ 'H<<55tvvqkB Br<c|Sr7rrs r: visit_anyzTypeJoinVisitor.visit_anysr<cFtjrt|jtt fr|St|jt tfrttjStjj|j|gS|jSr7) r strict_optionalrIr\rr-r,rr%rrrrrs r:visit_none_typezTypeJoinVisitor.visit_none_typesm  $&&8_"=>DFF['$:;y5566||994661+FF66Mr<c|jSr7r\rs r:visit_uninhabited_typez&TypeJoinVisitor.visit_uninhabited_type" vv r<c|jSr7rrs r:visit_deleted_typez"TypeJoinVisitor.visit_deleted_type%rr<c|jSr7rrs r:visit_erased_typez!TypeJoinVisitor.visit_erased_type(rr<ct|jtr|jj|jk(rs|jj|jk(r |jS|jj t |jj|jS|j|jS)N)rT)rIr\r*idrT copy_modifiedrPdefaultrs r:visit_type_varzTypeJoinVisitor.visit_type_var+s dffk *tvvyyADD/@vv!!Q]]2vv 66''Jtvv?Q?QSTS`S`4a'b b<<' 'r<cZ|j|k(r|S|j|jSr7)r\rrs r:visit_param_specz TypeJoinVisitor.visit_param_spec3s% 66Q;H||DFF##r<c|j|k(r|St|jtr,t|j|jr |jS|j |jSr7)r\rIrrrTrrs r:visit_type_var_tuplez$TypeJoinVisitor.visit_type_var_tuple8sM 66Q;H dffh 'Jq}}dff,M66M||DFF##r<ctr7)NotImplementedErrorrs r:visit_unpack_typez!TypeJoinVisitor.visit_unpack_type@s!!r<c t|jtrt||js|j |jSddlm}|jt|jj|jDcgc]\}}|||c}}t|j|S|j |jScc}}w)Nr meet_types) arg_types arg_names) rIr\ris_similar_paramsr mypy.meetrrrMrcombine_arg_names)r9r[rs_at_as r:visit_parametersz TypeJoinVisitor.visit_parametersCs dffj )$Q/||DFF++ ,??9z6TypeJoinVisitor.visit_callable_type..s$2/:;s ")rIr\ris_similar_callablesrcombine_similar_callablesjoin_similar_callables is_type_obj type_object is_abstractfrom_type_typeanyr2rrPr`rrrCrsr)r9r[rors r:visit_callable_typez#TypeJoinVisitor.visit_callable_typevs? dffl +0DQ0OQ'0DFF;;+Atvv6FQ]]_%@%@FF&&(TVV-?-?-A-M-M(,%*6+;+;< "!**dff55M  +a( (  )dffkk.E.E+DFF3D!!T**!**dff--r<cRg}|j}t|tr|jD]f}|jD]U}t ||st ||r|j t||8t||sE|j |Wh|rt|dk(r|dSt|St|j|jSt|tr/|jjrt!|}|r t||St|j|SNr)r\rIrrXrrrBrrrQrrPr`rrCrsr)r9r[ror\t_items_itemrs r:visit_overloadedz TypeJoinVisitor.visit_overloadeds:&( FF a &'' 2gg2F+FF;(8"MM*CFF*ST'7"MM&1 2 2v;!#!!9$%f--ajj!**5 5 8 $););+A.D!!T**!**a((r<c  t|j}t|j}|{|y|j|jk(rWg}t|jD]7}|j t |j||j|9|Sy|z|w|j|}t |tsJt|j}|j|} t | tsJt| j} |j|jk(r||k(r|} |j|z dz } g}t|jd| |jd| D] \} }|j t | |"t || }t |tr|j t|nt |tr4|jjdk(r|j t|nt | tr| jjdk(sJ| }nt | tsJ| j}|j t|jt!|g| rKt|j| d|j| dD] \} }|j t | |"|S|jdk(s|jdk(rt |trt | tsy|jjdk(sJ| jjdk(sJt |j"d| j"d}t%|jDcgc] \}}||k7s |}}}t%|jDcgc] \}}||k7s |}}}t'||z}t ||}t|j|ggSy||}|}|}n |J|}|}|}|j|}t |tsJt|j}t |tsy|j|jdz kry|} |j| z dz } t)t+|j| | \}}}g}t||jd| D] \}}|j t ||"t't-|}t ||j"d}|j t|j|g| r=t||j| dD] \}}|j t ||"|Scc}}wcc}}w)a<Join two tuple types while handling variadic entries. This is surprisingly tricky, and we don't handle some tricky corner cases. Most of the trickiness comes from the variadic tuple items like *tuple[X, ...] since they can have arbitrary partial overlaps (while *Ts can't be split). Nrr>)rKr)r0rXlengthrangerBrPrIr/r1rCrMr)rrVrJrrArK enumeratejoin_type_listr3tuplerL) r9r\r[s_unpack_indext_unpack_indexrXis_unpack s_unpackedt_unpack t_unpacked prefix_len suffix_lensitijoinedtuple_instance mid_joinedat_others_other other_joinedvariadic unpack_indexfixedunpackunpackedr]middler^fivis r: join_tupleszTypeJoinVisitor.join_tupless(-QWW5,QWW5  !n&<xxzQXXZ'$&qxxz*EALLAGGAJ !CDE   %.*Dww~.Hh 3 33(7Jww~.Hh 3 33(7JxxzQXXZ'Nn,L, XXZ.81< !!''+:"6 8LM5FBLLB!345#J ;f&67LLF!341fkk6J6JN^6^LLF!34!*h7)77;KKKK)3)*6FGGG)3)B)BLL"*88&:>&J%K9"%aggzkl&;QWWj[\=R"S9B ZB%789 xxzQ!((*/#:x8Z T\=]!//3CCCC!//3CCCC' (:JOOAHOO-1 1! __&3a7 != %++  J" &(..*"=> -FB LLB+ , -#DL1  HMM!,<=  Z 6 6ZL 6 IJK fhnnj[\&BC 1B ZB/0 1 QTSs+ V79V7 V=&V=ct|jtr=|jt |_|jj t jj|jt jj|}t|tsJ|j|j|}|Vt|dk(r}}}}|jj }t|j}||j z|jj z}|j|jz|z} t||| |St|jtr t|j|jS|j|jScc}}}wr7)rIr\r$rMr required_keyscreate_anonymous_fallbacksetkeys readonly_keysrrPr`r) r9r[ item_name s_item_type t_item_typerXr`all_keysrrs r:visit_typeddict_typez$TypeJoinVisitor.visit_typeddict_typeVs dffm ,>BVVZZ]9Y [!+{;"aoo59H\H\;\] ;&Evv779H5::<(H%q69M9MMM__q>(JM  }hO O  )dffajj1 1<<' ''sAEc@t|jtr||jk(r|S|jjjj rK|jjj r+t jj|j|gSt|jj|jSt|jtr|jj|k(r|St|j|jSr7) rIr\rr`rCis_enumrrrrPrlast_known_valuers r:visit_literal_typez"TypeJoinVisitor.visit_literal_typems dffk *DFF{vv##++ 0G0G||994661+FFdffooqzz: :  )dff.E.E.JHdffajj1 1r<cJd)NzInternal errorrrs r:visit_partial_typez"TypeJoinVisitor.visit_partial_typeys '&&ur<ct|jtrItjt |j |jj |j St|jtr/|jjjdk(r |jS|j|jS)N)linez builtins.type) rIr\r&make_normalizedrPrrrrCrVrrs r:visit_type_typezTypeJoinVisitor.visit_type_type~s| dffh '++Jqvvtvv{{,KRSRXRXY Y  )dffkk.B.Bo.U66M<<' 'r<cJd|)Nz!This should be never called, got rrs r:visit_type_alias_typez%TypeJoinVisitor.visit_type_alias_types=9!==ur<ct|}t|tr t|St|tr|j |j St|trttjSt|tr.|j tjj|St|tr|j |j St|t"r|j |j St|t$r|j |j&St|t(r|j |j&SttjSr7)r1rIrrAr&rrr,rr%rr!rrrJr$r`rr*rTr)r9typs r:rzTypeJoinVisitor.defaultsc" c8 $', , X &<<) ) [ )9112 2 Y '<< ; ;C @A A ] +<< - - \ *<< - - [ )<<0 0 ] +<<0 09112 2r<r7)r\r rInstanceJoiner | Noner}r~)r[r,r}r )r[r.r}r )r[rr}r )r[rr}r )r[r-r}r )r[rr}r )r[rr}r )r[r*r}r )r[rr}r )r[r)r}r )r[r/r}r/)r[rr}r )r[rr}r )r[rr}r )r[rr}r )r\r!r[r!r}zlist[Type] | None)r[r!r}r )r[r$r}r )r[rr}r )r[rr}r )r[r&r}r )r[r#r}r )rr"r}r )rrr__doc__r;rrrrrrrrrrrrrrrrrr rrrrrrr<r:rrs //C  ($ $"( !(F.83)jiV"FH(. 2' (>3r<rct|}t|}t|trt|tsy|jj|jjk7rI|jj dk7r0|jj dk7r|jj St |jjt |jjkDryy)NTzbuiltins.objectF)r1rIrrCrsrVrQmror[r\s r:rtrts AA!X!X& 66  !3!3 3vv"33K\8\66---- qvvzz?S_ , r<ct|ttfr|j}t|ttfr|j}||fSr7)rIrrwith_unpacked_kwargsrs r:rrsE!lJ/0 " " $!lJ/0 " " $ a4Kr<ct|jt|jk(xr4|j|jk(xr|j|jk(S)zcReturn True if t and s have identical numbers of arguments, default arguments and varargs. )rQrmin_args is_var_argrs r:rrsM AKKC ,, ) JJ!** $ ) LLALL (r<ct|jt|jk(xr@|j|jk(xr%|jdu|jduk(Sr7)rQrr!var_argrs r:rrs] AKKC ,, C JJ!** $ C YY[ $!))+T*A Br<ci}g}t|j|D]7\}}|j|}|j||||j<9t ||j|S)N)r) variables)rMr&rrBrr)cidstv_maptvstvnew_idnew_tvs r:update_callable_idsr.ss F C!++s+ F!!V!, 6ruu  q& ! / /# / >>r<cntt|jt|j}tt|jt|j}|dk(r||fSt |Dcgc]}t j d}}t||t||fScc}w)Nr) meta_level)maxrQr&minrr'newr.)r[r\max_lenmin_len_new_idss r:match_generic_callablesr8s#akk"C $45G#akk"C $45G!|!t 49'NCqy}}*CGC q' *,?7,K KKDs;B2ct||\}}g}tt|jD]7}|j t |j||j|9|j jjdk(r |j }n |j }|j|t||t|j|j|dSNzbuiltins.function)rrret_typer`name) r8rrQrrB safe_meetr`rCrVrrrPr;r[r\rrr`s r:rrs "1a (DAqI 3q{{# $D1;;q>1;;q>BCD  zz#66:::: ??#Aq)AJJ 3   r<ct|tst|ts t||St|tr9t|tr)tt|j|jSt t |Sr7)rIr/rPrCrr1rs r: safe_joinr@sa a $Z:-F!Q!Z Z:%>*QVVQVV455 "?1#5 66r<crddlm}t|tst|ts |||St|trt|trt |j }t|t r|jj }n^t|tr|jj }n7t|tr|j jdk(sJ|j }||j |j }t|tr t||g}t|StS)Nrrr>) rrrIr/r1rCr)rJr!partial_fallbackrrVr-)r[r\rr fallback_typer{s r:r=r=s$ a $Z:-F!Q!Z Z:%>"166* h 0 1$3388M ) ,$55::Mh1hmm6L6LP`6` ``$MMM( c? +=3%0C#  r<ct||\}}g}tt|jD]7}|j t |j||j|9|j jjdk(r |j }n |j }|j|t||t|j|j|dSr:) r8rrQrrBr@r`rCrVrrrPr;r>s r:rrs "1a (DAqI 3q{{# $D1;;q>1;;q>BCD  zz#66:::: ??#Aq)AJJ 3   r<cTt|j}g}t|D]}|j|}|j|}||k(s:|j|j s|j|j r|j |r|j d|S)aLProduces a list of argument names compatible with both callables. For example, suppose 't' and 's' have the following signatures: - t: (a: int, b: str, X: str) -> None - s: (a: int, b: str, Y: str) -> None This function would return ["a", "b", None]. This information is then used above to compute the join of t and s, which results in a signature of (a: int, b: str, str) -> None. Note that the third argument's name is omitted and 't' and 's' are both valid subtypes of this inferred signature. Precondition: is_similar_types(t, s) is true. N)rQrrr arg_kindsis_namedrB)r[r\num_args new_namesrt_names_names r:rr4s&1;;HI 8_#QQ V q{{1~668AKKNrds29"$'2XX!!!!!!!!!HIIX; KO 3H   \ \$9N\3k*-\3~ &?L"*7,, %>>60r<