£Á°è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>

]&                 @   s   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 Gd d   d e  Z d d	 d
  Z d d   Z d d   Z d S)   )pytree)grammartoken)pattern_symbolspython_symbols      c               @   sR   e  Z d  Z d d d d  Z d d   Z d d   Z d d	   Z d
 d   Z d S)MinNodeNc             C   sC   | |  _  | |  _ g  |  _ d |  _ d  |  _ g  |  _ g  |  _ d  S)NF)typenamechildrenleafparentalternativesgroup)selfr
   r    r   ./opt/alt/python35/lib64/python3.5/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   sO  |  } g  } x<| rJ| j  t k r | j j |  t | j  t | j  k r| t | j  g } g  | _ | j } q n | j } d  } P| j  t k r | j	 j |  t | j	  t | j  k r t
 | j	  } g  | _	 | j } q n | j } d  } P| j  t j k r.| 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subpr   r   r   leaf_to_root!   s8    							zMinNode.leaf_to_rootc             C   s1   x* |  j    D] } | j   } | r | Sq Wd  S)N)leavesr"   )r   lr!   r   r   r   get_linear_subpatternK   s    zMinNode.get_linear_subpatternc             c   s5   x  |  j  D] } | j   Ed  Hq
 W|  j  s1 |  Vd  S)N)r   r#   )r   childr   r   r   r#   `   s    	zMinNode.leaves)__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 r t |  j  d k re t |  j d |  } qt d t  } xa|  j D]J } |  j j	 |  d r q~ t | |  } | d  k	 r~ | j j
 |  q~ Wn	|  j  t j k rit |  j  d k rPt d t  } x6 |  j D]+ } t | |  } | r| j j
 |  qW| j sfd  } qt |  j d |  } no|  j  t j k rt |  j d t j  r|  j d j d k rt |  j d |  St |  j d t j  r|  j d j d k s.t |  j  d k r2t |  j d d  r2|  j d j d k r2d  Sd } d  } d  } d	 } d  }	 d	 }
 x |  j D] } | j  t j k rd	 } | } n9 | j  t j k rd } | }	 n | j  t j k r| } t | d  r`| j d
 k r`d }
 q`W|
 r)|  j d } t | d  r6| j d k r6|  j d } n |  j d } | j  t j k r| j d k rit d t  } q9t t | j  rt d t t | j   } q9t d t t | j   } n | j  t j k r| j j d  } | t k rt d t |  } q9t d t j d |  } n! | j  t j k r9t | |  } | r}|	 j d j d k r^d  } n |	 j d j d k rwn t  | r| d  k	 rxF | j d d  D]1 } t | |  } | d  k	 r| j j
 |  qW| r| | _ | S)N    r   r
   r   ([valueTF=r   any'r   *+)r
   symsZMatcherr   ZAlternativesr   reduce_treer	   r   indexr   ZAlternativer   ZUnit
isinstancer   ZLeafr-   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   r5   g   s    				
		r5   c                s/  t  |  t  s |  St |   d k r- |  d Sg  } g  } d d d d d g  g  } d   x |  D] } t t | d	 d
     ra t t |   f d d
     r | j |  qa t t |  f d d
     r | j |  qa | j |  qa W| r| }  n | r| }  n | r| }  t |  d t S)Nr   r*   inforifnotNonez[]().,:c             S   s   t  |   t k S)N)r
   r   )xr   r   r   <lambda>   s    z/get_characteristic_subpattern.<locals>.<lambda>c                s   t  |  t  o |    k S)N)r7   r   )rE   )common_charsr   r   rF      s    c                s   t  |  t  o |    k S)N)r7   r   )rE   )common_namesr   r   rF     s    key)r7   listr   r/   rec_testr   max)ZsubpatternsZsubpatterns_with_namesZsubpatterns_with_common_namesZsubpatterns_with_common_chars
subpatternr   )rG   rH   r   r      s2    				r   c             c   sJ   xC |  D]; } t  | t t f  r7 t | |  Ed  Hq | |  Vq Wd  S)N)r7   rJ   r   rK   )ZsequenceZ	test_funcrE   r   r   r   rK     s    rK   r3   ) r   Zpgen2r   r   Zpygramr   r   r4   r;   Zopmapr>   r   r9   r   r   objectr	   r5   r   rK   r   r   r   r   <module>   s   	W%