
    `N`d                         d 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	  G d d	e
          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 eh d          Z eh d          Zd ZdS )aV  UnwrappedLine primitive for formatting.

An unwrapped line is the containing data structure produced by the parser. It
collects all nodes (stored in FormatToken objects) that could appear on a
single line if there were no line length restrictions. It's then used by the
parser to perform the wrapping required to comply with the style guide.
    )format_token)	py3compat)pytree_utils)split_penalty)style)symsc                       e Zd ZdZddZd Zd Zd Zd Ze	d             Z
e	d	             ZddZd Zd Ze	d             Ze	d             Ze	d             Ze	d             ZdS )UnwrappedLinea  Represents a single unwrapped line in the output.

  Attributes:
    depth: indentation depth of this line. This is just a numeric value used to
      distinguish lines that are more deeply nested than others. It is not the
      actual amount of spaces, which is style-dependent.
  Nc                     || _         |pg | _        d| _        | j        rFt          | j        dd                   D ]+\  }}| j        |         |_        || j        |         _        *dS dS )a@  Constructor.

    Creates a new unwrapped line with the given depth an initial list of tokens.
    Constructs the doubly-linked lists for format tokens using their built-in
    next_token and previous_token attributes.

    Arguments:
      depth: indentation depth of this line
      tokens: initial list of tokens
    F   N)depth_tokensdisable	enumerateprevious_token
next_token)selfr   tokensindextoks        ;lib/python3.11/site-packages/yapf/yapflib/unwrapped_line.py__init__zUnwrappedLine.__init__(   s     DJ<RDLDL| -!$,qrr"233 - -*%!\%0),U&&- -- -    c                 `   d| j         _        t          | j         j                  | j         _        | j         }| j         j        }| j        dd         D ]}|j        dk    rt          ||| j                  rd|_        |j        st          |j                  nd}|j        }t          |t                    r|j        s
J |            d}||z   |z   |_        |xj        t          ||          z  c_        t          ||          |_        |j        pt!          ||          |_        |j        }|}dS )z<Calculate the split penalty and total length for the tokens.r   Nr   )firstspaces_required_beforelenvaluetotal_lengthr   _SpaceRequiredBetweenr   is_pseudo_paren
isinstancelist
is_commentr   _SplitPenalty_MustBreakBeforemust_break_before_CanBreakBeforecan_break_before)r   
prev_tokenprev_lengthtokentok_lenr   s         r   CalculateFormattingInformationz,UnwrappedLine.CalculateFormattingInformation>   sP   
 )*DJ%!$*"233DJJ*)Kabb!  

&!
+
+

E4<
@
@ ,'($(-(=DEK   1g$;	*D	1	1 	#&&&&& "#&03IIe ]:u=== 0U C Ce

!
G_Z%G%G  &kjj; r   c                    | j         r| j        r| gS g }t          | j                  }| j        D ]L}|j        dk    r*|                    |           t          | j                  }7|                    |           M|j        r|                    |           |D ]I}t          j
        |j        j        t          j        j        d           d|j        _        d|j        _        J|S )zSplit the line at semicolons.;TN)has_semicolonr   r
   r   r   r   appendAppendTokenr   r   SetNodeAnnotationr   node
Annotation
MUST_SPLITr   lastr   )r   uwlinesuwliner   s       r   SplitzUnwrappedLine.Splitg   s      VmG4:&&F|    	c		vtz**3} nnV $ $$V\%6%1%<%GO O O$(fl!#fkNr   c                 x    | j         r| j        |_        || j        _        | j                             |           dS )z>Append a new FormatToken to the tokens contained in this line.N)r   r8   r   r   r2   )r   r,   s     r   r3   zUnwrappedLine.AppendToken   s<    | #!Ye"diLr   c                 T    |                      t          j        |                     dS )zConvenience method to append a pytree node directly.

    Wraps the node with a FormatToken.

    Arguments:
      node: the node to append
    N)r3   r   FormatToken)r   r5   s     r   
AppendNodezUnwrappedLine.AppendNode   s)     	\-d3344444r   c                     | j         d         S )z'Returns the first non-whitespace token.r   r   r   s    r   r   zUnwrappedLine.first   s     <?r   c                     | j         d         S )z&Returns the last non-whitespace token.rA   rB   s    r   r8   zUnwrappedLine.last   s     <r      c                 n    d|z  | j         z  }d                    d | j        D                       }||z   S )a  Return a "code" representation of this line.

    The code representation shows how the line would be printed out as code.

    TODO(eliben): for now this is rudimentary for debugging - once we add
    formatting capabilities, this method will have other uses (not all tokens
    have spaces around them, for example).

    Arguments:
      indent_per_depth: how much spaces to indend per depth level.

    Returns:
      A string representing the line as code.
     c              3   $   K   | ]}|j         V  d S Nr   .0r   s     r   	<genexpr>z'UnwrappedLine.AsCode.<locals>.<genexpr>   s$      <<#)<<<<<<r   )r   joinr   )r   indent_per_depthindent
