o
     JAf&                     @   sz   	 d dl mZ d dlmZmZ d dlmZmZ eZeZ	ej
ZeZdZdZdZG dd deZdd
dZdd Zdd Zd	S )   )pytree)grammartoken)pattern_symbolspython_symbolsc                   @   s8   e Zd Z	 dddZdd Zdd Zdd	 Zd
d ZdS )MinNodeNc                 C   s.   || _ || _g | _d| _d | _g | _g | _d S )NF)typenamechildrenleafparentalternativesgroup)selfr   r    r   (/usr/lib/python3.10/lib2to3/btm_utils.py__init__   s   
zMinNode.__init__c                 C   s   t | jd t | j S )N )strr   r   )r   r   r   r   __repr__   s   zMinNode.__repr__c                 C   s   	 | }g }|ru|j tkr1|j| t|jt|jkr)t|jg}g |_|j}q|j}d }	 |S |j tkrZ|j	| t|j	t|jkrRt
|j	}g |_	|j}q|j}d }	 |S |j tjkrj|jrj||j n||j  |j}|s|S N)r   TYPE_ALTERNATIVESr   appendlenr   tupler   
TYPE_GROUPr   get_characteristic_subpatterntoken_labelsNAMEr   )r   nodesubpr   r   r   leaf_to_root!   s@   


	"zMinNode.leaf_to_rootc                 C   s(   	 |   D ]}| }|r|  S qd S r   )leavesr$   )r   lr#   r   r   r   get_linear_subpatternK   s   zMinNode.get_linear_subpatternc                 c   s2    	 | j D ]	}| E d H  q| j s| V  d S d S r   )r   r%   )r   childr   r   r   r%   `   s   

zMinNode.leaves)NN)__name__
__module____qualname__r   r   r$   r'   r%   r   r   r   r   r
      s    
	*r
   Nc                 C   s  	 d }| j tjkr| jd } | j tjkrJt| jdkr%t| jd |}nttd}| jD ]}| j	|d r8q-t||}|d urG|j
| q-nw| j tjkrt| jdkrvttd}| jD ]}t||}|rn|j
| q_|jstd }nKt| jd |}nA| j tjkrt| jd tjr| jd jdkrt| jd |S t| jd tjr| jd jdkst| jdkrt| jd dr| jd jdkrd S d}d }d }d	}d }	d	}
| jD ].}|j tjkrd	}|}n|j tjkrd}|}	n|j tjkr|}t|dr|jd
krd}
q|
r"| jd }t|dr!|jdkr!| jd }n| jd }|j tjkrU|jdkr:ttd}nItt|jrKttt|jd}n8ttt|jd}n.|j tjkrw|jd}|tv rott| d}nttj|d}n|j tjkrt||}|r|	jd jdkrd }n|	jd jdkrnt|r|d ur|jdd D ]}t||}|d ur|j
| q|r||_|S )N       )r   r   ([valueTF=   any')r   r   *+r   )r   symsZMatcherr   ZAlternativesr   reduce_treer
   r   indexr   ZAlternativer   ZUnit
isinstancer   ZLeafr0   hasattrZDetailsZRepeaterr    r!   TYPE_ANYgetattrpysymsSTRINGstriptokensNotImplementedErrorr   )r"   r   Znew_noder(   Zreducedr   Zdetails_nodeZalternatives_nodeZhas_repeaterZrepeater_nodeZhas_variable_nameZ	name_leafr   r   r   r   r8   g   s   














r8   c                    s   	 t | ts| S t| dkr| d S g }g }g dg }d | D ]2}tt|dd rRtt| fddr<|| q tt|fddrM|| q || q |rX|} n	|r]|} n|ra|} t| td	S )
Nr   r,   )inforifnotNonez[]().,:c                 S   s   t | tu S r   )r   r   xr   r   r   <lambda>   s    z/get_characteristic_subpattern.<locals>.<lambda>c                       t | to|  v S r   r:   r   rH   )common_charsr   r   rJ          c                    rK   r   rL   rH   )common_namesr   r   rJ     rN   )key)r:   listr   r3   rec_testr   max)ZsubpatternsZsubpatterns_with_namesZsubpatterns_with_common_namesZsubpatterns_with_common_chars
subpatternr   )rM   rO   r   r      s:   



r   c                 c   s<    	 | D ]}t |ttfrt||E d H  q||V  qd S r   )r:   rQ   r   rR   )ZsequenceZ	test_funcrI   r   r   r   rR     s   rR   r   ) r   Zpgen2r   r   Zpygramr   r   r7   r>   ZopmaprA   r    r<   r   r   objectr
   r8   r   rR   r   r   r   r   <module>   s     
W %