§ iÐdªD=./ãó”—dZddlmZddlmZmZddlmZddl m Z d„Z d„Z d„Z d „Zd-d „Zd „Zd „Zd„Ze ¦«e ¦«fd„Zd.d„Zd„Zd„Zd-d„Zd„Zd-d„Zd-d„Zd„Zd„Zd„Zd„Zd„Zhd£Z d„Z!da"da#d a$d!a%d"„Z&d#„Z'd$„Z(d%„Z)d&„Z*d'„Z+d(„Z,d)„Z-ej.ej/hZ0d-d*„Z1ej/ej.ej2hZ3d+„Z4d-d,„Z5d S)/z1Utility functions, node construction macros, etc.é)Útoken)ÚLeafÚNode)Úpython_symbols)Úpatcompcól—ttj|ttjd¦«|g¦«S)Nú=)rÚsymsÚargumentrrÚEQUAL)ÚkeywordÚvalues ú?/opt/alt/python-internal/lib64/python3.11/lib2to3/fixer_util.pyÚ KeywordArgrs.€Ý •” Ø�$�uœ{¨CÑ0Ô0°%Ð8ñ :ô :ð:ócó6—ttjd¦«S)Nú()rrÚLPAR©rrÚLParenró€Ý •” ˜CÑ Ô Ð rcó6—ttjd¦«S)Nú))rrÚRPARrrrÚRParenrrrc óæ—t|t¦«s|g}t|t¦«s d|_|g}ttj|t tjdd¬¦«gz|z¦«S)zBuild an assignment statementú r ©Úprefix) Ú isinstanceÚlistrrr Úatomrrr )ÚtargetÚsources rÚAssignr%su€å �f�dÑ #Ô #ðØ�ˆÝ �f�dÑ #Ô #ðØˆŒ Ø�ˆå •” Ø�$�uœ{¨C¸Ð<Ñ<Ô<Ð=Ñ=ÀÑFñ Hô HðHrNcó:—ttj||¬¦«S)zReturn a NAME leafr)rrÚNAME)Únamers rÚNamer)$s€å •” ˜D¨Ð 0Ñ 0Ô 0Ð0rcóV—|ttjt¦«|g¦«gS)zA node tuple for obj.attr)rr ÚtrailerÚDot)ÚobjÚattrs rÚAttrr/(s!€à ••d”l¥S¡U¤U¨D MÑ2Ô2Ð 3Ð3rcó6—ttjd¦«S)z A comma leafú,)rrÚCOMMArrrÚCommar3,s€å •” ˜SÑ !Ô !Ð!rcó6—ttjd¦«S)zA period (.) leafú.)rrÚDOTrrrr,r,0s€å •” ˜3Ñ Ô Ðrcóæ—ttj| ¦«| ¦«g¦«}|r.| dttj|¦«¦«|S)z-A parenthesised argument list, used by Call()r)rr r+ÚcloneÚ insert_childÚarglist)ÚargsÚlparenÚrparenÚnodes rÚArgListr?4sW€å •” ˜vŸ|š|™~œ~¨v¯|ª|©~¬~Ð>Ñ ?Ô ?€DØ ð7Ø ×Ò˜!�T¥$¤,°Ñ5Ô5Ñ6Ô6Ð6Ø €Krcój—ttj|t|¦«g¦«}|�||_|S)zA function call)rr Úpowerr?r)Ú func_namer;rr>s rÚCallrC;s0€å •” ˜Y­°© ¬ Ð6Ñ 7Ô 7€DØ ÐØˆŒ Ø €Krcó6—ttjd¦«S)zA newline literalú ©rrÚNEWLINErrrÚNewlinerHBs€å •” ˜tÑ $Ô $Ð$rcó6—ttjd¦«S)z A blank lineÚrFrrrÚ BlankLinerKFs€å •” ˜rÑ "Ô "Ð"rcó:—ttj||¬¦«S)Nr)rrÚNUMBER)Únrs rÚNumberrOJs€Ý •” ˜a¨Ð /Ñ /Ô /Ð/rc óœ—ttjttjd¦«|ttjd¦«g¦«S)zA numeric or string subscriptú[ú])rr r+rrÚLBRACEÚRBRACE)Ú index_nodes rÚ SubscriptrVMs=€å •” �t¥E¤L°#Ñ6Ô6Ø)Ý#¥E¤L°#Ñ6Ô6ð8ñ 9ô 9ð9rcó:—ttj||¬¦«S)z A string leafr)rrÚSTRING)Ústringrs rÚStringrZSs€å •” ˜f¨VÐ 4Ñ 4Ô 4Ð4rc óp—d|_d|_d|_ttjd¦«}d|_ttjd¦«}d|_||||g}|rWd|_ttjd¦«}d|_| t t j||g¦«¦«t t j|t t j |¦«g¦«}t t j ttj d¦«|ttj d¦«g¦«S)zuA list comprehension of the form [xp for fp in it if test]. If test is None, the "if test" part is omitted. rJrÚforÚinÚifrQrR) rrrr'Úappendrr Úcomp_ifÚ listmakerÚcomp_forr"rSrT) ÚxpÚfpÚitÚtestÚfor_leafÚin_leafÚ inner_argsÚif_leafÚinners rÚListComprlWs€ð €B„IØ€B„IØ€B„IÝ•E”J Ñ&Ô&€HØ€H„OÝ•5”:˜tÑ$Ô$€GØ€G„NؘB ¨Ð,€JØ ð?؈Œ Ý•u”z 4Ñ(Ô(ˆØˆŒØ×Ò�$�tœ|¨g°t¨_Ñ=Ô=Ñ>Ô>Ð>Ý •” "¥d­4¬=¸*Ñ&EÔ&EÐ!FÑ GÔ G€EÝ •” Ý�Uœ\¨3Ñ/Ô/ØÝ�Uœ\¨3Ñ/Ô/ð1ñ 2ô 2ð2rcó@—|D]}| ¦«Œttjd¦«ttj|d¬¦«ttjdd¬¦«t t j|¦«g}t t j|¦«}|S)zO Return an import statement in the form: from package import name_leafsÚfromrrÚimport)Úremoverrr'rr Úimport_as_namesÚ import_from)Ú package_nameÚ name_leafsÚleafÚchildrenÚimps rÚ FromImportrxos‰€ðððˆà � Š ‰ Œ ˆ ˆ å•U”Z Ñ(Ô(Ý•U”Z °cÐ:Ñ:Ô:Ý•U”Z °#Ð6Ñ6Ô6Ý•TÔ)¨:Ñ6Ô6ð8€Hõ �tÔ Ñ *Ô *€CØ €Jrc ól—|d ¦«}|jtjkr| ¦«}n-t tj| ¦«g¦«}|d}|r d„|D¦«}t tjt t|d¦«t|d¦«¦«t tj|d ¦«||d ¦«g¦«gz|z¦«}|j |_ |S)zfReturns an import statement and calls a method of the module: import module module.name()r-Úaftercó6—g|]}| ¦«‘ŒSr)r8)Ú.0rNs rú z!ImportAndCall..�s €Ð*Ð*Ð*˜q�—’‘”Ð*Ð*Ð*rérÚlparÚrpar) r8Útyper r:rrAr/r)r+r)r>ÚresultsÚnamesr-Ú newarglistrzÚnews rÚ ImportAndCallr†‚s€ð �%Œ.× Ò Ñ Ô €CØ „x•4”<ÒÐØ—Y’Y‘[”[ˆ ˆ å�$œ,¨¯ª©¬¨ Ñ6Ô6ˆ Ø �GÔ €EØ ð+Ø*Ð* EÐ*Ñ*Ô*ˆÝ �tŒzÝ•D˜˜qœ‘N”N¥D¨¨q¬¡N¤NÑ3Ô3Ý•T”\ؘf”o×+Ò+Ñ-Ô-Ø Ø˜f”o×+Ò+Ñ-Ô-ð/ñ0ô0ð1ñ1ð49ñ 9ñ :ô :€C𠔀C„JØ €Jrcóì—t|t¦«r'|jt¦«t ¦«gkrdSt|t¦«o£t |j¦«dko‹t|jdt ¦«okt|jdt¦«oKt|jdt ¦«o+|jdjdko|jdjdkS)z(Does the node represent a tuple literal?Tér~rérr)r rrvrrÚlenrr©r>s rÚis_tuplerŒžsÜ€å�$�ÑÔð $¤-µF±H´H½f¹h¼hÐ3GÒ"GÐ"G؈tÝ �t�TÑ "Ô "ð .Ý�D”MÑ"Ô" aÒ'ð .å˜4œ=¨Ô+­TÑ2Ô2ð .õ˜4œ=¨Ô+­TÑ2Ô2ð .õ˜4œ=¨Ô+­TÑ2Ô2ð  .ð ” ˜aÔ Ô&¨#Ò-ð  .ð ” ˜aÔ Ô&¨#Ò-ð /rcó4—t|t¦«oƒt|j¦«dkokt|jdt¦«oKt|jdt¦«o+|jdjdko|jdjdkS)z'Does the node represent a list literal?rr~éÿÿÿÿrQrR)r rrŠrvrrr‹s rÚis_listr�ªs‘€å �t�TÑ "Ô "ð /Ý�D”MÑ"Ô" QÒ&ð /å˜4œ=¨Ô+­TÑ2Ô2ð /õ˜4œ=¨Ô,­dÑ3Ô3ð /ð” ˜aÔ Ô&¨#Ò-ð  /ð ” ˜bÔ!Ô'¨3Ò.ð 0rcól—ttjt¦«|t ¦«g¦«S©N)rr r"rrr‹s rÚ parenthesizer’¸s#€Ý •” �F™HœH d­F©H¬HÐ5Ñ 6Ô 6Ð6r> ÚallÚanyÚmaxÚminÚsetÚsumr!ÚtupleÚsortedÚ enumeratec#ó^K—t||¦«}|r|V—t||¦«}|°dSdS)alFollow an attribute chain. If you have a chain of objects where a.foo -> b, b.foo-> c, etc, use this to iterate over all objects in the chain. Iteration is terminated by getattr(x, attr) is None. Args: obj: the starting object attr: the name of the chaining attribute Yields: Each successive object in the chain. N)Úgetattr)r-r.Únexts rÚ attr_chainrŸ¿sUèè€õ �3˜Ñ Ô €DØ ð#؈ ˆ ˆ Ý�t˜TÑ"Ô"ˆð ð#ð#ð#ð#ð#rzefor_stmt< 'for' any 'in' node=any ':' any* > | comp_for< 'for' any 'in' node=any any* > z³ power< ( 'iter' | 'list' | 'tuple' | 'sorted' | 'set' | 'sum' | 'any' | 'all' | 'enumerate' | (any* trailer< '.' 'join' >) ) trailer< '(' node=any ')' > any* > z` power< ( 'sorted' | 'enumerate' ) trailer< '(' arglist ')' > any* > Fcóh—tsMtjt¦«atjt¦«atjt ¦«adattt g}t |t|d¦«¦«D]*\}}i}| ||¦«r |d|urdSŒ+dS)a Returns true if node is in an environment where all that is required of it is being iterable (ie, it doesn't matter if it returns a list or an iterator). See test_map_nochange in test_fixers.py for some examples and tests. TÚparentr>F) Ú pats_builtrÚcompile_patternÚp0Úp1Úp2ÚziprŸÚmatch)r>ÚpatternsÚpatternr¡r‚s rÚin_special_contextr«ås©€õ ðÝ Ô $¥RÑ (Ô (ˆÝ Ô $¥RÑ (Ô (ˆÝ Ô $¥RÑ (Ô (ˆØˆ Ý•B�ˆ|€Hݘx­°D¸(Ñ)CÔ)CÑDÔDðð‰ˆ�ØˆØ �=Š=˜ Ñ )Ô )ð ¨g°f¬oÀÐ.EÐ.EØ�4�4øØ ˆ5rcó†—|j}|�|jtjkrdS|j}|jt jt jfvrdS|jt jkr|j d|urdS|jt j ks;|jt j kr(|�|jtj ks|j d|urdSdS)zG Check that something isn't an attribute or function name etc. NFr~T) Ú prev_siblingr�rr6r¡r ÚfuncdefÚclassdefÚ expr_stmtrvÚ parametersÚ typedargslistr2)r>Úprevr¡s rÚis_probably_builtinr´øs½€ð Ô €DØ Ð˜DœI­¬Ò2Ð2àˆuØ Œ[€FØ „{•t”|¥T¤]Ð3Ð3Ð3؈uØ „{•d”nÒ$Ð$¨¬¸Ô);¸tÐ)CÐ)CàˆuØ „{•d”oÒ%Ð%Ø Œ[�DÔ.Ò .Ð .Ø Ð  $¤)­u¬{Ò":Ð":Ø ŒO˜AÔ  $Ð &Ð &ðˆuØ ˆ4rcóÈ—|�_|jtjkrAt|j¦«dkr)|jd}|jt jkr|jS|j}|­_dS)zFind the indentation of *node*.Nr‰rrJ) r�r ÚsuiterŠrvrÚINDENTrr¡)r>Úindents rÚfind_indentationr¹sd€à Ð Ø Œ9�œ Ò "Ð "¥s¨4¬=Ñ'9Ô'9¸AÒ'=Ð'=Ø”] 1Ô%ˆFØŒ{�eœlÒ*Ð*Ø”|Ð#ØŒ{ˆð Ð ð ˆ2rcó¾—|jtjkr|S| ¦«}|jdc}|_t tj|g¦«}||_|Sr‘)r�r r¶r8r¡r)r>r¡r¶s rÚ make_suiter»sR€Ø „y•D”JÒÐØˆ Ø �:Š:‰<Œ<€DØœ+ tЀFˆDŒKÝ •”˜d˜VÑ $Ô $€EØ€E„LØ €LrcóŠ—|jtjkr-|j}|st d¦«‚|jtjk°-|S)zFind the top level namespace.z,root found before file_input node was found.)r�r Ú file_inputr¡Ú ValueErrorr‹s rÚ find_rootr¿&sJ€ð Œ)•t”Ò &Ð &ØŒ{ˆØð MÝÐKÑLÔLÐ Lð Œ)•t”Ò &Ð &ð €Krcó\—t|t|¦«|¦«}t|¦«S)zÞ Returns true if name is imported from package at the top level of the tree which node belongs to. To cover the case of an import like 'import foo', use None for the package and 'foo' for the name. )Ú find_bindingr¿Úbool)Úpackager(r>Úbindings rÚdoes_tree_importrÅ/s'€õ ˜4¥¨4¡¤°'Ñ:Ô:€GÝ �‰=Œ=Ðrcó@—|jtjtjfvS)z0Returns true if the node is an import statement.)r�r Ú import_namerrr‹s rÚ is_importrÈ7s€à Œ9�Ô)­4Ô+;Ð<Ð <Ð.is_import_stmt>s4€Ø” �TÔ-Ò-ð,°$´-ð,ݘ$œ-¨Ô*Ñ+Ô+ð -rNr~rrorr)r¿rÅr›rvr�r rËrrXrrÇrr'rxrHr9) rÃr(r>rÌÚrootÚ insert_posÚoffsetÚidxÚnode2Úimport_rvs rÚ touch_importrÓ;sÇ€ð-ð-ð-õ �T‰?Œ?€D嘠 tÑ,Ô,ð؈ðЀJ�ݘtœ}Ñ-Ô-ðð‰ ˆˆT؈~˜dÑ#Ô#ð Ø Ý& t¤}°S°T°TÔ':Ñ;Ô;ð ð ‰MˆF�EØ!�> %Ñ(Ô(ð Ø�ð à˜6‘\ˆ Ø ð�Q‚€Ý" 4¤=Ñ1Ô1ð ð ‰IˆC�Ø” �TÔ-Ò-Ð-°$´-Ð-ØŒ}˜QÔÔ$­¬ Ò4Ð4Ø  1™W� Ø�øà€Ý•tÔ'Ý •”˜XÑ &Ô &Ý •”˜T¨#Ð .Ñ .Ô .ð* ñ ô ˆˆõ ˜W¥t­E¬J¸ÀSÐ'IÑ'IÔ'IÐ&JÑKÔKˆà�™œÐ#€HØ×Ò�j¥$¥tÔ'7¸Ñ"BÔ"BÑCÔCÐCÐCÐCrc óP—|jD�]}d}|jtjkrNt ||jd¦«r|cSt |t |jd¦«|¦«}|r|}�n™|jtjtjfvr/t |t |jd¦«|¦«}|r|}�nK|jtj kr¢t |t |jd¦«|¦«}|r|}�nt|jdd…¦«D]U\}}|jtj kr;|j dkr0t |t |j|dz¦«|¦«}|r|}ŒVn”|jtvr|jdj |kr|}nmt|||¦«r|}nY|jtjkrt |||¦«}n2|jtjkrt ||jd¦«r|}|r|s|cSt%|¦«r|cS�ŒdS) zº Returns the node which binds variable name, otherwise None. If optional argument package is supplied, only imports will be returned. See test cases for examples.NrrŽr‰rˆú:ér~)rvr�r Úfor_stmtÚ_findrÁr»Úif_stmtÚ while_stmtÚtry_stmtr›rÚCOLONrÚ _def_symsÚ_is_import_bindingrËr°rÈ)r(r>rÃÚchildÚretrNÚiÚkids rrÁrÁis3€ð ”ð"ñ"ˆØˆØ Œ:�œÒ &Ð &Ý�T˜5œ>¨!Ô,Ñ-Ô-ð Ø� � � ݘT¥:¨e¬n¸RÔ.@Ñ#AÔ#AÀ7ÑKÔKˆA؈M˜�#ùØ ŒZ�DœL­$¬/Ð:Ð :Ð :ݘT¥:¨e¬n¸RÔ.@Ñ#AÔ#AÀ7ÑKÔKˆA؈M˜�#ùØ ŒZ�4œ=Ò (Ð (ݘT¥:¨e¬n¸QÔ.?Ñ#@Ô#@À'ÑJÔJˆAØð &Ø�‘å'¨¬°q°r°rÔ(:Ñ;Ô;ð&ð&‘F�A�sØ”x¥5¤;Ò.Ð.°3´9ÀÒ3CÐ3Cå(¨­z¸%¼.ÈÈ1ÉÔ:MÑ/NÔ/NÐPWÑXÔX˜Ø˜  A˜cøð &ð ŒZ�9Ð $Ð $¨¬¸Ô):Ô)@ÀDÒ)HÐ)H؈CˆCÝ   t¨WÑ 5Ô 5ð ØˆCˆCØ ŒZ�4Ô+Ò +Ð +ݘt U¨GÑ4Ô4ˆCˆCØ ŒZ�4œ>Ò )Ð )Ý�T˜5œ>¨!Ô,Ñ-Ô-ð Ø�à ð Øð Ø� � � ݘ‰~Œ~ð Ø� � � ùØ ˆ4rcóè—|g}|rl| ¦«}|jdkr)|jtvr| |j¦«n"|jt jkr |j|kr|S|°ldS)Né)Úpopr�Ú _block_symsÚextendrvrr'r)r(r>Únodess rrØrØ”s}€Ø ˆF€EØ ðØ�yŠy‰{Œ{ˆØ Œ9�sŠ?ˆ?˜tœyµ Ð;Ð;Ø �LŠL˜œÑ 'Ô 'Ð 'Ð 'Ø ŒY�%œ*Ò $Ð $¨¬°tÒ);Ð);؈Kð ðð ˆ4rcó.—|jtjkrî|sì|jd}|jtjkr`|jD]V}|jtjkr|jdj|kr|cSŒ2|jtjkr|j|kr|cSŒW�n{|jtjkr1|jd}|jtjkr |j|kr|S�n5|jtjkr |j|kr|S�n|jtj krü|r2t|jd¦«  ¦«|krdS|jd}|rtd|¦«rdS|jtj krt||¦«r|S|jtjkr0|jd}|jtjkr |j|kr|Sn;|jtjkr |j|kr|S|r|jtjkr|SdS)zš Will return node if node will import name, or node will import * from package. None is returned otherwise. See test cases for examples. rr‰rŽNrˆÚas)r�r rÇrvÚdotted_as_namesÚdotted_as_namerrr'rrÚstrÚstriprØrqÚimport_as_nameÚSTAR)r>r(rÃrwrßÚlastrNs rrÞrÞžs €ð  „y•DÔ$Ò$Ð$¨WÐ$ØŒm˜AÔˆØ Œ8•tÔ+Ò +Ð +Øœð ð �Ø”:¥Ô!4Ò4Ð4Ø”~ aÔ(Ô.°$Ò6Ð6Ø#˜ ˜ ˜ ð7à”Z¥5¤:Ò-Ð-°%´+ÀÒ2EÐ2EØ�K�K�Køñ  ð ŒX�Ô,Ò ,Ð ,Ø”< Ô#ˆDØŒy�EœJÒ&Ð&¨4¬:¸Ò+=Ð+=Ø� ùØ ŒX�œÒ #Ð #¨¬ °TÒ(9Ð(9؈KùØ Œ•dÔ&Ò &Ð &ð ð •s˜4œ=¨Ô+Ñ,Ô,×2Ò2Ñ4Ô4¸Ò?Ð?Ø�4Ø ŒM˜!Ô ˆØ ð •u˜T 1‘~”~ð à�4Ø ŒV•tÔ+Ò +Ð +µ°d¸A±´Ð +؈KØ ŒV•tÔ*Ò *Ð *Ø”J˜q”MˆEØŒz�UœZÒ'Ð'¨E¬K¸4Ò,?Ð,?Ø� øØ ŒV•u”zÒ !Ð ! a¤g°¢o o؈KØ ð ˜œ¥5¤:Ò-Ð-؈KØ ˆ4rr‘)NN)6Ú__doc__Úpgen2rÚpytreerrÚpygramrr rJrrrrr%r)r/r3r,r?rCrHrKrOrVrZrlrxr†rŒr�r’Úconsuming_callsrŸr¤r¥r¦r¢r«r´r¹r»r¿rÅrÈrÓr¯r®rÝrÁr+rærØrÞrrrúr÷sèðØ7Ð7ðÐÐÐÐÐØÐÐÐÐÐÐÐØ*Ð*Ð*Ð*Ð*Ð*ØÐÐÐÐÐð:ð:ð:ð!ð!ð!ð!ð!ð!ð Hð Hð Hð1ð1ð1ð1ð4ð4ð4ð"ð"ð"ð ð ð 𠘙œ¨&¨&©(¬(ððððððððð%ð%ð%ð#ð#ð#ð0ð0ð0ð0ð9ð9ð9ð 5ð5ð5ð5ð2ð2ð2ð2ð0ððð&ððð8 /ð /ð /ð0ð0ð0ð7ð7ð7ð.ð.ð.€ð#ð#ð#ð& €ð€ð€ð€ ðððð&ððð.ðððððððððððð=ð=ð=ð*Dð*Dð*DðZŒ]˜DœLÐ )€ ð(ð(ð(ð(ðTŒ|˜Tœ]¨D¬LÐ9€ ðððð'ð'ð'ð'ð'ð'r