£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
a
    XC?hsk                     @   s
  d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZmZmZ ddlmZ ddlmZmZ ddlmZ d d
dZG dd deZdd Zdd Zdd Zdd Zdd ZG dd deZG dd deZG dd deZ G dd deZ!dS )!z#Guido van Rossum <guido@python.org>    N)chain   )drivertokenizetoken)	find_root)pytreepygram)btm_matcherTc                 C   sT   t | g g dg}g }t|jD ].\}}}|dr |rD|dd  }|| q |S )N*fix_   )
__import__pkgutilZiter_modules__path__
startswithappend)Z	fixer_pkgZremove_prefixZpkgZ	fix_namesfindernameZispkg r   5/opt/alt/python39/lib64/python3.9/lib2to3/refactor.pyget_all_fix_names   s    
r   c                   @   s   e Zd ZdS )
_EveryNodeN__name__
__module____qualname__r   r   r   r   r   +   s   r   c                 C   s   t | tjtjfr(| jd u r t| jhS t | tjrH| jrDt| jS tt | tj	rt
 }| jD ]}|D ]}|t| qhq`|S td|  d S )Nz$Oh no! I don't understand pattern %s)
isinstancer   ZNodePatternZLeafPatterntyper   ZNegatedPatternZcontent_get_head_typesZWildcardPatternsetupdate	Exception)Zpatrpxr   r   r   r   /   s    


r   c              	   C   s   t t}g }| D ]v}|jrbzt|j}W n tyF   || Y q0 |D ]}|| | qLq|jd ur~||j | q|| qtt	j
j t	j
jD ]}|| | qt|S N)collectionsdefaultdictlistpatternr   r   r   Z_accept_typer   r	   python_grammarZsymbol2numbervaluestokensextenddict)Z
fixer_listZ
head_nodesZeveryfixerZheadsZ	node_typer   r   r   _get_headnode_dictK   s$    

r1   c                    s    fddt  dD S )Nc                    s   g | ]} d  | qS .r   ).0fix_nameZpkg_namer   r   
<listcomp>h   s   z+get_fixers_from_package.<locals>.<listcomp>F)r   r6   r   r6   r   get_fixers_from_packaged   s    
r8   c                 C   s   | S r&   r   )objr   r   r   	_identityk   s    r:   c                    sV  d}t t| j  fdd}ttjt jtj	h}t
 }z| \}}||v rTq>q>|tjkrl|rfq6d}q>|tjkr6|dkr6| \}}|tjks|dkrq6| \}}|tjks|dkrq6| \}}|tjkr|dkr| \}}|tjkr4|| | \}}|tjks.|d	kr"q4| \}}qq>q6q>W n tyL   Y n0 t|S )
NFc                     s   t  } | d | d fS )Nr   r   )next)tokgenr   r   advancer   s    z(_detect_future_features.<locals>.advanceTfromZ
__future__import(,)r   generate_tokensioStringIOreadline	frozensetr   NEWLINENLCOMMENTr    STRINGNAMEOPaddStopIteration)sourceZhave_docstringr?   ignorefeaturestpvaluer   r=   r   _detect_future_featureso   sB    








rV   c                   @   s   e Zd ZdS )
FixerErrorNr   r   r   r   r   rW      s   rW   c                   @   s   e Zd ZddddZdZdZd4ddZdd	 Zd
d Zdd Z	dd Z
dd Zd5ddZd6ddZdd Zd7ddZdd Zd8ddZdd Zd d! Zd9d"d#Zd:d$d%Zd&Zd'Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 ZdS );RefactoringToolF)print_functionexec_functionwrite_unchanged_filesZFixr   Nc                 C   sJ  || _ |pg | _| j | _|d ur0| j| tj | _| jd rR| jj	d= n| jd rf| jj	d= | j
d| _g | _td| _g | _d| _tj| jtj| jd| _|  \| _| _g | _t | _g | _g | _t| j| jD ]H}|j r| j!| q|| jv r| j"| q|| jv r| j"| qt#| j| _$t#| j| _%d S )	NrY   printrZ   execr[   rX   F)convertlogger)&fixersexplicit_default_optionscopyoptionsr!   r	   r+   grammarkeywordsgetr[   errorsloggingZ	getLoggerr_   	fixer_logwroter   ZDriverr   r^   
get_fixers	pre_order
post_orderfilesbmZBottomMatcherBMZbmi_pre_orderZbmi_post_orderr   ZBM_compatibleZ	add_fixerr   r1   bmi_pre_order_headsbmi_post_order_heads)selfZfixer_namesrd   ra   r0   r   r   r   __init__   sB    





zRefactoringTool.__init__c              	   C   sV  g }g }| j D ]}t|i i dg}|ddd }|| jrR|t| jd  }|d}| jddd |D  }zt	||}W n$ t
y   td	||f d Y n0 || j| j}	|	jr| jd
ur|| jvr| d| q| d| |	jdkr||	 q|	jdkr||	 qtd|	j qtd}
|j|
d |j|
d ||fS )Nr   r3   r   _ c                 S   s   g | ]}|  qS r   )title)r4   r$   r   r   r   r7          z.RefactoringTool.get_fixers.<locals>.<listcomp>zCan't find %s.%sTzSkipping optional fixer: %szAdding transformation: %sZpreZpostzIllegal fixer order: %rZ	run_orderkey)r`   r   rsplitr   FILE_PREFIXlensplitCLASS_PREFIXjoingetattrAttributeErrorrW   rd   rj   ra   log_message	log_debugorderr   operator
attrgettersort)rt   Zpre_order_fixersZpost_order_fixersZfix_mod_pathmodr5   parts
class_nameZ	fix_classr0   Zkey_funcr   r   r   rl      s:    

zRefactoringTool.get_fixersc                  O   s    d S r&   r   )rt   msgargskwdsr   r   r   	log_error  s    zRefactoringTool.log_errorc                 G   s   |r|| }| j | d S r&   )r_   infort   r   r   r   r   r   r     s    zRefactoringTool.log_messagec                 G   s   |r|| }| j | d S r&   )r_   debugr   r   r   r   r     s    zRefactoringTool.log_debugc                 C   s   d S r&   r   )rt   old_textnew_textfilenameequalr   r   r   print_output  s    zRefactoringTool.print_outputc                 C   s8   |D ].}t j|r$| ||| q| ||| qd S r&   )ospathisdirrefactor_dirrefactor_file)rt   itemswritedoctests_onlyZdir_or_filer   r   r   refactor  s    zRefactoringTool.refactorc           
      C   s   t jd }t |D ]\}}}| d| |  |  |D ]>}|ds>t j|d |kr>t j||}	| 	|	|| q>dd |D |d d < qd S )NpyzDescending into %sr3   r   c                 S   s   g | ]}| d s|qS r2   )r   )r4   Zdnr   r   r   r7   2  rz   z0RefactoringTool.refactor_dir.<locals>.<listcomp>)
r   extsepwalkr   r   r   r   splitextr   r   )
rt   Zdir_namer   r   Zpy_extdirpathZdirnames	filenamesr   fullnamer   r   r   r      s    

zRefactoringTool.refactor_dirc              
   C   s   zt |d}W n4 tyB } z| d|| W Y d }~dS d }~0 0 zt|jd }W |  n
|  0 tj |d|dd}| |fW  d    S 1 s0    Y  d S )NrbzCan't open %s: %s)NNr   r#   rx   encodingnewline)	openOSErrorr   r   detect_encodingrG   closerE   read)rt   r   ferrr   r   r   r   _read_python_source4  s    z#RefactoringTool._read_python_sourcec                 C   s   |  |\}}|d u rd S |d7 }|rn| d| | ||}| jsL||kr`| ||||| q| d| nH| ||}| js|r|jr| jt|d d |||d n| d| d S )N
zRefactoring doctests in %szNo doctest changes in %srv   )r   r   zNo changes in %s)r   r   refactor_docstringr[   processed_filerefactor_stringwas_changedstr)rt   r   r   r   inputr   outputtreer   r   r   r   D  s     zRefactoringTool.refactor_filec              
   C   s   t |}d|v rtj| j_zfz| j|}W nF tyr } z.| d||jj	| W Y d }~W | j| j_d S d }~0 0 W | j| j_n| j| j_0 ||_
| d| | || |S )NrY   zCan't parse %s: %s: %szRefactoring %s)rV   r	   Z!python_grammar_no_print_statementr   re   Zparse_stringr"   r   	__class__r   future_featuresr   refactor_tree)rt   datar   rS   r   r   r   r   r   r   [  s"    


zRefactoringTool.refactor_stringc                 C   s   t j }|rN| d | |d}| js2||krB| |d| q| d n:| |d}| jsj|r~|jr~| t	|d| n
| d d S )NzRefactoring doctests in stdinz<stdin>zNo doctest changes in stdinzNo changes in stdin)
sysstdinr   r   r   r[   r   r   r   r   )rt   r   r   r   r   r   r   r   refactor_stdinv  s    

zRefactoringTool.refactor_stdinc           
   
   C   s  t | j| jD ]}||| q| | j|  | | j|  | j|	 }t
| r| jjD ]B}||v rj|| rj|| jtjjdd |jr|| jtjjd t|| D ]}||| v r|| | zt| W n t y   Y qY n0 |jr||jv rq||}|r|||}|d ur|| | D ] }|js\g |_|j| qJ| j|	 }|D ]*}	|	|vrg ||	< ||	 ||	  qqqjqTt | j| jD ]}||| q|jS )NT)r|   reverser{   )r   rm   rn   Z
start_treetraverse_byrr   rs   rq   runZleavesanyr,   r`   r   r   ZBaseZdepthZkeep_line_orderZ
get_linenor)   remover   
ValueErrorZfixers_appliedmatch	transformreplacer   r.   Zfinish_treer   )
rt   r   r   r0   Z	match_setnoderesultsnewZnew_matchesZfxrr   r   r   r     sJ    



zRefactoringTool.refactor_treec                 C   sV   |sd S |D ]D}||j  D ]4}||}|r|||}|d ur|| |}qqd S r&   )r   r   r   r   )rt   r`   Z	traversalr   r0   r   r   r   r   r   r     s    

zRefactoringTool.traverse_byc                 C   s   | j | |d u r.| |d }|d u r.d S ||k}| |||| |r`| d| | js`d S |rv| |||| n| d| d S )Nr   zNo changes to %szNot writing changes to %s)ro   r   r   r   r   r[   
write_file)rt   r   r   r   r   r   r   r   r   r   r     s    zRefactoringTool.processed_filec                 C   s   zt j|d|dd}W n4 tyJ } z| d|| W Y d }~d S d }~0 0 |R z|| W n2 ty } z| d|| W Y d }~n
d }~0 0 W d    n1 s0    Y  | d| d| _d S )Nwrx   r   zCan't create %s: %szCan't write %s: %szWrote changes to %sT)rE   r   r   r   r   r   rk   )rt   r   r   r   r   fpr   r   r   r   r     s    BzRefactoringTool.write_filez>>> z... c           
   	   C   s  g }d }d }d }d}|j ddD ]}|d7 }| | jr~|d urZ|| |||| |}|g}|| j}	|d |	 }q |d ur||| j s||| j  d kr|	| q |d ur|| |||| d }d }|	| q |d ur
|| |||| d
|S )Nr   Tkeependsr   r   rx   )
splitlineslstripr   PS1r.   refactor_doctestfindPS2rstripr   r   )
rt   r   r   resultblockZblock_linenoindentlinenolineir   r   r   r     sD    
z"RefactoringTool.refactor_docstringc           
   
      s  z || }W nh tyz } zPjtjrL|D ]}d|d q4d|||j	j
