
    `N`_                        d Z ddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 d	Z
d
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ d Z! G d d ej"                  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-dS )+z5Computation of split penalties before/between tokens.    N)pytree)format_token)	py3compat)pytree_utils)pytree_visitor)stylei@B i:  i  i  i  i  d   i  iL  i  i  ix  i  i  i  il  i  i4  i  i  ip  c                 H    t                                          |            dS )zCompute split penalties on tokens in the given parse tree.

  Arguments:
    tree: the top-level pytree node to annotate with penalties.
  N)_SplitPenaltyAssignerVisit)trees    :lib/python3.11/site-packages/yapf/yapflib/split_penalty.pyComputeSplitPenaltiesr   6   s$     %%%%%    c                       e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z  e!dd h          Z"d! Z# e!h d"          Z$d# Z%d$ Z&d% Z'd& Z( xZ)S )'r   z~Assigns split penalties to tokens, based on parse tree structure.

  Split penalties are attached as annotations to tokens.
  c                 |    t          |d          s*t          t          |                               |           d S d S )N	is_pseudo)hasattrsuperr   r   )selfnode	__class__s     r   r   z_SplitPenaltyAssigner.VisitE   sD    4%% 5!4((..t444445 5r   c                     |                      |           d }|j        D ]M}|rGt          |t          j                  r-|j        dk    r"t          |t          j        d                     |}Nd S )N,SPLIT_PENALTY_IMPORT_NAMES)	DefaultNodeVisitchildren
isinstancer   Leafvalue_SetSplitPenaltyr   Getr   r   
prev_childchilds       r   Visit_import_as_namesz+_SplitPenaltyAssigner.Visit_import_as_namesI   s    $J  
 IJ<< I

