3 \�&�@sxddlmZddlmZmZddlmZmZeZeZ ej Z eZ dZ dZdZGdd�de�Zdd d �Zd d �Zd d�ZdS)�)�pytree)�grammar�token)�pattern_symbols�python_symbols��c@s6eZdZd dd�Zdd�Zdd�Zdd �Zd d �ZdS) �MinNodeNcCs.||_||_g|_d|_d|_g|_g|_dS)NF)�type�name�children�leaf�parent� alternatives�group)�selfr r �r�)/usr/lib64/python3.6/lib2to3/btm_utils.py�__init__szMinNode.__init__cCst|j�dt|j�S)N� )�strr r )rrrr�__repr__szMinNode.__repr__cCs�|}g}x�|r�|jtkr`|jj|�t|j�t|j�krTt|j�g}g|_|j}q n |j}d}P|jtkr�|j j|�t|j �t|j�kr�t |j �}g|_ |j}q n |j}d}P|jt j kr�|j r�|j|j �n |j|j�|j}q W|S)N)r �TYPE_ALTERNATIVESr�append�lenr �tupler� TYPE_GROUPr�get_characteristic_subpattern� token_labels�NAMEr )r�node�subprrr� leaf_to_root!s8        zMinNode.leaf_to_rootcCs&x |j�D]}|j�}|r |Sq WdS)N)�leavesr")r�lr!rrr�get_linear_subpatternKszMinNode.get_linear_subpatternccs.x|jD]}|j�EdHqW|js*|VdS)N)r r#)r�childrrrr#`s zMinNode.leaves)NN)�__name__� __module__� __qualname__rrr"r%r#rrrrr s  *r Nc Cs�d}|jtjkr|jd}|jtjkr�t|j�dkrFt|jd|�}nJttd�}x>|jD]4}|jj |�drnqXt||�}|dk rX|jj |�qXW�n|jtj k�rt|j�dkr�tt d�}x(|jD]}t||�}|r�|jj |�q�W|js�d}nt|jd|�}�n�|jtj k�r�t|jdtj��rH|jdjdk�rHt|jd|�St|jdtj��rn|jdjdk�s�t|j�dk�r�t|jdd��r�|jdjdk�r�dSd}d}d}d }d} d } xn|jD]d}|jtjk�r�d }|}n*|jtjk�r�d}|} n|jtjk�r |}t|d��r�|jd k�r�d} �q�W| �rb|jd} t| d��rl| jdk�rl|jd } n |jd} | jtjk�r�| jd k�r�ttd�}n4tt| j��r�ttt| j�d�}nttt| j�d�}n\| jtjk�r | jjd �} | tk�r�tt| d�}nttj| d�}n| jtjk�r$t||�}|�rZ| jdjdk�rBd}n| jdjdk�rVnt�|�r�|dk �r�x8|jdd�D]&}t||�}|dk �rz|jj |��qzW|�r�||_|S)N�r)r r�(�[�valueTF�=r�any�')r r �*�+�����)r �symsZMatcherr Z Alternativesr� reduce_treer r�indexrZ AlternativerZUnit� isinstancerZLeafr-�hasattrZDetailsZRepeaterrr�TYPE_ANY�getattr�pysyms�STRING�strip�tokens�NotImplementedErrorr) r rZnew_noder&Zreducedr Z details_nodeZalternatives_nodeZ has_repeaterZ repeater_nodeZhas_variable_nameZ name_leafr rrrr5gs�                     r5cs�t|t�s|St|�dkr"|dSg}g}dddddg�g}d�xl|D]d}tt|d d ���rFtt|�fd d ���r~|j|�qFtt|�fd d ���r�|j|�qF|j|�qFW|r�|}n|r�|}n|r�|}t|td �S)Nrr*�in�for�if�not�Nonez[]().,:cSs t|�tkS)N)r r)�xrrr��sz/get_characteristic_subpattern..cst|t�o|�kS)N)r7r)rE)� common_charsrrrFscst|t�o|�kS)N)r7r)rE)� common_namesrrrFs)�key)r7�listrr/�rec_testr�max)Z subpatternsZsubpatterns_with_namesZsubpatterns_with_common_namesZsubpatterns_with_common_chars� subpatternr)rGrHrr�s2     rccs<x6|D].}t|ttf�r*t||�EdHq||�VqWdS)N)r7rJrrK)ZsequenceZ test_funcrErrrrKs rKr3����������)N)�rZpgen2rrZpygramrrr4r;Zopmapr>rr9rr�objectr r5rrKrrrr�s W %