bgX"UdZddlmZddlZddlZddlZddlmZddlm Z ddl Z ddl m Z m Z m Z mZmZddlmZmZmZddlmZdd lmZmZmZmZmZdd lmZejd krdd lm Z ndd l!m Z hd Z"dZ#de$d<ddhZ%de$d<hdZ&de$d<dZ'dZ( d>d?d$Z)d%Z*d@d&Z+ej,e+d'(Z-ej,e+d)(Z.ej,e+d*(Z/ dAdBd,Z0d-Z1dCd.Z2 dAdDd0Z3d1Z4dEd3Z5dAdFd4Z6dAdFd5Z7 dAdBd6Z8dGd8Z9dHd;Z:e;ej<e e0e-e;ej<e e3e.e;ej=e5e:<e;ej=e e6e*e;ej>e e7d=e;ej<e e8e/dS)Iz.Astroid hooks for the Python standard library.) annotationsN)Iterator)dedent) argumentsbases inference_tipnodesutil)AstroidBuilder_extract_single_node extract_node)InferenceContext)AstroidTypeErrorAstroidValueErrorInferenceErrorMroErrorUseInferenceDefault)AstroidManager))Final> enum.IntEnum enum.IntFlagEnumIntEnumIntFlag enum.Enumrz Final[str] ENUM_QNAMEtyping.NamedTupletyping_extensions.NamedTuplerTYPING_NAMEDTUPLE_QUALIFIED> NamedTuplerr TYPING_NAMEDTUPLE_BASENAMESct|tjrt t ||}n#t $r }t|d}~wwxYwt|tjrt|S)Ncontext) isinstancer UninferableBasernextinfer StopIterationr)noder&valueexcs t/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/astroid/brain/brain_namedtuple_enum.py _infer_firstr06s$,--"!!&TZZZ0011 &&&#%&%-..$!### Ls#A AAAc dfd }|j|j}|r d|Dni|dd}|dd}|r |r |j|fSt) Nct|krt|S|r|vrt|SdSdSN)lenr0)positionkey_nameargsr&found_keywordss r/"_extract_namedtuple_arg_or_keywordzE_find_func_form_arguments.._extract_namedtuple_arg_or_keywordCsd t99x  X88 8  CN22x 8'BB B C C22c(i|]}|j|jS)argr-).0keywords r/ z-_find_func_form_arguments..Ns<<<gm<<constr&s r/ z#infer_func_form..ps3"""?D UG44:"""r:itemscg|]=}t|dtj"t|dj>Sr)r'r Constr0r-rUs r/rWz#infer_func_form..ysP"""!%eAh <<"$U1Xw77="""r:eltsc3JK|]}t|tjVdSr3)r'r Tuple)r>rVs r/ z"infer_func_form..s.RRe:eU[99RRRRRRr:cg|]<}t|tjt|jdj=SrZ)r'r r^r0r\r-rUs r/rWz#infer_func_form..sN&&& %)%==&(A@@F&&&r:c:g|]}t|jSr<rTrUs r/rWz#infer_func_form..s3&&&CHL88>&&&r:Nc,g|]}t|Sr<)strr>attrs r/rWz#infer_func_form..s777Dc$ii777r:cg|]}d|v| S)rRr<rds r/rWz#infer_func_form..sAAA4D$r: Uninferable)rbody decorators)rGr-replacesplitAttributeError_get_namedtuple_fieldsr r\hasattrr'rXlistallrrr ClassDefparentpostinit EmptyNodeattrnameinstance_attrs) r,rIr&rLrErF attributesr.fields fields_node class_nodere fake_nodes ` r/infer_func_formr|Ys,+/g>> e( 2$)K$7$7S$A$A$G$G$I$IJJ& 2& 2& 2$ 2 /55".v"6"6K""""HSHX"""J5'**2z%+t/L/L2""""%*["""JJ UF++2RRuzRRRRR &&&&).&&& &&&&LQJ&&& )c1!2(c1M& 2N N ++++!s*+ 877J777 BA:AAAJ  =D%%J J  66O%% % ! +4+ !$'' tZ ''sAD;-AD; D7CD2-D;2D77D;;E EEc:t|jtzS)zRPredicate for class inference tip. :type node: ClassDef :rtype: bool )set basenamesr#r,s r/_has_namedtuple_basers t~  !< <r=s r/r_z$infer_named_tuple..s(AAs]]]AAAAAAr:z[ {name} = property(lambda self: self[{index:d}], doc='Alias for field number {index:d}') c3LK|]\}}||VdS))rEindexN)format)r>rrE field_defs r/r_z$infer_named_tuple..sN E4 d%00r:z class z*(tuple): __slots__ = () _fields = z def _asdict(self): return self.__dict__ @classmethod def _make(cls, iterable, new=tuple.__new__, len=len): return new(cls, iterable) def _replace(self, zP): return self def __getnewargs__(self): return tuple(self) z r_asdict_make_replace_fields)r rrootr|rCallSite from_callr r)r*r+rinfer_argument bool_value_check_namedtuple_attributesrrrcrjoin enumerater r string_buildrhlocalsiter)r,r&tuple_base_namerzrErw call_sitererr. replace_args field_defsfakerers @r/infer_named_tuplers(,1:7499;;+W+W+W*XO#2 ow$$$ Jj",,T7,CCI D E ED/DJJLL!! ///$'''Q./i..tXwGGHHSSUU M *F1$ FKK EEE!-#c((":;;D FFF!.3s88";<<#EF99AAjAAAAAL 2$Z00J .** + + 8 8      %        D"$(9Q<#6y#AJi !%1!4W!=Jg$(IaL$7 $CJj!#'9Q<#6y#AJi <<"&)A,"5d"; $   sN2!B B4B//B486C//DD D E7% E E7 E22E7ct|}t}t|D]\}}td|DrIt j|s5|r3|ds|ds||vrd|z||<||t|S)Nc3JK|]}|p|dkVdS)_N)isalnum)r>cs r/r_z5_get_renamed_namedtuple_attributes.. s3::AIIKK+18::::::r:rrz_%d) ror~rrpr? iskeywordisdigit startswithaddr)rCrFseenirEs r/"_get_renamed_namedtuple_attributesrs   E 55D[))  4::T::::: ! && ! !Aw   ! s##  ! t||qyE!H  <<r:c t|}|rt|}|f|zD]u}t|tst d|st dd|ztj|rt d|vt}|D]V}| dr|st d|||vrt d|| |W|S)Nz*Type names and field names must be stringsz(Type names and field names must be validz identifiers: z0Type names and field names cannot be a keyword: rz-Field names cannot start with an underscore: z"Encountered duplicate field name: ) rrr'rcr isidentifierrr?rr~rr)rArwrrErs r/rrsZz""J D7 CC  j(  $$$ Q"#OPP P  "" #:=UT=U=UU   T " " #K4KK   55D ??3    #HHH  4<<#$Q$Q$QRR R  r:Iterator[bases.Instance]cR |j|}n!#ttf$r }t|d}~wwxYwt d|Dstt d}t||g|dd}t| gS)z/Specific inference function for enum Call node.Nc3K|];}t|tjo|tkVitems r/r_zinfer_enum..CsT  4((GTZZ\\Z-Gr:a class EnumMeta(object): 'docstring' def __call__(self, node): class EnumAttribute(object): name = '' value = 0 return EnumAttribute() def __iter__(self): class EnumAttribute(object): name = '' value = 0 return [EnumAttribute()] def __reversed__(self): class EnumAttribute(object): name = '' value = 0 return (EnumAttribute, ) def __next__(self): return next(iter(self)) def __getitem__(self, attr): class Value(object): @property def name(self): return '' @property def value(self): return attr return Value() __members__ = [''] T)r&rLr) rr*rr+ranyr r|rinstantiate_class)r,r&inferredr. enum_metarzs r/ infer_enumr9s +9??7++ M *+++!s*+   ""!$ !!ID! {G$OOOPQRJ --//0 1 11s;6;a def __or__(self, other): return {name}(self.value | other.value) def __and__(self, other): return {name}(self.value & other.value) def __xor__(self, other): return {name}(self.value ^ other.value) def __add__(self, other): return {name}(self.value + other.value) def __div__(self, other): return {name}(self.value / other.value) def __invert__(self): return {name}(~self.value) def __mul__(self, other): return {name}(self.value * other.value) nodes.ClassDefc d|DD]}|jdkrni}t}|jD]\}}t d|Dr |dd}t|tj rMt|j dtj r |j d }n,|j }n$t|tjr |jg}nd}|j~t|jtjrFt|jjt$rt'|jj}n&|jj}n|j}g} |D];} t| tjr|| jt/d| jd |j| } d |vr#| t6| j z } t9t;d | | j} | j| _| D]} | g| j| j<| !| "| ||<=| |j|<tj#|g|jd<tj#|$fd|Dg|jd<d|vrNt/d}t9t;|d}|g|jd<|S)zSpecific inference for enums.c3.K|]}|jD]}|VdSr3)r)r>clsbs r/r_z#infer_enum_class..s1DD3cmDDQDDDDDDDr:rLc3LK|]}t|tj V dSr3)r'r AssignName)r>r-s r/r_z#infer_enum_class..s2OOuz%)9:::OOOOOOr:rT)futureNa class {name}({types}): @property def value(self): return {return_value} @property def name(self): return "{name}" r)rEtypes return_valuerrF)apply_transformsrr_value2member_map_cxg|]6\}}tj|tj|jf7S)r)r r[rrE)r>kvmemberss r/rWz$infer_enum_class..sR   AqQw///AF71S1S1ST   r: __members__rEzY @property def name(self): return '' )%mrorrEr~rrXr statementr'r Assigntargetsr^itered AnnAssigntargetr-r[rcrepr as_stringStarredrrrrrINT_FLAG_ADDITION_METHODSr rrrr mymethodsappendrDictrs)r,basenamedunder_members target_nameslocalvaluesstmtrinferred_return_value new_targetsrclassdefrmethodcodename_dynamicclassattrrs @r/infer_enum_classrsDD$((**DDDgg 99;; v % % Euu ![..00= -= -ME6OOOOOOO !9&&d&33D$ -- dl1ou{;;+"l1o4466GG"lGGD%/22 ;-$( !z%dj%+66C!$*"2C88A04TZ5E0F0F--04 0@--,0J,@,@,B,B)K!" -" -fem44  ---!F#["ii77%:((  9 @ @fk @ R RRH%"$$u,x((6%m "nn..88F06xDK ,,""4#9#9#;#;<<<(,u%%!,DK  .3Zt-D-D-D,E ()*D)))    *0022      '.Y M"  % %D%3>3C3C$D$D$Q$QRV$W$W% !$9"9DK  Kr:cd|jD}td|jd|}t |} t t||}n$#t$r}t|||d}~wwxYw| D]}|g|j |j<|jD]m}t|tjr'|jD]} | j} |j | |j | <Ct|tjr|g|j |j<nt#|fS)z&Infer a subclass of typing.NamedTuple.cZg|](}t|tj|jj)Sr<)r'r rrrE)r> annassigns r/rWz1infer_typing_namedtuple_class..s@  i 1 1r:zU from collections import namedtuple namedtuple({typename!r}, {fields!r}) rQ)rArx)r,r&N)rhrrrErr r)rr+rrrr'r rrrqr) rzr&annassigns_fieldsrr,generated_class_noderr body_noderres r/infer_typing_namedtuple_classrs#      fjochh7H.I.IfJJ    D@#$5dG$D$DEE @@@$888a?@&&((<<4:8#FK00_FF i . . F#+ L L{4>4Ed4K$+D11 L 5> 2 2 F;D+ '  7 %' ( ((sA<< BBBcJtd}||S)z Starting with python3.9, NamedTuple is a function of the typing module. The class NamedTuple is build dynamically through a call to `type` during initialization of the `_NamedTuple` variable. zD from typing import _NamedTuple _NamedTuple )r r*)r,r&klasss r/ infer_typing_namedtuple_functionrs,    E ;;w  r:c t|j}n!#ttf$r }t |d}~wwxYw|tvrt t|j dkrt t|j dtj tj fst t||S)z$Infer a typing.NamedTuple(...) call.NrB)r)rr*rr+rrr!r4r7r'r Listr^r)r,r&rr.s r/infer_typing_namedtuplers +DIOO%%&& M *+++!s*+ zz||666!! 49~~!! dilUZ$= > >"!! T7 + ++s&)AAArccg}d} t|jd}n,#ttf$r }t |d}~wt $rYnwxYw|s`|jD]X}|jdkrK t|j }n!#ttf$r }t |d}~wwxYwnYt|tj st |j D]}t|tjr(||Dt|tjtjfst t'|j dkrt ||j d|rdd|d}nd }|S) zGet and return fields of a NamedTuple in code-as-a-string. Because the fields are represented in their code form we can extract a node from them later on. NrBrCrr(rQz,))r)r7r*rr+r IndexErrorrDr=r-r'r BaseContainerr\r[rrrr^r4r)r,rF containerr. keyword_nodeeltrCs r/rmrm5s EI 1++--.. M *+++!s*       M  L=007 $\%7%=%=%?%? @ @II& 6777-367 1 i!4 5 5"!!~.. c5; ' '  LL ) ) ) # EK899 &% % sx==A  % % SXa[**,,---- -#((5//---  s3,3AA  AA6&BB;.B66B;rastroid.ClassDefc| td|DS#t$rYdSwxYw)z,Return whether cls is a subclass of an Enum.c3K|]9}|jtvo&t|dddkV:dS)rENrL)rEENUM_BASE_NAMESgetattrr)r>rs r/r_z$_is_enum_subclass..bs`   J/ ) > fd33v=      r:F)rrr)rs r/_is_enum_subclassr _sc        uus *- ;;) predicatecf|jdko&t|dddkS)Nr"rEtyping)rEr rrs r/rzs1l*7 VT**h6r:r) r,rHrIrJr&rKrLrMrNrO)rNrMr3)r,rHr&rKrNr)F)r,rHr&rKrNr)r,rrNr)r&rK)r,rHrNrc)rrrNrM)?__doc__ __future__r functoolsr?syscollections.abcrtextwraprastroidrrrr r astroid.builderr r r astroid.contextrastroid.exceptionsrrrrrastroid.managerr version_inforrtyping_extensionsr r__annotations__r!r#r0rGr|rrpartial_looks_like_namedtuple_looks_like_enum_looks_like_typing_namedtuplerrrrrrrrrrmr register_transformCallrq FunctionDefr<r:r/r%s 544"""""" $$$$$$@@@@@@@@@@@@@@NNNNNNNNNN,,,,,,+*****v''''''% $$$$"&&&&      4(, V(V(V(V(V(r===+*;\JJJ$9$[v>>> 1 1+L Q Q Q:>;;;;;|"D:>3232323232l$jjjjZ)))))B      :>,,,,,.''''T    ## J /002H## J j))+;## N$0A$## NMM"?@@BV## M23377 ## J 5668Ur: