a
    
d}_                     @   s*  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d Z$G d d! d!e	j%Z&d"d# Z'd$d% Z(d&d' Z)d(d) Z*d*d+ Z+d,d- Z,d.d/ Z-e.h d0Z/d1d2 Z0d3d4 Z1d5d6 Z2dS )7z5Computation of split penalties before/between tokens.    N)pytree)token)pytree_utils)pytree_visitor)style)subtypesi@B i:  i  i  i  i  d   i  iL  i  i  ix  i  i  i  il  i  i4  i  i  ip  c                 C   s   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)tree r   b/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/yapf/pytree/split_penalty.pyComputeSplitPenalties6   s    r   c                       s@  e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z e!d<d=hZ"d>d? Z#e!h d@Z$dAdB Z%dCdD Z&dEdF Z'dGdH Z(  Z)S )Ir	   z~Assigns split penalties to tokens, based on parse tree structure.

  Split penalties are attached as annotations to tokens.
  c                    s   t |dstt| | d S )N	is_pseudo)hasattrsuperr	   r
   selfnode	__class__r   r   r
   E   s    
z_SplitPenaltyAssigner.Visitc                 C   sL   |  | d }|jD ]2}|rBt|tjrB|jdkrBt|td |}qd S )N,ZSPLIT_PENALTY_IMPORT_NAMES)	DefaultNodeVisitchildren
isinstancer   Leafvalue_SetSplitPenaltyr   Getr   r   Z
prev_childchildr   r   r   Visit_import_as_namesI   s    

z+_SplitPenaltyAssigner.Visit_import_as_namesc                 C   sF   t |jd  t|jdkr*t |jd  t |jd  | | d S )N         )_SetUnbreakabler   lenr   r   r   r   r   Visit_classdefS   s
    z$_SplitPenaltyAssigner.Visit_classdefc                 C   s   d}t |j| dkr"|d7 }qt|j|  d}|t|jk rt|j| tjrz|j| jdkrfq|j| jdkrz|}|d7 }q4t|j|  | 	| |dkrt
t |j|d  d t|j|  t|j|d   d S )Nr"   Zsimple_stmt:z->r   )r   NodeNamer   r&   r'   r   r   r   r   r   r   LastLeafNode_SetStronglyConnected)r   r   Z	colon_idxZ	arrow_idxr   r   r   Visit_funcdef_   s(    


z#_SplitPenaltyAssigner.Visit_funcdefc                 C   sZ   t d}|s<|jD ]&}|jtjkrtd|jrd} q<q|rLt	|t
 n
t	|t d S )NZALLOW_MULTILINE_LAMBDASz"pylint:.*disable=.*\bg-long-lambdaT)r   r   r   typegrammar_tokenCOMMENTresearchr   _SetExpressionPenaltySTRONGLY_CONNECTEDVERY_STRONGLY_CONNECTED)r   r   Zallow_multiline_lambdasr    r   r   r   Visit_lambdefx   s    

z#_SplitPenaltyAssigner.Visit_lambdefc                 C   s>   |  | t|jd  tds:tds:t|jd  d S )Nr   INDENT_CLOSING_BRACKETSDEDENT_CLOSING_BRACKETSr)   )r   r&   r   r   r   r-   r   r   r   r   Visit_parameters   s    

z&_SplitPenaltyAssigner.Visit_parametersc                 C   s   |j d jtjkr | | d S | | tdt|j D ],}|j | }t|t	j
r:|jdkr:t| q:|j D ]}t|dkrnt|t qnd S )Nr   r"   r   atom)r   r/   r0   STARVisit_star_exprr   ranger'   r   r   r   r   r&   r   r+   _IncreasePenalty	CONNECTEDr   r   indexr    r   r   r   Visit_arglist   s    




z#_SplitPenaltyAssigner.Visit_arglistc                 C   sx   |  | tdt|jd D ]T}|j| }t|tjr|jdkrtt	
|j| t tt	
|j|d  t qd S )Nr"   =r   r>   r'   r   r   r   r   r   r   r   FirstLeafNodeNAMED_ASSIGNrA   r   r   r   Visit_argument   s    

