
    3\h                         	 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dS )z+George Boutsioukis <gboutsioukis@gmail.com>    N)defaultdict   )pytree)reduce_treec                   4    e Zd Z	  ej                    Zd ZdS )BMNodec                 l    i | _         g | _        t          t          j                  | _        d| _        d S )N )transition_tablefixersnextr   countidcontentselfs    =/opt/python-3.11.14/usr/lib/python3.11/lib2to3/btm_matcher.py__init__zBMNode.__init__   s-     "v|$$    N)__name__
__module____qualname__	itertoolsr   r    r   r   r   r      s5        IIOE    r   r   c                   .    e Zd Z	 d Zd Zd Zd Zd ZdS )BottomMatcherc                     t                      | _        t                      | _        | j        g| _        g | _        t          j        d          | _        d S )NRefactoringTool)	setmatchr   rootnodesr   logging	getLoggerloggerr   s    r   r   zBottomMatcher.__init__   sA    UU
HH	i[
'(9::r   c                    	 | j                             |           t          |j                  }|                                }|                     || j                  }|D ]}|j                             |           d S )Nstart)r   appendr   pattern_treeget_linear_subpatternaddr!   )r   fixertreelinearmatch_nodes
match_nodes         r   	add_fixerzBottomMatcher.add_fixer%   s    	 	5!!!5-..++--hhvTYh77% 	, 	,J$$U++++	, 	,r   c           	         	 |s|gS t          |d         t                    r\g }|d         D ]O}|                     ||          }|D ]3}|                    |                     |dd          |                     4P|S |d         |j        vrt                      }||j        |d         <   n|j        |d                  }|dd          r |                     |dd          |          }n|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 C !HH[H>>	$ C CC&&txxS'A'ABBBBC qz!777"HH	5>&wqz22 "271:>	qrr{ ( HHWQRR[	HBB		&K	r   c                 8   	 | j         }t          t                    }|D ]}|}|rd|_        |j        D ]0}t          |t          j                  r|j        dk    r	d|_         n1|j	        dk    r|j        }n|j	        }||j
        v r3|j
        |         }|j        D ]}||                             |           nV| j         }|j        |j        j        rnD||j
        v r2|j
        |         }|j        D ]}||                             |           |j        }||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   s   	 )d## #	; #	;D#" !;/3 ,-6  E!%55 %+:L:L7<(4#(A--!1!7JJ!1!6J!AAA&5&Fz&RO!0!7 @ @--.>????@ '+iO(/;,3? <  "_%EEE*9*J:*V%4%; D DE#EN112BCCCC#3#: C # !;D r   c                 p    	 t          d           fd | j                   t          d           d S )Nz
digraph g{c           
      "   | j                                         D ]s}| j         |         }t          d| j        |j        t	          |          t          |j                  fz             |dk    rt          |j                    |           td S )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99;; $ $/<0w
Ik,B,BCDWDWXY Z Z Z!##'/***
7####$ $r   })rP   r!   )r   rV   s    @r   print_aczBottomMatcher.print_ac   sP    Fl	$ 	$ 	$ 	$ 	$ 	
49c




r   N)r   r   r   r   r2   r,   rL   rX   r   r   r   r   r      sf        +; ; ;
, 
, 
,     D6 6 6p    r   r   c                     t           sGddlm} |j                                        D ]'\  }}t          |          t          k    r
|t           |<   (t                               | |           S )Nr   )python_symbols)_type_reprspygramrZ   __dict__itemsrC   int
setdefault)type_numrZ   namevals       r   rQ   rQ      sq     9****** (06688 	9 	9ID#CyyCDS!1!!(H555r   )
__author__r#   r   collectionsr   r
   r   	btm_utilsr   objectr   r   r[   rQ   r   r   r   <module>rh      s   G ;
      # # # # # #       " " " " " "    V   } } } } }F } } }@ 6 6 6 6 6r   