
    `N`!                         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  G d de          Z e	h 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          ZdS )a  Implements a format decision state object that manages whitespace decisions.

Each token is processed one at a time, at which point its whitespace formatting
decisions are made. A graph of potential whitespace formattings is created,
where each node in the graph is a format decision state object. The heuristic
tries formatting the token with and without a newline before it to determine
which one has the least penalty. Therefore, the format decision state object for
each decision needs to be its own unique copy.

Once the heuristic determines the best formatting, it makes a non-dry run pass
through the code to commit the whitespace formatting.

  FormatDecisionState: main class exported by this module.
    )format_token)object_state)split_penalty)style)unwrapped_linec                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd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S )FormatDecisionStatea  The current state when indenting an unwrapped line.

  The FormatDecisionState object is meant to be copied instead of referenced.

  Attributes:
    first_indent: The indent of the first token.
    column: The number of used columns in the current line.
    line: The unwrapped line we're currently processing.
    next_token: The next token to be formatted.
    paren_level: The level of nesting inside (), [], and {}.
    lowest_level_on_line: The lowest paren_level on the current line.
    stack: A stack (of _ParenState) keeping track of properties applying to
      parenthesis levels.
    comp_stack: A stack (of ComprehensionState) keeping track of properties
      applying to comprehensions.
    param_list_stack: A stack (of ParameterListState) keeping track of
      properties applying to function parameter lists.
    ignore_stack_for_comparison: Ignore the stack of _ParenState for state
      comparison.
    column_limit: The column limit specified by the style.
  c                     |j         | _        || _        || _        d| _        d| _        d| _        t          ||          g| _        g | _	        g | _
        || _        t          j        d          | _        dS )a  Initializer.

    Initializes to the state after placing the first token from 'line' at
    'first_indent'.

    Arguments:
      line: (UnwrappedLine) The unwrapped line we're currently processing.
      first_indent: (int) The indent of the first token.
    r   FCOLUMN_LIMITN)first
next_tokencolumnlineparen_levellowest_level_on_lineignore_stack_for_comparison_ParenStatestack
comp_stackparam_list_stackfirst_indentr   Getcolumn_limit)selfr   r   s      Blib/python3.11/site-packages/yapf/yapflib/format_decision_state.py__init__zFormatDecisionState.__init__;   sv     jDODKDID !D',D$lL99:DJDOD$D	.11D    c                    t          | j        | j                  }| j        |_        | j        |_        | j        |_        | j        |_        | j        j        |j        _        | j        |_        | j        |_        | j        |_        d | j	        D             |_	        d | j
        D             |_
        d | j        D             |_        |S )z$Clones a FormatDecisionState object.c                 6    g | ]}|                                 S  Clone.0states     r   
