й¼]î&ã@sªddlmZddlmZmZddlmZmZeZeZ ej Z eZ dZ dZdZGdd„deƒZdd d „Zd d „Zd d„ZdS)é)Úpytree)ÚgrammarÚtoken)Úpattern_symbolsÚpython_symbolsééc@sReZdZdddd„Zdd„Zdd„Zdd „Zd d „ZdS) ÚMinNodeNcCsC||_||_g|_d|_d|_g|_g|_dS)NF)ÚtypeÚnameÚchildrenÚleafÚparentÚ alternativesÚgroup)Úselfr r ©rú./opt/alt/python35/lib64/python3.5/btm_utils.pyÚ__init__s      zMinNode.__init__cCst|jƒdt|jƒS)Nú )Ústrr r )rrrrÚ__repr__szMinNode.__repr__cCsO|}g}x<|rJ|jtkrŒ|jj|ƒt|jƒt|jƒkr|t|jƒg}g|_|j}qn|j}d}P|jtkr|j j|ƒt|j ƒt|jƒkrðt |j ƒ}g|_ |j}qn|j}d}P|jt j kr.|j r.|j|j ƒn|j|jƒ|j}qW|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_rootcCs1x*|jƒD]}|jƒ}|r |Sq WdS)N)Úleavesr")rÚlr!rrrÚget_linear_subpatternKs zMinNode.get_linear_subpatternccs5x |jD]}|jƒEdHq W|js1|VdS)N)r r#)rÚchildrrrr#`s zMinNode.leaves)Ú__name__Ú __module__Ú __qualname__rrr"r%r#rrrrr s   * r Nc Csëd}|jtjkr%|jd}|jtjkrÏt|jƒdkret|jd|ƒ}qØtdtƒ}xa|jD]J}|jj |ƒdrq~t||ƒ}|dk r~|jj |ƒq~Wn |jtj krit|jƒdkrPtdt ƒ}x6|jD]+}t||ƒ}|r|jj |ƒqW|jsfd}qØt|jd|ƒ}no|jtj krØt|jdtjƒr¾|jdjdkr¾t|jd|ƒSt|jdtjƒrí|jdjdks.t|jƒdkr2t|jddƒr2|jdjdkr2dSd}d}d}d }d} d } x|jD]„}|jtjkr‡d }|}n9|jtjkr¨d}|} n|jtjkrÀ|}t|dƒr`|jd kr`d} q`W| r)|jd} t| dƒr6| jdkr6|jd } n |jd} | jtjkr·| jd kritdtƒ}q9tt| jƒr™tdtt| jƒƒ}q9tdtt| jƒƒ}n‚| jtjkr| jjd ƒ} | tkrýtdt| ƒ}q9tdtjd| ƒ}n!| jtjkr9t||ƒ}|r}| jdjdkr^d}n| jdjdkrwnt‚|rØ|dk rØxF|jdd…D]1}t||ƒ}|dk r£|jj |ƒq£W|rç||_|S)Nérr rú(ú[ÚvalueTFú=rÚanyú'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‰x˜|D]}tt|d d „ƒƒratt|‡fd d †ƒƒr³|j|ƒqatt|‡fd d †ƒƒrä|j|ƒqa|j|ƒqaW|r|}n|r|}n |r|}t|d tƒS)Nrr*ÚinÚforÚifÚnotÚNonez[]().,:cSst|ƒ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     rccsJxC|D];}t|ttfƒr7t||ƒEdHq||ƒVqWdS)N)r7rJrrK)ZsequenceZ test_funcrErrrrKs rKr3éþÿÿÿéýÿÿÿ)ÚrZpgen2rrZpygramrrr4r;Zopmapr>rr9rrÚobjectr r5rrKrrrrÚs W† %