/opt/alt/python311/lib64/python3.11/lib2to3/__pycache__
NameSizeModeActions
btm_matcher.cpython-311.opt-1.pyc78140644editdlrm
btm_matcher.cpython-311.opt-2.pyc62640644editdlrm
btm_matcher.cpython-311.pyc78140644editdlrm
btm_utils.cpython-311.opt-1.pyc115300644editdlrm
btm_utils.cpython-311.opt-2.pyc100560644editdlrm
btm_utils.cpython-311.pyc115300644editdlrm
fixer_base.cpython-311.opt-1.pyc84310644editdlrm
fixer_base.cpython-311.opt-2.pyc57520644editdlrm
fixer_base.cpython-311.pyc84310644editdlrm
fixer_util.cpython-311.opt-1.pyc223810644editdlrm
fixer_util.cpython-311.opt-2.pyc203680644editdlrm
fixer_util.cpython-311.pyc223810644editdlrm
main.cpython-311.opt-1.pyc152200644editdlrm
main.cpython-311.opt-2.pyc134840644editdlrm
main.cpython-311.pyc152660644editdlrm
patcomp.cpython-311.opt-1.pyc102230644editdlrm
patcomp.cpython-311.opt-2.pyc97440644editdlrm
patcomp.cpython-311.pyc107250644editdlrm
pygram.cpython-311.opt-1.pyc20700644editdlrm
pygram.cpython-311.opt-2.pyc18730644editdlrm
pygram.cpython-311.pyc20700644editdlrm
pytree.cpython-311.opt-1.pyc352100644editdlrm
pytree.cpython-311.opt-2.pyc268610644editdlrm
pytree.cpython-311.pyc369930644editdlrm
refactor.cpython-311.opt-1.pyc384440644editdlrm
refactor.cpython-311.opt-2.pyc345390644editdlrm
refactor.cpython-311.pyc385260644editdlrm
__init__.cpython-311.opt-1.pyc3870644editdlrm
__init__.cpython-311.opt-2.pyc3870644editdlrm
__init__.cpython-311.pyc3870644editdlrm
__main__.cpython-311.opt-1.pyc3310644editdlrm
__main__.cpython-311.opt-2.pyc3310644editdlrm
__main__.cpython-311.pyc3310644editdlrm
Edit: /opt/alt/python311/lib64/python3.11/lib2to3/__pycache__/refactor.cpython-311.opt-1.pyc (38444B)
§ ,þ¼me¹œãó@—dZdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z mZddlmZddlmZmZdd lmZdd „ZGd „d e¦«Zd„Zd„Zd„Zd„Zd„ZGd„de¦«ZGd„de¦«Z Gd„de¦«Z!Gd„de ¦«Z"dS)zÛRefactoring framework. Used as a main program, this can refactor any number of files and/or recursively descend down directories. Imported as a module, this provides infrastructure to write your own refactoring tool. z#Guido van Rossum éN)Úchainé)ÚdriverÚtokenizeÚtoken)Ú find_root)ÚpytreeÚpygram)Ú btm_matcherTcóÜ—t|ggdg¦«}g}tj|j¦«D]<\}}}| d¦«r!|r |dd…}| |¦«Œ=|S)zEReturn a sorted list of all available fix names in the given package.Ú*Úfix_éN)Ú __import__ÚpkgutilÚ iter_modulesÚ__path__Ú startswithÚappend)Ú fixer_pkgÚ remove_prefixÚpkgÚ fix_namesÚfinderÚnameÚispkgs ú7/opt/alt/python311/lib64/python3.11/lib2to3/refactor.pyÚget_all_fix_namesrsƒ€å �Y  B¨¨Ñ .Ô .€CØ€IÝ&Ô3°C´LÑAÔAð#ð#ш��eØ �?Š?˜6Ñ "Ô "ð #Øð ؘA˜B˜B”x�Ø × Ò ˜TÑ "Ô "Ð "øØ Ðócó—eZdZdS)Ú _EveryNodeN©Ú__name__Ú __module__Ú __qualname__©rrr!r!+ó€€€€€Ø€Drr!cóÌ—t|tjtjf¦«r|j€t ‚|jhSt|tj¦«r"|jrt|j¦«St ‚t|tj ¦«rAt¦«}|jD])}|D]$}|  t|¦«¦«Œ%Œ*|Std|z¦«‚)zf Accepts a pytree Pattern Node and returns a set of the pattern types which will match first. Nz$Oh no! I don't understand pattern %s) Ú isinstancer Ú NodePatternÚ LeafPatternÚtyper!ÚNegatedPatternÚcontentÚ_get_head_typesÚWildcardPatternÚsetÚupdateÚ Exception)ÚpatÚrÚpÚxs rr/r//sé€õ�#�Ô*­FÔ,>Ð?Ñ@Ô@ðð Œ8Ð ÝÐ Ø”ˆzÐå�#•vÔ,Ñ-Ô-ðØ Œ;ð 0Ý" 3¤;Ñ/Ô/Ð /ÝÐå�#•vÔ-Ñ.Ô.ðå ‰EŒEˆØ”ð -ð -ˆAØð -ð -�Ø—’�¨Ñ+Ô+Ñ,Ô,Ð,Ð,ð -àˆå Ð:¸SÑAÑ BÔ BÐBrcóZ—tjt¦«}g}|D]¡}|jr[ t |j¦«}|D]}|| |¦«ŒŒ?#t $r| |¦«YŒ`wxYw|j�!||j |¦«ŒŒ| |¦«Œ¢ttj j   ¦«tj j ¦«D]}|| |¦«Œt|¦«S)z^ Accepts a list of fixers and returns a dictionary of head node type --> fixer list. )Ú collectionsÚ defaultdictÚlistÚpatternr/rr!Ú _accept_typerr Úpython_grammarÚ symbol2numberÚvaluesÚtokensÚextendÚdict)Ú fixer_listÚ head_nodesÚeveryÚfixerÚheadsÚ node_types rÚ_get_headnode_dictrJKsL€õÔ(­Ñ.Ô.€JØ €EØð $ð $ˆØ Œ=ð $ð 8Ý'¨¬ Ñ6Ô6�ð"'ð8ð8�IؘyÔ)×0Ò0°Ñ7Ô7Ð7Ð7ð8øõð $ð $ð $Ø— ’ ˜UÑ#Ô#Ð#Ð#Ð#ð $øøøð Ô!Ð-ؘ5Ô-Ô.×5Ò5°eÑ<Ô<Ð<Ð<à— ’ ˜UÑ#Ô#Ð#Ð#Ý�6Ô0Ô>×EÒEÑGÔGÝ!Ô0Ô7ñ9ô9ð,ð,ˆ à�9Ô×$Ò$ UÑ+Ô+Ð+Ð+Ý � Ñ Ô Ðs¨AÁA?Á>A?có<‡—ˆfd„t‰d¦«D¦«S)zN Return the fully qualified names for fixers in the package pkg_name. có •—g|] }‰dz|z‘Œ S©ú.r&)Ú.0Úfix_nameÚpkg_names €rú z+get_fixers_from_package..hs8ø€ð @ð @ð @Øð �s‰N˜XÑ %ð @ð @ð @rF)r)rQs`rÚget_fixers_from_packagerSds@ø€ð @ð @ð @ð @Ý-¨h¸Ñ>Ô>ð @ñ @ô @ð@rcó—|S©Nr&)Úobjs rÚ _identityrWks€Ø €Jrcóh‡—d}tjtj|¦«j¦«Šˆfd„}t t jtjt j h¦«}t¦«} |¦«\}}||vrŒ|t j kr|rnûd}nö|t j krå|dkrß|¦«\}}|t j ks|dkrn¾|¦«\}}|t j ks|dkrnš|¦«\}}|t j kr|dkr |¦«\}}|t j krV| |¦«|¦«\}}|t j ks|dkrn|¦«\}}|t j k°Vnn�Œ n#t$rYnwxYwt |¦«S) NFcóB•—t‰¦«}|d|dfS)Nrr)Únext)ÚtokÚgens €rÚadvancez(_detect_future_features..advancers ø€Ý�3‰iŒiˆØ�1Œv�s˜1”vˆ~ÐrTÚfromÚ __future__Úimportú(ú,)rÚgenerate_tokensÚioÚStringIOÚreadlineÚ frozensetrÚNEWLINEÚNLÚCOMMENTr1ÚSTRINGÚNAMEÚOPÚaddÚ StopIteration)ÚsourceÚhave_docstringr]ÚignoreÚfeaturesÚtpÚvaluer\s @rÚ_detect_future_featuresrvosÝø€Ø€NÝ Ô "¥2¤;¨vÑ#6Ô#6Ô#?Ñ @Ô @€Cðððððõ�œ ¥x¤{µE´MÐBÑ CÔ C€F݉uŒu€Hð ð Ø˜™ œ ‰IˆB�Ø�Vˆ|ˆ|ØØ•u”|Ò#Ð#Ø!ðØØ!%��Ø•u”zÒ!Ð! e¨v¢o oØ#˜G™IœI‘ ��EØ�œÒ#Ð# u° Ò'<Ð'<ØØ#˜G™IœI‘ ��EØ�œÒ#Ð# u°Ò'8Ð'8ØØ#˜G™IœI‘ ��EØ�œ’>�> e¨s¢l lØ ' ¡ ¤ ‘I�B˜Ø�EœJÒ&Ð&Ø—L’L Ñ'Ô'Ð'Ø ' ¡ ¤ ‘I�B˜Ø�UœX’~�~¨°#ª¨ØØ ' ¡ ¤ ‘I�B˜ð �EœJÒ&Ð&øðñ3 øøõ4 ð ð ð Ø ˆð øøøå �XÑ Ô ÐsÁ3D!FÆ F"Æ!F"có—eZdZdZdS)Ú FixerErrorzA fixer could not be loaded.N)r#r$r%Ú__doc__r&rrrxrx—s€€€€€Ø&Ð&Ð&Ð&rrxcóÀ—eZdZddddœZdZdZdd„Zd„Zd„Zd „Z d „Z d „Z dd „Z dd „Z d„Zdd„Zd„Zd d„Zd„Zd„Z d!d„Zd"d„ZdZdZd„Zd„Zd„Zd„Zd„Zd„ZdS)#ÚRefactoringToolF)Úprint_functionÚ exec_functionÚwrite_unchanged_filesÚFixrNcóP—||_|pg|_|j ¦«|_|�|j |¦«t j ¦«|_|jdr|jj d=n|jdr |jj d=|j  d¦«|_ g|_ tjd¦«|_g|_d|_t%j|jt(j|j¬ ¦«|_| ¦«\|_|_g|_t5j¦«|_g|_g|_t?|j|j¦«D]k}|j r|j !|¦«Œ$||jvr|j "|¦«ŒH||jvr|j "|¦«ŒltG|j¦«|_$tG|j¦«|_%dS) zÑInitializer. Args: fixer_names: a list of fixers to import options: a dict with configuration. explicit: a list of fixers to run even if they are explicit. Nr|Úprintr}Úexecr~r{F)ÚconvertÚlogger)&ÚfixersÚexplicitÚ_default_optionsÚcopyÚoptionsr2r r>ÚgrammarÚkeywordsÚgetr~ÚerrorsÚloggingÚ getLoggerr„Ú fixer_logÚwroterÚDriverr rƒÚ get_fixersÚ pre_orderÚ post_orderÚfilesÚbmÚ BottomMatcherÚBMÚ bmi_pre_orderÚbmi_post_orderrÚ BM_compatibleÚ add_fixerrrJÚbmi_pre_order_headsÚbmi_post_order_heads)ÚselfÚ fixer_namesr‰r†rGs rÚ__init__zRefactoringTool.__init__¤s€ð"ˆŒ Ø ˜ BˆŒ ØÔ,×1Ò1Ñ3Ô3ˆŒ Ø Ð Ø ŒL× Ò  Ñ (Ô (Ð (ÝÔ,×1Ò1Ñ3Ô3ˆŒ à Œ<Ð(Ô )ð .Ø” Ô% gÐ.Ð.Ø Œ\˜/Ô *ð .Ø” Ô% fÐ-ð &*¤\×%5Ò%5Ð6MÑ%NÔ%NˆÔ"؈Œ ÝÔ'Ð(9Ñ:Ô:ˆŒ ؈ŒØˆŒ Ý”m D¤LÝ,2¬NØ+/¬;ð8ñ8ô8ˆŒ ð+/¯/ª/Ñ*;Ô*;Ñ'ˆŒ˜œðˆŒ åÔ"Ñ$Ô$ˆŒØˆÔØ ˆÔå˜4œ?¨D¬NÑ;Ô;ð 2ð 2ˆEØÔ"ð 2Ø”×!Ò! %Ñ(Ô(Ð(Ð(ð˜$œ.Ð(Ð(ØÔ"×)Ò)¨%Ñ0Ô0Ð0Ð0ؘ$œ/Ð)Ð)ØÔ#×*Ò*¨5Ñ1Ô1Ð1øå#5°dÔ6HÑ#IÔ#IˆÔ Ý$6°tÔ7JÑ$KÔ$KˆÔ!Ð!Ð!rcóÄ—g}g}|jD�]�}t|iidg¦«}| dd¦«d}| |j¦«r|t |j¦«d…}| d¦«}|jd d„|D¦«¦«z} t||¦«}n$#t$rtd |›d|›�¦«d‚wxYw||j |j ¦«} | jr*|jd ur!||jvr| d |¦«�Œ!| d |¦«| jd kr| | ¦«�ŒY| jdkr| | ¦«�Œ{td| jz¦«‚t'jd¦«} | | ¬¦«| | ¬¦«||fS)aInspects the options to load the requested patterns and handlers. Returns: (pre_order, post_order), where pre_order is the list of fixers that want a pre-order AST traversal, and post_order is the list that want post-order traversal. r rNréÿÿÿÿNÚ_Úcó6—g|]}| ¦«‘ŒSr&)Útitle)rOr6s rrRz.RefactoringTool.get_fixers..ës €Ð5OÐ5OÐ5OÀA°a·g²g±i´iÐ5OÐ5OÐ5Orz Can't find TzSkipping optional fixer: %szAdding transformation: %sÚpreÚpostzIllegal fixer order: %rÚ run_order©Úkey)r…rÚrsplitrÚ FILE_PREFIXÚlenÚsplitÚ CLASS_PREFIXÚjoinÚgetattrÚAttributeErrorrxr‰r�r†Ú log_messageÚ log_debugÚorderrÚoperatorÚ attrgetterÚsort) r Úpre_order_fixersÚpost_order_fixersÚ fix_mod_pathÚmodrPÚpartsÚ class_nameÚ fix_classrGÚkey_funcs rr“zRefactoringTool.get_fixersÛs"€ðÐØÐØ œKð Jñ JˆLݘ\¨2¨r°C°5Ñ9Ô9ˆCØ#×*Ò*¨3°Ñ2Ô2°2Ô6ˆHØ×"Ò" 4Ô#3Ñ4Ô4ð <Ø#¥C¨Ô(8Ñ$9Ô$9Ð$:Ð$:Ô;�Ø—N’N 3Ñ'Ô'ˆEØÔ*¨R¯WªWÐ5OÐ5OÈÐ5OÑ5OÔ5OÑ-PÔ-PÑPˆJð XÝ# C¨Ñ4Ô4� � øÝ!ð Xð Xð XÝ �j°x°x°xÀÀÐ!LÑMÔMÐSWÐWð Xøøøà�I˜dœl¨D¬NÑ;Ô;ˆEØŒ~ð  $¤-°tÐ";Ð";Ø ¨¬ Ð5Ð5Ø× Ò Ð!>ÀÑIÔIÐIÙà �NŠNÐ6¸Ñ AÔ AÐ AØŒ{˜eÒ#Ð#Ø ×'Ò'¨Ñ.Ô.Ð.Ñ.Ø” Ò&Ð&Ø!×(Ò(¨Ñ/Ô/Ð/Ñ/å Ð!:¸U¼[Ñ!HÑIÔIÐIåÔ& {Ñ3Ô3ˆØ×Ò (ÐÑ+Ô+Ð+Ø×Ò 8ÐÑ,Ô,Ð,Ø Ð"3Ð4Ð4s Â1CÃ!C#có—‚)zCalled when an error occurs.r&)r ÚmsgÚargsÚkwdss rÚ log_errorzRefactoringTool.log_errors€à rcóH—|r||z}|j |¦«dS)zHook to log a message.N)r„Úinfo©r rÅrÆs rr¶zRefactoringTool.log_messages/€à ð Ø˜‘*ˆCØ Œ ×Ò˜ÑÔÐÐÐrcóH—|r||z}|j |¦«dSrU)r„ÚdebugrËs rr·zRefactoringTool.log_debug s/€Ø ð Ø˜‘*ˆCØ Œ ×Ò˜#ÑÔÐÐÐrcó—dS)zTCalled with the old version, new version, and filename of a refactored file.Nr&)r Úold_textÚnew_textÚfilenameÚequals rÚ print_outputzRefactoringTool.print_outputs €ð ˆrcó¬—|D]P}tj |¦«r| |||¦«Œ9| |||¦«ŒQdS)z)Refactor a list of files and directories.N)ÚosÚpathÚisdirÚ refactor_dirÚ refactor_file)r ÚitemsÚwriteÚ doctests_onlyÚ dir_or_files rÚrefactorzRefactoringTool.refactorsn€ð!ð Fð FˆKÝŒw�}Š}˜[Ñ)Ô)ð FØ×!Ò! +¨u°mÑDÔDÐDÐDà×"Ò" ;°°}ÑEÔEÐEÐEð  Fð Frcóì—tjdz}tj|¦«D]Ï\}}}| d|¦«| ¦«| ¦«|D]w}| d¦«s`tj |¦«d|kr7tj ||¦«} |  | ||¦«Œxd„|D¦«|dd…<ŒÐdS)zÄDescends down a directory and refactor every Python file found. Python files are assumed to have a .py extension. Files and subdirectories starting with '.' are skipped. ÚpyzDescending into %srNrcó<—g|]}| d¦«°|‘ŒSrM)r)rOÚdns rrRz0RefactoringTool.refactor_dir..2s)€ÐKÐKÐK "¸¿ º ÀcÑ8JÔ8JÐK˜2ÐKÐKÐKrN) rÕÚextsepÚwalkr·r»rrÖÚsplitextr³rÙ) r Údir_namerÛrÜÚpy_extÚdirpathÚdirnamesÚ filenamesrÚfullnames rrØzRefactoringTool.refactor_dir s€õ”˜TÑ!ˆÝ,.¬G°HÑ,=Ô,=ð Lð LÑ (ˆG�X˜yØ �NŠNÐ/°Ñ 9Ô 9Ð 9Ø �MŠM‰OŒOˆOØ �NŠNÑ Ô Ð Ø!ð Gð G�ØŸš¨Ñ,Ô,ðGÝ”G×$Ò$ TÑ*Ô*¨1Ô-°Ò7Ð7Ý!œwŸ|š|¨G°TÑ:Ô:�HØ×&Ò& x°¸ ÑFÔFÐFøàKÐK¨ÐKÑKÔKˆH�Q�Q�Q‰KˆKð Lð Lrcó°— t|d¦«}n/#t$r"}| d||¦«Yd}~dSd}~wwxYw tj|j¦«d}| ¦«n#| ¦«wxYwtj|d|d¬¦«5}| ¦«|fcddd¦«S#1swxYwYdS) zG Do our best to decode a Python source file correctly. ÚrbzCan't open %s: %sN©NNrr5r¦©ÚencodingÚnewline) ÚopenÚOSErrorrÈrÚdetect_encodingrfÚcloserdÚread)r rÑÚfÚerrrðs rÚ_read_python_sourcez#RefactoringTool._read_python_source4s"€ð Ý�X˜tÑ$Ô$ˆAˆAøÝð ð ð Ø �NŠNÐ.°¸#Ñ >Ô >Ð >Ø�:�:�:�:�:øøøøð øøøð ÝÔ/°´ Ñ;Ô;¸AÔ>ˆHà �GŠG‰IŒIˆIˆIøˆA�GŠG‰IŒIˆIˆIøøøÝ ŒW�X˜s¨X¸rÐ BÑ BÔ Bð &ÀaØ—6’6‘8”8˜XÐ%ð &ð &ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð &ð &s.‚“ ?�:º?ÁA7Á7B Â(C à CÃCcóü—| |¦«\}}|€dS|dz }|rl| d|¦«| ||¦«}|js||kr| |||||¦«dS| d|¦«dS| ||¦«}|js |r7|jr0| t|¦«dd…|||¬¦«dS| d|¦«dS)zRefactors a file.Nú zRefactoring doctests in %szNo doctest changes in %sr¤)rÛrðzNo changes in %s)rùr·Úrefactor_docstringr~Úprocessed_fileÚrefactor_stringÚ was_changedÚstr)r rÑrÛrÜÚinputrðÚoutputÚtrees rrÙzRefactoringTool.refactor_fileDs@€à×2Ò2°8Ñ<Ô<‰ˆˆxØ ˆ=à ˆFØ �‰ ˆØ ð =Ø �NŠNÐ7¸Ñ BÔ BÐ BØ×,Ò,¨U°HÑ=Ô=ˆFØÔ)ð E¨V°uª_¨_Ø×#Ò# F¨H°e¸UÀHÑMÔMÐMÐMÐMà—’Ð9¸8ÑDÔDÐDÐDÐDà×'Ò'¨¨xÑ8Ô8ˆDØÔ)ð =¨dð =°tÔ7Gð =à×#Ò#¥C¨¡I¤I¨c¨r¨c¤N°HØ*/¸(ð$ñDôDðDðDðDð—’Ð1°8Ñ<Ô<Ð<Ð<Ð}| d||jj |¦«Yd}~|j|j_dSd}~wwxYw |j|j_n#|j|j_wxYw||_ |  d|¦«|  ||¦«|S)aFRefactor a given input string. Args: data: a string holding the code to be refactored. name: a human-readable name for use in error/log messages. Returns: An AST corresponding to the refactored input stream; None if there were errors during the parse. r|zCan't parse %s: %s: %sNzRefactoring %s) rvr Ú!python_grammar_no_print_statementrrŠÚ parse_stringr3rÈÚ __class__r#Úfuture_featuresr·Ú refactor_tree)r Údatarrsrrøs rrþzRefactoringTool.refactor_string[s €õ+¨4Ñ0Ô0ˆØ ˜xÐ 'Ð 'Ý"(Ô"JˆDŒKÔ ð /Ø”;×+Ò+¨DÑ1Ô1ˆDˆDøÝð ð ð Ø �NŠNÐ3Ø ¤Ô!7¸ñ >ô >ð >à ˆFˆFˆFà"&¤,ˆDŒKÔ Ð Ð øøøøð  øøøð ð #'¤,ˆDŒKÔ Ð ø $¤,ˆDŒKÔ Ð .Ð .Ð .Ð .Ø'ˆÔØ �ŠÐ'¨Ñ.Ô.Ð.Ø ×Ò˜4 Ñ&Ô&Ð&؈ s/«AÁB$Á BÁ"B Á2B$ BÂB$Â$B7cóØ—tj ¦«}|rh| d¦«| |d¦«}|js||kr| |d|¦«dS| d¦«dS| |d¦«}|js |r-|jr&| t|¦«d|¦«dS| d¦«dS)NzRefactoring doctests in stdinzzNo doctest changes in stdinzNo changes in stdin) ÚsysÚstdinrör·rür~rýrþrÿr)r rÜrrrs rÚrefactor_stdinzRefactoringTool.refactor_stdinvsû€Ý” —’Ñ Ô ˆØ ð 6Ø �NŠNÐ:Ñ ;Ô ;Ð ;Ø×,Ò,¨U°IÑ>Ô>ˆFØÔ)ð >¨V°uª_¨_Ø×#Ò# F¨I°uÑ=Ô=Ð=Ð=Ð=à—’Ð<Ñ=Ô=Ð=Ð=Ð=à×'Ò'¨¨yÑ9Ô9ˆDØÔ)ð 6¨dð 6°tÔ7Gð 6Ø×#Ò#¥C¨¡I¤I¨y¸%Ñ@Ô@Ð@Ð@Ð@à—’Ð4Ñ5Ô5Ð5Ð5Ð5rcó—t|j|j¦«D]}| ||¦«Œ| |j| ¦«¦«| |j| ¦«¦«|j |  ¦«¦«}t|  ¦«¦«�rî|jj D�]¾}||v�r¶||�r­||  tjjd¬¦«|jr+||  tjj¬¦«t'||¦«D�]8}|||vr|| |¦« t+|¦«n#t,$rYŒEwxYw|jr ||jvrŒZ| |¦«}|rÇ| ||¦«}|�¯| |¦«| ¦«D]*}|jsg|_|j |¦«Œ+|j |  ¦«¦«}|D],} | |vrg|| <||  || ¦«Œ-�Œ:�ŒÀt|  ¦«¦«�°ît|j|j¦«D]}| ||¦«Œ|jS)aÏRefactors a parse tree (modifying the tree in place). For compatible patterns the bottom matcher module is used. Otherwise the tree is traversed node-to-node for matches. Args: tree: a pytree.Node instance representing the root of the tree to be refactored. name: a human-readable name for this tree. Returns: True if the tree was modified, False otherwise. T)r­Úreverser¬)rr”r•Ú start_treeÚ traverse_byržrŸr™ÚrunÚleavesÚanyr@r…r»r ÚBaseÚdepthÚkeep_line_orderÚ get_linenor;ÚremoverÚ ValueErrorÚfixers_appliedÚmatchÚ transformÚreplacerrBÚ finish_treerÿ) r rrrGÚ match_setÚnodeÚresultsÚnewÚ new_matchesÚfxrs rr zRefactoringTool.refactor_tree†s%€õ ˜4œ>¨4¬?Ñ;Ô;ð )ð )ˆEØ × Ò ˜T 4Ñ (Ô (Ð (Ð (ð ×Ò˜Ô1°4·>²>Ñ3CÔ3CÑDÔDÐDØ ×Ò˜Ô2°D·O²OÑ4EÔ4EÑFÔFÐFð”G—K’K § ¢ ¡ ¤ Ñ.Ô.ˆ å�)×"Ò"Ñ$Ô$Ñ%Ô%ñ/ LØœœð. Lñ. L�ؘIÐ%Ñ%¨)°EÔ*:Ñ%à˜eÔ$×)Ò)­f¬kÔ.?ÈÐ)ÑNÔNÐNàÔ,ðJð" %Ô(×-Ò-µ&´+Ô2HÐ-ÑIÔIÐIå $ Y¨uÔ%5Ñ 6Ô 6ð$Lñ$L˜Ø 9¨UÔ#3Ð3Ð3Ø% eÔ,×3Ò3°DÑ9Ô9Ð9ð%Ý% d™OœO˜O˜OøÝ)ð%ð%ð%ð%˜Hð%øøøð  Ô.ð%°5¸DÔð%AØ>@¨Ô(;Ø$(Ô$7×$>Ò$>¸uÑ$EÔ$EÐ$EÐ$Eð/3¬g¯kªk¸#¿*º*¹,¼,Ñ.GÔ.G  Ø+6ð!Lð!L CØ+.°)Ð+;Ð+;Ø79¨ °#©à$-¨c¤N×$9Ò$9¸+ÀcÔ:JÑ$KÔ$KÐ$KÐ$Kùùõ_�)×"Ò"Ñ$Ô$Ñ%Ô%ñ/ Lõb˜4œ>¨4¬?Ñ;Ô;ð *ð *ˆEØ × Ò ˜d DÑ )Ô )Ð )Ð )ØÔÐsÆF%Æ% F2Æ1F2cóÄ—|sdS|D]X}||jD]H}| |¦«}|r/| ||¦«}|�| |¦«|}ŒIŒYdS)aTraverse an AST, applying a set of fixers to each node. This is a helper method for refactor_tree(). Args: fixers: a list of fixer instances. traversal: a generator that yields AST nodes. Returns: None N)r,rrr)r r…Ú traversalr"rGr#r$s rrzRefactoringTool.traverse_byÕsŽ€ðð Ø ˆFØð #ð #ˆDØ ¤ Ô*ð #ð #�ØŸ+š+ dÑ+Ô+�Øð#ØŸ/š/¨$°Ñ8Ô8�CØ�ØŸ š  SÑ)Ô)Ð)Ø"˜øð  #ð #ð #rcó^—|j |¦«|€| |¦«d}|€dS||k}| ||||¦«|r| d|¦«|jsdS|r| ||||¦«dS| d|¦«dS)zR Called when a file has been refactored and there may be changes. NrzNo changes to %szNot writing changes to %s)r–rrùrÓr·r~Ú write_file)r rÐrÑrÏrÛrðrÒs rrýzRefactoringTool.processed_fileìsÖ€ð Œ ×Ò˜(Ñ#Ô#Ð#Ø Ð Ø×/Ò/°Ñ9Ô9¸!Ô<ˆHØÐØ�ؘHÒ$ˆØ ×Ò˜( H¨h¸Ñ>Ô>Ð>Ø ð Ø �NŠNÐ-¨xÑ 8Ô 8Ð 8ØÔ-ð Ø�Ø ð BØ �OŠO˜H h°¸(Ñ CÔ CÐ CÐ CÐ Cà �NŠNÐ6¸Ñ AÔ AÐ AÐ AÐ Arcó�— tj|d|d¬¦«}n/#t$r"}| d||¦«Yd}~dSd}~wwxYw|5 | |¦«n.#t$r!}| d||¦«Yd}~nd}~wwxYwddd¦«n #1swxYwY| d|¦«d|_dS) zÑWrites a string to a file. It first shows a unified diff between the old text and the new text, and then rewrites the file; the latter is only done if the write option is set. Úwr¦rïzCan't create %s: %sNzCan't write %s: %szWrote changes to %sT)rdròrórÈrÛr·r‘)r rÐrÑrÏrðÚfprøs rr*zRefactoringTool.write_filesX€ð Ý”˜ 3°À2ÐFÑFÔFˆBˆBøÝð ð ð Ø �NŠNÐ0°(¸CÑ @Ô @Ð @Ø ˆFˆFˆFˆFˆFøøøøð øøøðð Dð Dð DØ—’˜Ñ"Ô"Ð"Ð"øÝð Dð Dð DØ—’Ð3°X¸sÑCÔCÐCÐCÐCÐCÐCÐCøøøøð Døøøð Dð Dð Dñ Dô Dð Dð Dð Dð Dð Dð Døøøð Dð Dð Dð Dð �ŠÐ,¨hÑ7Ô7Ð7؈Œ ˆ ˆ sP‚› A¥AÁAÁ BÁA$Á#BÁ$ BÁ.B ÂB BÂBÂB"Â%B"z>>> z... c ó—g}d}d}d}d}| d¬¦«D�])}|dz }| ¦« |j¦«rW|�+| | ||||¦«¦«|}|g}| |j¦«} |d| …}Œ‹|�V| ||jz¦«s#|||j ¦«zdzkr|  |¦«Œã|�+| | ||||¦«¦«d}d}|  |¦«�Œ+|�+| | ||||¦«¦«d  |¦«S)aËRefactors a docstring, looking for doctests. This returns a modified version of the input string. It looks for doctests, which start with a ">>>" prompt, and may be continued with "..." prompts, as long as the "..." is indented the same as the ">>>". (Unfortunately we can't use the doctest module's parser, since, like most parsers, it is not geared towards preserving the original source.) NrT©Úkeependsrrûr¦) Ú splitlinesÚlstriprÚPS1rBÚrefactor_doctestÚfindÚPS2Úrstriprr³) r rrÑÚresultÚblockÚ block_linenoÚindentÚlinenoÚlineÚis rrüz"RefactoringTool.refactor_docstringsÎ€ðˆØˆØˆ ؈؈Ø×$Ò$¨dÐ$Ñ3Ô3ð $ñ $ˆDØ �a‰KˆFØ�{Š{‰}Œ}×'Ò'¨¬Ñ1Ô1ð $ØÐ$Ø—M’M $×"7Ò"7¸¸|Ø8>Àñ#Jô#JñKôKðKà%� ؘ�Ø—I’I˜dœhÑ'Ô'�ؘb˜q˜bœ��ØÐ$Ø—?’? 6¨D¬HÑ#4Ñ5Ô5ð%à˜6 D¤H§O¢OÑ$5Ô$5Ñ5¸Ñ<Ò<Ð<Ø— ’ ˜TÑ"Ô"Ð"Ð"àÐ$Ø—M’M $×"7Ò"7¸¸|Ø8>Àñ#Jô#JñKôKðKà�Ø�Ø— ’ ˜dÑ#Ô#Ð#Ñ#Ø Ð Ø �MŠM˜$×/Ò/°°|Ø06¸ñBôBñ Cô Cð Cà�wŠw�v‰ŒÐrc󾇇— ‰ ||‰¦«}nŽ#t$r�}‰j tj¦«r.|D]+}‰ d| d¦«¦«Œ,‰ d|||j j |¦«|cYd}~Sd}~wwxYw‰  ||¦«r�t|¦«  d¬¦«}|d|dz …||dz d…}} |d d¦«s|dxxdz cc<‰‰jz| d ¦«zg}|r|ˆˆfd „|D¦«z }|S) zÞRefactors one doctest. A doctest is given as a block of lines, the first of which starts with ">>>" (possibly indented), while the remaining lines start with "..." (identically indented). z Source: %srûz+Can't parse docstring in %s line %s: %s: %sNTr/rr¤rcó*•—g|]}‰‰jz|z‘ŒSr&)r6)rOr=r;r s €€rrRz4RefactoringTool.refactor_doctest..^s%ø€ÐCÐCÐC°t˜& 4¤8Ñ+¨dÑ2ÐCÐCÐCr)Ú parse_blockr3r„Ú isEnabledForrŽÚDEBUGr·r7rÈrr#r rr1Úendswithr3Úpop) r r9r<r;rÑrrør=r$Úclippeds ` ` rr4z RefactoringTool.refactor_doctestDsžøø€ð Ø×#Ò# E¨6°6Ñ:Ô:ˆDˆDøÝð ð ð ØŒ{×'Ò'­¬ Ñ6Ô6ð DØ!ðDðD�DØ—N’N <°·²¸TÑ1BÔ1BÑCÔCÐCÐCØ �NŠNÐHØ# V¨S¬]Ô-CÀSñ Jô Jð JàˆLˆLˆLˆLˆLˆLøøøøð  øøøð × Ò ˜d HÑ -Ô -ð DÝ�d‘)”)×&Ò&°Ð&Ñ5Ô5ˆCà˜y  q¡˜yœ>¨3¨v°a©x¨y¨y¬>�SˆGà�r”7×#Ò# DÑ)Ô)ð Ø�B��”˜4‘��‘ؘdœhÑ&¨¯ª°©¬Ñ3Ð4ˆEØð DØÐCÐCÐCÐCÐC¸sÐCÑCÔCÑC�؈ s„œ B'¦A6B"ÂB'Â"B'có6—|jrd}nd}|js| d|¦«n5| d|¦«|jD]}| |¦«Œ|jr4| d¦«|jD]}| |¦«Œ|jrut |j¦«dkr| d¦«n(| dt |j¦«¦«|jD]\}}}|j|g|¢Ri|¤ŽŒdSdS) NÚwerez need to bezNo files %s modified.zFiles that %s modified:z$Warnings/messages while refactoring:rzThere was 1 error:zThere were %d errors:)r‘r–r¶r�r�r°)r rHÚfileÚmessagerÅrÆrÇs rÚ summarizezRefactoringTool.summarizeask€Ø Œ:ð ØˆDˆDàˆDØŒzð 'Ø × Ò Ð4°dÑ ;Ô ;Ð ;Ð ;à × Ò Ð6¸Ñ =Ô =Ð =Øœ ð 'ð '�Ø× Ò  Ñ&Ô&Ð&Ð&Ø Œ>ð *Ø × Ò ÐCÑ DÔ DÐ DØœ>ð *ð *�Ø× Ò  Ñ)Ô)Ð)Ð)Ø Œ;ð 5Ý�4”;ÑÔ 1Ò$Ð$Ø× Ò Ð!5Ñ6Ô6Ð6Ð6à× Ò Ð!8½#¸d¼kÑ:JÔ:JÑKÔKÐKØ#'¤;ð 5ð 5‘��T˜4Ø �Ô  Ð4 tÐ4Ð4Ð4¨tÐ4Ð4Ð4Ð4ð  5ð 5ð  5ð 5rcóŠ—|j | |||¦«¦«}t¦«|_|S)z³Parses a block into a tree. This is necessary to get correct line number / offset information in the parser diagnostics and embedded into the parse tree. )rÚ parse_tokensÚ wrap_toksrgr)r r9r<r;rs rrAzRefactoringTool.parse_blockxs:€ð Œ{×'Ò'¨¯ª°u¸fÀfÑ(MÔ(MÑNÔNˆÝ(™{œ{ˆÔ؈ rc#óÀK—tj| ||¦«j¦«}|D]+\}}\}}\} } } ||dz z }| |dz z } ||||f| | f| fV—Œ,dS)z;Wraps a tokenize stream to systematically modify start/end.rN)rrcÚ gen_linesÚ__next__) r r9r<r;rAr,ruÚline0Úcol0Úline1Úcol1Ú line_texts rrNzRefactoringTool.wrap_toks‚s—èè€åÔ)¨$¯.ª.¸ÀÑ*GÔ*GÔ*PÑQÔQˆØDJð Gð GÑ @ˆD�%™˜% © ¨°°yØ �V˜a‘ZÑ ˆEØ �V˜a‘ZÑ ˆEð ˜  t˜}¨u°d¨m¸YÐFÐ FÐ FÐ FÐ Fð Gð Grc#óK—||jz}||jz}|}|D]h}| |¦«r|t|¦«d…V—n5|| ¦«dzkrdV—nt d|›d|›�¦«‚|}Œi dV—Œ)z–Generates lines as expected by tokenize from a list of lines. This strips the first len(indent + self.PS1) characters off each line. Nrûzline=z , prefix=Tr¦)r3r6rr°r7ÚAssertionError)r r9r;Úprefix1Úprefix2Úprefixr=s rrPzRefactoringTool.gen_lines�s¿èè€ð ˜4œ8Ñ#ˆØ˜4œ8Ñ#ˆØˆØð ð ˆDØ�Š˜vÑ&Ô&ð LØ�3˜v™;œ;˜<˜<Ô(Ð(Ð(Ð(Ð(ؘŸš™œ¨4Ñ/Ò/Ð/Ø� � � � å$�n¸T¸T¸TÀ6À6Ð%JÑKÔKÐK؈FˆFð ØˆHˆHˆHð rrî)FF)F)NFNrU)r#r$r%r‡r²r¯r¢r“rÈr¶r·rÓrÞrØrùrÙrþrr rrýr*r3r6rür4rKrArNrPr&rrr{r{›sÓ€€€€€à+0Ø).Ø27ð9ð9Ðð€LØ€Kð3Lð3Lð3Lð3Lðn&5ð&5ð&5ðPðððððð ððð  ð ð ð FðFðFðFðLðLðLðLð(&ð&ð&ð =ð=ð=ð=ð.ððð66ð6ð6ð6ð M ðM ðM ð^#ð#ð#ð.GLØ $ðBðBðBðBð*ðððð* €CØ €Cð)ð)ð)ðVððð:5ð5ð5ð.ððð Gð Gð Gðððððrr{có—eZdZdS)ÚMultiprocessingUnsupportedNr"r&rrr]r]¤r'rr]cóB‡—eZdZˆfd„Z dˆfd„ Zˆfd„Zˆfd„ZˆxZS)ÚMultiprocessRefactoringToolcód•—tt|¦«j|i|¤Žd|_d|_dSrU)Úsuperr_r¢ÚqueueÚ output_lock©r rÆÚkwargsrs €rr¢z$MultiprocessRefactoringTool.__init__ªs;ø€Ø9�Õ)¨4Ñ0Ô0Ô9¸4ÐJÀ6ÐJÐJÐJ؈Œ ؈ÔÐÐrFrcóà•‡‡—|dkr*tt‰¦« |||¦«S ddlŠn#t$rt ‚wxYw‰j�td¦«‚‰ ¦«‰_‰  ¦«‰_ ˆˆfd„t|¦«D¦«} |D]}|  ¦«Œtt‰¦« |||¦«‰j  ¦«t|¦«D]}‰j d¦«Œ|D]*}| ¦«r|  ¦«Œ+d‰_dS#‰j  ¦«t|¦«D]}‰j d¦«Œ|D]*}| ¦«r|  ¦«Œ+d‰_wxYw)Nrrz already doing multiple processescóF•—g|]}‰ ‰j¬¦«‘ŒS))Útarget)ÚProcessÚ_child)rOr>Úmultiprocessingr s €€rrRz8MultiprocessRefactoringTool.refactor..¼s<ø€ð4ð4ð4Øð%×,Ò,°D´KÐ,Ñ@Ô@ð4ð4ð4r)rar_rÞrkÚ ImportErrorr]rbÚ RuntimeErrorÚ JoinableQueueÚLockrcÚrangeÚstartr³ÚputÚis_alive) r rÚrÛrÜÚ num_processesÚ processesr6r>rkrs ` @€rrÞz$MultiprocessRefactoringTool.refactor¯s/øøø€à ˜AÒ Ð ÝÕ4°dÑ;Ô;×DÒDØ�u˜mñ-ô-ð -ð -Ø "Ð "Ð "Ð "Ð "øÝð -ð -ð -Ý,Ð ,ð -øøøà Œ:Ð !ÝÐAÑBÔBÐ BØ$×2Ò2Ñ4Ô4ˆŒ Ø*×/Ò/Ñ1Ô1ˆÔð4ð4ð4ð4ð4Ý# MÑ2Ô2ð4ñ4ô4ˆ ð Øð ð �Ø—’‘ ” � � Ý Õ-¨tÑ 4Ô 4× =Ò =¸eÀUØ>Kñ Mô Mð Mð ŒJ�OŠOÑ Ô Ð Ý˜=Ñ)Ô)ð %ð %�Ø” —’˜tÑ$Ô$Ð$Ð$Øð ð �Ø—:’:‘<”<ðØ—F’F‘H”H�HøØˆDŒJˆJˆJøð ŒJ�OŠOÑ Ô Ð Ý˜=Ñ)Ô)ð %ð %�Ø” —’˜tÑ$Ô$Ð$Ð$Øð ð �Ø—:’:‘<”<ðØ—F’F‘H”H�HøØˆDŒJÐ Ð Ð Ð sµ:ºA Â4AE2Å2A;G-có4•—|j ¦«}|�{|\}} tt|¦«j|i|¤Ž|j ¦«n#|j ¦«wxYw|j ¦«}|­ydSdSrU)rbrŒrar_rÙÚ task_done)r ÚtaskrÆrers €rrjz"MultiprocessRefactoringTool._childÌs­ø€ØŒz�~Š~ÑÔˆØÐ؉LˆD�&ð 'ØF•Õ1°4Ñ8Ô8ÔFØð%Ø#ð%ð%ð%ð” ×$Ò$Ñ&Ô&Ð&Ð&ø�” ×$Ò$Ñ&Ô&Ð&Ð&øøøØ”:—>’>Ñ#Ô#ˆDðÐÐÐÐÐs £ AÁA8cóŽ•—|j�|j ||f¦«dStt|¦«j|i|¤ŽSrU)rbrrrar_rÙrds €rrÙz)MultiprocessRefactoringTool.refactor_file×sVø€Ø Œ:Ð !Ø ŒJ�NŠN˜D &˜>Ñ *Ô *Ð *Ð *Ð *àI•5Õ4°dÑ;Ô;ÔIØð!Øð!ð!ð !r)FFr)r#r$r%r¢rÞrjrÙÚ __classcell__)rs@rr_r_¨s�ø€€€€€ð ð ð ð ð ð :?Ø ððððððð: $ð $ð $ð $ð $ð!ð!ð!ð!ð!ð!ð!ð!ð!rr_)T)#ryÚ __author__rdrÕrr rŽr¹r9Ú itertoolsrÚpgen2rrrÚ fixer_utilrr¦r r r r—rr3r!r/rJrSrWrvrxÚobjectr{r]r_r&rrúr€sðððð3€ ð € € € Ø € € € Ø€€€Ø € € € Ø€€€Ø€€€ØÐÐÐØÐÐÐÐÐð+Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ø!Ð!Ð!Ð!Ð!Ð!ØÐÐÐÐÐÐÐØÐÐÐÐÐð ð ð ð ð ð ð ð ð �ñ ô ð ðCðCðCð8ððð2@ð@ð@ðððð%ð%ð%ðP'ð'ð'ð'ð'�ñ'ô'ð'ðFðFðFðFðF�fñFôFðFðR ð ð ð ð  ñ ô ð ð4!ð4!ð4!ð4!ð4! /ñ4!ô4!ð4!ð4!ð4!r