<listcomp>z-FormatDecisionState.Clone.<locals>.<listcomp>\   s     7775777r   c                 6    g | ]}|                                 S r    r!   r#   s     r   r&   z-FormatDecisionState.Clone.<locals>.<listcomp>]   s     AAAekkmmAAAr   c                 6    g | ]}|                                 S r    r!   r#   s     r   r&   z-FormatDecisionState.Clone.<locals>.<listcomp>^   s     MMMeEKKMMMMMr   )r	   r   r   r   r   r   depthr   r   r   r   r   )r   news     r   r"   zFormatDecisionState.CloneQ   s    
di):
;
;C_CNCJyCH&COY_CHN#8C&*&FC#(C77DJ777CIAAAAACNMMt7LMMMCJr   c                 2   | j         |j         k    o| j        |j        k    ow| j        |j        k    og| j        j        |j        j        k    oM| j        |j        k    o=| j        p6|j        p/| j        |j        k    o| j        |j        k    o| j	        |j	        k    S N)
r   r   r   r   r)   r   r   r   r   r   r   others     r   __eq__zFormatDecisionState.__eq__a   s     Ou// >K5<'> 11> IOuz//> %)CC	>
 - =.=26*2K 3=_ 003="e&<<?r   c                     | |k     S r,   r    r-   s     r   __ne__zFormatDecisionState.__ne__o       u}r   c                 f    t          | j        | j        | j        | j        j        | j        f          S r,   )hashr   r   r   r   r)   r   r   s    r   __hash__zFormatDecisionState.__hash__r   s2    $+t/?$";= > > >r   c                     d| j         t          | j                  | j        d                    d | j        D                       dz   fz  S )Nz9column::%d, next_token::%s, paren_level::%d, stack::[
	%sz
	c              3   4   K   | ]}t          |          V  d S r,   )repr)r$   ss     r   	<genexpr>z/FormatDecisionState.__repr__.<locals>.<genexpr>y   s(      55Qa555555r   ])r   r9   r   r   joinr   r5   s    r   __repr__zFormatDecisionState.__repr__v   sO    I[$t//1A[[55$*55555;== >r   c                 <   | j         }|j        }|j        rdS |sFt          j        j        |j        v r.t          j        j        |j        vrt          j	        d          sdS |s.t          j        j
        |j        v rt          j	        d          sdS |rk|j        dk    r`|j        dk    rU|j        }|r|j        }|r	|j        dvrn	|j        }||r.t          j        j
        |j        v rt          j	        d          sdS |r|j        dk    r|j        dk    rdS |j        S )zDetermine if we can split before the next token.

    Arguments:
      must_split: (bool) A newline was required before this token.

    Returns:
      True if the line can be split before the next token.
    FALLOW_MULTILINE_DICTIONARY_KEYSALLOW_SPLIT_BEFORE_DICT_VALUE()>   DOTNAME.)r   previous_tokenis_pseudo_parenr   SubtypeDICTIONARY_KEY_PARTsubtypesDICTIONARY_KEYr   r   DICTIONARY_VALUEvaluenamecan_break_before)r   
must_splitcurrentprevioustokenprevs         r   CanSplitzFormatDecisionState.CanSplit{   sh    oG%H U 0G4DDD+73CCCI788 	D U -1AAAI566 	BU HNc))gms.B.B %e %# 	ty77
$	  %
 
 <'8ENJJy899 	 HNc))gms.B.BU##r   c                    | j         }|j        }|j        rdS |j        rdS |sdS t	          j        d          r|j        dk    rdS t	          j        d          rH|j        dk    r=t          |          }|sdS |j        rdS ||j	        k    r| 
                    |           S | j        d         j        rg|j        dv rt	          j        d          s|j        d	v rAt	          j        d
          r-t          j        j        |j        vr|j        t$          j        k    S |j        dk    r!|j        dk    rt)          |j	                  sdS t	          j        d          r4t+          | j        j                  rt1          | j        j                  sdS t	          j        d          s)t	          j        d
          st	          j        d          r&|                                r|n|}t          j        j        |j        vr|                                rt	          j        d          r|                                rdS t7          |          rt9          j        |          r|j	        }nt=          |j	                  }|                     ||          sd| j        d         _        dS nNt	          j        d          st	          j        d
          r&|                                r| j        d         j        S t	          j        d          rT|j         rMd }|j        dk    r?|j        s8t9          j        |          s$|j        }|r|j         s|j!        s ||          rdS |j         s|j"        r|j        dk    rd}|j         }	|j         r=|	r-|	j         s|	j        dk    r|	j         }	|	r|	j         |	j        dk    |	o
|	j        dk    }n-|j"        r&|	r|	j"        r|	j         }	|	r|	j"        |	o
|	j        dk    }|ret9          j        |          }
|
rO|
j        dv r|                     |
|
j	                  sdS n(|	j        dk    r|                     ||	j	                  sdS |                                r||j        dk    rqt          j        j#        |j         j        vrTt9          j        |          }
|
r>|
j        dv r5t          j        j        |
j        vr|                     ||j	                  sdS t	          j        d          rt          j        j#        |j        v r|j        s|j        dk    r|j        rt          |j                  }|rw|j        dk    rl|j        re|j        j         rY|                     ||j	                  r>|j	        j         r2|j	        j         r|j	        j         j        dk    rtI          |          rdS dS t	          j        d          rt          j        j%        |j        v rdS t          j        j&        |j        v s|j        r^|j        dk    rS|j        sL|                                s8t          |          }| '                    |          st	          j        d          S |j        dk    rA|j	        }|                     ||          s$|j        j        dk    rd| j        d         _        dS t	          j        d          r|j        st          j        j(        |j        v r|j        dvr|j        dvrtS          |          s|j        dk    r|                     ||j	                  rt9          j        |          rdS t	          j        d          st	          j        d          sdS | j*        | j        d         j+        z
  }|t	          j        d          k    S t          |          }|r| 
                    |           S |j        dvr"|j        dk    r| ,                    |          rdS t	          j        d          rDt          |          }|r3|j        r,|j        j         r |j        dv r|j	        j        j        dk    rdS |j         s	|j        d v r|j        dk    rt          |          }|r|j        dk    r|j        r|j        j         s|j        j        d v rd}|}|r3|j        dk    rd}n%|j         s|j        d v s|j        dk    rn	|j         }|3|r\|                     ||j	                  r?|j	        j         r5|j	        j         j        dk    r |j	        j                                         sdS |j        }|j        dk    rE|j        dk    r:|r8|j         r1|j	        }|j         }|j        dk    r|                     ||          sdS |j         r@|r=|j         r5|j        dk    r)|                     ||j	                  st[          |          rt	          j        d          st	          j        d          rdS t          |          }|r|j        dk    r|j        r|j        j         s|j        j        d v rd}|}|r3|j        dk    rd}n%|j         s|j        d v s|j        dk    rn	|j         }|3|r\|                     ||j	                  r?|j	        j         r5|j	        j         j        dk    r |j	        j                                         sdS |                                r|                                s|j        st          j        j        |j        vrp|r6|j!        s/|j         s(|}||j	        k    r|j        rdS |j         }||j	        k    |j        dk    r|j        }|r|j         s|                     ||j	                  rdS n|                     ||j	                  st]          |j/                  d!k    rdS |j/        |j	        gz   }d!}|t]          |          k     r\||d!z
                                           s'|                     ||d!z
           ||                   sdS |d!z  }|t]          |          k     \| j0        | j*        z
  tc          | j0                  z  d"k     rdS n|                     ||j	                  sdS t	          j        d#          r|j        d$v r|j2        |j2        k     rdS |j        r-|j2        |j2        |j        3                    d%          z
  k     rdS dS )&z:Returns True if the line must split before the next token.FT SPLIT_ALL_COMMA_SEPARATED_VALUES,*SPLIT_ALL_TOP_LEVEL_COMMA_SEPARATED_VALUESz}]SPLIT_BEFORE_CLOSING_BRACKETz}])INDENT_CLOSING_BRACKETSrC   SPLIT_BEFORE_FIRST_ARGUMENTDEDENT_CLOSING_BRACKETSCOALESCE_BRACKETS+SPLIT_BEFORE_EXPRESSION_AFTER_OPENING_PARENc                     | rJ| j         dk    rdS | j         dk    r| j         S |                                 r| j        j        } n| j        } | JdS )z6Check if it's an expression surrounded by parentheses.rY   FrC   )rN   r   
OpensScopematching_bracketrT   s    r   SurroundedByParensz9FormatDecisionState.MustSplit.<locals>.SurroundedByParens  so     	%[C5[C''' %*5EE$E  	% ur   rB   rF   %z[{ EACH_DICT_ENTRY_ON_SEPARATE_LINE{SPLIT_BEFORE_DICT_SET_GENERATORrA   SPLIT_BEFORE_NAMED_ASSIGNS>   *:=**z:=,)CONTINUATION_INDENT_WIDTHz{)%SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATEDz(,>   rl   ro      g333333?SPLIT_BEFORE_BITWISE_OPERATORz&|
)4r   rG   rH   must_break_beforer   r   rN   _GetOpeningBracket
is_commentrd   _ContainerFitsOnStartLiner   split_before_closing_bracketr   rI   SUBSCRIPT_BRACKETrK   node_split_penaltyr   UNBREAKABLE_IsSingleElementTuple_IsCompoundStatementr   r   _IsFunctionDefClosesScoperc   _IsLastScopeInLiner   IsSurroundedByBrackets_LastTokenInLine_FitsOnLineis_name
is_keyword	is_stringrL   _ScopeHasNoCommasDICT_SET_GENERATORrM   _EachDictEntryFitsOnOneLine DEFAULT_OR_NAMED_ASSIGN_ARG_LIST_IsFunctionDefinitionr   
last_space_ArgumentListHasDictionaryEntry_IsFunctionCallWithArgumentslencontainer_elementsr   floatlinenocount)r   rR   rS   openingbracket
last_tokenrf   pptokenfunc_call_or_string_formattokopen_bracketclosingr   is_func_call	ppreviousdict_endr   rT   elementsis                       r   	MustSplitzFormatDecisionState.MustSplit   s   oG%H U  T Uy344 39N9NT	>?? ;#"7++g  t		  u 
G,	,	,11'::::
23 G	$		59-K#L#L		%		EI.G$H$H				/w7G	G	G)]-FFF3!6!6!'":;; "7T 		/00 TY_--49?++ U 		+,, =	+,,=	/00= #..00>hg			/w7G	G	G 	=Y*++ !!## U$W-- D3G<<D 1JJ)'*BCCJ!!':66  ;?DJrN74	 i122 	=i122	=8?8K8K8M8M	= B<
<	?@@    .C

(@
3H==  ) 	GO 	G4F 	w''	 "7, "(.C2G2G $) c	 > 	s{ 	ci3&6&6#  	s{ 	ci3&6&6%(%=SY#-="" > 	cm 	#  	cm 	%(%=SY#-="	# 	%<WEE 	4''##L$0$AC C T yC##GS-ABB T 3!6!6+73E3NNN $:7CCl
 <-55


08M
M
M)ABB 	 		455 +w/??? 	@ 
3		8#:	$X%<== 	,,1G,"* - x)BCC 	'2	+6	 '28C??)) @ 5T	344 /73CCCT-1AAA		! 	B&.n&;&; '< !! <$W--//88 	<:;;
;~)gx11 

 
&#
-
-6:
23t 		.// =8J ==	 	
. 5
5
5
-v
%
%.CH.M.M
% >S   x)BCC 3H== 5 )IJJ )9::5;B!::&%)$?@@@
@$W-- 	=33G<<<
<T!!hn&;&;,,W55 '<Ty899  #7++g	 W+ 0F0N >T!!%4:cAA4	 GM[88# #7++g
 gms**w/E*!) +!';66 	']c!!L? gm{&B&Bms""&'  	'  	""7G,DEE '2'28C??+6BBDD @4'I 	3!6!69!6 "7)h&j		S	 	 )9)9'8)L)L	 t )I ))*; )#x)BCC &
&w
/
/& ICDD 	I344	$W-- 	,,1G,#+ -#)[88,' )}##!l_ (D(D$$(G  )  $$Wg.FGG )4)4:cAA-8DDFF BT $g&8&8&:&: $$.h6GGG	 #9/ #	8I #x000 4"% x000 
3		) 	go 	 h(ABB 5!!(H,EFF 	,--2250H4M3NN(!CMM!!QUO..00 $$Xa!e_hqkBBTFA	 CMM!! $+-t7H1I1IICOO4 (*CDD 	 		122 w}7L7L'.((T '.7=+>+>t+D+DDDD T5r   Fc                    |                      |           d}|r|                     ||          }n|                     |           ||                     |          z  }||                     |          z  }|                                 |z   S )a  Add a token to the format decision state.

    Allow the heuristic to try out adding the token with and without a newline.
    Later on, the algorithm will determine which one has the lowest penalty.

    Arguments:
      newline: (bool) Add the token on a new line if True.
      dry_run: (bool) Don't commit whitespace changes to the FormatToken if
        True.
      must_split: (bool) A newline was required before this token.

    Returns:
      The penalty of splitting after the current token.
    r   )_PushParameterListState_AddTokenOnNewline_AddTokenOnCurrentLine_CalculateComprehensionState_CalculateParameterListStateMoveStateToNextToken)r   newlinedry_runrQ   penaltys        r   AddTokenToStatez#FormatDecisionState.AddTokenToState4  s     	  )))G +''<<gg
!!'***t00999Gt00999G$$&&00r   c                    | j         }|j        }|j        }t          |t                    rd}|s|                    d|           |                                r|j        sd| j        dz
  | j	        d         _
        t          j        d          r| j	        d         xj
        dz  c_
        | j        |z   | j	        d         _        n7| j	        d         j        t          j        d          z
  | j	        d         _
        | xj        |z  c_        dS )zPuts the token on the current line.

    Appends the next token to the state and updates information necessary for
    indentation.

    Arguments:
      dry_run: (bool) Commit whitespace changes to the FormatToken if True.
    r   )newlines_beforespacesrr   r[   (ALIGN_CLOSING_BRACKET_WITH_VISUAL_INDENTrp   N)r   rG   spaces_required_before
isinstancelistAddWhitespacePrefixrc   rw   r   r   closing_scope_indentr   r   indent)r   r   rR   rS   r   s        r   r   z*FormatDecisionState._AddTokenOnCurrentLineP  s    oG%H+F&$  f D!!!F!CCC L L /3kAo
2+9?@@ 	3
*R.
-
-
2
-
- $f 4
2 JrN!EI.I$J$JJ 	
2+ 	KK6KKKKr   c                    | j         }|j        }|                                 | _        |sG| j        j        }| j        }|r||t          j        d          z  z  }|                    d||           |j	        s| j        | j
        d         _        | j        | _        |                                s'|j	        r|j        |j                                        rst          j        d          dft          j        d                   }t          d| j
        d         j        |z
            | j
        d         _        d	| j
        d         _        |j        }|r|S |j        r|j        d
k    r|dz  }|j        dvr<| j
        d         }	|	xj        dz  c_        |t          j        d          |	j        z  z  }|                                r)|                                r|j        }
|
r|
j        s|dz  }|dz   S )a  Adds a line break and necessary indentation.

    Appends the next token to the state and updates information necessary for
    indentation.

    Arguments:
      dry_run: (bool) Don't commit whitespace changes to the FormatToken if
        True.
      must_split: (bool) A newline was required before this token.

    Returns:
      The split penalty for splitting after the current state.
    INDENT_WIDTHrr   )r   r   indent_levelr[   Nrp   r   r]   TrB   2   >   iffor"SPLIT_PENALTY_FOR_ADDED_LINE_SPLIT
   )r   rG   _GetNewlineColumnr   r   r)   r   r   r   rw   r   r   r   r   rc   maxr   r   ry   r   rH   rN   num_line_splitsr   )r   r   rQ   rR   rS   r   r   dedentr   lastpprevs              r   r   z&FormatDecisionState._AddTokenOnNewlinev  s2    oG%H((**DK GY_l{f	 ;,>!:!:::!!F " G G G  ."&+djn $ 0D 9		9!)!8!D		 	+	+	-	- "E	56696779f aB&/
0
0 jn)48djn1 #G n HNc$9$9mg }M))Z^d
a
)8
9
9

 g   3 3 5 5  %e %- 2R<r   c                 (   | j         }|                                s3|                                st          | j        | j                  | _        |                                rq| j        d         }t          j        d          |j	        z   }| j        
                    t          || j        d         j	                             | xj        dz  c_        t          | j                  dk    r|                                rt          j        j        |j        v r#| j        d         j        | j        d         _	        n"| j        d         j	        | j        d         _	        | j                                         | xj        dz  c_        |j        od|j        v }|r<| xj        t          |j                            d          d                   z  c_        n)|j        s"| xj        t          |j                  z  c_        | j         j         | _         d}|j        sG|j        s@|j        s9| j        | j        k    r)| j        | j        z
  }|t          j        d          |z  z  }|r2t          |j                            d          d                   | _        |S )a  Calculate format decision state information and move onto the next token.

    Before moving onto the next token, we first calculate the format decision
    state given the current token and its formatting decisions. Then the format
    decision state is set up so that the next token can be added.

    Returns:
      The penalty for the number of characters over the column limit.
    r[   rp   rr   rt   r   SPLIT_PENALTY_EXCESS_CHARACTER)r   rc   r   minr   r   r   r   r   r   appendr   r   r   rI   rJ   rK   r   popr   rN   r   splitrH   is_pylint_commentis_pytype_commentis_copybara_commentr   )r   rR   r   
new_indentis_multiline_stringr   excess_characterss          r   r   z(FormatDecisionState.MoveStateToNextToken  sj    oG 8(;(;(=(= 8"%d&?&*&6#8 #8d
  Z^d9899DOKj
jJ
20IJJKKK
! 4:w2244			1W5E	E	E$(JrN$9
2!!$(JrN$=
2!
jnn
!!+E0E (
kkS,,T2215666kkk$ (
kkS'''kko0DO G% Qg.G Q'Q,0K$:K,K,K+(99;<<?PPPg 7 ++D11"566dkNr   c                    | j         }|j        }| j        r| j        d         nd}d}|M||j        k    r9| j                                        }|j        r|t          j        d          z  }|S |rd|_        t          j	        j
        |j        v rFt          j	        j
        |j        vr.| j                            t          j        |                     |S |j        dk    rt          j	        j        |j        v r|j        Jt          j        d          r5|j        |k    r*|j        s|                                s|t(          j        z  }nG||_        ||_        t          j        d          r%|r#|                                r|t(          j        z  }t          j	        j        |j        v rat          j	        j        |j        vrIt          j        d          r5|j        |k    r*|j        s|                                s|t(          j        z  }|S )zMakes required changes to comprehension state.

    Args:
      newline: Whether the current token is to be added on a newline.

    Returns:
      The penalty for the token-newline combination given the current
      comprehension state.
    r[   Nr   SPLIT_PENALTY_COMPREHENSIONTr   SPLIT_COMPLEX_COMPREHENSION)r   rG   r   closing_bracketr   has_interior_splitr   r   r   rI   	COMP_EXPRrK   r   r   ComprehensionStaterN   COMP_FOR	for_tokenhas_split_at_forHasTrivialExprr   r|   	CONNECTEDCOMP_IF)r   r   rR   rS   top_of_stackr   r   s          r   r   z0FormatDecisionState._CalculateComprehensionState  s    oG%H*./C4?2&&tLG	L0	0	0""$$" 	>
UY<==
='	 /*.'&'*:::&h.???
o\<WEEFFFn%)999			+ I344 	/)W44* 5,,.. 5 ].
.'!((/% I344 	- 	-''))	-
],
,'$(888$H,=== )1
2
2 -

'7
2
2( 30<0K0K0M0M 3=,,Nr   c                     | j         }|j        }t          |          rJ|j        | j        d         j        z   }| j                            t          j	        |||                     dS dS )zPush a new parameter list state for a function definition.

    Args:
      newline: Whether the current token is to be added on a newline.
    r   N)
r   rG   r   total_lengthr   r   r   r   r   ParameterListState)r   r   rR   rS   first_param_columns        r   r   z+FormatDecisionState._PushParameterListState9  s     oG%HX&& ?#04:b>3HH
""

)(G*<> >? ? ? ? ?? ?r   c                    | j         }|j        }d}t          |          r|j        | j        d         j        z   }|s| j        d         }|j        ru|j        rn|j        d         j	        }t          |j                  }|j        }	|	|j        t          |j                  z
  z  }	|	| j        z   | j        k    r|t           j        z  }|S || j        k    r|t           j        z  }|S | j        s|S | j        d         }|| j        d         j        k    r| j                                         |rG|j        r@|j        r|t           j        z  }n)|                    | j                  r|t           j        z  }|s|j        r|j        r|t           j        z  }|S |j        s|S |rG|                     |j        d         j	        t          |j                            r|t           j        z  }|sct3          j        d          rO|j        rH||j        d         j	        k    r2||j        k    r't8          j        j        |j        v r|t           j        z  }|S )zMakes required changes to parameter list state.

    Args:
      newline: Whether the current token is to be added on a newline.

    Returns:
      The penalty for the token-newline combination given the current
      parameter state.
    r   r   r[   rk   ) r   rG   r   r   r   r   r   
parametershas_typed_returnfirst_tokenr   rd   r   rN   r   r   r   VERY_STRONGLY_CONNECTEDr   r   ry   STRONGLY_CONNECTEDLastParamFitsOnLinehas_split_before_first_paramr   r   r   has_default_valuesr   rI   PARAMETER_STARTrK   )
r   r   rR   rS   r   r   
param_list
last_paramr   r   s
             r   r   z0FormatDecisionState._CalculateParameterListStateH  s    oG%HGX&& #04:b>3HH *2.
  	=Z%@ 	=!,R0<*'(ABB*#0,
*1C
8H4I4II
I,DK'$*;;; }<<G	t{	*	* 	=88n  n&r*J$'+;;;
!!!	 6Z0 62 	6
]5
5''++DK88 	6
]5
5' 4*5 4

14 	=33n  n 4			*/2>*:+EFF
H 
H 4=33 2	">?? 2%2:(+777:---,0@@@ 11gNr   c                     |dk    r|S t          j        d          }|dk    r6| j        j        t          j        d          z  t          j        d          z   S |dk    r/t          j        d          }|t	          ||z   dz
  |z            z  S |S )Nr   CONTINUATION_ALIGN_STYLEFIXEDr   rp   zVALIGN-RIGHTrr   )r   r   r   r)   int)r   r   align_styleindent_widths       r   !_IndentWithContinuationAlignStylez5FormatDecisionState._IndentWithContinuationAlignStyle  s    {{m)677Kgy>!:!::i3445 6n$$Y~..lC,!6!:l JKKKKMr   c                    | j         }|j        }| j        d         }t          |j        t
                    rdS |j        dk    s| j        j        r|j        S |                     |j	                  }|
                                r| j        r|n| j        S |                                rl|
                                s'|j        rJ|j        C|j        
                                r*t          d|j	        t!          j        d          z
            S |j        S |r-|j        r&|j        rt(          j        j        |j        v r|j        S t!          j        d          r3|r1|j        dk    s|j        rt(          j        j        |j        v r|j	        S | j        st9          | j        j                  rt!          j        d          st!          j        d	          rt!          j        d
          rnt=          | j        j        j                             d          d                   t!          j        d          z   }||j	        k    r|t!          j        d          z   S | j        r| j        d         !                    |j	                  s|j	        | j        j"        dz   t!          j        d          z  k    rSt(          j        j#        |j        v s|j        r4t(          j        j#        |j        v r|j	        t!          j        d          z   S |S )z%Return the new column on the newline.r[   r      Nrp   INDENT_DICTIONARY_VALUErm   r_   r]   r^   rt   r   rr   )$r   rG   r   r   r   r   r   disabler   r   rc   r   r   r   rw   r   r   r   r   r   r   rI   rM   rK   r   rN   rH   r   r~   r   r   whitespace_prefixr   SplitBeforeClosingBracketr)   r   )r   rR   rS   r   cont_aligned_indenttoken_indents         r   r   z%FormatDecisionState._GetNewlineColumn  s'   oG%H:b>L'0$77 , Q		'!	+	+ty/@	+++@@   L$($4K  $:KK /




 QQ#+#:#F"--// $G1&3N)O)OOQ Q 	Q.. X' G,= -1AAA_y*++ %	 %x~,,0H,0G4DDD$
$! E&:49?&K&K Ei122Ei122E 
0	1	1E
 dio/55d;;B?
@
@
)N
#
#$  
,	,	,ei(CDDDD L!"%??! !L%1%8Y_q EIn$=$==&? &?


.'2B
B
B C/83DDD"UY/J%K%KKKr   c                     |j         |j         z
  }|j        s|t          |j                  z  }|| j        z   | j        k    S )zEDetermines if line between start and end can fit on the current line.)r   rH   r   rN   r   r   )r   startendlengths       r   r   zFormatDecisionState._FitsOnLine  sF     22F  !EK   fDK4#444r   c                    d }d }d }|j         }|j        }|j        j        }|rL||k    rEt          j        j        |j        v r ||          }|j        dk    r ||j                  } ||j         |          sF|j        |j        z
  }	|	t          |j                  z  }	|	| j
        d         j        z   | j        k    rdS |}|                                r|j        dk    s:|j        r(|j        j        dk    rt          j        j        |j        v s ||          r=|j         r|j         }|r,||k    rdS t          j        j        |j        v r|}n	|j        }|,n|j         }n|j        }|r||k    E ||          }|j        |j        z
  }	|	t          |j                  z  }	|	| j
        d         j        z   | j        k    S )	z1Determine if each dict elems can fit on one line.c                 >    | j         } | j        r| j         } | j        | S r,   )rG   rw   )r   s    r   PreviousNonCommentTokenzPFormatDecisionState._EachDictEntryFitsOnOneLine.<locals>.PreviousNonCommentToken  s-    cN !  N !jr   c                 b    d}| j         r| j        } | j        r|dz  }| j        } | j        |dk    S )Nr   rr   )rH   r   r   )r   num_stringss     r   ImplicitStringConcatenationzTFormatDecisionState._EachDictEntryFitsOnOneLine.<locals>.ImplicitStringConcatenation  sL    k		 nM qn M  1_r   c                     | r|sdS | j         }|r|j        sn	|j         }||r|j        dk    rdS |j         }|sdS t          j        j        |j        v S )z3Return true if the dictionary value is a container.Frm   )rG   rH   rN   r   rI   rJ   rK   )r   r   colonkeys       r   DictValueIsContainerzMFormatDecisionState._EachDictEntryFitsOnOneLine.<locals>.DictValueIsContainer  s     G u$e %$ 	
$  %  ekS((u c u!5EEr   rY   r   Fri   T)rd   r   r   rI   rL   rK   rN   rG   r   r   r   r   r   rc   rH   rM   )
r   r   r  r	  r  r   entry_startrR   rU   r  s
             r   r   z/FormatDecisionState._EachDictEntryFitsOnOneLine  sF       F F F  &G$K +G
 !%g((			,0@	@	@&&w//:(()<==$##D$94@@ 	${'??&
C)**
*&djn++t/@@@5					 %]c!!% "*1*<*Bc*I*I!2g6FFF''00 G % /.G )'!!T#2g6FFF#k(G  ) ,''$C  !%g((J &%g..G!K$<<F
c+#$$$FDJrN))T->>>r   c                    t          |          rx|rv|j        dk    r2|j        j        |j        z
  }|| j        d         j        z   | j        k    S |                                rn$|                                r|j        }|j	        }|vdS )z?Check if the function argument list has a dictionary as an arg.ri   r   F)
_IsArgumentToFunctionrN   rd   r   r   r   r   r   rc   r   )r   rT   r  s      r   r   z3FormatDecisionState._ArgumentListHasDictionaryEntry8  s    U## 	! !;#)69KK&$*R.//$2CC
C 	
 	)(%   ! 5r   c                 b    |j         j        |j        z
  | j        d         j        z   | j        k    S )zCheck if the container can fit on its starting line.

    Arguments:
      opening: (FormatToken) The unwrapped line we're currently processing.

    Returns:
      True if the container fits on the start line.
    r[   )rd   r   r   r   r   )r   r   s     r   rx   z-FormatDecisionState._ContainerFitsOnStartLineF  s6     $1G4HHJrN!"&*&78 8r   N)F)__name__
__module____qualname____doc__r   r"   r/   r1   r6   r>   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   r    r   r   r	   r	   $   sv        ,2 2 2,   ? ? ?  > > >> > >
,$ ,$ ,$\I I IV1 1 1 18$ $ $LC C CJ7 7 7rC C CJ? ? ?R R Rh
 
 
7 7 7r5 5 5N? N? N?`  
8 
8 
8 
8 
8r   r	   >   r   defr   elifwithclasswhileexceptc                 B    | j         dk    r| j        } | j         t          v S )Nasync)rN   r   _COMPOUND_STMTSre   s    r   r~   r~   W  s$    
[GE		''r   c                 <    | j         dk    r| j        } | j         dk    S )Nr  r  )rN   r   re   s    r   r   r   ]  s$    
[GE		r   c                 n    | r2| j         dk    r| j        } | o
| j         dk    S | j        dvrn	| j        } | 2dS )NrB   rC   >   rD   rE   EQUALF)rN   r   rO   re   s    r   r   r   c  s[     {ce)u{c))	3	3	3E 	  
r   c                 h    t          j        |           }|r|j        dk    rdS |j        }|o|j        S )NrB   F)r   r   rN   rG   r   )rT   r   rS   s      r   r  r  n  sA    1%88'	 GMS((5#(		&h&&r   c                     | j         r$| j        s|                                 r| n| j         S | rJ|                                 r| j         } n%| j        r| j        } n|                                 r| S | j        } | JdS )z5Get the opening bracket containing the current token.N)rd   rH   rc   r   rG   rR   s    r   rv   rv   v  s     Ig&= I((**H770HH % (gg		  &gg					 n$G 	 % 
r   c                 L    | j         s| j        r| j        } | j         s| j        | S r,   )rw   r   r$  s    r   r   r     s;     !7#5 ! G  !7#5 !	.r   c                 Z    | j         }| j        dk    o|ot          j        j        |j        v S )NrB   )rG   rN   r   rI   FUNC_DEFrK   )rR   rU   s     r   r   r     s5    		$
-3
 94 9