| |W  Y d }~S d }~0 0 ||rt|jdd}|d |d  ||d d   }	}|d ds|d  d7  <  j |d g}|r| fd	d
|D 7 }|S )Nz
Source: %sr   z+Can't parse docstring in %s line %s: %s: %sTr   r   rv   r   c                    s   g | ]} j  | qS r   )r   )r4   r   r   rt   r   r   r7   ^  rz   z4RefactoringTool.refactor_doctest.<locals>.<listcomp>)parse_blockr"   r_   ZisEnabledForri   DEBUGr   r   r   r   r   r   r   r   endswithr   pop)
rt   r   r   r   r   r   r   r   r   Zclippedr   r   r   r   D  s&    "z RefactoringTool.refactor_doctestc                 C   s   | j rd}nd}| js$| d| n"| d| | jD ]}| | q6| jrl| d | jD ]}| | q\| jrt| jdkr| d n| dt| j | jD ]"\}}}| j|g|R i | qd S )	Nwerez
need to bezNo files %s modified.zFiles that %s modified:z$Warnings/messages while refactoring:r   zThere was 1 error:zThere were %d errors:)rk   ro   r   rj   rh   r   )rt   r   filemessager   r   r   r   r   r   	summarizea  s$    


zRefactoringTool.summarizec                 C   s"   | j | |||}t |_|S r&   )r   Zparse_tokens	wrap_toksrH   r   )rt   r   r   r   r   r   r   r   r   x  s    zRefactoringTool.parse_blockc                 c   sd   t | ||j}|D ]F\}}\}}\}	}
}||d 7 }|	|d 7 }	||||f|	|
f|fV  qd S )Nr   )r   rD   	gen_lines__next__)rt   r   r   r   r-   r   rU   Zline0Zcol0Zline1Zcol1Z	line_textr   r   r   r     s
    zRefactoringTool.wrap_toksc                 c   sx   || j  }|| j }|}|D ]N}||r>|t|d  V  n(|| d krVdV  ntd||f |}qdV  qld S )Nr   zline=%r, prefix=%rrx   )r   r   r   r   r   AssertionError)rt   r   r   prefix1Zprefix2prefixr   r   r   r   r     s    


zRefactoringTool.gen_lines)NN)FF)FF)FF)F)NFN)N)r   r   r   rb   r   r~   ru   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rX      s@   
7(
	


O  

+
rX   c                   @   s   e Zd ZdS )MultiprocessingUnsupportedNr   r   r   r   r   r     s   r   c                       sB   e Zd Z fddZd fdd	Z fddZ fd	d
Z  ZS )MultiprocessRefactoringToolc                    s&   t t| j|i | d | _d | _d S r&   )superr   ru   queueoutput_lockrt   r   kwargsr   r   r   ru     s    z$MultiprocessRefactoringTool.__init__Fr   c              
      s>  |dkrt t|||S zdd l W n ty>   tY n0 jd urRtd  _ 	 _
 fddt|D }zn|D ]}|  qt t||| W j  t|D ]}jd  q|D ]}| r|  qd _nLj  t|D ]}jd  q |D ]}| r|  qd _0 d S )Nr   r   z already doing multiple processesc                    s   g | ]} j jd qS ))target)ZProcess_child)r4   r   multiprocessingrt   r   r   r7     s   z8MultiprocessRefactoringTool.refactor.<locals>.<listcomp>)r   r   r   r   ImportErrorr   r   RuntimeErrorZJoinableQueueZLockr   rangestartr   putZis_alive)rt   r   r   r   Znum_processesZ	processesr$   r   r   r   r   r     sF    









z$MultiprocessRefactoringTool.refactorc                    s\   | j  }|d urX|\}}z$tt| j|i | W | j   n| j   0 | j  }q
d S r&   )r   rg   r   r   r   Z	task_done)rt   Ztaskr   r   r   r   r   r     s    

z"MultiprocessRefactoringTool._childc                    s6   | j d ur| j ||f ntt| j|i |S d S r&   )r   r  r   r   r   r   r   r   r   r     s    

z)MultiprocessRefactoringTool.refactor_file)FFr   )r   r   r   ru   r   r   r   __classcell__r   r   r   r   r     s     r   )T)"
__author__rE   r   r   r   ri   r   r'   	itertoolsr   Zpgen2r   r   r   Z
fixer_utilr   rx   r   r	   r
   rp   r   r"   r   r   r1   r8   r:   rV   rW   objectrX   r   r   r   r   r   r   <module>   s6   
(    