TL iߍ&dZddlZddlZddlmZddlmZddlmZddlm Z m Z m Z m Z m Z ddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZmZddlmZddlmZmZddlmZddlmZm Z m!Z!m"Z"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+ddl,m-Z-ddl.m/Z/ddl0m1Z1ddl2m3Z3ddddddd d!d"d#d$d%d&d' Z4e4jkDcic]\}}|d(|d)dzc}}Z6d*Z7d+Z8d,Z9e'e -d.Z:ejve7d/Ze7dDd2Z?ejvdDd3Z@d4ZAe d5ZBd6ZCd7ZDd8ZEd9ZFd:ZGd;ZHd<ZId=ZJe3jd>ZLe'd?ZMd@ZNGdAdBe ZOdCZPycc}}w)Ez& Functions inferring the syntax tree. N)tree)debug) parser_utils)ValueSet NO_VALUESContextualizedNodeiterator_to_value_setiterate_values) LazyTreeValue)compiled) recursion)analysis)imports) arguments) ClassValue FunctionValue)iterable)ListModificationDictModification) TreeInstance) is_string is_literal is_numberget_names_of_nodeis_big_annoying_library)COMPARISON_OPERATORS)inference_state_method_cache) VersionInfo) annotation)TreeNameDefinition)CompForContext) Decoratee)plugin_manager__add____sub____mul__ __matmul__ __truediv__ __floordiv____mod____pow__ __lshift__ __rshift____and____or____xor__) +-*@/z//%**z<>&|^__rcfd}|S)a{ This is for now the way how we limit type inference going wild. There are other ways to ensure recursion limits as well. This is mostly necessary because of instance (self) access that can be quite tricky to limit. I'm still not sure this is the way to go, but it looks okay for now and we can still go anther way in the future. Tests are there. ~ dave ct|j}|j} |j|xxdz cc<d}|j!|j |j ur|dz}|j||kDrt jd|tS |g|i|S#t$rd|j|<Y&wxYw)Ni,dz+In value %s there were too many inferences.) tree_nodeinference_stateinferred_element_countsparent_context get_valuebuiltins_modulerwarningrKeyError)contextargskwargsnrBmaximumfuncs `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/jedi/inference/syntax_tree.pywrapperz$_limit_value_infers..wrapper@s   !11 ;  3 3A 6! ; 6G%%-))+/N/NN 366q9GC KQO  D G-d-f-- ;9:O 3 3A 6 ;sA3BB76B7)rNrPs` rO_limit_value_infersrR7s.* Nct|tr t||S|}|6|j}|jdvrnt j |rd}n|6|jj|}||r|jdk(r|jjr|jd}ig}|j|jkDr't|}t|}|Dcgc]}|jc}t!fd|Dr|D]} |jj#|| } t%| dkDrt%|t%| zdkDrt'j(d|ig}nt+|} g}| D]T} t+| } t-| D]4\}}|j/| |<t1| g| || j<6|| z }V|D]}| || j<t%|dkDr9t2}|D],}|j5||5|t||z}ddd.|St7||S|r t||St7||Scc}w#1swYexYw)N)if_stmtfor_stmtrUr?c3:K|]}|jvywNvalue).0istr_element_namess rO zinfer_node..vsBA177//Bsz,Too many options for if branch inference %s.) isinstancer! _infer_nodeparenttyperis_scopepredefined_namesgetrB is_analysischildren start_posend_posrrZanyinferlenrdbglist enumeratecopyrrpredefine_names_infer_node_if_inferred)rIelementrUpredefined_if_name_dict if_stmt_test name_dictsif_names element_nameseif_name definitionsoriginal_name_dicts definitionnew_name_dictsr\ name_dictresultr]s @rO infer_noderXs'>*7G,,G  .. <<2 2    )G   &66::7C&7 )g.E.E.Q.Q''* T   |33 3)6H-g6M2? @Q @ BBB'CG")"9"9"?"?"QK;'!+z?S-==B!II&TV]^+-J!.2:.>+%' *59J-12E-FN09.0IZ 94=NN4Dq 1CKZLCYq 1'-- @Z'.8J 9*4CI7BIgmm4C1C4 z?Q F' < ,,Wi@<k'7;;F<< <M*7G< < "w0 0*7G< <">v"F " .w0 0   gw //rS)defaultct||SrX)ra)rIrts rOrrs w ((rSctjd||j||j}|j}|dvr t ||S|dk(r t tj||gS|dk(r t||S|dvr|jd}|jdd}d}|jd k(r"|jd k(rd }|jd}|j|}t|D]>\}} | d k(r'|j||dz} t||| | }nt!||| }@|r|j#j%S|S|d vr!t t'j(|||gS|dvr@|j|jd}|jddD]} t+|| }|S|dk(r=|j|jd|j|jdzS|dk(r`|jdk7r1|j,} t/dt1|jd| dt t3j4|dgS|dk(rEt ||jd}|jdddD]} |j7| |}|S|dk(r|j|jdS|dk(r1t9j:||jdj=S|dk(rt?|jrv|jdjdk(rZ|jdjd}|j|j7djA}|j%StBS|dk(r|j|jdStE||S) Nzinfer_node %s@%s in %s)namenumberstringatomstringskeywordfstringlambdef expr_stmt)power atom_exprrr?FrawaitTr7)testlist_star_exprtestlist)not_testfactortestoperatorz...zunhandled operator z in  Ellipsis dotted_namer<) name_context eval_input annassign yield_expr yield_arg__iter__namedexpr_test)#rrnrirBrc infer_atomrr from_contextinfer_expr_stmtrhrZpoprrp_infer_comparison infer_trailer py__await__py__stop_iteration_returnsrSequenceLiteralValue infer_factorrbAssertionErrorreprr builtin_from_namepy__getattribute__rinfer_annotationexecute_annotationrmexecute_with_valuesr infer_or_test)rIrtrBtyp first_childrh had_await value_setr\trailerrightrorigin next_name generatorss rOraras II&1B1BGL--O ,,C SS'7++ 33GWEFGG w00 & &&&q) ##AB'   y ([->->'-II",,q/K&&{3 %h/ CLQ$**8AE?;-  %gy'BI C ((*EEG G 3 366QXYZ[[ & &&&w'7'7';< (("- :H$Y9I : ""7#3#3A#67$$W%5%5b%9:; <  ==E !^^F 4 CVX^!_` `33OZPQRR w(8(8(;<  ))!$Q$/ VI!44YW4UI V !!'"2"21"566 **7G4D4DQ4GH   ! "  w W%5%5a%8%=%=%L&&q)2215G ++G4##J/0C0C0E 88: :  !!'"2"21"566Wg..rSc|jdd\}}|dk(rd}|dk(r6|j\}}}|jt||t||St j d|||dk(r|j ||S|dk(s Jd|ztj|j|||}|j|S) Nr<)[zinfer_trailer: %s in %s.)r name_or_str(ztrailer_op is actually %s) rhget_item_infer_subscript_listrrrnrr TreeArgumentsrBexecute)rI atom_valuesr trailer_opnode_rJs rOrrs''+J s{S%.. D!## !'4 0 w 0   +WkB  11$ 2  $ N&AJ&N N$**7+B+BGTSZ[D&&t, ,rSc~|j}jdk(rtjdddxs}|jdk(r%t fd|j Ds}n|jdk(r}|j }trd}|j|Sjdk(rWjd vr*ttj|jgSjd k(rtSJd zttjrE|j j#j}ttj$||gSjd k(rIt'|j(d }j(ddD]}t'||}t+||d|}|Sjdk(rtj,|Sj(}|d dk(rOt/|dk(sA|djdk(rt/|dj(dkDs|j1|dS |dj(d} | dk(r |dj(d} | jdvr!tt5j6||gS|d} | j(} |d dk(r%| dk(sd| vsd| vrt5j:||} nt5j<||} t| gS#t2$rYwxYw#t2t8f$rYwxYw#t8$rg} YwxYw)z Basically to process ``atom`` nodes. The parser sometimes doesn't generate the node (because it has just one child). In that case an atom might be a name or a literal as well. rrrrUc3zK|]2}|jjcxkxr|jknc4ywrX)rirj)r[rLrs rOr^zinfer_atom..%s*`Qq{{dnn@qyy@@`s8;Npositionr)FalseTrueNoneyieldzCannot infer the keyword %srrr?r1rrr< testlist_comp:)comp_for sync_comp_for{}r7)rBrcrsearch_ancestorrkget_test_nodesri_is_annotation_namerrZrr rrr`Literalcompiled_subprocesssafe_literal_evalcreate_simple_objectrrhrget_string_value_setrmr IndexErrorrcomprehension_from_atomAttributeErrorDictLiteralValuer) rIrstatestmtrrrrcr array_node array_node_c new_values ` rOrrs4  # #E yyF##D+y)LTPT 99 !`$J]J]J_`` YY) #D>> t $ H))$)BB i  ::2 2X77tzzJKL L ZZ7 " :3d::u D$,, '**<w $AA'4QZ[!) >>$GT9=>> > > sA/ A//A=c|d}tjd|||j}j||rt |}t |t |jd}||\}|dvxr|jdk(}|s|r|jddj} j| |j } |rfd tfd | Dn&tj|} | jdd | _ tj |d } | | jd k(rȉrt#j$| r| j'} t)| }t+|j-j/|}|D]e}| j0dj|j-i}j3| |5j|}t5| | |} dddg| nt5| | tjdS#1swYxYw)aD The starting point of the completion. A statement always owns a call list, which are the calls, that a statement does. In case multiple names are defined in the statement, `seek_name` returns the result for this name. expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | ('=' (yield_expr|testlist_star_expr))*) annassign: ':' test ['=' test] augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '**=' | '//=') :param stmt: A `tree.ExprStmt`. c |jd}|jdvry|jd}|jdk7st|jdk7ry|jd}|jddk(|jdfS) Nr)rr)FNrr<rrr?)rhrcrm)rrrrs rO check_setitemz'_infer_expr_stmt..check_setitemsMM!$ >>!7 7!!!$ 99 #i&8&8"9Q">$$R("c)7+;+;A+>>>rSzinfer_expr_stmt %s (%s)N)=NrT)include_setitemrrct}|jdk(r t||S|jdk(r t||S|S)Ndictro)ContextualizedSubscriptListNode array_typerr)vrrI subscriptlistrs rOto_modz _infer_expr_stmt..to_modsJ3G]K<<6)+Ay!<<\\V++Ay!<<rSc3.K|] }|ywrXrQ)r[rrs rOr^z#_infer_expr_stmt..s @q @srrVr?zinfer_expr_stmt result %s)rrnget_rhsrr check_tuple_assignmentsnextyield_operatorsrcget_defined_namesrZrrirrqrrrfor_stmt_defines_one_name get_testlistrrorliteraterhrrr)rIrrrrhsrLfirst_operator is_setitem is_annassignr left_valuesrrVrcnordered lazy_valuedcttrrrs` @@@rOrr}s! ? II'y9 ,,.C""3'I w 2+Ay9 $..0$7N -d 3J !4Z9L9LPZ9ZLz%%d%;A>DD000O  ! @K @@Iyy0H%^^CR0HN++D*=H# (C $>>xH ,,.'6rxxz11"56")[J#,,Q/55z7G7G7IJC 003?[#..s3&7hXY&Z [[[ ( -g{HiX  II)95 [[s  H22H; c t|j}|jt|}|D]}t|}|jdk(r"dj d|jD}|dvrOt d|D}|dhk(r|dk(sa|j|}s|dhk(sz|dk7s|j|}t||||j|}tjd ||S) Ncomp_oprc34K|]}|jywrXrY)r[rs rOr^z infer_or_test..sCACs)andorc3<K|]}|jywrX) py__bool__)r[lefts rOr^z infer_or_test..sA4T__.ATrFzinfer_or_test types %s) iterrhrrrcjoinsetrrrn)rIor_testiteratortypesrr left_boolss rOrrsG$$%H   tH~ .EAX ==I %xxC1B1BCCH } $A5AAJdV#u$#..u5Ew&u$#..u5E&guh&-&8&8&?AE!A$ II&. LrSc#zK|D]}|dk(rt|s|j'|dk(r|j}|Mt|jj j djjtj|j| |yw)z6 Calculates `+`, `-`, `~` and `not` prefixes. r2notNbool) rnegaterrorBrFrrrr r)rrrZbs rOrrs   s?lln$    "Ay500@@SSTZ[..0225#%833E4I4Iq5QQK s B;B"B;ct}|D]Z}t|r>tj||jj }||j z}L|t|gz}\|SrX)rrr rr string_namerr)rBr new_resultrclss rO_literals_to_typesr.shJ* c?,,_chh>R>RSC #113 3J (C5/ )J* rScjttr}ntj}|rs!|xstxstz}t |S|dk(r=t dtj|Drtj|fSt|tzdkDrt |zStjfd|DS)Nr9c3`K|]&}|jxs|j(ywrX)is_class is_compiled)r[rZs rOr^z$_infer_comparison..s0%  /E--//%s,.c 3JK|]}D]}t||ywrX)_infer_comparison_part)r[rrrIr right_valuesrs rOr^z$_infer_comparison..s;&)&'ugtXuM&M&s #) rBr`strrZrr.all itertoolschainr from_setsrm)rIrrr6 operator_strrrs` `` @rOrrs  # #E(C  8>>* l*|/HyI!%00  %__[,?%" !!; "=>> { c,/ /! 3%e[<-GH H%%&'& rSctj|ddd}|y|jdvr=|j}|.|j|jcxkxr|j kScSy|jdk(r`|j }t|dkDrF|djdk(r4|dj|jcxkxr|dj kScSy)NparamfuncdefrF)r>r?r?r)rrrcrrirjrhrm)rancestorannrs rOrr%s##D'9kJH}},,!! ?==DNN@S[[@ @@ @  + %    q6A:!A$)){2Q4>>T^^BadllB BB B rSc |jdk(S)NrorrYs rO_is_listrD5s   v %%rSc |jdk(S)NtuplerCrYs rO _is_tuplerG9s   w &&rSc@tj|t|SrX)r rr7)rBbool_s rO_bool_to_valuerJ=s  % %os5z BBrSc2t|tjsyg}|jD]V}t|tsy|j }|j dk7ry |jt|jX|S#t$rYywxYw)Nr) r`rr py__iter__r datarcappendintrZ ValueError)rZnumbersrrs rO_get_tuple_intsrRAs eX:: ;G&&(  *m4 99   NN3tzz? +  N  s!$B  BBct|}t|}t|tr|}nt|j}|dk(rct|tj s t |r t|gSt|tj s t |rt|gS|dk(r||r|st |rt |r|j||St|r t|st|rt|rtt j|||fgS|dk(r|rX|rU|j||S|dk(r t|gS|tvr|jr&|jr|j||}|r|S|dvr/t|} | ||} |dv| k(rtt|| gSt|trct!|} | Vt#j$j||j&j(t+| } tt|| gStt|dt|dgS|d vr)|j,j/d j1Sd } |d vr4||k7r/| |s'| |sd }t3j4|d||||fz|j7s|j7rt8St:|}|j/|}|r|j=|}|r|S|s/t>|}|j/|}|j=|}|r|St||g}tAjBd|||S)Nr3r1r2r6)isz!===zis not)rTrUTF)inznot inr'cVt|txr|jjdvS)z4Checks if a Jedi object is either a float or an int.)rOfloat)r`rrr+)objs rOcheckz%_infer_comparison_part..checks)#|,5 HH $4 4 5rS)r1r2z7TypeError: unsupported operand type(s) for +: %s and %sztype-error-operationz Used operator %s resulting in %s)"rr`r7rZrSequencerrexecute_operationrDrG MergedArrayrr2rJrrRr access environment version_inforFrFrrraddr1roperator_to_magic_methodr reverse_operator_to_magic_methodrrn)rBrIrrrl_is_numr_is_num str_operatorr operationrIr` bool_resultrZmessage method_name magic_methodsreverse_method_names rOr5r5Rs?HH(C  8>>* s dH-- .)D/TF# # x00 1Yu5EUG$ $   IdO %8H))%> > d^9T?yQVGWX11/D%=QRS S   ))%> >   - -    %"3"3"5++E<@F ;;0> !$.!L0U:#^OU%K$LMM$ ,.u5 +"*//"F"Fx"P'33@@l+#K$^O[%Q$RSS ?D 1 ?E 2    ) )..AA&I\\^^5 z!h(&:4[E%LK W4he}, . }}%..**<8K++K8M2259 M >|L001DE 2248 M tUm $F II0(FC MrSct}|jj}|C|jj |j g}d}|D] }|j }|jdk(s |jdjdk(s=tj||jk(} |jd} | sqd}| jdjdk(r>| jdj |j k(r|jr |j}|tj||jdjdjz}|r|Sg} |jdd} | |j } | jdk(rw|j!|} | j#rtSt%| j'}|j |j }t)j*d |DS| jd vr|j!|} t-| |S| j}|d k(rtj.|| |} | r| S|d k(rtj0|| |} | r| S|d vr |j2| |j } | S|dk(rtA|| |} | S|d k(r|jC| jE|}| j jdk(r?|jGd}|jI}|jKjMS|jGd}|jIS|d vrtOjP||} | S|dvrtS|| } | S|dk(r?|jC|jUjU}|jI} | S|dk(rt} | S|dk(rt} | S|dk(rtC|| } | StWd|z#t4$rht7|| jd}t9|j;|| j jdk(}t=||}t?||} Y| SwxYw)NFrr?rTr)import_name_alwaysr global_stmtc3<K|]}|jywrX)rl)r[rs rOr^z&tree_name_to_values..s%Etdjjl%Er) import_from import_namerV with_stmt)rVrrr async_stmt)contextualized_nodeis_async __aenter__ __enter__)r?classdeftry_stmtr>del_stmtrzShould not happen. type: %s),rget_root_contextrAget_used_namesrfrZrbrcrhrget_parent_scoperDrrrget_definitioncreate_context is_moduler get_filtersrr;rfind_type_from_comment_hint_for find_type_from_comment_hint_withrerHrr rlr rrrget_test_node_from_namerrrrr infer_import_apply_decoratorsget_previous_siblingrP)rBrI tree_namer module_nodenamesfound_annotationrr correct_scope ann_assignr#rrfilterrr for_typesrLvalue_managers enter_methodscoro exceptionss rOtree_name_to_valuesrsI**,66K**,00"E  +D I~~,1C1CA1F1K1K{1Z , = =d CwGXGX X &//2  '+$#,,Q/44>'00399Y__L#22")"8"8!B& $&))\9I #7I6A+Ay9E@ LQ :s P A-Q:9Q:c |jdk(rt|j||}ntj||}t |gx}}t |r|St|jD]D}tjd||dtj5|j|jd}|jdd}|r*tjd |}||_t#|||}t%|s;|j'd } | d k7rtj(d |||cdddcS|j+t-j.|g}t%|s#tj(d||cdddcS dddtjd|dG||k7r#t |D cgc]} t1| |c} S|S#1swYNxYwcc} w)z Returns the function, that should to be executed in the end. This is also the places where the decorators are processed. ry)rDrAzdecorator: %s %sMAGENTA)colorr?r<rrF)include_prefixz @runtime zdecorator not found: %s on %sNz)not possible to resolve wrappers found %szdecorator end %s)rcrrBrrrrreversedget_decoratorsrrnincrease_indent_cmrrhr PythonNoderbrrmget_coderGrrValuesArgumentsr") rIrdecoratee_valueinitialvaluesdec dec_values trailer_nodesrcoders rOrrs  yyJ$  # #"  (44WdC 122Gfw' ++-.? $c6C  % % '  ++CLLO3?4G11o6GHH M5  2Hs$BG%AG% G1%G. cVd}|jD]|\}}t|j|}|j|}t |t rt cSd}||kr! t|}||jz }||kr!|j}~|S#t$r t cYcSwxYw)z( Checks if tuples are assigned. Nr) assignment_indexesrrDr r`slicerrmax StopIterationrl)rrrindexrriteratedr\s rOrrKsJ..0' t  3 3T :$$R( eU #  5j $!(^ Z^^#5j$$& %'& ! ! !  !s BB('B(ceZdZdZy)rcBt|j|jSrX)rrIr)selfs rOrlz%ContextualizedSubscriptListNode.infergs$T\\499==rSN)__name__ __module__ __qualname__rlrQrSrOrrfs>rSrc|dk(r"ttj|dddgS|jdk(r|jddk(sg}|jD]t}|dk(r|r |j d|jdk(r8t |jdk(sE|j |jdd|j |v|dgd t |z zz }ttj|g|gS|jd k(r+ttj|j||gS|j|S) z, Handles slices in subscript nodes. rN subscriptrrsliceopr<r?rr) rrSlicercrhrNrmrrBr)rIrrels rOrrks, |tTBCDD { "5>>!+<+C.. "BSyMM$'I%r{{#q(MM"++a.1 b! " 4&AF O,,9&9:;;  &66w7N7NPWY^_`aa   e $$rSrX)Q__doc__rqr9 parso.pythonrjedirrjedi.inference.base_valuerrrr r jedi.inference.lazy_valuer jedi.inferencer r rrrjedi.inference.valuerrr#jedi.inference.value.dynamic_arraysrrrjedi.inference.helpersrrrrrjedi.inference.compiled.accessrjedi.inference.cacher!jedi.inference.gradual.stub_valuerjedi.inference.gradualrjedi.inference.namesr jedi.inference.contextr!jedi.inference.value.decoratorr" jedi.pluginsr#rbitemsrcrRrrsrincrease_indentrarrrrrrr.rrrDrGrJrRr5decoraterrrrr)krs00rOrs **3#$#"$:)R-//?=9-314'             "":!?!?!A$AAuqu}$ BE=P 0i0)1)K/K/\-0R%j  JJZ2& <  &'C"ZzddR. .b6>&8> %s$s F