a  ze@shdZddlZddlZddlmZddlmZddlmZGddde Z Gd d d e Z ia d d Z dS) z+George Boutsioukis N) defaultdict)pytree) reduce_treec@seZdZeZddZdS)BMNodecCs"i|_g|_ttj|_d|_dS)N)transition_tablefixersnextrcountidcontentselfrG/opt/bitninja-python-dojo/embedded/lib/python3.9/lib2to3/btm_matcher.py__init__s zBMNode.__init__N)__name__ __module__ __qualname__ itertoolsr rrrrrrsrc@s4eZdZddZddZddZddZd d Zd S) BottomMatchercCs0t|_t|_|jg|_g|_td|_dS)NZRefactoringTool) setmatchrrootZnodesr logging getLoggerloggerrrrrrs  zBottomMatcher.__init__cCsH|j|t|j}|}|j||jd}|D]}|j|q2dS)Nstart)r appendrZ pattern_treeZget_linear_subpatternaddr)rfixerZtreeZlinear match_nodesZ match_noderrr add_fixer%s   zBottomMatcher.add_fixerc Cs|s |gSt|dtr`g}|dD]6}|j||d}|D]}|||dd|q:q$|S|d|jvrt}||j|d<n|j|d}|ddr|j|dd|d}n|g}|SdS)Nrrr) isinstancetupler!extendrr)rpatternrr#Z alternativeZ end_nodesendZ next_noderrrr!1s"  zBottomMatcher.addc Cs|j}tt}|D]}|}|rd|_|jD]$}t|tjr*|jdkr*d|_qPq*|j dkrb|j}n|j }||j vr|j |}|j D]}|| |qnH|j}|j dur|j jrq||j vr|j |}|j D]}|| |q|j }qq|S)NT;Fr)rrlistZ was_checkedZchildrenr%rZLeafvaluetyperr r parent) rZleavesZcurrent_ac_noderesultsZleafZcurrent_ast_nodechildZ node_tokenr"rrrrunSs8          zBottomMatcher.runcs*tdfdd|jtddS)Nz digraph g{csZ|jD]J}|j|}td|j|jt|t|jf|dkrLt|j|q dS)Nz%d -> %d [label=%s] //%sr)rkeysprintr type_reprstrr r )ZnodeZ subnode_keyZsubnode print_noderrr7s  z*BottomMatcher.print_ac..print_node})r3rrrr6rprint_acs  zBottomMatcher.print_acN)rrrrr$r!r1r9rrrrrs  "8rcCsDts8ddlm}|jD]\}}t|tkr|t|<qt||S)Nr)python_symbols) _type_reprsZpygramr:__dict__itemsr-int setdefault)Ztype_numr:namevalrrrr4s  r4) __author__rr collectionsrrrZ btm_utilsrobjectrrr;r4rrrrs