z$_SplitPenaltyAssigner.Visit_argumentc                 C   sx   |  | tdt|jd D ]T}|j| }t|tjr|jdkrtt	
|j| t tt	
|j|d  t qd S )Nr"   r*   rE   rA   r   r   r   Visit_tname   s    

z!_SplitPenaltyAssigner.Visit_tnamec                 C   sV   |j D ]}| | qt|j d dr*dnd}t|t|j D ]}t|j |  q>d S )Nr   r   r$   r"   )r   r
   r   r>   r'   r&   )r   r   r    startir   r   r   Visit_dotted_name   s
    
z'_SplitPenaltyAssigner.Visit_dotted_namec                 C   s.   |j D ]"}| | |jtjkrt| qd S N)r   r
   r/   r0   COLONr-   )r   r   r    r   r   r   Visit_dictsetmaker   s    

z(_SplitPenaltyAssigner.Visit_dictsetmakerc                 C   s  |j d jdkrNtd}t|j d |r,tnt t|j d |rDtnt n&t|j dkrpt|j d t nt|j dkrtt	|j d }|dv rt
|j d  t|j d j dkrt	|j d j d dkrtt|j d d ntt|j d t nT|j d jtjkrt|j d j dkr|d	sJ|d
rt
|j d j d  t
|j d j d  |d	rtdp|d
otd}|rtt|j d j d d ntt|j d j d d t|j d tjjt nd|dvr\tt|tjj}|rFtj|v rFt|t t|j d t nt
|j d |j d  |dkrtt
|j d  | | d S )Nr   .ZSPLIT_BEFORE_DOTr"   r$      >   argument
comparisonZcomp_for_testZ_exprSPLIT_BEFORE_LOGICAL_OPERATORSPLIT_BEFORE_BITWISE_OPERATORr)   >   rS   Zand_testrR   arglistpowerZor_testZtermr;   rW   )r   r   r   r   r   r6   DOTTED_NAMEr'   r   r+   r-   rF   ONE_ELEMENT_ARGUMENTr/   r0   LSQBendswithr,   _RecAnnotate
AnnotationSPLIT_PENALTYGetNodeAnnotationSUBTYPEr   SUBSCRIPT_BRACKETr?   	SUBSCRIPTr@   r   )r   r   beforenameZsplit_beforestypesr   r   r   Visit_trailer   st    








z#_SplitPenaltyAssigner.Visit_trailerc                 C   s  |  | t|jdkrt|jd dkrt|jd }|jdkrZt|jd jd  d}|t|jd k r|d }|j| }t|dkrq|j| }|jd jdkrt|jd  t|jd  |}q^|jdd  D ]}t|dkr q|jd jdv rt|jdkrt	|jd tj
j}|rPtj|v rPtt|jd  t|}	|	j d	rr|	j}	td
stdst|	j}
|
jdkr|	jdkrt|	 n
t|	t qt|jd  qd S )Nr"   trailerrP   r   r)   )z([r$   #r8   r9   r   ])r   r'   r   r   r+   rF   r   r&   r-   r`   r^   ra   r   rb   r,   strip
startswithZprev_siblingr   r   r   r6   )r   r   firstZprev_trailer_idxZcur_trailer_idxZcur_trailerZprev_trailerrh   rf   Zlast_child_nodelastr   r   r   Visit_power  sT    





z!_SplitPenaltyAssigner.Visit_powerc                 C   sR   |  | tt|d d }|jD ](}|rH|jtjkrHtt|d |}q$d S )Nr   )r   r   r   rF   r   r/   r0   COMMAr   r   r   r   Visit_subscriptlistX  s    

z)_SplitPenaltyAssigner.Visit_subscriptlistc                 C   s   t |j  | | d S rM   )r-   r   r   r   r   r   r   Visit_subscriptb  s    
z%_SplitPenaltyAssigner.Visit_subscriptc                 C   s0   t t|d t|jdd    | | d S )Nr   r"   )r   r   rF   r-   r   r   r   r   r   r   Visit_comp_forg  s    z$_SplitPenaltyAssigner.Visit_comp_forc                 C   s   |  | d S rM   )rt   r   r   r   r   Visit_old_comp_form  s    z(_SplitPenaltyAssigner.Visit_old_comp_forc                 C   s6   t |jd td t|jdd    | | d S )Nr   ZSPLIT_PENALTY_BEFORE_IF_EXPRr"   )r   r   r   r   r-   r   r   r   r   r   Visit_comp_ifq  s
    
