Ë È-ãnttãóŽ—dZddlmZddlmZmZddlmZmZeZ eZ ejZ eZ dZdZdZGd„d e«Zdd „Zd „Zd „Zy )z0Utility functions used by the btm_matcher moduleé)Úpytree)ÚgrammarÚtoken)Úpattern_symbolsÚpython_symbolséÿÿÿÿéþÿÿÿéýÿÿÿcó0—eZdZdZdd„Zd„Zd„Zd„Zd„Zy) ÚMinNodez‰This class serves as an intermediate representation of the pattern tree during the conversion to sets of leaf-to-root subpatternsNcóf—||_||_g|_d|_d|_g|_g|_y)NF)ÚtypeÚnameÚchildrenÚleafÚparentÚ alternativesÚgroup)Úselfrrs ú(/usr/lib/python3.12/lib2to3/btm_utils.pyÚ__init__zMinNode.__init__s4€ØˆŒ ؈Œ ؈Œ ؈Œ ؈Œ ØˆÔØˆ� ócó^—t|j«dzt|j«zS)NÚ )Ústrrr)rs rÚ__repr__zMinNode.__repr__s"€Ü�4—9‘9‹~ Ñ#¤c¨$¯)©)£nÑ4Ð4rcóD—|}g}|�r˜|jtk(r�|jj|«t |j«t |j «k(r*t |j«g}g|_|j}Œ†|j}d} |S|jtk(r�|jj|«t |j«t |j «k(r*t|j«}g|_ |j}�Œ|j}d} |S|jtjk(r(|jr|j|j«n|j|j«|j}|r�Œ˜|S)z°Internal method. Returns a characteristic path of the pattern tree. This method must be run for all leaves until the linear subpatterns are merged into a singleN)rÚTYPE_ALTERNATIVESrÚappendÚlenrÚtuplerÚ TYPE_GROUPrÚget_characteristic_subpatternÚ token_labelsÚNAMEr)rÚnodeÚsubps rÚ leaf_to_rootzMinNode.leaf_to_root!sP€ðˆØˆÚØ�y‰yÔ-Ò-Ø×!Ñ!×(Ñ(¨Ô.Ü�t×(Ñ(Ó)¬S°·±Ó-?Ò?ä! $×"3Ñ"3Ó4Ð5�DØ(*�DÔ%ØŸ;™;�DØàŸ;™;�DØ�DØð,ˆ ð)�y‰yœJÒ&Ø— ‘ ×!Ñ! $Ô'ä�t—z‘z“?¤c¨$¯-©-Ó&8Ò8Ü8¸¿¹ÓD�DØ!#�D”JØŸ;™;�DÙàŸ;™;�DØ�DØðˆ ð�y‰yœL×-Ñ-Ò-°$·)²)à— ‘ ˜DŸI™IÕ&à— ‘ ˜DŸI™IÔ&à—;‘;ˆDóCðDˆ rcóZ—|j«D]}|j«}|sŒ|cSy)a‹Drives the leaf_to_root method. The reason that leaf_to_root must be run multiple times is because we need to reject 'group' matches; for example the alternative form (a | b c) creates a group [b c] that needs to be matched. Since matching multiple linear patterns overcomes the automaton's capabilities, leaf_to_root merges each group into a single choice based on 'characteristic'ity, i.e. (a|b c) -> (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()rÚlr's rÚget_linear_subpatternzMinNode.get_linear_subpatternKs(€ð —‘–ˆAØ—>‘>Ó#ˆDÚØ’ ñrc#ó„K—|jD]}|j«Ed{–—†Œ|js|–—yy7Œ­w)z-Generator that returns the leaves of the treeN)rr*)rÚchilds 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(rŸt |j«dkrt |jd|«}�nÍtt¬«}|jD]K}|jj|«dzrŒ"t ||«}|€Œ1|jj|«ŒM�na|jtjk(r�t |j«dkDr\tt¬«}|jD],}t ||«}|sŒ|jj|«Œ.|j�sÔd}�nÐt |jd|«}�nµ|jtjk(�r—t|jdtj «r5|jdj"dk(rt |jd|«St|jdtj «r|jdj"dk(sMt |j«dkDr6t%|jdd«r|jdj"dk(ryd }d}d}d }d} d } |jD]„}|jtj&k(rd }|}nA|jtj(k(rd }|} n|jtjk(r|}t%|d«sŒs|j"d k(sŒƒd } Œ†| r:|jd} t%| d«r.| j"dk(r|jd } n|jd} | jt*j,k(r„| j"d k(rtt.¬«}nýt%t*| j"«r%tt1t*| j"«¬«}n¾tt1t2| 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)rÚsymsÚMatcherrÚ Alternativesr Ú reduce_treer rÚindexrÚ Alternativer"ÚUnitÚ isinstancerÚLeafr9ÚhasattrÚDetailsÚRepeaterr$r%ÚTYPE_ANYÚgetattrÚpysymsÚSTRINGÚstripÚtokensÚNotImplementedErrorr) r&rÚnew_noder.ÚreducedrÚ details_nodeÚalternatives_nodeÚ has_repeaterÚ repeater_nodeÚhas_variable_nameÚ name_leafrs rrCrCgsI€ð€Hà ‡y�y”D—L‘LÒ à�}‰}˜QÑˆà ‡y�y”D×%Ñ%Ò%ä ˆt�}‰}Ó  Ò "ä" 4§=¡=°Ñ#3°VÓ<ŠHôÔ$5Ô6ˆHàŸœ�Ø—=‘=×&Ñ& uÓ-¨aÒ/ØÜ% e¨XÓ6�ØÑ&Ø×%Ñ%×,Ñ,¨WÕ5ò 'ð �‰”d×&Ñ&Ò &Ü ˆt�}‰}Ó  Ò !ä¤JÔ/ˆHØŸœ�Ü% e¨XÓ6�ÚØ×%Ñ%×,Ñ,¨WÕ5ð'ð×$Ó$à’ô# 4§=¡=°Ñ#3°VÓ<ŠHà �‰”d—i‘iÓ Ü �t—}‘} QÑ'¬¯©Ô 5Ø �M‰M˜!Ñ × "Ñ " cÒ )ä˜tŸ}™}¨QÑ/°Ó8Ð 8Ü ˜Ÿ ™  aÑ(¬&¯+©+Ô 6Ø�}‰}˜QÑ×%Ñ%¨Ò,ä�D—M‘MÓ" 1Ò$Ü�t—}‘} QÑ'¨Ô1Ø�}‰}˜QÑ×%Ñ%¨Ò,ààˆØˆ Ø ÐØˆ ؈ Ø!Ðà—]”]ˆEØ�z‰zœTŸ\™\Ò)Ø�Ø$‘ Ø—‘œtŸ}™}Ò,Ø#� Ø %‘ Ø—‘œt×0Ñ0Ò0Ø$)Ð!Ü�u˜gÕ&¨5¯;©;¸#Ó+=Ø$(Ñ!ð#ñ àŸ ™  aÑ(ˆIÜ�y 'Ô*¨y¯©À#Ò/Eà ŸM™M¨!Ñ,‘ àŸ ™  aÑ(ˆIð �>‰>œ\×.Ñ.Ò .à�‰ %Ò'Ü"¬Ô1‘äœ<¨¯©Ô9Ü&¬G´LÀ)Ç/Á/Ó,RÔS‘Hä&¬G´F¸I¿O¹OÓ,LÔM‘Hà �^‰^œ|×2Ñ2Ò 2ð—?‘?×(Ñ(¨Ó-ˆDØ”v‰~Ü"¬¨t© Ô5‘ä"¬ ×(9Ñ(9ÀÔE‘Ø �^‰^œt×0Ñ0Ò 0Ü"Ð#4°fÓ=ˆHñ Ø×%Ñ% aÑ(×.Ñ.°#Ò5à‘Ø×'Ñ'¨Ñ*×0Ñ0°CÒ7àô*Ð)ñ ˜HÐ0Ø%×.Ñ.¨q°Ó4�ä% e¨XÓ6�ØÑ&Ø×%Ñ%×,Ñ,¨WÕ5ð 5ñ Ø ˆŒØ €Orc󬇇—t|t«s|St|«dk(r|dSg}g}gd¢Šg}dŠ|D]~}tt |d„««sŒtt |ˆfd„««r|j |«ŒDtt |ˆfd„««r|j |«Œn|j |«Œ€|r|}n |r|}n|r|}t |t¬«S) z„Picks the most characteristic from a list of linear patterns Current order used is: names > common_names > common_chars rr5)ÚinÚforÚifÚnotÚNonez[]().,:có$—t|«tuS©N)rr)Úxs rÚz/get_characteristic_subpattern..ýs €¬d°1«g¼©nrcó0•—t|t«xr|‰vSrb©rGr)rcÚ common_charss €rrdz/get_characteristic_subpattern..ÿsø€¤j°´CÓ&8Ò&N¸QÀ,Ð=NÐ&Nrcó0•—t|t«xr|‰vSrbrf)rcÚ common_namess €rrdz/get_characteristic_subpattern..sø€¬ °1´cÓ(:Ò(P¸qÀLÐ?PÐ(Pr)Úkey)rGÚlistr r<Úrec_testrÚmax)Ú subpatternsÚsubpatterns_with_namesÚsubpatterns_with_common_namesÚsubpatterns_with_common_charsÚ subpatternrgris @@rr#r#ìsãù€ô �k¤4Ô (ØÐÜ ˆ;Ó˜ÒØ˜1‰~Ðð ÐØ$&Ð!Ú6€LØ$&Ð!Ø€LÛ!ˆ Ü Œx˜ Ñ$<Ó=Õ >Ü”8˜JÛNóPôQà-×4Ñ4°ZÕ@Ü”X˜jÛPóRôSà-×4Ñ4°ZÕ@ð'×-Ñ-¨jÕ9ð"ñØ,‰ Ù &Ø3‰ Ù &Ø3ˆ ä ˆ{¤Ô $Ð$rc#óˆK—|D]7}t|ttf«rt||«Ed{–—†Œ.||«–—Œ9y7Œ­w)zPTests test_func on all items of sequence and items of included sub-iterablesN)rGrkr!rl)ÚsequenceÚ test_funcrcs rrlrls=èø€óˆÜ �aœ$¤˜Ô 'Ü  9Ó-× -Ñ -á˜A“,Ó ñ à -ús‚+A­A®Arb)r2ÚrÚpgen2rrÚpygramrrr@rNÚopmaprQr$rLrr"Úobjectr rCr#rlr3rrÚr{sZðÙ2åß!ß3à€Ø €Ø �‰€Ø€ à €ØÐØ € ôUˆfôUónBòJ#%óJr