tokens_strs       r   AsCodezUnwrappedLine.AsCode   sC     ##dj0F<<t|<<<<<JJr   c                 *    |                                  S rI   )rR   rB   s    r   __str__zUnwrappedLine.__str__   s    ;;==r   c                     d                     d | j        D                       }d                    | j        |          S )N,c                 N    g | ]"}d                      |j        |j                  #S )z
{0}({1!r}))formatnamer   rK   s     r   
<listcomp>z*UnwrappedLine.__repr__.<locals>.<listcomp>   s,    JJJc		SXsy	1	1JJJr   z&UnwrappedLine(depth={0}, tokens=[{1}]))rN   r   rX   r   )r   tokens_reprs     r   __repr__zUnwrappedLine.__repr__   sI    ((JJT\JJJL LK3::
K! ! !r   c                     | j         S )zAccess the tokens contained within this line.

    The caller must not modify the tokens list returned by this method.

    Returns:
      List of tokens in this line.
    rA   rB   s    r   r   zUnwrappedLine.tokens   s     <r   c                     | j         j        S )zReturn the line number of this unwrapped line.

    Returns:
      The line number of the first token in this unwrapped line.
    )r   linenorB   s    r   r_   zUnwrappedLine.lineno   s     :r   c                     | j         j        S rI   )r   r$   rB   s    r   r$   zUnwrappedLine.is_comment   s    :  r   c                 >    t          d | j        D                       S )Nc              3   ,   K   | ]}|j         d k    V  dS )r0   NrJ   rK   s     r   rM   z.UnwrappedLine.has_semicolon.<locals>.<genexpr>   s)      88CsyC888888r   )anyr   rB   s    r   r1   zUnwrappedLine.has_semicolon   s!    884<888888r   rI   )rE   )__name__
__module____qualname____doc__r   r.   r;   r3   r?   propertyr   r8   rR   rT   r\   r   r_   r$   r1    r   r   r
   r
      sC        - - - -,' ' 'R  :  5 5 5   8   8   &  ! ! !   8   8 ! ! 8! 9 9 89 9 9r   r
   c                 :    | j         p| j        p| j        p| j        S rI   )
is_keywordis_name	is_number	is_stringr   s    r   _IsIdNumberStringTokenrp      s    		H3;	H#-	H3=Hr   c                 2    t           j        j        | j        v S rI   )r   SubtypeUNARY_OPERATORsubtypesro   s    r   _IsUnaryOperatorru      s    			,	<<r   c                     | j         }|j        j        }|-t          j        |          }|dv rdS |dk    rdS |j        }|+dS dS )z=Whether a binary operation has precedence within its context.N)
arith_exprtermTatomF)r5   parentr   NodeName)r   r5   ancestorpredecessor_types       r   _HasPrecedencer~      sp    	$ [( $,X66111 T6!! U H 	r   c                 @    | j         r| j        sdS t          |           S )z>Whether to remove spaces around an operator due to precedence.F)is_arithmetic_opis_simple_exprr~   ro   s    r   _PriorityIndicatingNoSpacer     s*    		 S%7 5			r   c                 ,    | j         s| j        o|j        S rI   )rm   rl   is_subscript_colon)token1token2s     r   _IsSubscriptColonAndValuePairr   
  s    


,fn	K&2KKr   c                     | j         }|j         }| j        r,t          |          r| j        rt          | j                  rdS | j        s|j        r|                                 rdS dS | j        s|j        rdS |j        t          j        v rdS t          |           rt          |          rdS |dk    r|dk    rdS t          j
        d          r,|t          j        v r|dk    rdS |t          j        v r|dk    rdS t          j
        d          r"t          | |          st          ||           rdS |dv rdS |dk    r|dv rt          j
        d	          S |dk    rdS |d
