<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</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†%