z#_SplitPenaltyAssigner.Visit_comp_ifc                 C   s   |  | d S rM   )rv   r   r   r   r   Visit_old_comp_ifx  s    z'_SplitPenaltyAssigner.Visit_old_comp_ifc                 C   s   t |t | | d S rM   )r?   OR_TESTr   r   r   r   r   
Visit_test|  s    
z _SplitPenaltyAssigner.Visit_testc                 C   st   |  | t|t d}|d t|jk rptdrLtt	|j| t ntt	|j|d  t |d7 }qd S Nr"   rU   r$   )
r   r?   rx   r'   r   r   r   _DecrementSplitPenaltyr   rF   r   r   rB   r   r   r   Visit_or_test  s    


z#_SplitPenaltyAssigner.Visit_or_testc                 C   st   |  | t|t d}|d t|jk rptdrLtt	|j| t ntt	|j|d  t |d7 }qd S rz   )
r   r?   AND_TESTr'   r   r   r   r{   r   rF   r|   r   r   r   Visit_and_test  s    


z$_SplitPenaltyAssigner.Visit_and_testc                 C   s   |  | t|t d S rM   )r   r?   NOT_TESTr   r   r   r   Visit_not_test  s    
z$_SplitPenaltyAssigner.Visit_not_testc                 C   sV   |  | t|jdkrHt|rHt|jd t tt|jd t	 n
t|t
 d S )NrQ   r"   r$   )r   r'   r   _StronglyConnectedCompOpr?   r6   r   r   rF   r5   
COMPARISONr   r   r   r   Visit_comparison  s    
z&_SplitPenaltyAssigner.Visit_comparisonc                 C   s   |  | t|t d S rM   )r   r?   	STAR_EXPRr   r   r   r   r=     s    
z%_SplitPenaltyAssigner.Visit_star_exprc                 C   s"   |  | t|t t|d d S )N|)r   r?   EXPR_SetBitwiseOperandPenaltyr   r   r   r   
Visit_expr  s    

z _SplitPenaltyAssigner.Visit_exprc                 C   s"   |  | t|t t|d d S )N^)r   r?   XOR_EXPRr   r   r   r   r   Visit_xor_expr  s    

z$_SplitPenaltyAssigner.Visit_xor_exprc                 C   s"   |  | t|t t|d d S )N&)r   r?   AND_EXPRr   r   r   r   r   Visit_and_expr  s    

z$_SplitPenaltyAssigner.Visit_and_exprc                 C   s   |  | t|t d S rM   )r   r?   
SHIFT_EXPRr   r   r   r   Visit_shift_expr  s    
z&_SplitPenaltyAssigner.Visit_shift_exprPLUSMINUSc                 C   s$   |  | t|t t|| j d S rM   )r   r?   
ARITH_EXPR_SetExpressionOperandPenalty
_ARITH_OPSr   r   r   r   Visit_arith_expr  s    

z&_SplitPenaltyAssigner.Visit_arith_expr>   r<   ATSLASHDOUBLESLASHPERCENTc                 C   s$   |  | t|t t|| j d S rM   )r   r?   TERMr   	_TERM_OPSr   r   r   r   
Visit_term  s    

z _SplitPenaltyAssigner.Visit_termc                 C   s   |  | t|t d S rM   )r   r?   FACTORr   r   r   r   Visit_factor  s    
z"_SplitPenaltyAssigner.Visit_factorc                 C   s   |  | |jd jdkrt|jd ds|jd jdkrt|jdkr\t|jd t qt	|jdkrtt
|jd t t|jd t n,|jd jd	v rt	|jdkrt|jd  d S )
Nr   (r   r)   ri   Zif_stmtr$   r"   z[{)r   r   r   r   r   r+   parentr   r5   r'   rF   r   ATOMr&   r   r   r   r   
Visit_atom  s    
z _SplitPenaltyAssigner.Visit_atomc                 C   sZ   |  | d}|jD ]@}t|tjr<|jdkr<t| d}q|rPtt	|t
 d}qd S )NFr   T)r   r   r   r   r   r   r&   r   r   rF   TOGETHER)r   r   Zprev_was_commar    r   r   r   Visit_testlist_gexp  s    