k    r|dk    rdS |dk    r|dk    rdS |dk    r |dk    rt          j        j        | j        vrdS |j        s|j        r| j        s| j        rdS t          j        j        | j        v st          j        j        |j        v rdS t          j        j        | j        v st          j        j        |j        v rdS | j        ri|dk    rt          j        j        |j        v rdS |dvr	|j        sdS |t          j        v rt          j
        d          S t          j        j        |j        v rdS | j        r|dk    rt5          |          rdS | j        rt5          |          rdS t5          |           rt5          |          rdS | j        s|j        rv|dk    s|dk    rt          j
        d          S t          j
        d          }||v s||v rdS t          j
        d          r"t7          |           st7          |          rdS dS dS t5          |           r|dk    r|j        s|j        s|dk    rdS t          j        j        | j        v r,t          j        j        |j        vrt          j
        d          S t          j        j        |j        v r,t          j        j        | j        vrt          j
        d          S t          j        j        | j        v st          j        j        |j        v rdS t          j        j        | j        v st          j        j        | j        v rdS |dk    rt          j        j         | j        v rdS | j        r|dk    r|dk    o|dk    S |dk    r|j        r|dk    o|dk    S |dk    s|dk    rdS |dk    r|dk    s|dk    r|dk    s|dk    r|dk    rdS |s|                                 s|!                                rt          j"        dd          r0|dk    rtG          | d          s|dk    rtG          |d          rdS t          j"        d d          r0|dk    rtG          | d          s|dk    rtG          |d          rdS t          j"        d!d          r0|dk    rtG          | d          s|dk    rtG          |d          rdS |t          j        v r"|t          j        v rt          j
        d          S |t          j        v r"|t          j        v rt          j
        d          S |t          j        v r|d"v rdS |t          j        v r#t          |          rt          j
        d          S | j        r|d"v rdS |t          j        v rt          j
        d          S |dk    r|dk    rdS |t          j        v r#t5          |          rt          j
        d          S |t          j        v rDt          j        j        |j        v st          j        j        |j        v rt          j
        d          S |d#k    rdS |dk    r|d$k    rt          j
        d          S dS )%zDReturn True if a space is required between the left and right token.TFrV   :SPACE_INSIDE_BRACKETSSPACES_AROUND_SUBSCRIPT_COLONz:,z]}).SPACE_BETWEEN_ENDING_COMMA_AND_CLOSING_BRACKETfrom.import=z[)]}.**SPACES_AROUND_POWER_OPERATOR*NO_SPACES_AROUND_SELECTED_BINARY_OPERATORS ARITHMETIC_PRECEDENCE_INDICATIONnot(%SPACES_AROUND_DEFAULT_OR_NAMED_ASSIGN@Noneprint)[]{}SPACES_AROUND_DICT_DELIMITERS)
is_openingSPACES_AROUND_LIST_DELIMITERSSPACES_AROUND_TUPLE_DELIMITERSz([r0   await)$r   r!   rp   r   
OpensScopeis_continuationrY   r   NONSEMANTIC_TOKENSr   GetOPENING_BRACKETSCLOSING_BRACKETSr   r   rr   DEFAULT_OR_NAMED_ASSIGNrt   rk   rl   SUBSCRIPT_COLON
TYPED_NAMErn    DEFAULT_OR_NAMED_ASSIGN_ARG_LISTis_binary_opSUBSCRIPT_BRACKETru   r   rm   VARARGS_LISTVARARGS_STARKWARGS_STAR_STAR	DECORATORClosesScopeGetOrDefault_IsDictListTupleDelimiterTok)leftrightis_line_disabledlvalrval
block_lists         r   r    r      s   	$	$
 5e<< 
