(a|b) if b more characteristic than c Returns: The most 'characteristic'(as defined by get_characteristic_subpattern) path for the compiled pattern tree. N)leavesr()rlr's rget_linear_subpatternzMinNode.get_linear_subpatternKs( A>>#D rc#K|jD]}|jEd{|js|yy7w)z-Generator that returns the leaves of the treeN)rr*)rchilds rr*zMinNode.leaves`s9]]E||~ % %#}}J &s#A>A)NN) __name__ __module__ __qualname____doc__rrr(r,r*rrr r s!5(T*rr Nc d}|jtjk(r|jd}|jtjk(rt |jdkrt |jd|}ntt}|jD]K}|jj|dzr"t ||}|1|jj|Mna|jtjk(rt |jdkDr\tt}|jD],}t ||}|s|jj|.|jsd}nt |jd|}n|jtjk(rt|jdtj r5|jdj"dk(rt |jd|St|jdtj r|jdj"dk(sMt |jdkDr6t%|jddr|jdj"dk(ryd }d}d}d }d} d } |jD]}|jtj&k(rd }|}nA|jtj(k(rd }|} n|jtjk(r|}t%|dss|j"d k(sd } | r:|jd} t%| dr.| j"dk(r|jd } n|jd} | jt*j,k(r| j"d k(rtt.}nt%t*| j"r%tt1t*| j"}ntt1t2| j"}n| jt*j4k(rS| j"j7d} | t8vrtt8| }nEtt*j,| }n)| jtjk(r t ||}|rB| jdj"dk(rd}n#| jdj"dk(rnt:|r@|>|jddD],}t ||}||jj|.|r||_|S)z Internal function. Reduces a compiled pattern tree to an intermediate representation suitable for feeding the automaton. This also trims off any optional pattern elements(like [a], a*). N)rr([valueTF=any')rr*+r)rsymsMatcherr Alternativesr reduce_treer rindexr Alternativer"Unit isinstancerLeafr9hasattrDetailsRepeaterr$r%TYPE_ANYgetattrpysymsSTRINGstriptokensNotImplementedErrorr) r&rnew_noder.reducedr details_nodealternatives_node has_repeater repeater_nodehas_variable_name name_leafrs rrCrCgsIH yyDLL }}Q yyD%%% t}}  ""4==#3V>\.. .%'"1<9&GL)//,RSH&GFIOO,LMH ^^|22 2??((-Dv~"t 5" (9(9E ^^t00 0"#4f=H %%a(..#5''*00C7*) H0%..q4%eX6&%%,,W5 5   Orct|ts|St|dk(r|dSg}g}gdg}d|D]~}tt |dstt |fdr|j |Dtt |fdr|j |n|j ||r|}n |r|}n|r|}t |tS) zPicks the most characteristic from a list of linear patterns Current order used is: names > common_names > common_chars rr5)inforifnotNonez[]().,:c$t|tuSN)rr)xs rz/get_characteristic_subpattern..s d1gnrc0t|txr|vSrbrGr)rc common_charss rrdz/get_characteristic_subpattern..sjC&8&NQ,=N&Nrc0t|txr|vSrbrf)rc common_namess rrdz/get_characteristic_subpattern..s 1c(:(PqL?P(Pr)key)rGlistr r<rec_testrmax) subpatternssubpatterns_with_namessubpatterns_with_common_namessubpatterns_with_common_chars subpatternrgris @@rr#r#s k4 ( ;1~ $&!6L$&!L! x $<= >8JNPQ-44Z@XjPRS-44Z@'--j9", &3 &3 { $$rc#K|D]7}t|ttfrt||Ed{.||9y7w)zPTests test_func on all items of sequence and items of included sub-iterablesN)rGrkr!rl)sequence test_funcrcs rrlrls= a$ '9- - -A,   -s+AAArb)r2rpgen2rrpygramrrr@rNopmaprQr$rLrr"objectr rCr#rlr3rrr{sZ2!3     UfUnBJ#%Jr