
    z%i&                         	 d dl mZ d dlmZmZ d dlmZmZ eZeZ	ej                  ZeZdZdZdZ G d de      Zdd
Zd Zd Zy	)   )pytree)grammartoken)pattern_symbolspython_symbolsc                   .    e Zd Z	 ddZd Zd Zd Zd Zy)MinNodeNc                 f    || _         || _        g | _        d| _        d | _        g | _        g | _        y )NF)typenamechildrenleafparentalternativesgroup)selfr   r   s      E/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/lib2to3/btm_utils.py__init__zMinNode.__init__   s4    			
    c                 ^    t        | j                        dz   t        | j                        z   S )N )strr   r   )r   s    r   __repr__zMinNode.__repr__   s"    499~#c$))n44r   c                 F   	 | }g }|r|j                   t        k(  r|j                  j                  |       t	        |j                        t	        |j
                        k(  r*t        |j                        g}g |_        |j                  }|j                  }d }	 |S |j                   t        k(  r|j                  j                  |       t	        |j                        t	        |j
                        k(  r*t        |j                        }g |_	        |j                  }|j                  }d }	 |S |j                   t        j                  k(  r(|j                  r|j                  |j                         n|j                  |j                          |j                  }|r|S N)r   TYPE_ALTERNATIVESr   appendlenr   tupler   
TYPE_GROUPr   get_characteristic_subpatterntoken_labelsNAMEr   )r   nodesubps      r   leaf_to_rootzMinNode.leaf_to_root!   sU   	7 yy--!!((.t(()S-??!$"3"345D(*D%;;D;;DD, ) yyJ&

!!$'tzz?c$--&888DD!#DJ;;D;;DD  yyL---$))DII&DII&;;DC D r   c                 \    	 | j                         D ]  }|j                         }|s|c S  y r   )leavesr)   )r   lr(   s      r   get_linear_subpatternzMinNode.get_linear_subpatternK   s2    	  	A>>#D	r   c              #      K   	 | j                   D ]  }|j                         E d {     | j                   s|  y y 7 wr   )r   r+   )r   childs     r   r+   zMinNode.leaves`   sA     7]] 	&E||~%%	&}}J  &s   $A?A)NN)__name__
__module____qualname__r   r   r)   r-   r+    r   r   r   r      s!    5(T*r   r   Nc                 
   	 d }| j                   t        j                  k(  r| j                  d   } | j                   t        j                  k(  rt        | j                        dk  rt        | j                  d   |      }nt        t              }| j                  D ]K  }| j                  j                  |      dz  r"t        ||      }|1|j                  j                  |       M na| j                   t        j                  k(  rt        | j                        dkD  r\t        t              }| j                  D ],  }t        ||      }|s|j                  j                  |       . |j                  sd }nt        | j                  d   |      }n| j                   t        j                  k(  rt        | j                  d   t        j                         r5| j                  d   j"                  dk(  rt        | j                  d   |      S t        | j                  d   t        j                         r| j                  d   j"                  dk(  sMt        | j                        dkD  r6t%        | j                  d   d      r| j                  d   j"                  dk(  ry d}d }d }d	}d }	d	}
| j                  D ]  }|j                   t        j&                  k(  rd	}|}nA|j                   t        j(                  k(  rd}|}	n|j                   t        j                  k(  r|}t%        |d      ss|j"                  d
k(  sd}
 |
r:| j                  d   }t%        |d      r.|j"                  dk(  r| j                  d   }n| j                  d   }|j                   t*        j,                  k(  r|j"                  dk(  rt        t.              }nt%        t*        |j"                        r%t        t1        t*        |j"                              }nt        t1        t2        |j"                              }n|j                   t*        j4                  k(  rS|j"                  j7                  d      }|t8        v rt        t8        |         }nEt        t*        j,                  |      }n)|j                   t        j                  k(  rt        ||      }|rB|	j                  d   j"                  dk(  rd }n#|	j                  d   j"                  dk(  rnt:        |r@|>|j                  dd D ],  }t        ||      }||j                  j                  |       . |r||_        |S )N       )r   r   ([valueTF=   any')r   r   *+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_leafr   s                r   rC   rC   g   sb    HyyDLL }}QyyD%%%t}}""4==#3V<H $56H 6==&&u-a/%eX6&%%,,W56 
d&&	&t}}!J/H 6%eX6%%,,W56 $$ #4==#3V<H	dii	t}}Q'5MM!""c)t}}Q/88a(&++6}}Q%%,DMM"1$t}}Q'1}}Q%%, !]] 
	)EzzT\\)$t}},# %t000$)!ug&5;;#+=$(!
	) a(Iy'*y#/E MM!,	a(I >>\...%'"1<9&GL)//,RSH&GFIOO,LMH^^|222 ??((-Dv~"t5"(9(9E^^t000"#4f=H %%a(..#5''*00C7 *) H0%..q4 6%eX6&%%,,W5	6
  Or   c                    	 t        | t              s| S t        |       dk(  r| d   S g }g }g dg }d| D ]~  }t        t	        |d             st        t	        |fd            r|j                  |       Dt        t	        |fd            r|j                  |       n|j                  |        |r|} n	|r|} n|r|} t        | t              S )	Nr   r5   )inforifnotNonez[]().,:c                 $    t        |       t        u S r   )r   r   )xs    r   <lambda>z/get_characteristic_subpattern.<locals>.<lambda>   s    d1gn r   c                 0    t        | t              xr | v S r   rG   r   )rb   common_charss    r   rc   z/get_characteristic_subpattern.<locals>.<lambda>   s    jC&8&NQ,=N r   c                 0    t        | t              xr | v S r   re   )rb   common_namess    r   rc   z/get_characteristic_subpattern.<locals>.<lambda>  s    
1c(:(PqL?P r   )key)rG   listr!   r<   rec_testr    max)subpatternssubpatterns_with_namessubpatterns_with_common_namessubpatterns_with_common_chars
subpatternrf   rh   s        @@r   r$   r$      s     k4(
;1~  $&!6L$&!L! 
:
x
$<=>8JNP Q-44Z@XjPR S-44Z@ '--j9
: ,	&3	&3{$$r   c              #      K   	 | D ]7  }t        |t        t        f      rt        ||      E d {    . ||       9 y 7 wr   )rG   rj   r"   rk   )sequence	test_funcrb   s      r   rk   rk     sE      a$'9---A,	-s   ,AAAr   ) r   pgen2r   r   pygramr   r   r@   rN   opmaprQ   r%   rL   r   r#   objectr   rC   r$   rk   r3   r   r   <module>rz      sZ    2  ! 3		 
Uf UnBJ#%Jr   