4T5HII 4	 U2  T5	 U2 5
Z<2225D!! &<U&C&C 4	S[[TS[[4
Y&'' |,,,T|,,,Ti/00 $T511$UD11 4	T\\5	S[[TU]]9EFFF	S[[4	V^^4	S[[TX%%4
ckkdckk2$-GG4 5= , 4*dm;;*en<<5%66%774	^ ,M>  U75#5 T|,,, Y.///-??U	 44<<,<U,C,C<4	_ )%00 4d  0 7 7 5	 %, t||tt||Y5666GHHJzTZ//Uy344 	#D	)	) -G-N-N utTt } "/ "/+/3;; 52dmCC%U^;;9<===2enDD%T]::9<==='4=88'5>995'4=88+t}<<5	S[[\)3t}DD5	_ .6>-dgo-	S[[U%[6>-dgo-	S[[DCKK5s{{ts{{s{{ts{{5	 t00 E4E4E4G4G :EBB 	5dtLLL		%e	>	>	> 
T:EBB 	5dtLLL		%e	>	>	> 
T;UCC 	5dtLLL		%e	>	>	> 
T
l+++
l+++ 9,---
l+++
l+++ 9,---	\***tt|| 5	\***/Ee/L/L* 9,---	\ ddll5	\*** 9,---	W__5	\***/?/F/F* 9,---
l+++(EN::,>> 9,---	S[[5	S[[TW__ 9,---	r   c                     | j         s| j        r| j        r| j        j         rdS |j        r| j        rt	          |          rdS t          j        |j        t
          j        j	        d          S )zAReturn True if a line break is required before the current token.TF)default)
r$   r   r!   rn   IsSurroundedByBracketsr   GetNodeAnnotationr5   r6   r7   )r*   	cur_tokens     r   r&   r&     s     z8 )9)8C 4 j2 Y''
 4		'nl-8%
I 
I 
I Ir   c                    | j         }|j         }t          j        r|dk    r|dk    rdS |dv r|dv rdS |j        t          j        k    rdS |dk    rdS |dk    rdS |dk    rdS | j        r|d	k    rdS | j        r|d
k    rdS |j        r| j        |j        k    rdS t          j	        j
        | j        v rdS t          j        d          s2t          j	        j        |j        v st          j	        j        | j        v rdS dS )z?Return True if a line break may occur before the current token.yieldr   F>   asyncr   >   defforwithr   r   rV   r   r   +ALLOW_SPLIT_BEFORE_DEFAULT_OR_NAMED_ASSIGNST)r   r   PY3r   UNBREAKABLErl   r$   r_   r   rr   rs   rt   r   r   r   r*   r   pvalcvals       r   r(   r(     s;   		$	$] w46>>U!!!d.D&D&DU 9995	S[[5	S[[5	S[[5 DCKK5 DCKK5 j/93CCC5(J,???5	@	A	A 4	8JJJ4
8KKKU	r   c                 .   d}d}d}| j         }|r|j        dk    r|dz  }n!|j        dk    r|dz  }n|j        dk    r|dz  }|j        dk    r|dk    r|S |dz  }n1|j        dk    r|dk    r|S |dz  }n|j        dk    r|dk    r|S |dz  }|j         }|d	S )
z3Return True if the token is surrounded by brackets.r   r   r   r   r   r   r   r   N)r   r   )r   paren_countbrace_countsq_bracket_countr   s        r   r   r     s   ++%. 3s""Qkk			$	$Qkk			$	$!s""			Qkk			$	$			Qkk			$	$	Q		!#2N+ 	 3, 
r   c                    | sJ | j         dS |r
| }| j         }n	| j         }| }|j        |k    rdS |j        j        sJ |j        j        j        sJ |j        j        j        j        t
          j        t
          j        t
          j        fv S )NF)	matching_bracketr   r5   rz   typepython_symbolsdictsetmaker	listmakertestlist_gexp)r   r   open_tok	close_toks       r   r   r   :  s    	***!5 H$II#HI I%%5			!!!!			!	((((			!	(	-!"2 
 r   andor>   &^|>   //*%+-/r   c                    | j         }|j         }|dk    rt          j        S |j        dk    r|j        S t	          j        d          r)|t          v rt	          j        d          S |t          v rdS n(|t          v rdS |t          v rt	          j        d          S t	          j        d          r)|t          v rt	          j        d          S |t          v rdS n(|t          v rdS |t          v rt	          j        d          S t          j	        j
        |j        v st          j	        j        |j        v rdS t          j	        j        | j        v rt	          j        d          S |dk    rdS |d	k    s|d	k    rt          j        S t          j	        j        | j        v st          j	        j        | j        v rt          j        S |                                 r|d
k    rt	          j        d          S |dk    rt          j        S |dk    rt          j        S t          j	        j        | j        v st          j	        j        |j        v rt          j        S |dk    rt          j        S |                                rdS dS )zBReturn the penalty for breaking the line before the current token.r   r   SPLIT_BEFORE_LOGICAL_OPERATORSPLIT_PENALTY_LOGICAL_OPERATORSPLIT_BEFORE_BITWISE_OPERATORSPLIT_PENALTY_BITWISE_OPERATOR"SPLIT_PENALTY_AFTER_UNARY_OPERATORrV   r   r   #SPLIT_PENALTY_AFTER_OPENING_BRACKETr   r   z==d   )r   r   r   node_split_penaltyr   r   _LOGICAL_OPERATORS_BITWISE_OPERATORSr   rr   COMP_FORrt   COMP_IFrs   STRONGLY_CONNECTEDr   r   r   r   r   r   s       r   r%   r%   Z  s   		$	$	U]]$$!A%%''
Y.// 9!!!Y7888!!!Q " !!!Q!!!Y7888
Y.// 9!!!Y7888!!!Q " !!!Q!!!Y7888#y'999"i&8881(J,???99:::	S[[1	T\\TT\\++':+>>>+z/BBB$$ <9:;;;	S[[$$	S[[$$2j6III2i6HHH$$	T\\++ 3	
r   N)rg   yapf.yapflibr   r   r   r   r   lib2to3.fixer_utilr   r   objectr
   rp   ru   r~   r   r   r    r&   r(   r   r   	frozensetr   r   _ARITHMETIC_OPERATORSr%   ri   r   r   <module>r      s    & % % % % % " " " " " " % % % % % % & & & & & &       5 5 5 5 5 5~9 ~9 ~9 ~9 ~9F ~9 ~9 ~9BI I I= = =  4  L L LP P PfI I I"& & &R  >  6 Yt}-- Y// !	"F"F"FGG G G G G Gr   