c
!
!	*F G GHHHjj	 r   c                     t          |j        d                    t          |j                  dk    rt          |j        d                    t          |j        d                    |                     |           d S )N         )_SetUnbreakabler   lenr   r   r   s     r   Visit_classdefz$_SplitPenaltyAssigner.Visit_classdefS   sr     DM!$%%%
4=AdmA&'''DM"%&&&$r   c                 &   d}t          j        |j        |                   dk    r(|dz  }t          j        |j        |                   dk    (t          |j        |                    d}|t	          |j                  k     rqt          |j        |         t          j                  r/|j        |         j        dk    rn5|j        |         j        dk    r|}|dz  }|t	          |j                  k     qt          |j        |                    | 	                    |           |dk    rit          t          j        |j        |dz
                     d           t          |j        |                    t          |j        |dz                       d S d S )Nr(   simple_stmt:z->r   )r   NodeNamer   r,   r-   r   r   r   r    r   r!   LastLeafNode_SetStronglyConnected)r   r   	colon_idx	arrow_idxs       r   Visit_funcdefz#_SplitPenaltyAssigner.Visit_funcdef_   s   
 I

i 8
9
9]
J
J1ni 
i 8
9
9]
J
JDM),---I
c$-((
(
(	DM),fk	:	:  =#)S00
=#)T11)1ni c$-((
(
( DM),---$1}}

#DM)a-$@
A
A1F F FdmI.///DM)a-899999	 }r   c                    t          j        d          }|s@|j        D ]8}t          j        |          dk    rt          j        d|j                  rd} n9|rt          |t                     d S t          |t                     d S )NALLOW_MULTILINE_LAMBDASCOMMENTz"pylint:.*disable=.*\bg-long-lambdaT)r   r"   r   r   r4   researchr    _SetExpressionPenaltySTRONGLY_CONNECTEDVERY_STRONGLY_CONNECTED)r   r   allow_multiline_lambdasr%   s       r   Visit_lambdefz#_SplitPenaltyAssigner.Visit_lambdefx   s     $i(ABB" =  % ''944Y<ekJJ &*#E ;D"455555D"9:::::r   c                     |                      |           t          |j        d                    t          j        d          s0t          j        d          st          |j        d                    d S d S d S )Nr   INDENT_CLOSING_BRACKETSDEDENT_CLOSING_BRACKETSr2   )r   r,   r   r   r"   r6   r.   s     r   Visit_parametersz&_SplitPenaltyAssigner.Visit_parameters   s    $ DM!$%%%I/00 /I/00/DM"-...../ / / /r   c                    t          j        |j        d                   dk    r|                     |           d S |                     |           t          j        dt          |j                            D ]C}|j        |         }t          |t          j
                  r|j        dk    rt          |           D|j        D ]/}t          j        |          dk    rt          |t                     0d S )Nr   STARr(   r   atom)r   r4   r   Visit_star_exprr   r   ranger-   r   r   r   r    r,   _IncreasePenalty	CONNECTEDr   r   indexr%   s       r   Visit_arglistz#_SplitPenaltyAssigner.Visit_arglist   s    T]1-..&88 4   f$C$6$677  mE"e	E6;	'	' EK3,>,> + +		u	%	%	/	/	***+ +r   c                    |                      |           t          j        dt          |j                  dz
            D ]}|j        |         }t          |t          j                  rr|j        dk    rgt          t          j        |j        |                   t                     t          t          j        |j        |dz                      t                     d S )Nr(   =r   r   rL   r-   r   r   r   r   r    r!   r   FirstLeafNodeNAMED_ASSIGNrO   s       r   Visit_argumentz$_SplitPenaltyAssigner.Visit_argument       $C$6$6$:;; P PmE"e	E6;	'	' PEK3,>,>&t}U';<<l	L 	L 	L&t}UQY'?@@,	P 	P 	PP Pr   c                    |                      |           t          j        dt          |j                  dz
            D ]}|j        |         }t          |t          j                  rr|j        dk    rgt          t          j        |j        |                   t                     t          t          j        |j        |dz                      t                     d S )Nr(   r3   rT   rO   s       r   Visit_tnamez!_SplitPenaltyAssigner.Visit_tname   rX   r   c                 
   |j         D ]}|                     |           t          |j         d         d          rdnd}t          j        |t          |j                             D ]}t          |j         |                    d S )Nr   r   r*   r(   )r   r   r   r   rL   r-   r,   )r   r   r%   startis        r   Visit_dotted_namez'_SplitPenaltyAssigner.Visit_dotted_name   s      
jjq);77>AAQE_UC$6$677 ( (dmA&''''( (r   c                     |j         D ]>}|                     |           t          j        |          dk    rt	          |           ?d S )NCOLON)r   r   r   r4   r6   )r   r   r%   s      r   Visit_dictsetmakerz(_SplitPenaltyAssigner.Visit_dictsetmaker   sX      % %
jj		u	%	%	0	0 	e$$$% %r   c                    |j         d         j        dk    rht          j        d          }t	          |j         d         |rt
          nt                     t	          |j         d         |rt          nt
                     nt          |j                   dk    r"t	          |j         d         t
                     nt          |j                   dk    rot          j	        |j         d                   }|dv rt          |j         d                    t          |j         d         j                   dk    r]t          j	        |j         d         j         d                   dk    r/t	          t          j        |j         d                   d           nt	          t          j        |j         d                   t                     n^t          j	        |j         d                   d	k    rt          |j         d         j                   dk    rk|                    d
          s|                    d          r@t          |j         d         j         d                    t          |j         d         j         d                    |                    d
          rt          j        d          p(|                    d          ot          j        d          }|r9t	          t          j        |j         d         j         d                   d           n8t	          t          j        |j         d         j         d                   d           t          |j         d         t          j        j        t
                     n|dvrt          j        t          j        |          t          j        j                  }|rIt(          j        j        |v r6t/          |t0                     t/          |j         d         t2                     n&t          |j         d         |j         d                    |dk    rt          |j         d                    |                     |           d S )Nr   .SPLIT_BEFORE_DOTr(   r*      >   argument
comparisoncomp_forLSQB_test_exprSPLIT_BEFORE_LOGICAL_OPERATORSPLIT_BEFORE_BITWISE_OPERATORr2   >   rJ   termpowerarglistor_testand_testrf   rg   rp   )r   r    r   r"   r!   rA   DOTTED_NAMEr-   r   r4   r6   rU   ONE_ELEMENT_ARGUMENTendswithr5   _RecAnnotate
AnnotationSPLIT_PENALTYGetNodeAnnotationSUBTYPEr   SubtypeSUBSCRIPT_BRACKETrM   	SUBSCRIPTrN   r   )r   r   beforenamesplit_beforesubtypess         r   Visit_trailerz#_SplitPenaltyAssigner.Visit_trailer   s   }Q$$y+,,ft}Q'28I..kK K Kt}Q'&,I{{2IK K K K	T]		q	 	 t}Q')@AAAA	T]		q	 	 "4=#344d	+	+	+dmA.///a )**Q..!$-"2";A">??:MM
<5dmA6FGG
K
K
K
K
(q)9::"$ $ $ $ !$-"233v==a )**Q..]]7## /'+}}W'='= /dmA.7:;;;dmA.7:;;; w// D#BCCEw// D#BCC 	  	K
'a(8(A!(DEEqJ J J J (q)9)B1)EFFK K K 	T]2&(?(M,	. 	. 	. 	.   
  1&t,,l.E.MO O 	D,>(JJ
4
+
+
+ 4=+Y
7
7
7
7
a 0$-2B
C
C
C			dmB/000$r   c                    |                      |           t          |j                  dk    r/t          j        |j        d                   dk    rt          j        |j        d                   }|j        dk    r%t          |j        d         j        d                    d}|t          |j                  dz
  k     r|dz   }|j        |         }t          j        |          dk    rnt|j        |         }|j        d         j        dk    rt          |j        d                    t          |j        d                    |}|t          |j                  dz
  k     |j        dd          D ]}t          j        |          dk    r d S |j        d         j        dv rit          |j                  dk    r6t          j	        |j        d         t          j
        j                  }|r?t          j        j        |v r,t          t          j        |j        d                              t          j        |          }	|	j                                                            d	          r|	j        }	t'          j        d
          sit'          j        d          sUt          j        |	j                  }
