
    z%i                     t    	 d Z ddlZddlZddlmZ ddlmZ ddlmZ  G d de	      Z
 G d	 d
e	      Zi ad Zy)z+George Boutsioukis <gboutsioukis@gmail.com>    N)defaultdict   )pytree)reduce_treec                   6    e Zd Z	  ej                         Zd Zy)BMNodec                 j    i | _         g | _        t        t        j                        | _        d| _        y )N )transition_tablefixersnextr   countidcontentselfs    G/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/lib2to3/btm_matcher.py__init__zBMNode.__init__   s(     "v||$    N)__name__
__module____qualname__	itertoolsr   r    r   r   r   r      s    IIOOEr   r   c                   ,    e Zd Z	 d Zd Zd Zd Zd Zy)BottomMatcherc                     t               | _        t               | _        | j                  g| _        g | _        t        j                  d      | _        y )NRefactoringTool)	setmatchr   rootnodesr   logging	getLoggerloggerr   s    r   r   zBottomMatcher.__init__   s;    U
H	ii[
''(9:r   c                    	 | j                   j                  |       t        |j                        }|j	                         }| j                  || j                        }|D ]  }|j                   j                  |        y )Nstart)r   appendr   pattern_treeget_linear_subpatternaddr!   )r   fixertreelinearmatch_nodes
match_nodes         r   	add_fixerzBottomMatcher.add_fixer%   sr    	 	5!5--.++-hhvTYYh7% 	,J$$U+	,r   c           	         	 |s|gS t        |d   t              rLg }|d   D ]@  }| j                  ||      }|D ]&  }|j                  | j                  |dd  |             ( B |S |d   |j                  vrt               }||j                  |d   <   n|j                  |d      }|dd  r| j                  |dd  |      }|S |g}|S )Nr   r'   r   )
isinstancetupler,   extendr   r   )r   patternr(   r0   alternative	end_nodesend	next_nodes           r   r,   zBottomMatcher.add1   s   ?7Ngaj%( K&qz C !HH[H>	$ CC&&txxS'ABC	C  qz!7!77"H	5>&&wqz2 "2271:>	qr{ HHWQR[	HB	  'K	r   c                    	 | j                   }t        t              }|D ]?  }|}|s	d|_        |j                  D ]5  }t        |t        j                        s|j                  dk(  s.d|_         n |j                  dk(  r|j                  }n|j                  }||j                  v r5|j                  |   }|j                  D ]  }||   j                  |        nq| j                   }|j                  |j                  j                  r||j                  v r4|j                  |   }|j                  D ]  }||   j                  |        |j                  }|r7B |S )NT;Fr   )r!   r   listwas_checkedchildrenr4   r   Leafvaluetyper   r   r)   parent)	r   leavescurrent_ac_noderesultsleafcurrent_ast_nodechild
node_tokenr-   s	            r   runzBottomMatcher.runS   st   	 ))d# #	;D#"/3 ,-66 E!%5%++:L7<(4	
 $((A-!1!7!7J!1!6!6J!A!AA&5&F&Fz&RO!0!7!7 @--.>?@ '+iiO(//;,33?? "_%E%EE*9*J*J:*V%4%;%; DE#EN112BCD $4#:#: C ##	;H r   c                 b    	 t        d       fd | j                         t        d       y )Nz
digraph g{c           
      *   | j                   j                         D ]u  }| j                   |   }t        d| j                  |j                  t	        |      t        |j                        fz         |dk(  rt        |j                          |       w y )Nz%d -> %d [label=%s] //%sr   )r   keysprintr   	type_reprstrr   r   )nodesubnode_keysubnode
print_nodes      r   rV   z*BottomMatcher.print_ac.<locals>.print_node   s    #4499; $//<0ww

Ik,BCDWXY Z!#'//*7#$r   })rP   r!   )r   rV   s    @r   print_aczBottomMatcher.print_ac   s(    Fl	$ 	499c
r   N)r   r   r   r   r2   r,   rL   rX   r   r   r   r   r      s"    +;
, D6pr   r   c                     t         sDddlm} |j                  j	                         D ]!  \  }}t        |      t        k(  s|t         |<   # t         j                  | |       S )Nr   )python_symbols)_type_reprspygramrZ   __dict__itemsrC   int
setdefault)type_numrZ   namevals       r   rQ   rQ      sT    * (00668 	9ID#CyCDS!1	9!!(H55r   )
__author__r#   r   collectionsr   r
   r   	btm_utilsr   objectr   r   r[   rQ   r   r   r   <module>rh      sH   G ;
   #  "V }F }@ 6r   