bg΅ dZddlmZddlZddlmZddlmZddlm Z m Z m Z m Z m Z mZddlmZddlmZdd lmZmZmZmZmZdd lmZdd lmZd Zd ZdZdZ dZ!e!ee edee edddOdZ"dPdZ#dZ$dZ% dQdZ&ee&e j'e j(e j)e j*e j+e j,e j-fe.Z/ee&e j(e j'e j)e j*e j+e j,e j-fe0Z1ee&e j)e j(e j'e j*e j,fe2Z3ee&e j*e j(e j'e j)e j*e j,fe4Z5dZ6dRdSd!Z7dRdSd"Z8d#Z9dRdSd$Z:dRdSd%Z;dRdSd&Z< dRdTd*Z=dRdSd+Z>dRdSd,Z?dRdSd-Z@dRdSd.ZAdOd/ZBdRdSd0ZCdRdSd1ZDdRdSd2ZEdRdSd3ZFdRdSd4ZGdRdSd5ZHdRdSd6ZI dRdUd8ZJdVd9ZK dRdWd;ZLe#e>de#e8d<e#ee#e:d?e#e;d@e#e/dAe#e3dBe#e1dCe#e7dDe#e5dEe#e?dFe#e@dGe#eDdHe#eCdIe#eFdJe#eGdKe#eHdLe#eIdMeMe jNe eAeBeMe jOe eJdNeMe jOe eLeKdS)Xz#Astroid hooks for various builtins.) annotationsN)Iterator)partial) argumentshelpers inference_tipnodesobjectsutil)AstroidBuilder)InferenceContext)AstroidTypeErrorAttributeInferenceErrorInferenceErrorMroErrorUseInferenceDefault)AstroidManager) scoped_nodeszobject.__new__a class whatever(object): def join(self, iterable): return {rvalue} def replace(self, old, new, count=None): return {rvalue} def format(self, *args, **kwargs): return {rvalue} def encode(self, encoding='ascii', errors=None): return b'' def decode(self, encoding='ascii', errors=None): return u'' def capitalize(self): return {rvalue} def title(self): return {rvalue} def lower(self): return {rvalue} def upper(self): return {rvalue} def swapcase(self): return {rvalue} def index(self, sub, start=None, end=None): return 0 def find(self, sub, start=None, end=None): return 0 def count(self, sub, start=None, end=None): return 0 def strip(self, chars=None): return {rvalue} def lstrip(self, chars=None): return {rvalue} def rstrip(self, chars=None): return {rvalue} def rjust(self, width, fillchar=None): return {rvalue} def center(self, width, fillchar=None): return {rvalue} def ljust(self, width, fillchar=None): return {rvalue} a class whatever(object): def join(self, iterable): return {rvalue} def replace(self, old, new, count=None): return {rvalue} def decode(self, encoding='ascii', errors=None): return u'' def capitalize(self): return {rvalue} def title(self): return {rvalue} def lower(self): return {rvalue} def upper(self): return {rvalue} def swapcase(self): return {rvalue} def index(self, sub, start=None, end=None): return 0 def find(self, sub, start=None, end=None): return 0 def count(self, sub, start=None, end=None): return 0 def strip(self, chars=None): return {rvalue} def lstrip(self, chars=None): return {rvalue} def rstrip(self, chars=None): return {rvalue} def rjust(self, width, fillchar=None): return {rvalue} def center(self, width, fillchar=None): return {rvalue} def ljust(self, width, fillchar=None): return {rvalue} cH||}tt|d}|D]B}||_d|_d|_d|jvr |g|jd<|g|j|j <||_CdS)z-Function to extend builtin str/unicode class.)rvaluewhateverN __class__) formatr r string_build mymethodsparentlineno col_offsetlocalsname) class_nodecoderfakemethods v/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/astroid/brain/brain_builtin_inference.py_extend_string_classr&ns ;;f; % %D .** + + 8 8 > >z JD..""##"    &- ' '*4FM+ &*0 &+&" ##ctj}|D]\}}|||dSN)rbuiltins_moduleitems)class_transforms builtin_ast class_name transforms r%_extend_builtinsr0|sR ""2K!1!7!7!9!9++ I +j)****++r'zb'')r"rz'')bytesstrreturnboolc|dkr|jdkrt|jtjr|jjdkrt|jtjrbt|jj dkrEt|jj dtj r|jj djdvrdSt|jtjr|jj|krdSt|jtj rI|jj dko8t|jj tjo|jj jd kSdS) Ntyperer>MatchPatternFTfromkeysdict)rootr isinstancefuncr NamerAssignlentargets AssignName Attributeattrnameexpr)node builtin_names r%_builtin_filter_predicaterJs9 IIKK  $ $ ty%* - - % INf $ $ t{EL 1 1 %  # $ $ ) ) t{*1-u/? @ @ * K  " '+? ? ?u$)UZ((TY^|-K-Kt$)U_-- I * , .49>5:66 . #v- 5r'Nonecddfd }ttjt |t t |dS)zRegister a new transform function for the given *builtin_name*. The transform function must accept two parameters, a node and an optional context. NcontextInferenceContext | Nonec||}|rD|js||_|j |j|_t|dr|j |j|_t |gS)NrMr)rrhasattrriter)rHrMresultr/s r%_transform_wrapperz6register_builtin_transform.._transform_wrappersw4111  4= %!% }$ $  v|,, 41B1J$(O!VH~~r')rIr)rMrN)rregister_transformr CallrrrJ)r/rIrTs` r%register_builtin_transformrXsr"'' ())) EEEr'c|j}|s |St|jdkrt|\}||}|sr t||}n!#t t f$r }t|d}~wwxYwt|tj rt||}|rt|tj rt|S)Nr8rP) argsrBrnextinferr StopIterationr>r UninferableBase) rHrM node_typer/rZarg transformedinferredexcs r%_container_generic_inferencerds 9D y{{ 49~~!### FS)C..K * /CIIgI6677HH . / / /%3 . / h 4 5 5 &% %i)) "*[$2FGG"!! s #A00BB  Bct||r|St||rtd|jDrd|jD}ng}|jD]H}|stj||}|r+t j||}||Int|t jr>td|j Dstd|j D}nEt|t j r)t|j ttfr|j }ndS|||S)Nc3JK|]}t|tjVdSr)r>r Const.0elts r% z/_container_generic_transform..s.@@z#u{++@@@@@@r'cg|] }|j Svalueris r% z0_container_generic_transform..s222#CI222r'rP)originalrpc3VK|]$}t|dtjV%dS)rNrgris r%rlz/_container_generic_transform..s2HHs:c!fek22HHHHHHr'c(g|]}|djS)rro)rjitems r%rqz0_container_generic_transform..s444$Q 444r')elts)r>allrvr safe_inferr EvaluatedObjectappendDictr+rrhrpr2r1 from_elements) r`rMklass iterables build_eltsrvelementrbevaluated_objects r%_container_generic_transformrs#u #y!! @@sx@@@ @ @ 222222DDD8 2 2"-gwGGG2','r ListTupleSet)ns r% is_iterablez_get_elts..is_iterable7s!ej%+uyABBBr'r)r[r\rr]rr>r r{r+rvrBrrhr@rztuple)r`rMrrbrcr+rks r% _get_eltsr6sJCCC+ '**++ M *+++!s*+(EJ''$ X  $= * *C ;s## ,)+++38}}!!)+++chqkEKej+QRR ,)+++ LLsx ) ) ) ) *"### Ls"(AAArMrNctj||}|s|rt |j}t|j }|s|stj S|r|s d|D}nut|dkr*|r(t|d|}d|D}||z}n8t|dkrt|d|}nt tj |j|j|j}|||S)aCTry to infer a dict call to a Dict node. The function treats the following cases: * dict() * dict(mapping) * dict(iterable) * dict(iterable, **kwargs) * dict(mapping, **kwargs) * dict(**kwargs) If a case can't be inferred, we'll fallback to default inference. rPc@g|]\}}tj||fSrnr rhrjkeyrps r%rqzinfer_dict..ms+DDDzsE%+c""E*DDDr'r8rc@g|]\}}tj||fSrnrrs r%rqzinfer_dict..qs+CCCjc5S!!5)CCCr'rrr)rCallSite from_callhas_invalid_argumentshas_invalid_keywordsrpositional_argumentslistkeyword_argumentsr+r r{rBrrrrpostinit) rHrMcallrZkwargsr+rvkeysrps r% infer_dictrSs_   ' 'g ' > >D !!##"t'@'@'B'B"!!  $D $(..00 1 1F z|| $d $DDVDDD TaFa'**CCFCCCt  Ta$q'7++!### J?4;t{   E NN5 Lr'cFt|jdkrt|}t |t jst|jdvrttj |}|js%|}|jdkr|}n| }n t|jd |}n!#ttf$r }t|d}~wwxYw t|jd |}n!#ttf$r }t|d}~wwxYwt |tjst |tjrtt#j||||}||_|S)aUnderstand super calls. There are some restrictions for what can be understood: * unbounded super (one argument form) is not understood. * if the super call is not inside a function (classmethod or method), then the default inference will be used. * if the super arguments can't be inferred, the default inference will be used. r8) classmethodr$rrrPN) mro_pointermro_type self_classscope)rBrZrrr>r FunctionDefr6rget_wrapping_classinstantiate_classr[r\rr]r r^r Superr)rHrMrclsrrrc super_objs r% infer_superr~s 49~~!! JJLLE eU. / /"!! z222!!  )% 0 0C 9/  : & &HH,,..HH /ty|11'1BBCCKK . / / /%3 . / /DIaL..w.??@@HH . / / /%3 . /+t344" $&99""! (s%II s0&.CC3&C..C37.D&&E7D??Ec^t|jdvrt t|jd|}t|jd|}n!#t t f$r }t|d}~wwxYwt|tj st|tj rtj tj fSt|tj ot|j t}|st||j fS)N)rrrPr8)rBrZrr[r\rr]r>r r^ Uninferabler rhrpr2)rHrMobjattrrc is_strings r%_infer_getattr_argsrs 49~~V##!!+49Q<%%g%6677DIaL&&w&7788 M *+++!s*+#t+,,2 4AU0V0V2!1114--M*TZ2M2MI "!!  ?sAA<<B BBc.t||\}}t|tjs*t|tjst |ds tjS t |||S#tttf$rmt|j dkrR t |j d |cYS#ttf$r }t|d}~wwxYwYnwxYwt)zUnderstand getattr calls. If one of the arguments is an Uninferable object, then the result will be an Uninferable object. Otherwise, the normal attribute lookup will be done. igetattrrPrrN)rr>r r^rQrr[rr]rrrBrZr\r)rHrMrrrcs r% infer_getattrrs%$D'22IC3,-- dD0 1 1 sJ'' 3CLLwL77888 >+B C333 ty>>Q   3DIaL..w.??@@@@@!>2 3 3 3)s2 3  3 s6%#B /D 9-C)&D )D:DDD  D c t||\}}t|tjs*t|tjst |ds tjS|||n;#t$rtjcYSt$rtj dcYSwxYwtj dS)aMUnderstand hasattr calls. This always guarantees three possible outcomes for calling hasattr: Const(False) when we are sure that the object doesn't have the intended attribute, Const(True) when we know that the object has the attribute and Uninferable when we are unsure of the outcome of the function call. getattrrPFT) rr>r r^rQrrrrr rh)rHrMrrs r% infer_hasattrrs"'g66 T sD0 1 1 $$ 455 $3 ** $ # # D' ****     """"{5!!!!!" ;t  sA"A=%A==B5B54B5ct|jdkrt|jd} t||}n##t t f$rtjcYSwxYwt|tj r tjStj | S)zUnderstand callable calls. This follows Python's semantics, where an object is callable if it provides an attribute __call__, even though that attribute is something which can't be called. r8rrP)rBrZrr[r\rr]r rr>r^r rhcallable)rHrMargumentrbs r%infer_callablers 49~~!!y|H w7788 M *    (D011  ;x((** + ++s#AA21A2rH nodes.Callobjects.Propertyc t|jdkrt|jd} t||}n!#t t f$r }t|d}~wwxYwt|tj tj fsttj ||j |j||j}|g|jt#|dd|S)zxUnderstand `property` class. This only infers the output of `property` call, not the arguments themselves. r8rrPN)functionr rrrdoc_node)bodyrZr)rBrZrr[r\rr]r>r rLambdar Propertyr rrrr)rHrMgetterrbrc prop_funcs r%infer_propertyrs 49~~!! Yq\F+ W 5566 M *+++!s*+ h!2EL A B B"!!  ]{? I  ]:t44 s#AA0#A++A0c t|jdkrt|jstjdS|jd} t ||}n##ttf$rtj cYSwxYwt|tj r tj S| |}t|tj r tj Stj|S)zUnderstand bool calls.r8FrrP)rBrZrr rhr[r\rr]r rr>r^ bool_value)rHrMrrbrs r% infer_boolr@s 49~~!! 9"{5!!!y|H w7788 M *    (D011 $$W$55J*d233  ;z " ""s #A--B  B ct|jdkrttj|jd|S)z+Understand the one-argument form of *type*.r8r)rBrZrr object_typerHrMs r% infer_typerWs4 49~~!!  ty|W 5 55r'cx|j}dt|cxkrdks ntttj|fd|D}|D]v}|rt |tjrtt |tj stt |j tdtfstwt|dkr)|dgdt|z ztj|j|j|j}|j||S)zUnderstand `slice` calls.rrrPc&g|] }|Srnrn)rjr` infer_funcs r%rqzinfer_slice..fs! , , ,JJsOO , , ,r'N)rrr)rZrBrrrrxr>r r^r rhrpr6intextendSlicerrrr)rHrMrZr` slice_noders @r% infer_slicer_sG 9D s4yy    A    !!+W===J , , , ,t , , ,D&& &jd&:;; &% %#u{++ &% %#)d4jj#%677 &% % & 4yy1}} TFa#d))m,---{tt{JJ r'cFt|fSr))rRrrs r%_infer_object__new__decoratorrzs! ''))+ , ,,r'c|jsdS|jjD]<}t|tjr |t krdS=dS)zfPredicate before inference_tip. Check if the given ClassDef has an @object.__new__ decorator FT) decoratorsr r>rE as_stringOBJECT_DUNDER_NEW)rH decorators r%#_infer_object__new__decorator_checkrs` ?u_* i 1 1 ""$$(999tt 5r'ctj||}|jrt dt |jdkr$t dt |j|j\}} t||}n!#ttf$r }t|d}~wwxYwt|tj st d t||}n#t$r }t|d}~wwxYw tj|||}nG#t"$r%}t dt%|z|d}~wt&$r }t|d}~wwxYwtj|S)aInfer issubclass() calls. :param nodes.Call callnode: an `issubclass` call :param InferenceContext context: the context for the inference :rtype nodes.Const: Boolean Const value of the `issubclass` call :raises UseInferenceDefault: If the node cannot be inferred rPz2TypeError: issubclass() takes no keyword argumentsrExpected two arguments, got NzTypeError: arg 1 must be class TypeError: )rrrrrrBrr[r\rr]r>r ClassDef_class_or_tuple_to_containerrobject_issubclassrr2rrh) callnoderMrobj_nodeclass_or_tuple_nodeobj_typercclass_containerissubclass_bools r%infer_issubclassrs   ' '' ' B BD X!"VWWW 4 $%%**! K3t/H+I+I K K   %)$=!H!+w7788 M *+++!s*+ h / /D!"BCCC+6     +++!s*++!3HowWW EEE!-#c((":;;D +++!s*+ ; ' ''sT?#B##C4B<<C.D D DDD22 E6< E E6)E11E6c~tj||}|jrt dt |jdkr$t dt |j|j\}} t||}n#t$r }t|d}~wwxYw tj |||}nG#t$r%}t dt|z|d}~wt$r }t|d}~wwxYwt|tjrtt#j|S)zInfer isinstance calls. :param nodes.Call callnode: an isinstance call :rtype nodes.Const: Boolean Const value of isinstance call :raises UseInferenceDefault: If the node cannot be inferred rPz2TypeError: isinstance() takes no keyword argumentsrrNr)rrrrrrBrrrrobject_isinstancerr2rr>r r^r rh)rrMrrrrrcisinstance_bools r%infer_isinstancersr   ' '' ' B BD X!"VWWW 4 $%%**! K3t/H+I+I K K   %)$=!H!+6     +++!s*++!3HowWW EEE!-#c((":;;D +++!s*+/4#788"!! ; ' ''s<?B B(B##B(,C D C-- D:DDc` t|}n$#t$r}t||d}~wwxYwt |t jrF fd|jD}n$#t$r}t||d}~wwxYwd|D}n|g}|S)NrPrcVg|]%}t|&S)rP)r[r\)rjrHrMs r%rqz0_class_or_tuple_to_container..s<6:TZZZ0011r'cg|]}||Sr)rn)rj klass_nodes r%rqz0_class_or_tuple_to_container..s$   %Jr rrv)rHrM node_inferers ` r%rrs@$**W*5566 @@@$888a?@*ek** ' D>HoOO D D D dG<< >D U!"STTT 4 $%%**! "Fs4+D'E'EFFF   /O]5{7-mWMMMNNN n -555!#c((++45s'B77C*C%%C*ctj||}|jrt d t jdS#ttf$r"}t t||d}~wwxYw)zInfer str() calls. :param nodes.Call node: str() call to infer :param context.InferenceContext: node context :rtype nodes.Const: a Const containing an empty string rPz/TypeError: str() must take no keyword argumentsN) rrrrrr rhrrr2)rHrMrrcs r% infer_strrs   ' 'g ' > >D U!"STTT5{2 n -555!#c((++45sA BA;;Bctj||}|jrt d|jr t |jd|}n6#ttf$r"}t t||d}~wwxYwt|tj rtt|tjrot|jt"tfrN t#|j}n$#t$$rtjdcYSwxYwtj|StjdS)zInfer int() calls. :param nodes.Call node: int() call to infer :param context.InferenceContext: node context :rtype nodes.Const: a Const containing the integer value of the int() call rP/TypeError: int() must take no keyword argumentsrN)rrrrrrr[r\rr]r2r>r r^r rhrpr ValueError)rHrMr first_valuerc actual_values r% infer_intrs^   ' 'g ' > >D U!"STTT  - 9t8;AA'ARRSSKK . 9 9 9%c#hh//S 8 9 k4#7 8 8 &% % k5; / / -J  Sz5 5  - &";#455  & & &{1~~%%% &;|,, , ;q>>s*.A00B#BB#DD98D9cd fd}tj|}|jrt dt |jdvrt dtjd |jd} t| |}n"#ttf$r|gcYSwxYw|tjur |gStjf}t|tjtjtjfrB|j}|D]}t||s |gcS fd|D} || St|tjr?t|jt*t,fr fd |jD}||St|tjrO|} | D]} t| |s |gcS fd | D} || S|gS) a[Infer dict.fromkeys. :param nodes.Call node: dict.fromkeys() call to infer :param context.InferenceContext context: node context :rtype nodes.Dict: a Dictionary containing the values that astroid was able to infer. In case the inference failed for any reason, an empty dictionary will be inferred instead. c~tjjjj}|||S)Nr)r r{rrrr)elementsnew_noderHs r%_build_dict_with_elementsz6infer_dict_fromkeys.._build_dict_with_elementsJsA:t{4;    (###r'rPr>r8rz5TypeError: Needs between 1 and 2 positional argumentsNrcg|]}|fSrnrnrjrdefaults r%rqz'infer_dict_fromkeys..ksJJJg1JJJr'c<g|]}tj|fSrnrr s r%rqz'infer_dict_fromkeys..ps5   07U[ ! !7 +   r'cg|]}|fSrnrnr s r%rqz'infer_dict_fromkeys..{sFFFg1FFFr')rrrrrrBrr rhr[r\rr]r rr>rrrrvrpr2r1r{itered) rHrMr rvaluesinferred_valuesaccepted_iterable_elementsr relements_with_valuerrrs ` @r%infer_dict_fromkeysr?s   ' 'g ' > >D U!"STTT 4 $%%V33! C   k$G  &q )F-v||G|<<== M *---((,,,,,-$***((,,,#(+/EJ 5;#GHH>"' 5 5Gg'ABB 50044444 5KJJJJJJ(()<===/5;//3JU|553    ;J;P   )(222/5:..>%%'' 5 5Cc#=>> 50044444 5GFFFFFF(()<=== % $R ( ((s#B**C C Iterator[nodes.NodeNG]ct|jtjsJt j|jj|\}}td|Dr|St)NrPc3K|]@}t|tjtjtjt jfVAdSr))r>r r{rrr FrozenSet)rj inferred_nodes r%rlz%_infer_copy_method..sY     EJ EIw?PQ        r') r>r?r rE itertoolsteerGr\rwr)rHrM inferred_orig inferred_copys r%_infer_copy_methodr s di 1 111 1#,=1E1Eg1E1V1V#W#W M=   +        r'cjt|jtjr|jjdksdSt|jjtjrtj|jj}n |jj}t|tj ot|j tS)zCatch calls to str.format().rF) r>r?r rErFrGr@rrxrhrpr2)rHrps r%_is_str_format_callr"s di 1 19Kx9W9Wu$).%*--"49>22  eU[ ) ) Jjc.J.JJr',Iterator[nodes.Const | util.UninferableBase]ctj|}t|jjt jr;tj |jj}|ttj gSn |jj}|j }fd|jD}td|Dsttj gSd|D}fd|jD}td|Dsttj gSd|D} |j|i|} nC#t(t*t,t.t0f$rttj gcYSwxYwtt j| gS) z?Return a Const node based on the template and passed arguments.rPNc:g|]}tj|Srnrrx)rjirMs r%rqz*_infer_str_format_call..s3+,1g&&r'c3JK|]}t|tjVdSr)rgrjr's r%rlz)_infer_str_format_call..s.GGaz!U[))GGGGGGr'cg|] }|j Srnror)s r%rqz*_infer_str_format_call..sBBBQWBBBr'cBi|]\}}|tj|Srnr&)rjkvrMs r% z*_infer_str_format_call..s9.2a7 a ) )r'c3JK|]}t|tjVdSr)rgr)s r%rlz)_infer_str_format_call..s.MMaz!U[))MMMMMMr'c$i|] \}}||jSrnro)rjr,r-s r%r.z*_infer_str_format_call..s %V%V%VTQa%V%V%Vr')rrrr>r?rGr r@rrxrRr rrprrwrr+rrAttributeError IndexErrorKeyError TypeErrorr const_factory) rHrMrrpformat_templateinferred_positional pos_valuesinferred_keywordkeyword_valuesformatted_strings ` r%_infer_str_format_callr<s    ' 'g ' > >D$).%*--$+$6ty~$F$F =)*++ +  kO040I GG3FGGG G G(T%&'''BB.ABBBJ6:6L6R6R6T6T MM3C3J3J3L3LMMM M M(T%&'''%V%V=M=S=S=U=U%V%V%VN(1?1:PPP J)Z H((( T%&''''' ( $%5667 8 88s0 E>>=F>=F>superrpropertyrrQrsetrr< frozensetr6slicer> issubclassrBr2rz dict.fromkeysc`t|jtjo|jjdkS)Ncopy)r>r?r rErF)rHs r%rEs)DIu77% f$r')r3r4)r3rK)NNNr)rU)rHrrMrNr3r)rHrrMrNr3r)rHrr3r4)rHrrMrNr3r#)P__doc__ __future__rrcollections.abcr functoolsrastroidrrrr r r astroid.builderr astroid.contextr astroid.exceptionsrrrrrastroid.managerr astroid.nodesrr STR_CLASS BYTES_CLASSr&r0rJrXrdrrrrrr DictItemsDictKeys DictValuesr infer_tupler infer_listr? infer_setr@infer_frozensetrrrrrrrrrrrrrrrrrrrrr r"r<rVrrWrnr'r%rYsh *)""""""$$$$$$KKKKKKKKKKKKKKKK******,,,,,,+*****&&&&&&$(  V$ N # # #+++ -KNNNw+)DIII:>,666B;? N N N Ng +       W *        G )z5;(97;KL     '  z5; 73DgFVW :(((((V66666r086,,,,,.:>!!!!!H#####.666666-----    ((((((((((V"("("("("(J255555. 5 5 5 5 5 @@)@)@)@)@)H:>      K K K K:>'9'9'9'9'9V:v...;000>:666>:666=)444=)444;0009e,,,:v...:v...?K888:v...;000+\:::+\:::9e,,,9e,,,9e,,,.@@@## NM/00' ## JM$%%%%## J 4557Jr'