|
j        dk    r1|	j        dk    rt          |	           kt+          |	t,                     t          |j        d                    d S )Nr(   trailerrc   r   r2   )z([r*   #rE   rF   r   ])r   r-   r   r   r4   rU   r    r,   r6   ry   rw   rz   r   r{   r|   r5   strip
startswithprev_siblingr   r"   r!   rA   )r   r   firstprev_trailer_idxcur_trailer_idxcur_trailerprev_trailerr   r   last_child_nodelasts              r   Visit_powerz!_SplitPenaltyAssigner.Visit_power  s   $ 	DMQdmA.//9<< (q)9::e			a(1!4555 s4=11A555*Q.mO4 --::
 }%56 $*c11
   5b 9
:
:
:k215666* s4=11A555* =$ 6 6		w	'	'9	4	4		!		"d	*	*w  1$$!3q!<#:#BD D( A,.@HLL!*7+;A+>??A A A )5g>>/"((**55c:: ;-:O)566 K)566K,_-IJJDzS   &#--0000 2IJJJ
   0 4
5
5
556 6r   c                    |                      |           t          t          j        |          d           d }|j        D ]@}|r:t          j        |          dk    r"t          t          j        |          d           |}Ad S )Nr   COMMA)r   r!   r   rU   r   r4   r#   s       r   Visit_subscriptlistz)_SplitPenaltyAssigner.Visit_subscriptlistX  s    $\/55q999J  	 ?-j99WDD3E::A>>>jj r   c                 L    t          |j          |                     |           d S N)r6   r   r   r.   s     r   Visit_subscriptz%_SplitPenaltyAssigner.Visit_subscriptb  s)    4=))$r   c                     t          t          j        |          d           t          |j        dd            |                     |           d S )Nr   r(   )r!   r   rU   r6   r   r   r.   s     r   Visit_comp_forz$_SplitPenaltyAssigner.Visit_comp_forg  sM    \/55q9994=,--$r   c                 0    |                      |           d S r   )r   r.   s     r   Visit_old_comp_forz(_SplitPenaltyAssigner.Visit_old_comp_form  s    r   c                     t          |j        d         t          j        d                     t	          |j        dd            |                     |           d S )Nr   SPLIT_PENALTY_BEFORE_IF_EXPRr(   )r!   r   r   r"   r6   r   r.   s     r   Visit_comp_ifz#_SplitPenaltyAssigner.Visit_comp_ifq  s^    T]1%Y=>>@ @ @4=,--$r   c                 0    |                      |           d S r   )r   r.   s     r   Visit_old_comp_ifz'_SplitPenaltyAssigner.Visit_old_comp_ifx  s    tr   c                 Z    t          |t                     |                     |           d S r   )rM   OR_TESTr   r.   s     r   
Visit_testz _SplitPenaltyAssigner.Visit_test|  s,    T7###$r   c                    |                      |           t          |t                     d}|dz   t          |j                  k     rt          j        d          r3t          t          j	        |j        |                   t                     n5t          t          j	        |j        |dz                      t                     |dz  }|dz   t          |j                  k     d S d S Nr(   rl   r*   )
r   rM   r   r-   r   r   r"   _DecrementSplitPenaltyr   rU   r   r   rP   s      r   Visit_or_testz#_SplitPenaltyAssigner.Visit_or_test  s    $T7###E
!)c$-((
(
(	2	3	3 K&t}U';<<g	G 	G 	G 	G 	&t}UQY'?@@'	K 	K 	Kqje !)c$-((
(
(
(
(
(
(r   c                    |                      |           t          |t                     d}|dz   t          |j                  k     rt          j        d          r3t          t          j	        |j        |                   t                     n5t          t          j	        |j        |dz                      t                     |dz  }|dz   t          |j                  k     d S d S r   )
r   rM   AND_TESTr-   r   r   r"   r   r   rU   r   s      r   Visit_and_testz$_SplitPenaltyAssigner.Visit_and_test  s    $T8$$$E
!)c$-((
(
(	2	3	3 L&t}U';<<h	H 	H 	H 	H 	&t}UQY'?@@(	L 	L 	Lqje !)c$-((
(
(
(
(
(
(r   c                 Z    |                      |           t          |t                     d S r   )r   rM   NOT_TESTr.   s     r   Visit_not_testz$_SplitPenaltyAssigner.Visit_not_test  s,    $T8$$$$$r   c                 P   |                      |           t          |j                  dk    rct          |          rTt	          |j        d         t
                     t          t          j        |j        d                   t                     d S t	          |t                     d S )Nre   r(   r*   )r   r-   r   _StronglyConnectedCompOprM   rA   r!   r   rU   r@   
COMPARISONr.   s     r   Visit_comparisonz&_SplitPenaltyAssigner.Visit_comparison  s    $
4=Q#;D#A#At}Q')@AAA

$T]1%5
6
68JL L L L L tZ(((((r   c                 Z    |                      |           t          |t                     d S r   )r   rM   	STAR_EXPRr.   s     r   rK   z%_SplitPenaltyAssigner.Visit_star_expr  s,    $T9%%%%%r   c                 z    |                      |           t          |t                     t          |d           d S )N|)r   rM   EXPR_SetBitwiseOperandPenaltyr.   s     r   
Visit_exprz _SplitPenaltyAssigner.Visit_expr  s<    $T4   dC(((((r   c                 z    |                      |           t          |t                     t          |d           d S )N^)r   rM   XOR_EXPRr   r.   s     r   Visit_xor_exprz$_SplitPenaltyAssigner.Visit_xor_expr  <    $T8$$$dC(((((r   c                 z    |                      |           t          |t                     t          |d           d S )N&)r   rM   AND_EXPRr   r.   s     r   Visit_and_exprz$_SplitPenaltyAssigner.Visit_and_expr  r   r   c                 Z    |                      |           t          |t                     d S r   )r   rM   
SHIFT_EXPRr.   s     r   Visit_shift_exprz&_SplitPenaltyAssigner.Visit_shift_expr  s,    $T:&&&&&r   PLUSMINUSc                     |                      |           t          |t                     t          || j                   d S r   )r   rM   
ARITH_EXPR_SetExpressionOperandPenalty
_ARITH_OPSr.   s     r   Visit_arith_exprz&_SplitPenaltyAssigner.Visit_arith_expr  s>    $T:&&& t77777r   >   ATrI   SLASHPERCENTDOUBLESLASHc                     |                      |           t          |t                     t          || j                   d S r   )r   rM   TERMr   	_TERM_OPSr.   s     r   
Visit_termz _SplitPenaltyAssigner.Visit_term  s>    $T4    t~66666r   c                 Z    |                      |           t          |t                     d S r   )r   rM   FACTORr.   s     r   Visit_factorz"_SplitPenaltyAssigner.Visit_factor  s,    $T6"""""r   c                    |                      |           |j        d         j        dk    rt          |j        d         d          s|j        d         j        dk    rt	          j        |j                  dk    r"t          |j        d         t                     d S t          |j                  dk    r2t          t	          j
        |j        d                   t                     t          |j        d         t                     d S d S |j        d         j        d	v r4t          |j                  dk    rt          |j        d                    d S d S d S )
Nr   (r   r2   r   if_stmtr*   r(   z[{)r   r   r    r   r   r4   parentr!   r@   r-   rU   r   ATOMr,   r.   s     r   
Visit_atomz _SplitPenaltyAssigner.Visit_atom  sA    	$a#%%DM!$k22 	&	r		 C	'	' --::
4=,.@
A
A
A
A
A!##\7a8HII4PPP
4=,d
3
3
3
3
3 
(	' 
q		4	'	'C,>,>!,C,CdmB'((((( 
(	',C,Cr   c                    |                      |           d}|j        D ]d}t          |t          j                  r|j        dk    rt          |           d}9|r't          t          j	        |          t                     d}ed S )NFr   T)r   r   r   r   r   r    r,   r!   r   rU   TOGETHER)r   r   prev_was_commar%   s       r   Visit_testlist_gexpz)_SplitPenaltyAssigner.Visit_testlist_gexp  s    $N  	E6;	'	' EK3,>,> 	H
<5e<<h
G
G
G r   )*__name__
__module____qualname____doc__r   r&   r/   r9   rC   rG   rQ   rW   rZ   r^   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   rK   r   r   r   r   	frozensetr   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   ?   sm        
5 5 5 5 5  
  
  
 : : :2; ; ; / / /+ + +&
P 
P 
P
P 
P 
P( ( (	% 	% 	%@  @  @ DD6 D6 D6L       
                   
    % % %
) ) )& & &
) ) )) ) )) ) )' ' '
 y&'*++*8 8 8 iIIIJJ)7 7 7# # #
) ) )$
 
 
 
 
 
 
r   r   c                 P    t          | t          j        j        t                     dS )z9Set an UNBREAKABLE penalty annotation for the given node.N)rv   r   rw   rx   UNBREAKABLE)r   s    r   r,   r,     s     t\,:KHHHHHr   c                  Z    | D ]'}t          |t          j        j        t                     (dS )z@Set a STRONGLY_CONNECTED penalty annotation for the given nodes.N)rv   r   rw   rx   r@   )nodesr   s     r   r6   r6     s?     % %d|.<#% % % %% %r   c                 R    fd | t          j        |                      dS )z+Set a penalty annotation on children nodes.c                 
   | |u rd S t          | t          j                  rK| j        dv rd S t	          j        | t          j        j        d          }|k     rt          |            d S d S | j	        D ]} ||           d S )N>   ifforr   r   default
r   r   r   r    r   ry   rw   rx   r!   r   )r   first_child_leafpenalty_annotationr%   RecExpressionpenaltys       r   r   z,_SetExpressionPenalty.<locals>.RecExpression  s    f$$$ 	/	)	)	)'9
'5qB B B	g	%	%w''''' 
&	% = / /%e-..../ /r   Nr   rU   )r   r   r   s    `@r   r?   r?     sG    / / / / / / -l06677777r   c                    t          j        dt          | j                  dz
            D ]}| j        |         }t	          |t
          j                  r|j        |k    ryt          j	        d          r#t          |t          j	        d                     kt          t          j        | j        |dz                      t          j	        d                     d S )Nr(   rm   SPLIT_PENALTY_BITWISE_OPERATOR)r   rL   r-   r   r   r   r   r    r   r"   r!   r   rU   )r   oprP   r%   s       r   r   r     s    q#dm"4"4q"899 9 9eM% E%%% 9%+*;*;	2	3	3 9	*J K KLLLL&t}UQY'?@@I677	9 	9 	99 9r   c                    t          j        dt          | j                  dz
            D ]}| j        |         }t	          j        |          |v ryt          j        d          r#t          |t          j        d                     \t          t	          j	        | j        |dz                      t          j        d                     d S )Nr(    SPLIT_BEFORE_ARITHMETIC_OPERATOR!SPLIT_PENALTY_ARITHMETIC_OPERATOR)
r   rL   r-   r   r   r4   r   r"   r!   rU   )r   opsrP   r%   s       r   r   r   )  s    q#dm"4"4q"899 < <eM% EU##s**	5	6	6 <	*M N NOOOO&t}UQY'?@@I9::	< 	< 	<< <r   c                 R    fd | t          j        |                      dS )z0Increase a penalty annotation on children nodes.c                     | |u rd S t          | t          j                  rF| j        dv rd S t	          j        | t          j        j        d          }t          | |z              d S | j	        D ]} ||           d S )N>   r   r   r   r   r   )r   r   r   r%   r   amts       r   r   z'_IncreasePenalty.<locals>.RecExpression8  s    f$$$ /	|	#	#.
'5qB B BgtWs]+++++= / /%e-..../ /r   Nr   )r   r  r   s    `@r   rM   rM   5  sG    / / / / / / -l06677777r   c                     | j         D ]}t          |||           t          | t          j                  r5t          j        | |d          }||k     rt          j        | ||           dS dS dS )aT  Recursively set the given annotation on all leafs of the subtree.

  Takes care to only increase the penalty. If the node already has a higher
  or equal penalty associated with it, this is a no-op.

  Args:
    tree: subtree to annotate
    annotate_name: name of the annotation to set
    annotate_value: value of the annotation to set
  r   r   N)r   rv   r   r   r   r   ry   SetNodeAnnotation)r   annotate_nameannotate_valuer%   cur_annotates        r   rv   rv   I  s     } 7 7e~6666fk"" J1mQ( ( (Ln$$$T=.IIIII	J J %$r   c                 P   t          | j        d         j                  dk    rt          j        | j        d                   dk    rt          j        | j        d                   j        dk    r*t          j        | j        d                   j        dk    rdS t          j        | j        d                   j        dk    r*t          j        | j        d                   j        dk    rdS t          | j        d         t          j	                  r| j        d         j        dv rdS d	S )
Nr(   r*   comp_opnotinTis>   ==r  F)
r-   r   r   r4   rU   r    r5   r   r   r   )r   s    r   r   r   ]  s    	"+a.
!""a''BKN++y88"2;q>228EAA!"+a.1174??T"2;q>228D@@!"+a.1175@@TQ-- k!nl**4	r   c                     t          j        | t           j        j        |          }||k     r||z
  nd}t	          | |           d S )Nr   r   )r   ry   rw   rx   r!   )r   r  r   s      r   r   r   l  sT    *
L#13@ @ @' 7]]GcMM'4!!!!!r   c                 P    t          j        | t           j        j        |           d S r   )r   r  rw   rx   )r   r   s     r   r!   r!   s  s.     |'>'L!(* * * * *r   ).r   r=   lib2to3r   yapf.yapflibr   r   r   r   r   r   rV   rs   rA   r@   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   POWERr   rt   r}   r   PyTreeVisitorr   r,   r6   r?   r   r   rM   rv   r   r   r!    r   r   <module>r     s   < ; 				       % % % % % % " " " " " " % % % % % % ' ' ' ' ' '         	

	

	 	& & &z z z z zN8 z z zzI I I
% % %8 8 8*	9 	9 	9	< 	< 	<8 8 8(J J J(  " " "* * * * *r   