grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 \î&ã@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 %