§ |<ˆjA°ã óŽ —UdZddlmZddlZddlZddlZddlZddlZddlm Z m Z m Z m Z ddlm Z mZmZmZmZddlmZmZmZmZmZmZmZddlmZddlmZmZmZm Z dd l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*dd l+m,Z,dd l-m.Z.dd l/m0Z0m1Z1m2Z2e rdd l3m4Z4ej5d¦«Z6ed¦«Z7edej8¬¦«Z9edej:¬¦«Z;ej e1ee1eej<ej=fe1ee1eegdfZ> d“d”d„Z?e?ej@_Ae?ejB_Ae?ejC_Ae?ejD_Ae?ejE_A d“d•d„ZFejG d“d–d „¦«ZHeHejI_AeHejJ_AeHejK_A d“d—d#„ZLd˜d'„ZMd™d(„ZNeLejO_Adšd+„ZP d“d›d.„ZQejGejReQ¦«¦«ejS_AeQejT_UejGejR d“dœd1„¦«¦«ZVeVejW_AejGejR d�džd7„¦«¦«ZXeXejY_AejGejR d�dŸd9„¦«¦«ZZeZej[_A d“d d;„Z\ejGejRe\¦«¦«ej]_AejGe\¦«ej^_UejGejR d“d¡d=„¦«¦«Z_e_ej`_Aea¦«Zb d“d¢d@„ZcejGejRec¦«¦«ejd_AejGec¦«ejd_UejGejR d“d£dB„¦«¦«Zeeeejf_Ad¤dG„Zg d“d¥dJ„ZhejGejR d“d¦dK„¦«¦«Ziehejj_heiejj_Ad§dL„Zkd¨dR„Zld©dY„Zm dªd«d^„Zn dªd¬d_„Zod­dc„Zpdd„Zqd§de„Zrd®dk„Zsd¯dm„Ztd°dq„Zu d“d±ds„ZvejwejR d“d²dt„¦«¦«Zxevej=_vexej=_Aejyejzej{ej|ej}ej~du„dv„dwœZdxe€dy<dzd{hZ�d³d|„Z‚d´d�„Zƒ d“dµd„„Z„e„ej…_A d“d¶d…„Z†ejGejR d“d·d†„¦«¦«Z‡e†ej<_†e‡ej<_AejG d“d¸dˆ„¦«Zˆeˆej‰_AejGejR d“d¹dŠ„¦«¦«ZŠeŠejT_AeŠej^_AejGejR d“dºdŒ„¦«¦«Z‹e‹ejŒ_Ad»dŽ„Z�ejG d“d¼d�„¦«ZŽeŽej�_A d“d½d’„Z�e�ej:_AdS)¾zMThis module contains a set of functions to handle inference on astroid trees.é)Ú annotationsN)ÚCallableÚ GeneratorÚIterableÚIterator)Ú TYPE_CHECKINGÚAnyÚOptionalÚTypeVarÚUnion)ÚbasesÚ constraintÚ decoratorsÚhelpersÚnodesÚ protocolsÚutil)Ú PY310_PLUS)Ú CallContextÚInferenceContextÚbind_context_to_nodeÚ copy_context) ÚAstroidBuildingErrorÚ AstroidErrorÚAstroidIndexErrorÚAstroidTypeErrorÚAstroidValueErrorÚAttributeInferenceErrorÚInferenceErrorÚNameInferenceErrorÚ_NonDeducibleTypeHierarchy)Ú dunder_lookup)ÚAstroidManager)ÚInferenceErrorInfoÚInferenceResultÚSuccessfulInferenceResult)ÚPropertyÚobjectsÚ_TÚ_BaseContainerT)ÚboundÚ _FunctionDefTú?list[functools.partial[Generator[InferenceResult, None, None]]]ÚselfÚcontextúInferenceContext | NoneÚkwargsr Úreturnú Iterator[_T]c+óK—|V—dS)z§Inference's end for nodes that yield themselves on inference. These are objects for which inference does not have any semantic, such as Module or Consts. N©©r.r/r1s úc/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib/python3.11/site-packages/astroid/inference.pyÚ infer_endr8Fsèè€ð €J€J€J€J€JóÚnodeúlist[SuccessfulInferenceResult]có—g}|jD�]}t|tj¦«rqt j|j|¦«}|st||¬¦«‚t|d¦«st||¬¦«‚|  t|¦«¦«ŒŽt|tj ¦«rCt j|j|¦«}|st||¬¦«‚|  |¦«Œë|  |¦«�Œ|S)z.Infer all values based on _BaseContainer.elts.©r:r/Úelts) r>Ú isinstancerÚStarredrÚ safe_inferÚvaluerÚhasattrÚextendÚ_infer_sequence_helperÚ NamedExprÚappend)r:r/ÚvaluesÚeltÚstarredrBs r7rErEZs€ð€FàŒyðñˆÝ �c�5œ=Ñ )Ô )ð ÝÔ(¨¬°GÑ<Ô<ˆGØð AÝ$¨$¸Ð@Ñ@Ô@Ð@ݘ7 FÑ+Ô+ð AÝ$¨$¸Ð@Ñ@Ô@Ð@Ø �MŠMÕ0°Ñ9Ô9Ñ :Ô :Ð :Ð :Ý ˜�Uœ_Ñ -Ô -ð ÝÔ& s¤y°'Ñ:Ô:ˆEØð AÝ$¨$¸Ð@Ñ@Ô@Ð@Ø �MŠM˜%Ñ Ô Ð Ð à �MŠM˜#Ñ Ô Ð Ñ Ø €Mr9úIterator[_BaseContainerT]c+óüK—td„|jD¦«¦«}|rUt||¦«}t|¦«|j|j|j¬¦«}| |¦«|V—dS|V—dS)Nc3óbK—|]*}t|tjtjf¦«V—Œ+dS©N)r?rr@rF)Ú.0Úes r7ú z!infer_sequence..xsFèè€ð!ð!Ø<=� �1•u”}¥e¤oÐ6Ñ7Ô7ð!ð!ð!ð!ð!ð!r9)ÚlinenoÚ col_offsetÚparent)Úanyr>rEÚtyperRrSrTÚpostinit)r.r/r1Úhas_starred_named_exprrHÚnew_seqs r7Úinfer_sequencerZrs¨èè€õ !ð!ð!ØAEÄð!ñ!ô!ñôÐðð Ý'¨¨gÑ6Ô6ˆØ•$�t‘*”*Ø”;¨4¬?À4Ä;ð ñ ô ˆð ×Ò˜Ñ Ô Ð àˆ ˆ ˆ ˆ ˆ àˆ ˆ ˆ ˆ ˆ r9ú nodes.DictúIterator[nodes.Dict]c#ó4K—td„|jD¦«¦«s|V—dSt||¦«}t|¦«|j|j|j¦«}| t| ¦«¦«¦«|V—dS)Nc3óPK—|]!\}}t|tj¦«V—Œ"dSrN)r?rÚ DictUnpack)rOÚkÚ_s r7rQzinfer_map..�s3èè€ÐFÐF±4°1°a�z˜!�UÔ-Ñ.Ô.ÐFÐFÐFÐFÐFÐFr9) rUÚitemsÚ _infer_maprVrRrSrTrWÚlist)r.r/rbrYs r7Ú infer_mapreŒs•èè€õ ÐFÐF¸4¼:ÐFÑFÔFÑ FÔ FðØˆ ˆ ˆ ˆ ˆ å˜4 Ñ)Ô)ˆØ•$�t‘*”*˜Tœ[¨$¬/¸4¼;ÑGÔGˆØ×Ò�˜eŸkšk™mœmÑ,Ô,Ñ-Ô-Ð-؈ ˆ ˆ ˆ ˆ r9Úlhs_dictú:dict[SuccessfulInferenceResult, SuccessfulInferenceResult]Úrhs_dictcóΗtj| ¦«| ¦«¦«}d„|D¦«}t| ¦«¦«S)aDelete nodes that equate to duplicate keys. Since an astroid node doesn't 'equal' another node with the same value, this function uses the as_string method to make sure duplicate keys don't get through Note that both the key and the value are astroid nodes Fixes issue with DictUnpack causing duplicate keys in inferred Dict items :param lhs_dict: Dictionary to 'merge' nodes into :param rhs_dict: Dictionary with nodes to pull from :return : merged dictionary of nodes cóB—i|]\}}| ¦«||f“ŒSr5)Ú as_string)rOÚkeyrBs r7ú z,_update_with_replacement..­s*€ÐPÐPÐP±J°C¸�#—-’-‘/”/ C¨ <ÐPÐPÐPr9)Ú itertoolsÚchainrbÚdictrH)rfrhÚ combined_dictÚ string_maps r7Ú_update_with_replacementrs˜sV€õ&”O H§N¢NÑ$4Ô$4°h·n²nÑ6FÔ6FÑGÔG€MàPÐPÀ-ÐPÑPÔP€Jå � ×!Ò!Ñ#Ô#Ñ $Ô $Ð$r9có—i}|jD]ó\}}t|tj¦«rjt j||¦«}|st ‚t|tj¦«st ||¬¦«‚t||¦«}t||¦«}Œ‰t j||¬¦«}t j||¬¦«}td„||fD¦«¦«rt ||¬¦«‚t|||i¦«}Œô|S)z%Infer all values based on Dict.items.r=©r/c3óK—|]}| V—ŒdSrNr5)rOÚelems r7rQz_infer_map..Ãs$èè€Ð:Ð: �t�8Ð:Ð:Ð:Ð:Ð:Ð:r9) rbr?rr_rrArÚDictrcrsrU) r:r/rHÚnamerBÚdouble_starredÚ unpack_itemsrlÚ safe_values r7rcrc²s€ðJL€FØ”zðIðI‰ ˆˆeÝ �d�EÔ,Ñ -Ô -ð IÝ$Ô/°°wÑ?Ô?ˆNØ!ð %Ý$Ð$ݘn­e¬jÑ9Ô9ð AÝ$¨$¸Ð@Ñ@Ô@Ð@Ý% n°gÑ>Ô>ˆLÝ-¨f°lÑCÔCˆFˆFåÔ$ T°7Ð;Ñ;Ô;ˆCÝ Ô+¨E¸7ÐCÑCÔCˆJÝÐ:Ð:¨¨jÐ(9Ð:Ñ:Ô:Ñ:Ô:ð AÝ$¨$¸Ð@Ñ@Ô@Ð@å-¨f°s¸JÐ6GÑHÔHˆFˆFØ €Mr9ú nodes.NodeNGúnodes.FunctionDef | NonecóЗ|}|jrLt|jtj¦«s-|j}|jrt|jtj¦«¯-|r|jr|jSdS)a¦Search for the first function which encloses the given scope. This can be used for looking up in that function's scope, in case looking up in a lower scope for a particular name fails. :param node: A scope node. :returns: ``None``, if no parent function scope was found, otherwise an instance of :class:`astroid.nodes.scoped_nodes.Function`, which encloses the given node. N)rTr?rÚ FunctionDef)r:Úcurrents r7Ú_higher_function_scoper‚Ísp€ð€GØ Œ.ð!¥¨G¬N½EÔðØŒ~ÐØ ˆ4r9únodes.Name | nodes.AssignNameú&Generator[InferenceResult, None, None]c ó¼—| |j¦«\}}|skt| ¦«¦«}|r| |j¦«\}}|s)t |j| ¦«|¬¦«‚t |¦«}|j|_tj||¦«|j |j<tj |||¦«S)z$Infer a Name: use name lookup rules.)ryÚscoper/) Úlookupryr‚r†r rÚ lookupnamerÚget_constraintsÚ constraintsr Ú _infer_stmts)r.r/r1ÚframeÚstmtsÚparent_functionras r7Ú infer_namer�ásÕ€ð —;’;˜tœyÑ)Ô)�L€Eˆ5Ø ð õ1°·²±´Ñ>Ô>ˆØ ð 9Ø&×-Ò-¨d¬iÑ8Ô8‰HˆAˆuàð Ý$Ø”Y d§j¢j¡l¤l¸Gðñôð õ˜7Ñ#Ô#€GØœ€GÔÝ%/Ô%?ÀÀeÑ%LÔ%L€GÔ˜œ Ñ"å Ô ˜e W¨eÑ 4Ô 4Ð4r9ú nodes.Callú4Generator[InferenceResult, None, InferenceErrorInfo]c+óÜK—t|¦«}d|_|�'t|| ¦«¦«|_|j |¦«D]€}t|tj ¦«r|V—Œ! t|d¦«r>t|j |j |¬¦«|_| ||¬¦«Ed{V—†Œq#t $rYŒ}wxYwt#||¬¦«S)z?Infer a Call node by trying to guess what the function returns.NÚinfer_call_result)ÚargsÚkeywordsÚcallee)Úcallerr/r=)rÚ boundnodeÚ_populate_context_lookupÚcloneÚ extra_contextÚfuncÚinferr?rÚUninferableBaserCrr”r•Ú callcontextr“rr$)r.r/r1rŸr–s r7Ú infer_callr sèè€õ ˜wÑ'Ô'€KØ €KÔØÐÝ$<¸TÀ7Ç=Â=Á?Ä?Ñ$SÔ$Sˆ Ô!à”)—/’/ 'Ñ*Ô*ð ð ˆÝ �f�dÔ2Ñ 3Ô 3ð ØˆLˆLˆLØ ð Ý�vÐ2Ñ3Ô3ð VÝ*5Øœ¨T¬]À6ð+ñ+ô+� Ô'ð"×3Ò3¸4ÈÐ3ÑUÔUÐUÐUÐUÐUÐUÐUÐUøøÝð ð ð Ø ˆHð øøøå  4°Ð 9Ñ 9Ô 9Ð9sÁ>AC à CÃCTú nodes.ImportÚasnameÚboolú#Generator[nodes.Module, None, None]c+ó2K—|p t¦«}|j}|€t||¬¦«‚ |r,| | |¦«¦«V—dS| |¦«V—dS#t $r}t||¬¦«|‚d}~wwxYw)z8Infer an Import node: return the imported module/object.Nr=)rrˆrÚdo_import_moduleÚ real_namer)r.r/r¢r1ryÚexcs r7Ú infer_importr© sËèè€ðÐ+Õ)Ñ+Ô+€GØ Ô €DØ €|Ý $°Ð8Ñ8Ô8Ð8ðBØ ð .Ø×'Ò'¨¯ª°tÑ(<Ô(<Ñ=Ô=Ð =Ð =Ð =Ð =Ð =à×'Ò'¨Ñ-Ô-Ð -Ð -Ð -Ð -Ð -øÝ ðBðBðBÝ $°Ð8Ñ8Ô8¸cÐAøøøøðBøøøs®,A5ÁA5Á5 BÁ?BÂBúnodes.ImportFromc óX—|p t¦«}|j}|€t||¬¦«‚|r; | |¦«}n$#t$r}t||¬¦«|‚d}~wwxYw | ¦«}n$#t $r}t||¬¦«|‚d}~wwxYw t|¦«}||_| |||  ¦«u¬¦«}tj ||¦«S#t$r&}tt|¦«|||¬¦«|‚d}~wwxYw)z;Infer a ImportFrom node: return the imported module/object.Nr=)Ú ignore_locals©ÚtargetÚ attributer/) rrˆrr§rr¦rrÚgetattrÚrootr r‹Ústr) r.r/r¢r1ryr¨Úmoduler�Úerrors r7Úinfer_import_fromrµ:sw€ðÐ+Õ)Ñ+Ô+€GØ Ô €DØ €|Ý $°Ð8Ñ8Ô8Ð8Ø ðFð FØ—>’> $Ñ'Ô'ˆDˆDøÝ&ð Fð Fð Få  d°GÐ<Ñ<Ô<À#Ð Eøøøøð FøøøðBØ×&Ò&Ñ(Ô(ˆˆøÝ ðBðBðBÝ $°Ð8Ñ8Ô8¸cÐAøøøøðBøøøðݘwÑ'Ô'ˆØ!ˆÔØ—’˜t°6¸T¿YºY¹[¼[Ð3H�ÑIÔIˆÝÔ! %¨Ñ1Ô1Ð1øÝ "ðððÝÝ �‰JŒJ˜t¨t¸Wð ñ ô àð øøøøðøøøsH®AÁ A%ÁA Á A%Á)A>Á> BÂBÂBÂ#AC9Ã9 D)Ä!D$Ä$D)ú"nodes.Attribute | nodes.AssignAttrc+óXK—|j |¦«D]ý}t|tj¦«r|V—Œ!t |¦«}|j} ||_t|tjtj f¦«rFt|tj¦«r|n|j }tj ||¬¦«|j|j<| |j|¦«Ed{V—†n#t"t$t&f$rYnwxYw||_Œò#||_wxYwt)||¬¦«S)zBInfer an Attribute node by using getattr on the associated object.)rŒNr=)Úexprr�r?rržrr˜rÚClassDefr ÚInstanceÚ_proxiedrr‰rŠÚattrnameÚigetattrrrÚAttributeErrorr$)r.r/r1ÚownerÚ old_boundnoderŒs r7Úinfer_attributerÁ`sSèè€ð ”—’ Ñ)Ô)ð.ð.ˆÝ �e�TÔ1Ñ 2Ô 2ð ØˆKˆKˆKØ å˜wÑ'Ô'ˆØÔ)ˆ ð .Ø %ˆGÔ Ý˜%¥%¤.µ%´.Ð!AÑBÔBð Ý!+¨Eµ5´>Ñ!BÔ!BÐV˜˜ÈÌ�Ý5?Ô5OØ ð6ñ6ô6�Ô# D¤MÑ2ð—~’~ d¤m°WÑ=Ô=Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ð =øå #Ý Ý ð ð ð ð ð ˆDð  øøøð!.ˆGÔ Ð ø  ˆGÔ Ð -Ð -Ð -Ð -Ý  4°Ð 9Ñ 9Ô 9Ð9s+ÁBC*Ã)DÃ*DÄDÄDÄDÄ Dú nodes.Globalc ó&—|�|j€t||¬¦«‚ tj| ¦« |j¦«|¦«S#t $r+}tt|¦«||j|¬¦«|‚d}~wwxYw)Nr=r­)rˆrr r‹r±r°rr²)r.r/r1r´s r7Ú infer_globalrĉs €ð €˜'Ô,Ð4Ý $°Ð8Ñ8Ô8Ð8ðÝÔ! $§)¢)¡+¤+×"5Ò"5°gÔ6HÑ"IÔ"IÈ7ÑSÔSÐSøÝ "ðððÝÝ �‰JŒJ˜t¨wÔ/AÈ7ð ñ ô àð øøøøðøøøsœ>AÁ BÁ%&B  Búnodes.Subscriptú;Generator[InferenceResult, None, InferenceErrorInfo | None]c +ótK—d}|j |¦«D�]„}t|tj¦«rtjV—dS|j |¦«D�]:}t|tj¦«rtjV—dSt}|jtj kr|}n0|jtj krtj |¦«}|r|}n|}|turt||¬¦«‚ | ||¦«}n=#tt t"t$t&f$r} t||¬¦«| ‚d} ~ wwxYw||ust|tj¦«rtjV—dS| |¦«Ed{V—†d}�Œ<�Œ†|rt)||¬¦«SdS)zãInference for subscripts. We're understanding if the index is a Const or a slice, passing the result of inference to the value's `getitem` method, which should handle each supported index type accordingly. FNr=T)rBr�r?rržÚ UninferableÚsliceÚ_SUBSCRIPT_SENTINELÚ __class__r rºrÚclass_instance_as_indexrÚgetitemrrrrr¾r$) r.r/r1Ú found_onerBÚindexÚ index_valueÚinstance_as_indexÚassignedr¨s r7Úinfer_subscriptrÓžsèè€ð€IØ”×!Ò! 'Ñ*Ô*ð(ñ(ˆÝ �e�TÔ1Ñ 2Ô 2ð ÝÔ"Ð "Ð "Ð "Ø�4�4Ø”Z×%Ò% gÑ.Ô.ð$ ñ$ ˆEݘ%¥Ô!5Ñ6Ô6ð ÝÔ&Ð&Ð&Ð&Ø�t�t�tõ.ˆKØŒ¥%¤.Ò0Ð0Ø#� � Ø”¥E¤NÒ2Ð2Ý$+Ô$CÀEÑ$JÔ$JÐ!Ø$ð4Ø"3�Køà#� àÕ1Ð1Ð1Ý$¨$¸Ð@Ñ@Ô@Ð@ð JØ Ÿ=š=¨°gÑ>Ô>��øå Ý!Ý!Ý'Ýð ð Jð Jð Jõ%¨$¸Ð@Ñ@Ô@ÀcÐIøøøøð Jøøøð�xÐÐ¥:¨h½Ô8LÑ#MÔ#MÐÝÔ&Ð&Ð&Ð&Ø�t�t�tØ—~’~ gÑ.Ô.Ð .Ð .Ð .Ð .Ð .Ð .Ð .؈I‰IñI$ ðLð>Ý! t°WÐ=Ñ=Ô=Ð=Ø ˆ4sÄDÄ#EÄ:E Å Eú nodes.BoolOpc+ó&‡K—|j}|jdkr tj}n tj} ˆfd„|D¦«}n#t $rt jV—YdSwxYwtj |ŽD]•}td„|D¦«¦«rt jV—Œ*d„|D¦«}td„|D¦«¦«rt jV—Œ^t j}t||¦«D]\}} || ¦«r|V—nŒ|V—Œ–t|‰¬¦«S)z²Infer a boolean operation (and / or / not). The function will calculate the boolean operation for all pairs generated through inference for each component node. Úorcó<•—g|]}| ‰¬¦«‘ŒS)ru)r�)rOrBr/s €r7ú z!_infer_boolop..ós'ø€ÐLÐLÐL¸E˜5Ÿ;š;¨w˜;Ñ7Ô7ÐLÐLÐLr9Nc3óJK—|]}t|tj¦«V—ŒdSrN©r?rrž©rOÚitems r7rQz _infer_boolop..ùs/èè€ÐGÐG¸$�z˜$¥Ô 4Ñ5Ô5ÐGÐGÐGÐGÐGÐGr9có6—g|]}| ¦«‘ŒSr5)Ú bool_valuerÛs r7rØz!_infer_boolop..þs"€Ð:Ð:Ð:¨T�t—’Ñ(Ô(Ð:Ð:Ð:r9c3óJK—|]}t|tj¦«V—ŒdSrNrÚrÛs r7rQz _infer_boolop..ÿs/èè€ÐNÐN¸$�z˜$¥Ô 4Ñ5Ô5ÐNÐNÐNÐNÐNÐNr9r=) rHÚopÚoperatorÚtruthÚnot_rrrÈrnÚproductrUÚzipr$) r.r/r1rHÚ predicateÚinferred_valuesÚpairÚ bool_valuesrBrÞs ` r7Ú _infer_booloprêásvøèè€ðŒ[€FØ „w�$‚€Ý”Nˆ ˆ å”Mˆ ðØLÐLÐLÐLÀVÐLÑLÔLˆˆøÝ ðððÝÔÐÐÐØˆtˆtðøøøõÔ! ?Ð3ððˆÝ ÐGÐGÀ$ÐGÑGÔGÑ GÔ Gð åÔ"Ð "Ð "Ð "Ø à:Ð:°TÐ:Ñ:Ô:ˆ Ý ÐNÐNÀ+ÐNÑNÔNÑ NÔ Nð åÔ"Ð "Ð "Ð "Ø õÔ ˆÝ!$ T¨;Ñ!7Ô!7ð ð Ñ ˆE�:؈y˜Ñ$Ô$ð Ø� � � Ø�ð ðˆKˆKˆKøå  4°Ð 9Ñ 9Ô 9Ð9s°?¿AÁAÚinfer_callableújCallable[[_T, InferenceContext | None], Generator[InferenceResult | util.BadOperationMessage, None, None]]r´útype[util.BadOperationMessage]c#ónK—|||¦«D]%}t||¦«rtjV—Œ!|V—Œ&dSrN)r?rrÈ)r.rër/r´Úresults r7Ú_filter_operation_errorsrðs^èè€ð!�.  wÑ/Ô/ððˆÝ �f˜eÑ $Ô $ð õÔ"Ð "Ð "Ð "Ð "àˆLˆLˆLˆLððr9ú nodes.UnaryOpúFGenerator[InferenceResult | util.BadUnaryOperationMessage, None, None]c#ó.K—|j |¦«D�]v} | |j¦«V—Œ!#t$r'}t j||j|¦«V—Yd}~ŒMd}~wt$�r}tj |j}|€W|  ¦«}t|t j ¦«stj| ¦«V—�n¯t jV—�nŸt|t jtjf¦«s#t j||j|¦«V—Yd}~�Œ t'j||¦«}n2#t*$r%t j||j|¦«V—YYd}~�ŒZwxYw|d}t-| |¬¦«d¦«}t|t j ¦«s| ¦«sYd}~�Œ¾t1|¦«}||_t5g|¬¦«|_| ||¬¦«}t-|d¦«} | €|V—n| V—nM#t*$r'} t j||j| ¦«V—Yd} ~ n!d} ~ wt:$rt jV—YnwxYwYd}~�Œpd}~wwxYwdS)ú3Infer what an UnaryOp should return when evaluated.Nrru)r”r–)Úoperandr�Úinfer_unary_opràÚ TypeErrorrÚBadUnaryOperationMessager¾rÚUNARY_OP_METHODrÞr?ržrÚ const_factoryrÈr rºr¹r"r‡rÚnextÚcallablerr˜rrŸr“r) r.r/rõr¨ÚmethrÞÚmethodsÚinferredÚ call_resultsrïÚ inner_excs r7Ú_infer_unaryopr1sèè€ð”<×%Ò% gÑ.Ô.ð6+ñ6+ˆð5 +Ø×(Ò(¨¬Ñ1Ô1Ð 1Ð 1Ð 1Ð 1øÝð Gð Gð GåÔ/°¸¼À#ÑFÔFÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FøøøøÝð0 +ñ0 +ð0 +ÝÔ,¨T¬WÔ5ˆD؈|ð%×/Ò/Ñ1Ô1� Ý! *­dÔ.BÑCÔCð+ÝÔ-°*¨nÑ=Ô=Ð=Ð=Ð=Ñ=åÔ*Ð*Ð*Ð*Ñ*å! '­E¬N½E¼NÐ+KÑLÔLðõÔ7¸ÀÄÈ#ÑNÔNÐNÐNÐNØ�H�H�H‘Hð+ð!Ý"/Ô"6°wÀÑ"EÔ"E˜˜øÝ2ð!ð!ð!Ý"Ô;¸GÀTÄWÈcÑRÔRÐRÐRÐRØ ˜˜˜˜™ð!øøøð# 1œ:�DÝ# D§J¢J°w JÑ$?Ô$?ÀÑFÔF�Hå" 8­TÔ-AÑBÔBð!à'×0Ò0Ñ2Ô2ð!ð!˜˜˜™å*¨7Ñ3Ô3�GØ(/�GÔ%Ý*5¸2ÀhÐ*OÑ*OÔ*O�GÔ'à#+×#=Ò#=¸dÈGÐ#=Ñ#TÔ#T�LÝ! ,°Ñ5Ô5�FØ�~à%˜ ˜ ˜ ˜ à$˜ ˜ ˜ øøÝ.ðUðUðUåÔ7¸ÀÄÈ)ÑTÔTÐTÐTÐTÐTÐTÐTÐTÐTøøøøÝ%ð+ð+ð+ÝÔ*Ð*Ð*Ð*Ð*Ð*ð+øøøøøøøùøøøøð_0 +øøøð 6+ð6+s~¡>¾ JÁA*Á*JÁ8B3J Ä3E ÅH:Å 'E8Å0H:Å7E8Å8AH:ÇAH:È9J È: JÉI&É!J É&JÊJ ÊJÊJ Ê Jc+óvK—t|t|tj¦«Ed{V—†t ||¬¦«S)rôNr=)rðrrrør$r6s r7Ú infer_unaryoprnsYèè€õ (Ø �n˜g¥tÔ'Dñôðððððððõ  4°Ð 9Ñ 9Ô 9Ð9r9cóR—t|tj¦«o |jtuS)z0Check if the given const node is NotImplemented.)r?rÚConstrBÚNotImplemented)Úconsts r7Ú_is_not_implementedr ~s €å �e�Uœ[Ñ )Ô )Ð K¨e¬k½^Ð.KÐKr9Úinstanceú nodes.ConstÚotherrú)tuple[util.UninferableBase | nodes.Const]cót‡—t|tj¦«ritj|jvr tjfSˆfd„|jD¦«}t d„|D¦«¦«rtd„|D¦«¦«}nðd}nít|tj¦«r¤i}|j D]™}tj |d‰¦«}t|tj ¦«stjfcStj |d‰¦«}t|tj ¦«stjfcS|j ||j <Œšn/t|tj ¦«r|j }n tjfS tj|j |z¦«fS#tt t"f$rtjfcYSwxYw)zªInfer the result of '"string" % ...'. TODO: Instead of returning Uninferable we should rely on the call to '%' to see if the result is actually uninferable. có:•—g|]}tj|‰¦«‘ŒSr5)rrA)rOÚir/s €r7rØz6_infer_old_style_string_formatting..Žs&ø€ÐRÐRÐRÀ!�wÔ1°!°WÑ=Ô=ÐRÐRÐRr9c3óJK—|]}t|tj¦«V—ŒdSrN)r?rr©rOrs r7rQz5_infer_old_style_string_formatting..�s.èè€ÐGÐG¨a�z˜!�Uœ[Ñ)Ô)ÐGÐGÐGÐGÐGÐGr9c3ó$K—|] }|jV—Œ dSrN)rBrs r7rQz5_infer_old_style_string_formatting..�s$èè€Ð@Ð@ q˜1œ7Ð@Ð@Ð@Ð@Ð@Ð@r9Nré)r?rÚTuplerrÈr>ÚallÚtuplerxrbrrArrBrúr÷ÚKeyErrorÚ ValueError)r r r/Úinferred_positionalrHrèrlrBs ` r7Ú"_infer_old_style_string_formattingrƒsÎø€õ�%�œÑ%Ô%ð#Ý Ô ˜uœzÐ )Ð )ÝÔ$Ð&Ð &ØRÐRÐRÐRÀuÄzÐRÑRÔRÐÝ ÐGÐGÐ3FÐGÑGÔGÑ GÔ Gð ÝÐ@Ð@Ð,?Ð@Ñ@Ô@Ñ@Ô@ˆFˆFàˆFˆFÝ �E�5œ:Ñ &Ô &ð #Ø!#ˆØ”Kð ,ð ,ˆDÝÔ$ T¨!¤W¨gÑ6Ô6ˆCݘc¥5¤;Ñ/Ô/ð +ÝÔ(Ð*Ð*Ð*Ð*ÝÔ& t¨A¤w°Ñ8Ô8ˆEݘe¥U¤[Ñ1Ô1ð +ÝÔ(Ð*Ð*Ð*Ð*Ø %¤ ˆF�3”9Ñ Ð ð ,õ �E�5œ;Ñ 'Ô 'ð#Ø”ˆˆåÔ Ð"Ð"ð#ÝÔ# H¤N°VÑ$;Ñ<Ô<Ð>Ð>øÝ •x¥Ð ,ð#ð#ð#ÝÔ Ð"Ð"Ð"Ð"ð#øøøsÅ3FÆ$F7Æ6F7r%Úopnodeúnodes.AugAssign | nodes.BinOpràr²Ú method_namecóÆ—tj||¦«}t||¦«}|d}||j_t |t j¦«r>t |jt¦«r$|dkrtt|||¦«¦«S t|  |¬¦«¦«}n$#t$r} t||¬¦«| ‚d} ~ wwxYwt |t j¦«rt‚t |t jt jt jt jt*jf¦«st‚| |||||¦«S)z8Invoke binary operation inference on the given instance.rú%rur=N)r"r‡rrŸr–r?rrrBr²Úiterrrûr�Ú StopIterationrrržrÚListr¹r rºÚinfer_binary_op) r rràr r/rrþÚmethodrÿrPs r7Ú_invoke_binop_inferencer&¨sQ€õÔ" 8¨[Ñ9Ô9€GÝ" 7¨HÑ5Ô5€GØ �QŒZ€FØ!'€GÔÔõ �8�Uœ[Ñ)Ô)ðRå �x”~¥sÑ +Ô +ðRð �#ŠIˆIåÕ6°xÀÈÑPÔPÑQÔQÐQðBݘŸ š ¨W˜ Ñ5Ô5Ñ6Ô6ˆˆøÝ ðBðBðBÝ &°'Ð:Ñ:Ô:ÀÐAøøøøðBøøøå�(�DÔ0Ñ1Ô1ðÝÐÝ Ø•5”;¥¤ ­U¬Z½¼ÍÌÐXñ ô ðõÐØ × #Ò # F¨B°°wÀÑ IÔ IÐIsÂ#B7Â7 CÃCÃCFúnodes.AugAssignÚreverseú9functools.partial[Generator[InferenceResult, None, None]]c óf—tj|}tjt||||||¬¦«S)zCreate a new UnionType instance for binary or, e.g. int | str.N)r Ú UnionType)r5r7s r7Ú_bin_op_or_union_typer:ús&èè€õ Œ/˜$ Ñ &Ô &Ð&Ð&Ð&Ð&Ð&r9c#ó‚K—||fD]7}| ¦«}t|g¬¦«|_d|_|V—Œ8dS)zÄGet contexts for binary operations. This will return two inference contexts, the first one for x.__op__(y), the other one for y.__rop__(x), where only the arguments are inversed. )r”N)ršrrŸr˜)r/r5r7ÚargÚ new_contexts r7Ú_get_binop_contextsr>s^èè€ð�tˆ}ððˆØ—m’m‘o”oˆ Ý"-°C°5Ð"9Ñ"9Ô"9ˆ ÔØ $ˆ ÔØÐÐÐÐð ðr9cóV—| ¦«| ¦«kS)z$Check if type1 is the same as type2.)Úqname)Útype1Útype2s r7Ú _same_typerCs€à �;Š;‰=Œ=˜EŸKšK™MœMÒ )Ð)r9Ú left_typeúInferenceResult | NoneÚ binary_opnodeÚ right_typeÚreverse_contextc ó—|j}t||¦«rt|||||¦«g}n�tj||¦«rt|||||¦«g}nftj||¦«r)t|||||d¬¦«t|||||¦«g}n(t|||||¦«t|||||d¬¦«g}t rÃ|dkr½t|tj tj f¦«s!t|tj ¦«r}|j €vt|tj tj f¦«s!t|tj ¦«r6|j €/| tjt"||¦«g¦«|S)aVGet the flow for binary operations. The rules are a bit messy: * if left and right have the same type, then only one method will be called, left.__op__(right) * if left and right are unrelated typewise, then first left.__op__(right) is tried and if this does not exist or returns NotImplemented, then right.__rop__(left) is tried. * if left is a subtype of right, then only left.__op__(right) is tried. * if left is a supertype of right, then right.__rop__(left) is first tried and then left.__op__(right) T©r(ú|)ràrCr4rÚ is_subtypeÚ is_supertyperr?r r9rr¹rrBrDr-r.r:) r5rDrFr7rGr/rHràrþs r7Ú_get_binop_flowrNsœ€ð. Ô €BÝ�)˜ZÑ(Ô(ð  ݘ4 °°E¸7ÑCÔCÐDˆˆÝ Ô ˜I zÑ 2Ô 2ð  ݘ4 °°E¸7ÑCÔCÐDˆˆÝ Ô ˜i¨Ñ 4Ô 4ð  å �E˜=¨"¨d°OÈTÐ RÑ RÔ RÝ �D˜-¨¨U°GÑ <Ô <𠈈õ �D˜-¨¨U°GÑ <Ô <Ý �E˜=¨"¨d°OÈTÐ RÑ RÔ Rð ˆõ ðPà �#ŠIˆIå �t�eœo­u¬~Ð>Ñ ?Ô ?ð õ˜$¥¤ Ñ,Ô,ð ð” Ð"õ �u�uœµ´Ð?Ñ @Ô @ð#õ˜%¥¤Ñ-Ô-ð #ð ” Ð#ð �Š� Ô)Õ*?ÀÀuÑMÔMÐNÑOÔOÐOØ €Nr9Ú aug_opnodec óB—|j d¦«}|j}t||¦«r't|||||¦«t |||||¦«g} nÆt j||¦«r't|||||¦«t |||||¦«g} nŠt j||¦«r;t|||||¦«t |||||d¬¦«t |||||¦«g} n:t|||||¦«t |||||¦«t |||||d¬¦«g} | S)a–Get the flow for augmented binary operations. The rules are a bit messy: * if left and right have the same type, then left.__augop__(right) is first tried and then left.__op__(right). * if left and right are unrelated typewise, then left.__augop__(right) is tried, then left.__op__(right) is tried and then right.__rop__(left) is tried. * if left is a subtype of right, then left.__augop__(right) is tried and then left.__op__(right). * if left is a supertype of right, then left.__augop__(right) is tried, then right.__rop__(left) and then left.__op__(right) ú=TrJ)ràÚstriprCr0r4rrLrM) r5rDrOr7rGr/rHÚbin_opÚaug_oprþs r7Ú _get_aug_flowrUPsS€ð0Œ]× Ò  Ñ %Ô %€FØ Œ]€FÝ�)˜ZÑ(Ô(ð å �D˜* f¨e°WÑ =Ô =Ý �D˜* f¨e°WÑ =Ô =𠈈õ Ô ˜I zÑ 2Ô 2ð å �D˜* f¨e°WÑ =Ô =Ý �D˜* f¨e°WÑ =Ô =𠈈õ Ô ˜i¨Ñ 4Ô 4ð  å �D˜* f¨e°WÑ =Ô =Ý �E˜: v¨t°_ÈdÐ SÑ SÔ SÝ �D˜* f¨e°WÑ =Ô =𠈈õ �D˜* f¨e°WÑ =Ô =Ý �D˜* f¨e°WÑ =Ô =Ý �E˜: v¨t°_ÈdÐ SÑ SÔ Sð ˆð €Nr9Ú flow_factoryÚGetFlowFactoryúGGenerator[InferenceResult | util.BadBinaryOperationMessage, None, None]c #ó°K—t|||¦«\}}tj|¦«}tj|¦«}||||||||¦«}|D]æ} t| ¦«¦«} t d„| D¦«¦«rt jV—dSttt| ¦«¦«rŒgtd„| D¦«¦«} | r$| t| ¦«krt jV—dS| Ed{V—†dS#t$rYŒ½t$rYŒÈt$rt jV—YdSwxYwt j||j|¦«V—dS)zÏInfer a binary operation between a left operand and a right operand. This is used by both normal binary operations and augmented binary operations, the only difference is the flow factory used. c3óJK—|]}t|tj¦«V—ŒdSrNrÚ©rOrïs r7rQz*_infer_binary_operation..¡s/èè€ÐRÐRÀ•:˜f¥dÔ&:Ñ;Ô;ÐRÐRÐRÐRÐRÐRr9Nc3ó8K—|]}t|¦«¯dV—ŒdS)rN)r r[s r7rQz*_infer_binary_operation..§sDèè€ð"ð"ØÕ+>¸vÑ+FÔ+Fð"Øð"ð"ð"ð"ð"ð"r9)r>rÚ object_typerdrUrrÈrÚmapr ÚsumÚlenr¾rrÚBadBinaryOperationMessagerà) r5r7rFr/rVrHrDrGrþr%ÚresultsÚnot_implementeds r7Ú_infer_binary_operationrdƒsÝèè€õ 3°7¸DÀ%ÑHÔHÑ€Gˆ_ÝÔ# DÑ)Ô)€IÝÔ$ UÑ+Ô+€J؈lØ ˆi˜¨¨z¸7ÀOñô€Gðððˆð ݘ6˜6™8œ8‘n”nˆGõÐRÐRÈ'ÐRÑRÔRÑRÔRð ÝÔ&Ð&Ð&Ð&Ø��å•3Õ*¨GÑ4Ô4Ñ5Ô5ð ØÝ!ð"ð"Ø 'ð"ñ"ô"ñôˆOðð  ?µc¸'±l´lÒ#BÐ#BåÔ&Ð&Ð&Ð&Ø��àÐ Ð Ð Ð Ð Ð Ð Ø ˆFˆFøõ/ð ð ð Ø ˆHÝ&ð ð ð Ø ˆHÝð ð ð ÝÔ"Ð "Ð "Ð "Ø ˆFˆFˆFð øøøõ* Ô (¨°MÔ4DÀjÑ QÔ QÐQÐQÐQÐQÐQsÁDÄ D6Ä D6ÄD6Ä5D6ú nodes.BinOpc#óâK—|j}|j}|p t¦«}t|¦«}t|¦«}| |¬¦«}| |¬¦«}t j||¦«D]n\}} td„| |fD¦«¦«rtj V—dS t|| ||t¦«Ed{V—†ŒQ#t$rtj V—YŒkwxYwdS)z!Binary operation inference logic.ruc3óJK—|]}t|tj¦«V—ŒdSrNrÚ©rOrBs r7rQz_infer_binop..Åó/èè€ÐOÐO¸5�z˜%¥Ô!5Ñ6Ô6ÐOÐOÐOÐOÐOÐOr9N) r5r7rrr�rnrärUrrÈrdrNr!) r.r/r5r7Ú lhs_contextÚ rhs_contextÚlhs_iterÚrhs_iterÚlhsÚrhss r7Ú _infer_binoprpµs,èè€ð Œ9€DØ ŒJ€Eð Ð+Õ)Ñ+Ô+€GݘwÑ'Ô'€KݘwÑ'Ô'€KØ�zŠz +ˆzÑ.Ô.€HØ�{Š{ ;ˆ{Ñ/Ô/€HÝÔ% h°Ñ9Ô9ð #ð #‰ˆˆSÝ ÐOÐOÀSÈ#ÀJÐOÑOÔOÑ OÔ Oð åÔ"Ð "Ð "Ð "Ø ˆFˆFð #Ý.¨s°C¸¸wÍÑXÔXÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XøÝ)ð #ð #ð #ÝÔ"Ð "Ð "Ð "Ð "Ð "ð #øøøð #ð #sÂ2CÃC,Ã+C,c óD—t|t|tj¦«SrN)rðrprrar6s r7Ú infer_binoprrÐs"€õ $Ø �l˜G¥TÔ%Cñ ô ðr9có —||vSrNr5©ÚaÚbs r7úrwäs €�q˜A�v€r9có —||vSrNr5rts r7rwrwås €˜1 A˜:€r9)z==z!=úz>=Úinznot inz%dict[str, Callable[[Any, Any], bool]]Ú COMPARE_OPSÚiszis notcóN—tj| ¦«¦«SrN)ÚastÚ literal_evalrk)r:s r7Ú _to_literalr�ís€õ Ô ˜DŸNšNÑ,Ô,Ñ -Ô -Ð-r9Ú left_iterúIterable[nodes.NodeNG]Ú right_iterúbool | util.UninferableBasecó(—d}|tvr tjSt|}t j||¦«D]Ó\}}t |tj¦«st |tj¦«rtjcS t|¦«t|¦«}}n+#tttf$rtjcYcSwxYw |||¦«}n#t$r }t|‚d}~wwxYw|€|}Œ¿||krtjcSŒÔ|€J‚|S)aa If all possible combinations are either True or False, return that: >>> _do_compare([1, 2], '<=', [3, 4]) True >>> _do_compare([1, 2], '==', [3, 4]) False If any item is uninferable, or if some combinations are True and some are False, return Uninferable: >>> _do_compare([1, 3], '<=', [2, 4]) util.Uninferable N)ÚUNINFERABLE_OPSrrÈr|rnrär?ržr�Ú SyntaxErrorrr¾r÷r) r‚ràr„ÚretvalÚop_funcr5r7r¸r¨s r7Ú _do_comparer‹ôsY€ð€FØ �_ÐÐÝÔÐݘ"Œo€Gå Ô(¨°JÑ?Ô?ð$ð$‰ ˆˆeÝ �d�DÔ0Ñ 1Ô 1ð $µZØ •4Ô'ñ6 ô6 ð $õÔ#Ð #Ð #Ð #ð $Ý% dÑ+Ô+­[¸Ñ-?Ô-?�%ˆDˆDøÝ�Z­Ð8ð $ð $ð $ÝÔ#Ð #Ð #Ð #Ð #Ð #ð $øøøð ,Ø�7˜4 Ñ'Ô'ˆDˆDøÝð ,ð ,ð ,Ý"¨Ð +øøøøð ,øøøð ˆ>؈FˆFØ �tŠ^ˆ^ÝÔ#Ð #Ð #Ð #ðð Ð Ð Ð Ø €Ms*ÂB!Â!#C ÃC à Cà C1Ã$C,Ã,C1ú nodes.Compareú9Generator[nodes.Const | util.UninferableBase, None, None]c+óŠK—d}|j}|j}t| |¬¦«¦«}|D]`\}}t| |¬¦«¦«} t ||| ¦«}n#t $rt j}Yn wxYw|durn| }Œa|t jur|V—dStj |¦«V—dS)z#Chained comparison inference logic.TruN) Úopsr5rdr�r‹rrrÈrr) r.r/r1r‰r�Ú left_nodernràÚ right_noderos r7Ú_infer_comparer’"sùèè€ð+/€Fà Œ(€CØ” €IÝ ˆy�Š wˆÑ/Ô/Ñ 0Ô 0€Càð 𠉈ˆJå�:×#Ò#¨GÐ#Ñ4Ô4Ñ5Ô5ˆð Ý   b¨#Ñ.Ô.ˆFˆFøÝð ð ð ÝÔ%ˆFØ ˆEˆEð øøøð ˜Ð Ð Ø ˆE؈ˆØ •Ô!Ð!Ð!؈ ˆ ˆ ˆ ˆ åŒk˜&Ñ!Ô!Ð!Ð!Ð!Ð!Ð!sÁ!A3Á3B  B c#óÈK—|p t¦«}| ¦«}|j |¬¦«}|j |¬¦«}t j||¦«D]o\}}td„||fD¦«¦«rtj V—dS t||||t¬¦«Ed{V—†ŒR#t$rtj V—YŒlwxYwdS)z0Inference logic for augmented binary operations.ruc3óJK—|]}t|tj¦«V—ŒdSrNrÚrhs r7rQz#_infer_augassign..Krir9N)r5r7rFr/rV)rršr®Ú infer_lhsrBr�rnrärUrrÈrdrUr!)r.r/rkrlrmrnros r7Ú_infer_augassignr–@s9èè€ðÐ+Õ)Ñ+Ô+€Gà—-’-‘/”/€KàŒ{×$Ò$¨WÐ$Ñ5Ô5€HØŒz×Ò¨ ÐÑ4Ô4€HÝÔ% h°Ñ9Ô9ð#ð#‰ˆˆSÝ ÐOÐOÀSÈ#ÀJÐOÑOÔOÑ OÔ Oð åÔ"Ð "Ð "Ð "Ø ˆFˆFð #Ý.ØØØ"ØÝ*ð ñôð ð ð ð ð ð ð ð øõ*ð #ð #ð #ÝÔ"Ð "Ð "Ð "Ð "Ð "ð #øøøð#ð#sÂ$CÃCÃCc óD—t|t|tj¦«SrN)rðr–rrar6s r7Úinfer_augassignr˜\s#€õ $Ø Õ ­Ô)Gñ ô ðr9únodes.Argumentsc ól—|�|j€t||¬¦«‚tj||j|¦«S)Nr=)rˆrrÚ_arguments_infer_argnamer6s r7Úinfer_argumentsrœls<€ð€˜'Ô,Ð4Ý $°Ð8Ñ8Ô8Ð8Ý Ô -¨d°GÔ4FÈÑ PÔ PÐPr9ú#nodes.AssignName | nodes.AssignAttrc óä—t|jtj¦«r|j |¦«St | |¬¦«¦«}tj||¦«S)zXInfer a AssignName/AssignAttr: need to inspect the RHS part of the assign node. ru) r?rTrÚ AugAssignr�rdÚassigned_stmtsr r‹)r.r/r1r�s r7Ú infer_assignr¡xsa€õ�$”+�uœÑ/Ô/ð*ØŒ{× Ò  Ñ)Ô)Ð)å �×$Ò$¨WÐ$Ñ5Ô5Ñ 6Ô 6€EÝ Ô ˜e WÑ -Ô -Ð-r9únodes.EmptyNodec+óîK—| ¦«stjV—dS t¦« |j|¬¦«Ed{V—†dS#t $rtjV—YdSwxYw)Nru)Úhas_underlying_objectrrÈr#Úinfer_ast_from_somethingÚobjectrr6s r7Úinfer_empty_noder§�s¾èè€ð × %Ò %Ñ 'Ô 'ð#ÝÔÐÐÐÐÐð #Ý%Ñ'Ô'×@Ò@Ø”  WðAñôð ð ð ð ð ð ð ð ð øõð #ð #ð #ÝÔ"Ð "Ð "Ð "Ð "Ð "Ð "ð #øøøs¨.AÁA4Á3A4Úcallcó¸—i}|€|S|jD],}t|tj¦«r |||j<Œ'|||<Œ-|j�|jng}|D] }|||j<Œ |SrN)r”r?rr@rBr•)r¨r/Úcontext_lookupr<r•Úkeywords r7r™r™ sŒ€ð?A€NØ€ØÐØŒyð*ð*ˆÝ �c�5œ=Ñ )Ô )ð *Ø(/ˆN˜3œ9Ñ %Ð %à")ˆN˜3Ñ Ð Ø $¤ Ð 9ˆtŒ}ˆ}¸r€HØð0ð0ˆØ(/ˆ�w”}Ñ%Ð%Ø Ðr9ú nodes.IfExpc+óˆK—d}|p t¦«}t|¦«}t|¦«} t|j | ¦«¬¦«¦«}t |tj¦«sX|  ¦«r"|j  |¬¦«Ed{V—†n>|j  |¬¦«Ed{V—†nd}n#ttf$rd}YnwxYw|rD|j  |¬¦«Ed{V—†|j  |¬¦«Ed{V—†dSdS)zÂSupport IfExp inference. If we can't infer the truthiness of the condition, we default to inferring both branches. Otherwise, we infer either branch depending on the condition. FruNT)rrrûÚtestr�ršr?rržrÞÚbodyÚorelserr")r.r/r1Ú both_branchesrjrkr®s r7Ú infer_ifexpr²±s†èè€ð€Mð Ð+Õ)Ñ+Ô+€GݘwÑ'Ô'€KݘwÑ'Ô'€Kð !Ý�D”I—O’O¨G¯MªM©O¬O�OÑ<Ô<Ñ=Ô=ˆõ˜$¥Ô 4Ñ5Ô5ð !Ø�ŠÑ Ô ð BØœ9Ÿ?š?°;˜?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?àœ;×,Ò,°[Ð,ÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAà ˆMˆMøõ �MÐ *ðððØˆ ˆ ˆ ðøøøðð:Ø”9—?’?¨;�?Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø”;×$Ò$¨[Ð$Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ð:ð:s´:C#Ã#C9Ã8C9ú=Generator[Property | _FunctionDefT, None, InferenceErrorInfo]c+órK—|jrtj|¦«s|V—t||¬¦«S|j d¬¦«}|j|jvo(td„|j|jD¦«¦«}t|jtj tj tj f¦«rd}t ||j|j|s|jnd|j¬¦«}|r |j|_| g|j|j¬¦«|V—t||¬¦«S)Nr=T)Úfuturec3óJK—|]}t|tj¦«V—ŒdSrN)r?r(r')rOÚvals r7rQz$infer_functiondef..äsHèè€ðQðQØ.1� �3�Ô(Ñ)Ô)ðQðQðQðQðQðQr9)ÚfunctionryrRrTrS)r¯r”Údoc_node)rr Ú _is_propertyr$rTrŒryÚlocalsrUr?rÚ TryExceptÚ TryFinallyÚIfr(r'rRrSrWr”r¹)r.r/r1Ú parent_frameÚ!property_already_in_parent_localsÚ prop_funcs r7Úinfer_functiondefrÂ×s[èè€ð Œ?ð>¥%Ô"4°TÑ":Ô":ð>؈ ˆ ˆ Ý! t°WÐ=Ñ=Ô=Ð=ð”;×$Ò$¨DÐ$Ñ1Ô1€LØ(,¬ °\Ô5HÐ(Hð)ÍSðQðQØ5AÔ5HÈÌÔ5SðQñQôQñNôNÐ%õ�$”+¥¤µÔ1AÅ5Ä8ÐLÑMÔMð1Ø,0Ð)å× Ò ØØ ŒYØŒ{Ø"CÐMˆtŒ{ˆ{ÈØ”?ð !ñô€Ið)ð'Øœ;ˆ ÔØ ×Ò˜B T¤Y¸¼ÐÑGÔGÐGØ €O€O€OÝ  4°Ð 9Ñ 9Ô 9Ð9r9rN)r.r)r/r0r1r r2r3)r:r*r/r0r2r;)r.r*r/r0r1r r2rK)r.r[r/r0r2r\)rfrgrhrgr2rg)r:r[r/r0r2rg)r:r}r2r~)r.rƒr/r0r1r r2r„)r.r�r/r0r1r r2r‘)NT) r.r¡r/r0r¢r£r1r r2r¤) r.rªr/r0r¢r£r1r r2r„)r.r¶r/r0r1r r2r‘)r.rÂr/r0r1r r2r„)r.rÅr/r0r1r r2rÆ)r.rÔr/r0r1r r2rÆ) r.r)rërìr/r0r´rír2r„)r.rñr/r0r2rò)r.rñr/r0r1r r2r‘)r2r£)r r r r}r/rr2r )r r%rrràr²r r%r/rrr²r2r„)F)r r%rr'ràr²r r%r/rr(r£r2r))r r%rrràr²r r%r/rr(r£r2r))r5r6r7r6r2r„)r5r%rDrErFrr7r%rGrEr/rrHrr2r-)r5r%rDrErOr'r7r%rGrEr/rrHrr2r-) r5r%r7r%rFrr/rrVrWr2rX)r.rer/r0r2rX)r.rer/r0r1r r2r„)r:r}r2r )r‚rƒràr²r„rƒr2r…)r.rŒr/r0r1r r2r�)r.r'r/r0r2rX)r.r'r/r0r1r r2r„)r.r™r/r0r1r r2r„)r.r�r/r0r1r r2r„)r.r¢r/r0r1r r2r„)r¨r�r/r0)r.r¬r/r0r1r r2r„)r.r,r/r0r1r r2r³)‘Ú__doc__Ú __future__rrr-rnráÚtypingÚcollections.abcrrrrrr r r r Úastroidr rrrrrrÚ astroid.constrÚastroid.contextrrrrÚastroid.exceptionsrrrrrrrr r!Úastroid.interpreterr"Úastroid.managerr#Úastroid.typingr$r%r&Úastroid.objectsr'Ú lazy_importr(r)Ú BaseContainerr*r€r,rŸÚBinOprWr8ÚModuleÚ_inferr¹ÚLambdarÚSlicerEÚraise_if_nothing_inferredrZr#rÚSetrersrcrxr‚r�Ú path_wrapperÚNameÚ AssignNamer•r ÚCallr©ÚImportrµÚ ImportFromrÁÚ AttributeÚ AssignAttrrÄÚGlobalr¦rÊrÓÚ SubscriptrêÚBoolOprðrrÚUnaryOpr rr&r0r4r:r>rCrNrUrdrpÚyes_if_nothing_inferredrrÚeqÚneÚltÚleÚgtÚger|Ú__annotations__r‡r�r‹r’ÚComparer–r˜rœÚ Argumentsr¡r§Ú EmptyNoder™r²ÚIfExprÂr5r9r7úrðsÊ ðð TÐSÐSà"Ð"Ð"Ð"Ð"Ð"à € € € ØÐÐÐØÐÐÐØ€€€Ø € € € ØCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCØ?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?àRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRÐRØ$Ð$Ð$Ð$Ð$Ð$ððððððððððððð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð.Ð-Ð-Ð-Ð-Ð-Ø*Ð*Ð*Ð*Ð*Ð*ððððððððððð ð)Ø(Ð(Ð(Ð(Ð(Ð(ð ˆ$Ô ˜9Ñ %Ô %€à €WˆT�]„]€Ø�'Ð+°5Ô3FÐGÑGÔG€Ø�˜¨uÔ/@ÐAÑAÔA€ à”àØ�Ô!Ø ˆeŒo˜uœ{Ð*Ô+ØØ�Ô!ØØððFð Gô €ð"26ððððð𠀄 ÔØ!€„ÔØ€„ ÔØ€„ ÔØ€„ Ôð?Cðððððð0 Ô%ð(,ððððñ&Ô%ðð(#€„ ÔØ#€„ ÔØ!€„ Ôð:>ð ð ð ð ð ð%ð%ð%ð%ð4ðððð0€„ Ôððððð,(,ð5ð5ð5ð5ð5ð89�JÔ8Ø€JÔ˜JÑ'Ô'ñô€„ Ôð(€ÔÔð Ô%Ø Ôà9=ð:ð:ð:ð:ñÔñ&Ô%ð:ð0€„ Ôð Ô%Ø Ôð(,ØðBðBðBðBñÔñ&Ô%ðBð*#€„ Ôð Ô%Ø Ôð(,ØððððñÔñ&Ô%ððB,€ÔÔð (,ð:ð:ð:ð:ð:ðD>˜Ô=Ø€JÔ˜OÑ,Ô,ñô€„ÔðB˜ZÔAÀ/ÑRÔR€ÔÔð Ô%Ø Ôà;?ð ð ð ð ñÔñ&Ô%ð ð#€„ Ôð�f‘h”hÐð?Cð8ð8ð8ð8ð8ðz>˜Ô=Ø€JÔ˜OÑ,Ô,ñô€„ÔðA˜JÔ@ÀÑQÔQ€„Ôð Ô%Ø Ôà;?ð2:ð2:ð2:ð2:ñÔñ&Ô%ð2:ðj$€„ Ôð ðððð(=Að:+ð:+ð:+ð:+ð:+ðz Ô%Ø Ôà<@ð:ð:ð:ð:ñÔñ&Ô%ð:ð .€„ ÔØ$€„ ÔðLðLðLðLð "#ð"#ð"#ð"#ðJJðJðJðJðPð ððððð6ð ððððð6'ð'ð'ð'ð ð ð ð *ð*ð*ð*ð 6ð6ð6ð6ðr0ð0ð0ð0ðf/Rð/Rð/Rð/Rðf;?ð#ð#ð#ð#ð#ð6 Ô#Ø Ôà:>ððððñÔñ$Ô#ðð(€„ ÔØ €„ Ôð Œ+Ø Œ+Ø ŒØ Œ+Ø ŒØ Œ+Ø Ð Ø%Ð%ð 6ð 6€ ð ð ð ñ ð Ø ð€ð .ð.ð.ð.ð+ð+ð+ð+ð^=Að"ð"ð"ð"ð"ð6&€„ Ôð?Cð#ð#ð#ð#ð#ð8 Ô%Ø Ôà>BððððñÔñ&Ô%ðð$4€„Ô Ø(€„Ôð  Ô%à>BðQðQðQðQñ&Ô%ðQð)€„Ôð Ô%Ø Ôð(,ð .ð .ð .ð .ñÔñ&Ô%ð .ð'€ÔÔØ&€ÔÔð Ô%Ø Ôà>Bð #ð #ð #ð #ñÔñ&Ô%ð #ð*€„Ôððððð" Ô%à:>ð:ð:ð:ð:ñ&Ô%ð:ðD!€„ Ôð=Að:ð:ð:ð:ð:ðD-€ÔÔÐÐr9