z)_SplitPenaltyAssigner.Visit_testlist_gexp)*__name__
__module____qualname____doc__r
   r!   r(   r.   r7   r:   rC   rH   rI   rL   rO   rg   rp   rr   rs   rt   ru   rv   rw   ry   r}   r   r   r   r=   r   r   r   r   	frozensetr   r   r   r   r   r   r   __classcell__r   r   r   r   r	   ?   sJ   

BF

r	   c                 C   s   t | tjjt dS )z9Set an UNBREAKABLE penalty annotation for the given node.N)r]   r   r^   r_   UNBREAKABLE)r   r   r   r   r&     s    r&   c                  G   s   | D ]}t |tjjt qdS )z@Set a STRONGLY_CONNECTED penalty annotation for the given nodes.N)r]   r   r^   r_   r5   )nodesr   r   r   r   r-     s    
r-   c                    s"    fdd  | t |  dS )z+Set a penalty annotation on children nodes.c                    sh   | |u rd S t | tjrN| jdv r&d S tj| tjjdd}|k rdt|  n| j	D ]} || qTd S )N>   forr   ifr   default
r   r   r   r   r   r`   r^   r_   r   r   )r   first_child_leafZpenalty_annotationr    RecExpressionpenaltyr   r   r     s    


z,_SetExpressionPenalty.<locals>.RecExpressionNr   rF   r   r   r   r   r   r4     s    r4   c                 C   sz   t dt| jd D ]`}| j| }t|tjr|j|krtdrTt	|td qt	t
| j|d  td qd S )Nr"   rV   ZSPLIT_PENALTY_BITWISE_OPERATOR)r>   r'   r   r   r   r   r   r   r   r   r   rF   )r   oprB   r    r   r   r   r     s    

r   c                 C   sr   t dt| jd D ]X}| j| }t||v rtdrLt|td qtt| j|d  td qd S )Nr"   Z SPLIT_BEFORE_ARITHMETIC_OPERATORZ!SPLIT_PENALTY_ARITHMETIC_OPERATOR)	r>   r'   r   r   r+   r   r   r   rF   )r   opsrB   r    r   r   r   r   )  s    

r   c                    s"    fdd  | t |  dS )z0Increase a penalty annotation on children nodes.c                    sd   | |u rd S t | tjrJ| jdv r&d S tj| tjjdd}t| |  n| j	D ]} || qPd S )N>   r   r   r   r   r   )r   r   r   r    r   amtr   r   r   8  s    


z'_IncreasePenalty.<locals>.RecExpressionNr   )r   r   r   r   r   r?   5  s    r?   c                 C   sN   | j D ]}t||| qt| tjrJtj| |dd}||k rJt| || 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   r]   r   r   r   r   r`   SetNodeAnnotation)r   Zannotate_nameZannotate_valuer    Zcur_annotater   r   r   r]   I  s    
r]   >	   z<>z>=inz<=z==is>z!=<c                 C   s   t | jd jdkrt| jd dkrt| jd jdkrXt| jd jdkrXdS t| jd jdkrt| jd jdkrdS t| jd tj	r| jd jt
v rdS dS )	Nr"   r$   Zcomp_opnotr   Tr   F)r'   r   r   r+   rF   r   r,   r   r   r   	_COMP_OPS)r   r   r   r   r   `  s     r   c                 C   s6   t j| t jj|d}||k r$|| nd}t| | d S )Nr   r   )r   r`   r^   r_   r   )r   r   r   r   r   r   r{   o  s
    
r{   c                 C   s   t | t jj| d S rM   )r   r   r^   r_   r   r   r   r   r   v  s    r   )3r   r2   Zyapf_third_party._ylib2to3r   Z yapf_third_party._ylib2to3.pgen2r   r0   Zyapf.pytreer   r   Zyapf.yapflibr   r   r   rG   rY   r6   r5   r@   r   rx   r~   r   r   r   r   r   r   r   r   r   r   POWERr   rZ   rc   r   ZPyTreeVisitorr	   r&   r-   r4   r   r   r?   r]   r   r   r   r{   r   r   r   r   r   <module>   s\   	   @