U
e5d� � @ sh d Z ddlZddlZddlmZ ddlmZ ddlmZ G dd� de �Z
G d d
� d
e �Zi add� Z
dS )
z+George Boutsioukis � N)�defaultdict� )�pytree)�reduce_treec @ s e Zd Ze�� Zdd� ZdS )�BMNodec C s" i | _ g | _ttj�| _d| _d S )N� )�transition_table�fixers�nextr �count�id�content��self� r �+/usr/lib64/python3.8/lib2to3/btm_matcher.py�__init__ s zBMNode.__init__N)�__name__�
__module__�__qualname__� itertoolsr r r r r r r s r c @ s4 e Zd Zdd� Zdd� Zdd� Zdd� Zd d
� ZdS )�
BottomMatcherc C s0 t � | _t� | _| jg| _g | _t�d�| _d S )NZRefactoringTool) �set�matchr �rootZnodesr �loggingZ getLoggerZloggerr r r r r s
zBottomMatcher.__init__c C sH | j �|� t|j�}|�� }| j|| jd�}|D ]}|j �|� q2d S )N��start)r �appendr Zpattern_treeZget_linear_subpattern�addr )r �fixerZtreeZlinear�match_nodesZ
match_noder r r � add_fixer% s
zBottomMatcher.add_fixerc C s� |s
|gS t |d t�r`g }|d D ]6}| j||d�}|D ]}|�| �|dd � |�� q:q$|S |d |jkr�t� }||j|d <