'4=
8:r   c                 Z    | j         } | r!| j        } | r|                                 rdS | !dS )NFT)rd   r   rc   r$  s    r   r   r     sK    $'  G 7%%'' U 	  
r   c                     | j         }| j        } d}| |k    r9| j        dk    r|dz  }|                                 r| j         } n| j        } | |k    9|dk    S )z%Check if it's a single-element tuple.r   rY   rr   rd   r   rN   rc   )rT   close
num_commass      r   r}   r}     ss    

 %

%*{cAoj $eee 	 
qr   c                     | j         }| j        } | |k    r6| j        dk    rdS |                                 r| j         } n| j        } | |k    6dS )z!Check if the scope has no commas.rY   FTr*  )rT   r+  s     r   r   r     se    

 %

%{cU $eee 	 
r   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	r   a  Maintains the state of the bracket enclosures.

  A stack of _ParenState objects are kept so that we know how to indent relative
  to the brackets.

  Attributes:
    indent: The column position to which a specified parenthesis level needs to
      be indented.
    last_space: The column position of the last space on each level.
    closing_scope_indent: The column position of the closing indentation.
    split_before_closing_bracket: Whether a newline needs to be inserted before
      the closing bracket. We only want to insert a newline before the closing
      bracket if there also was a newline after the beginning left bracket.
    num_line_splits: Number of line splits this _ParenState contains already.
      Each subsequent line split gets an increasing penalty.
  c                 L    || _         || _        d| _        d| _        d| _        d S )Nr   F)r   r   r   ry   r   )r   r   r   s      r   r   z_ParenState.__init__  s.    DK DO !D(-D%Dr   c                     t          | j        | j                  }| j        |_        | j        |_        | j        |_        |S r,   )r   r   r   r   ry   r   )r   r%   s     r   r"   z_ParenState.Clone  s;    T_55E!%!:E)-)JE& 0ELr   c                 0    d| j         | j        | j        fz  S )Nz6[indent::%d, last_space::%d, closing_scope_indent::%d])r   r   r   r5   s    r   r>   z_ParenState.__repr__  s&    CT_d&?GA A Ar   c                 B    t          |           t          |          k    S r,   )r4   r-   s     r   r/   z_ParenState.__eq__  s    ::e$$r   c                     | |k     S r,   r    r-   s     r   r1   z_ParenState.__ne__  r2   r   c                 \    t          | j        | j        | j        | j        | j        f          S r,   )r4   r   r   r   ry   r   )r   argskwargss      r   r6   z_ParenState.__hash__  s5    dot/H2D4HJ K K Kr   N)
r  r  r  r  r   r"   r>   r/   r1   r6   r    r   r   r   r     s         &    A A A% % %  K K K K Kr   r   N)r  yapf.yapflibr   r   r   r   r   objectr	   	frozensetr  r~   r   r   r  rv   r   r   r   r}   r   r   r    r   r   <module>r:     s    & % % % % % % % % % % % & & & & & &       ' ' ' ' ' 'l8 l8 l8 l8 l8& l8 l8 l8^! )DDDF F( ( (    ' ' '     : : :      .K .K .K .K .K& .K .K .K .K .Kr   