
    ^h                        S r SSKrSSKrSSKJrJr  SSKJr  SSKJ	r	J
r
  SSKJrJr  SSKJrJrJr  SSKJrJrJrJrJr  SS	KJrJrJr  SS
KJrJrJrJ r J!r!J"r"J#r#  SSK$J%r%J&r&J'r'  SSK(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrM  SSKNJOrO  SSKPJQrQJRrRJSrSJTrTJUrU  SSKVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]  SSK^J_r_  SSK`JaraJbrb  \crd\\a\b4   re " S S\W5      rf " S S\0\   5      rgS\S\\%   S\&S\\h   4S jri SPS\S\&S\\%   S\\   4S jjrjS\S\&S\k4S jrl " S S\	5      rmS\S\\%   S\&S\\   4S  jrn  SQS\S\&S\\%   S!\\d   S\\   4
S" jjro SPS\S!\\d   S\4S# jjrp  SQS$\S\S\&S\\%   S!\\d   S\\   4S% jjrqS&\S$\S\&S\k4S' jrrS(\S)\S*\SS4S+ jrsS,\t\a   S-\S.\aS\k4S/ jruS,\t\a   S-\S.\aS0\mS\4
S1 jrvS2\\S\\4S3 jrwS\S\\c   4S4 jrxS5\aS\\%   S\k4S6 jryS7\kS8\cS\S\4S9 jrz\\1r{\wS\S\\%   S\&S\\   4S: j5       r|\wS\S\\%   S\&S\\   4S; j5       r}S<\bS=\~\h   S\&S\\%   SS4
S> jrS?\bS@\eSA\cSS4SB jrS<\bS\&S\\%   SS4SC jrS<\bS\&S\\%   SS4SD jrS<\bS?\bS\&S\\%   SS4
SE jr SRS<\eS?\eS\&S\\%   SF\kS\k4SG jjrS\S.\aS\k4SH jrS\SI\cS\\~\d      4SJ jrSKSL.S\SM\\S\&S\\%   SN\hS\t\   4SO jjrg)Sz
Generating lines of code.
    N)
CollectionIterator)replace)Enumauto)partialwraps)OptionalUnioncast)COMMA_PRIORITYDOT_PRIORITYSTRING_PRIORITY#get_leaves_inside_matching_bracketsmax_delimiter_priority_in_atom)FMT_OFFgenerate_commentslist_comments)Line	RHSResultappend_leavescan_be_splitcan_omit_invisible_parensis_line_short_enoughline_to_string)FeatureModePreview)%ASSIGNMENTSBRACKETSCLOSING_BRACKETSOPENING_BRACKETSSTANDALONE_COMMENT	STATEMENT
WHITESPACEVisitorensure_visiblefstring_to_stringget_annotation_typehas_sibling_with_typeis_arith_likeis_async_stmt_or_funcdefis_atom_with_invisible_parensis_docstringis_empty_tupleis_generatoris_lpar_tokenis_multiline_stringis_name_tokenis_one_sequence_betweenis_one_tupleis_parent_function_or_classis_part_of_annotationis_rpar_tokenis_stub_bodyis_stub_suiteis_tupleis_tuple_containing_staris_tuple_containing_walrusis_type_ignore_comment_string	is_varargis_walrus_assignmentis_yieldsymswrap_in_parentheses)normalize_numeric_literal)fix_multiline_docstringget_string_prefixnormalize_string_prefixnormalize_string_quotes"normalize_unicode_escape_sequences)CannotTransformStringMergerStringParenStripperStringParenWrapperStringSplitterTransformerhug_power_op)token)LeafNodec                       \ rS rSrSrSrg)CannotSplit_   zBA readable split that fits the allotted line length is impossible. N)__name__
__module____qualname____firstlineno____doc____static_attributes__rW       G/home/james-whalen/.local/lib/python3.13/site-packages/black/linegen.pyrU   rU   _   s    Lr^   rU   c            	         ^  \ rS rSrSrS\S\\   SS4S jrS+S\	S\
\   4S	 jjrS
\S\
\   4U 4S jjrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\\   S\\   S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jrS
\S\
\   4S jr S
\S\
\   4S jr!S\S\
\   4S jr"S\S\
\   4S jr#S\S\
\   4S  jr$S
\S\
\   4S! jr%S
\S\
\   4S" jr&S\S\
\   4S# jr'S\S\
\   4S$ jr(S
\S\
\   4S% jr)S
\S\
\   4S& jr*S
\S\
\   4S' jr+S
\S\
\   4S( jr,S,S) jr-S*r.U =r/$ )-LineGeneratore   zGenerates reformatted Line objects.  Empty lines are not emitted.

Note: destroys the tree it's visiting by mutating prefixes of its leaves
in ways that will no longer stringify to valid Python code on the tree.
modefeaturesreturnNc                 @    Xl         X l        U   U R                  5         g N)rc   rd   __post_init__)selfrc   rd   s      r_   __init__LineGenerator.__init__l   s    	 r^   indentc              #   p  #    U R                   (       d   U R                   =R                  U-  sl        g[        U R                   R                  5      S:X  a(  [	        U R                   R                  S   5      (       a  gU R                   n[        U R                  UR                  U-   S9U l         Uv   g7f)zGenerate a line.

If the line is empty, only emit if it makes sense.
If the line is too long, split it first and then generate.

If any lines were generated, set up a new current_line.
N   r   rc   depth)current_linerp   lenleavesr,   r   rc   )ri   rl   complete_lines      r_   lineLineGenerator.liner   s        ##v-#t  ''(A-2J$$Q'3
 3
 )) dii}7J7JV7STs   B4B6nodec              #     >#    [        U[        5      (       Ga5  U R                  R                  R	                  5       n[        U5       H  nU(       a  U R                  R                  U5        M'  UR                  [        R                  :X  a5  U R                  R                  U5        U R                  5        Sh  vN   Mz  U R                  5        Sh  vN   U R                  R                  U5        U R                  5        Sh  vN   M     U(       a  SUl        UR                  [        ;  a  U R                  R                  U5        [        TU ]9  U5       Sh  vN   g N N Na N7f)zCDefault `visit_*()` implementation. Recurses to children of `node`.N )
isinstancerR   rq   bracket_trackerany_open_bracketsr   appendtyperQ   COMMENTru   prefixr%   supervisit_default)ri   rw   r|   comment	__class__s       r_   r   LineGenerator.visit_default   s    dD!! $ 1 1 A A S S U,T2$%%,,W5\\U]]2%%,,W5#yy{**  $yy{**%%,,W5#yy{** 3  ! yy
*!!((.7(... + + + 	/sI   B9E/<E'=E/E)2E/	E+
AE/!E-"E/)E/+E/-E/c              #     #    UR                   =(       a'    UR                   R                  [        R                  :H  nU(       dp  [	        [        R                  S5      n[	        [        R
                  S5      nUR                  nSUl        XSl        UR                  SU5        UR                  U5        U R                  U5       Sh  vN   g N7f)zVisit an `x if y else z` testry   r   N)
prev_siblingr~   rQ   LPARrR   RPARr   insert_childappend_childr   )ri   rw   already_parenthesizedlparrparr   s         r_   
visit_testLineGenerator.visit_test   s      F$"3"3"8"8EJJ"F 	 %

B'D

B'D[[FDK Ka&d#%%d+++s   CCC	Cc              #   x   #    U R                  S5       Sh  vN   U R                  U5       Sh  vN   g N N7f)z/Increase indentation level, maybe yield a line.rn   Nru   r   ri   rw   s     r_   visit_INDENTLineGenerator.visit_INDENT   s4      99R=  %%d+++ 	!+s   :6:8::c              #      #    U R                  5        Sh  vN   U R                  U5       Sh  vN   U R                  S5       Sh  vN   g N7 N  N	7f)z/Decrease indentation level, maybe yield a line.Nr   r   s     r_   visit_DEDENTLineGenerator.visit_DEDENT   sN     
 99; %%d+++ 99R=   	 	, 	!s1   AAAAAA	AAAkeywordsparensc              #     #    [        XU R                  U R                  S9  UR                   HT  n[	        U5      (       a(  UR
                  U;   a  U R                  5        Sh  vN   U R                  U5       Sh  vN   MV     g N" N7f)a~  Visit a statement.

This implementation is shared for `if`, `while`, `for`, `try`, `except`,
`def`, `with`, `class`, `assert`, and assignments.

The relevant Python language `keywords` for a given statement will be
NAME leaves within it. This methods puts those on a separate line.

`parens` holds a set of string leaf values immediately after which
invisible parens should be put.
parens_afterrc   rd   N)normalize_invisible_parensrc   rd   childrenr3   valueru   visit)ri   rw   r   r   childs        r_   
visit_stmtLineGenerator.visit_stmt   sk      	#DII	
 ]]EU##x(?99;&&zz%(((	 #&(s$   A"B$B%B=B	>
B	Bc              #   j   #    U R                  U5       S h  vN   SUR                  S   l        g  N7fNry   r   r   r   r   r   s     r_   visit_typeparamsLineGenerator.visit_typeparams   /     %%d+++"$a 	,   313c              #   j   #    U R                  U5       S h  vN   SUR                  S   l        g  N7fNry   rn   r   r   s     r_   visit_typevartuple LineGenerator.visit_typevartuple   r   r   c              #   j   #    U R                  U5       S h  vN   SUR                  S   l        g  N7fr   r   r   s     r_   visit_paramspecLineGenerator.visit_paramspec   r   r   c           	   #   "  #    [         R                  U R                  ;   a  [        UR                  5       H  u  p#US:X  a  M  UR                  US-
     R
                  [        R                  :X  d  M=  UR
                  [        R                  :X  aT  UR                  S   R
                  [        ;   a3  [        U5      (       d#  [        UUU R                  U R                  SS9  M  [        XSS9  M     U R                  U5       S h  vN   g  N7f)Nr   rn   Fparentrc   rd   remove_brackets_around_commavisible)r   wrap_long_dict_values_in_parensrc   	enumerater   r~   rQ   COLONrB   atomr"   r@   #maybe_make_parens_invisible_in_atomrd   rC   r   )ri   rw   ir   s       r_   visit_dictsetmaker LineGenerator.visit_dictsetmaker   s     22dii?%dmm46==Q',,;

dii/!NN1-226FF 4U ; ;;!#'!%%)]]9> ,DG# 5$ %%d+++s   A-D3BDDDc           	   #   (  #    U R                  5        Sh  vN   SnUR                   H  nUR                  [        R                  :X  a  SnM%  U(       d  M.  UR                  [
        R                  :X  a\  UR                  S   R                  [        R                  :X  a1  [        UUU R                  U R                  SS9(       a
  [        XSS9  O
[        XSS9  SnM     UR                   H  nU R                  U5       Sh  vN   M     g N N7f)zVisit function definition.NFTr   r   r   )ru   r   r~   rQ   RARROWrB   r   r   r   rc   rd   rC   r   )ri   rw   is_return_annotationr   s       r_   visit_funcdefLineGenerator.visit_funcdef  s     99;  %]]EzzU\\)'+$%%::*u~~a/@/E/E/S:#!YY!%5: ,DG'UC',$ #" ]]Ezz%((( #+ 	, )s(   DD<DB-DD
DDc              #      #    [        U[        5       U R                  U R                  S9  U R	                  5        Sh  vN   UR
                   H  nU R                  U5       Sh  vN   M     g N1 N7f)z'Visit either a match or case statement.r   N)r   setrc   rd   ru   r   r   ri   rw   r   s      r_   visit_match_caseLineGenerator.visit_match_case  sY     "su499t}}	
 99;]]Ezz%((( # 	(s!   <A4A0'A4&A2'
A42A4c              #      #    [        U5      (       a'  U R                  UR                  S   5       Sh  vN   gU R                  U5       Sh  vN   g N N7f)zVisit a suite.   N)r:   r   r   r   r   s     r_   visit_suiteLineGenerator.visit_suite)  sG     zz$--"2333))$/// 4/s!   2AAAAAAc              #   0  #    SnUR                    H@  nUb  U[        R                  :X  a  [        U5      (       a
  [	        XSS9  UR
                  nMB     UR                  (       a  UR                  R
                  [        ;   a  [        U5      (       a*  [        U5      (       a  U R                  U5       Sh  vN   gU R                  S5       Sh  vN   U R                  U5       Sh  vN   U R                  S5       Sh  vN   gUR                  (       a;  [        UR                  5      (       a!  SUl        U R                  U5       Sh  vN   gU R                  5        Sh  vN   U R                  U5       Sh  vN   g N N N N N? N( N7f)z,Visit a statement without nested statements.NFr   rn   r   ry   )r   rQ   SEMIr+   rC   r~   r   r$   r6   r9   r   ru   r:   r   )ri   rw   	prev_typer   s       r_   visit_simple_stmtLineGenerator.visit_simple_stmt0  s1    #'	]]E!Y%**%<-PUBVBV#D?

I #
 ;;4;;++y8*400\$5G5G--d33399R=((--d33399R=(( {{}T[[99 --d333yy{""))$/// 4(3(
 4"/s   B6F8F9FF
F+F,FFAFFF)F*FFF
FFFFFFc              #   f  #    U R                  5        Sh  vN   [        UR                  5      nU HP  nU R                  U5       Sh  vN   UR                  [
        R                  :X  d  UR                  [        :X  d  MP    O   [        U5      nU R                  U5       Sh  vN   g N Nc N	7f)z-Visit `async def`, `async for`, `async with`.N)	ru   iterr   r   r~   rQ   ASYNCr#   next)ri   rw   r   r   internal_stmts        r_   visit_async_stmtLineGenerator.visit_async_stmtH  s     99;&Ezz%(((zzU[[(EJJ:L,L   X::m,,, 	 ) 	-s9   B1B+2B1	B-
4B1#B1%B/&B1-B1/B1c              #      #    UR                    H4  nU R                  5        Sh  vN   U R                  U5       Sh  vN   M6     g N" N7f)zVisit decorators.N)r   ru   r   r   s      r_   visit_decoratorsLineGenerator.visit_decoratorsX  s:     ]]Eyy{""zz%((( #"(s   #AAAA

A
Ac              #   v  #    [        UR                  S S 5       H  u  p#UR                  US-      n[        U[        5      (       d  M.  UR                  R                  5       nUR                  [        R                  :X  d  Mh  UR                  [        R                  :X  d  M  UR                  S   R                  [        R                  :X  d  M  UR                  S5      (       a  M  SU;  d  M  [        X5        M     [        XR                  U R                   S9  U R#                  U5       S h  vN   g  N7f)Nr   rn   r   )0x0b0ojrc   rd   )r   r   rz   rR   r   lowerr~   rQ   NUMBERrB   trailerDOT
startswithrC   remove_await_parensrc   rd   r   )ri   rw   idxleaf	next_leafr   s         r_   visit_powerLineGenerator.visit_power^  s     "4=="#56ICcAg.IdD))JJ$$&E		U\\)NNdll2&&q)..%));(();<<u$#D/# 7& 	Dyy4==I%%d+++s1   A=D9D9#)D9D9(D90AD91D72D9r   c              #   @   #    U R                  5        Sh  vN   g N7f)zBRemove a semicolon and put the other statement on a separate line.N)ru   ri   r   s     r_   
visit_SEMILineGenerator.visit_SEMIv  s     99;s   c              #   v   #    U R                  U5       Sh  vN   U R                  5        Sh  vN   g N N7f)zAEnd of file. Process outstanding comments and end with a newline.N)r   ru   r   s     r_   visit_ENDMARKERLineGenerator.visit_ENDMARKERz  s0     %%d+++99; 	,s   959799c              #      #    U R                   R                  R                  5       (       d  U R                  5        S h  vN   U R	                  U5       S h  vN   g  N N7frg   )rq   r{   r|   ru   r   r   s     r_   visit_STANDALONE_COMMENT&LineGenerator.visit_STANDALONE_COMMENT  sK       00BBDDyy{""%%d+++ #+s"   =A"A A"A A" A"c           	   #     #    UR                   u  p#UR                  [        R                  :X  a  [	        UR                   5      S:X  a  UR                   S   R                  [
        R                  :X  ay  [        [
        R                  S5      n[        [
        R                  S5      nUR                  5       =(       d    SnUR                  U[        [        R                  XCU/5      5        U R                  U5       Sh  vN   g N7f)zOForce parentheses between a unary op and a binary power:

-2 ** 8 -> -(2 ** 8)
   rn   ()r   N)r   r~   rB   powerrr   rQ   
DOUBLESTARrR   r   r   remover   rS   r   r   )ri   rw   	_operatoroperandr   r   indexs          r_   visit_factorLineGenerator.visit_factor  s     
 "]]	LLDJJ&G$$%*  #((E,<,<<

C(D

C(DNN$)EeT$))dT5J%KL%%d+++s   C>D DDc              #     #    [        UR                  5      S:X  d   e[        UR                  S   XR                  U R                  S9(       a  [        XR                  S   SS9  U R                  U5       Sh  vN   g N7f)z
Add potential parentheses around types in function parameter lists to be made
into real parentheses in case the type hint is too long to fit on a line
Examples:
def foo(a: int, b: float = 7): ...

->

def foo(a: (int), b: (float) = 7): ...
r   r   r   rc   rd   Fr   N)rr   r   r   rc   rd   rC   r   r   s     r_   visit_tnameLineGenerator.visit_tname  sg      4==!Q&&&.MM!T		DMM
  mmA&6F%%d+++s   A8B:B ;Bc              #     #    [        U5        [        U5      (       Ga>  [        R                  " SUR                  5      (       Gd  U R
                  R                  (       a!  [        UR                  5      n[        U5      nOUR                  n[        U5      nU[        U5      S  nUS   nUS   U:w  a  SOSnX%U*  nU(       + nSU R                  R                  -  n[        U5      (       a  [        X'5      nOUR                  5       nSnU(       a]  US   U:X  a  SU-   nUS   U:X  a  US-  nUS   S	:X  a7  [        U5      [        UR!                  S	5      5      -
  n	U	S
-  (       a  US-  nSnO	U(       d  SnXE-  n
US:X  a  UR#                  5       nU(       a  [        US   5      OSn[        U5      S:  a  X-   U R
                  R$                  :  ai  [        U5      U-   U R
                  R$                  ::  aC  U(       d<  UR                  SU-
     S:X  a  X:-   U-   U
-   Ul        O5X:-   U-   S-   U-   U
-   Ul        OX:-   U-   U
-   Ul        OX:-   U-   U
-   Ul        U R
                  R                  (       aR  UR&                  [(        R*                  :X  a4  [        UR                  5      Ul        [        UR                  5      Ul        U R-                  U5       S h  vN   g  N7f)Nz\\\s*\nr   rn   r   z    F r   \r   T
)rI   r.   researchr   rc   string_normalizationrG   rH   rF   rr   rq   rp   r2   rE   striprstrip
splitlinesline_lengthr~   rQ   STRINGr   )ri   r   	docstringr   
quote_char	quote_lendocstring_started_emptyrl   has_trailing_backslashbackslash_countquotelineslast_line_lengths                r_   visit_STRINGLineGenerator.visit_STRING  s    *40bii
DJJ&G&G yy--3DJJ?	 4I>	 JJ	&y1F!#f+-0I"1J 'q\Z7QI!YJ7I*3m#t00666F"4((3IF	%OO-	%*"Q<:- #iIR=J.$IR=D(&))ns9;K;KD;Q7R&RO&* "S(	15.,	 *E A~ ",,.5>3uRy>A  JN(4tyy7L7LLFi/4993H3HH2zz"y.1T9%+^i%?%%G
%+^i%?$%F%ORW%W
!')!;e!CDJ#^i7%?
99))dii5<<.G0<DJ0<DJ%%d+++s   KK&K$K&c              #   X   #    [        U5        U R                  U5       S h  vN   g  N7frg   )rD   r   r   s     r_   visit_NUMBERLineGenerator.visit_NUMBER   s!     !$'%%d+++s    *(*c              #     #    [        UR                  5      S:X  a  UR                  S   nUR                  S   nUR                  [        R                  :X  a  UR                  [        R
                  :X  d<  UR                  [        R                  :X  aK  UR                  [        R                  :X  a-  [        UR                  S   UU R                  U R                  S9  U R                  U5       Sh  vN   g N7f)zVisit any atomr   r   r   rn   r  N)rr   r   r~   rQ   LSQBRSQBLBRACERBRACEr   rc   rd   r   )ri   rw   firstlasts       r_   
visit_atomLineGenerator.visit_atom  s     t}}"MM!$E==$D

ejj(TYY%**-D

ell*tyyELL/H 4MM!$!]]	 %%d+++s   C1C;3C94C;c              #     #    [        U5      nUR                  U5        SUR                  ;   a;  [        S UR                   5       5      (       a  U R                  U5       S h  vN   g U R                  U5       S h  vN   g  N N7f)Nr  c              3   ~   #    U  H3  nUR                   [        R                  :X  d  M#  S [        U5      ;   v   M5     g7f)r  N)r~   rB   fstring_replacement_fieldstr.0r   s     r_   	<genexpr>.LineGenerator.visit_fstring.<locals>.<genexpr>  s4      -
&zzT;;; DCJ&s   "==)r(   r   r   anyr   r   r  )ri   rw   string_leafs      r_   visit_fstringLineGenerator.visit_fstring  s{     '-[!;$$$ -
-
 *
 *
 ))+666$$[111 71s$   A"B$B%B>B?BBc              #      #    [         R                  U R                  ;   a!  [        US1U R                  U R                  S9  U R                  U5       S h  vN   g  N7f)Ninr   )r   wrap_comprehension_inrc   r   rd   r   r   s     r_   visit_comp_forLineGenerator.visit_comp_forF  sH     ((DII5&D6		DMM %%d+++s   AAAAc              #   B   #    U R                  U5       S h  vN   g  N7frg   )r<  r   s     r_   visit_old_comp_for LineGenerator.visit_old_comp_forM  s     &&t,,,s   c                    [        U R                  S9U l        U R                  n[	        5       n[        US1SS1S9U l        [        U1 SkSS1S9U l        [        USS	1S1S9U l        [        US
S	1S
S1S9U l	        [        U1 SkUS9U l
        [        US1S1S9U l        [        US1S1S9U l        [        US1US9U l        [        X[        S9U l        [        US1S1S9U l        [        XS1S9U l        [        XS1S9U l        U R&                  U l        U R*                  U l        U R.                  U l        U R.                  U l        [        XS1S9U l        g)z,You are in a twisty little maze of passages.rc   assert,)r   r   >   ifelifelserE  rF  whilerG  forr:  >   tryrG  exceptfinallyrK  withclassre   importdelN)r   rc   rq   r   r   r   visit_assert_stmtvisit_if_stmtvisit_while_stmtvisit_for_stmtvisit_try_stmtvisit_except_clausevisit_with_stmtvisit_classdefr   visit_expr_stmtvisit_return_stmtvisit_import_fromvisit_del_stmtr   visit_async_funcdefr   visit_decoratedr   visit_match_stmtvisit_case_blockvisit_guard)ri   v   Øs      r_   rh   LineGenerator.__post_init__P  sm    dii0OOu!(hZSV!X$.f~
 !(Wf4Ewi X%a5&/5RV-X%<R
 $+1z8*#U &qF8VHM%a7)BG&qkJ!(hZ
!S!(
!K%aeWE#'#8#8 #44 !% 5 5 $ 5 5"14&Ar^   )rq   rd   rc   rQ  r]  r`  rX  r^  r\  rV  rY  rT  ra  rR  r[  r_  rZ  rU  rS  rW  )r   )re   N)0rX   rY   rZ   r[   r\   r   r   r   rj   intr   r   ru   LNr   rS   r   rR   r   r   r   r0  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r+  r7  r<  r?  rh   r]   __classcell__)r   s   @r_   ra   ra   e   s   T Z-@ T 3 x~ 2/" /$ /4,t , ,&, ,(4. ,! !(4. !))$'H)69#h)	$).%T %htn %%t % %%D %Xd^ %,t , ,,)$ )8D> )4)T )htn )0 0$ 00d 0x~ 00-T -htn - )T )htn ), ,$ ,0t  D Xd^ 
,T ,htn ,
, ,(4. ,", ,$ ,&V, V,(4. V,p, ,(4. ,,t , ,$2$ 28D> 2`,4 ,HTN ,-t - -B Br^   ra   ru   rd   rc   re   c           	      `     [        [        [        XU5      5      5      $ ! [         a     g f = frg   )r   r   rP   rJ   )ru   rd   rc   s      r_   !_hugging_power_ops_line_to_stringri  p  s0    
d<#EFGG s     
--c              #     #    U R                   (       a  U v   g[        U 5      n[        XU5      =(       d    UnUR                  nUR                  n[        XV5      n[        XV5      n[        XV5      n	[        XV5      n
U R                  5       (       d  U R                  (       d  U R                  (       dz  [        XUS9(       d  U R                  5       (       aV  U R                  (       a  U R                  5       (       d0  U R!                  5       (       d  ["        R$                  U;   a  Xx/nO/ nOU R&                  (       a  [)        X5      (       d  [*        /nOS[,        S[.        S[0        [2           S[4        S[6        [.           4
S jn[9        S	S
SU05      " 5       n["        R$                  U;   a+  U R                  (       a  UUU	[:        [<        U
U/nO*UUU	U
U/nO"U R                  (       a  [:        [<        U/nOU/nUR?                  [@        5        U H  n [C        XXUS9nU Sh  vN     g   U v   g N! [D         a     M1  f = f7f)zTransform a `line`, potentially splitting it into many lines.

They should fit in the allotted `line_length` but might not be able to.

`features` are syntactical features that may be used in the output.
N)rc   line_strri   ru   rd   rc   re   c           
   3      #    [        XR                  5       H4  n[        [        XX$S95      n[	        US   US9(       d  M*  U Sh  vN     g   [        XUS9 Sh  vN   g N N7f)zWraps calls to `right_hand_split`.

The calls increasingly `omit` right-hand trailers (bracket pairs with
content), meaning the trailers get glued together to split on another
bracket pair instead.
omitr   rB  N)rd   )generate_trailers_to_omitr  listright_hand_splitr   )ri   ru   rd   rc   rn  r  s         r_   _rhstransform_line.<locals>._rhs  sk      2$8H8HI-d(NO
 (at<<$$$ J (XFFF % Gs)   <A'A'A#A'A%A'%A'rhsrW   __call__rk  )#
is_commentr   ri  r  r  rK   rL   rN   rM   $contains_uncollapsable_type_commentsshould_split_rhsmagic_trailing_commar   !contains_unsplittable_type_ignoreinside_bracketscontains_standalone_comments0contains_implicit_multiline_string_with_commentsr   string_processingis_defshould_split_funcdef_with_rhsleft_hand_splitobjectr   r   r   r   r   r~   delimiter_splitstandalone_comment_splitr}   rP   run_transformerrJ   )ru   rc   rd   rk  line_str_hugging_power_opsllsnstring_mergestring_paren_stripstring_splitstring_paren_wraptransformersrr  rt  	transformresults                   r_   transform_liner  {  s*     
d#H
 	*$$?K8  
		B		"	"B'L,R4!")L*22 5577%%)) ;UV5577%%$*K*K*M*MEEGG $$,(=LL	:4FF'(	G	G $	G0:70C	GKO	Gd^	G: 5"z4013$$,## & #,%  !& %  ## /1I3O #u %!		$TdxXF  " 
	   		s6   HI	H8#I	(H6)I	8
II	II	c                    / nSnU R                    H]  nUR                  [        R                  :X  a  SnU(       a  UR	                  U5        UR                  [        R
                  :X  d  M[  SnM_     [        U R                  U R                  S9n[        U5      nU H   nUR	                  US[        U5      U;   S9  M"     UR                  SL$ )zIf a funcdef has a magic trailing comma in the return type, then we should first
split the line with rhs to respect the comma.
FTro   preformattedtrack_bracketN)rs   r~   rQ   r   r}   r   r   rc   rp   r   idrz  )ru   rc   return_type_leavesin_return_typer   r  leaves_to_tracks          r_   r  r    s     &(N99#"N%%d+99$!N  tyy

3F9:LMO"T(o5 	 	
 # &&d22r^   c                   >    \ rS rSr\" 5       r\" 5       r\" 5       rSrg)_BracketSplitComponenti  rW   N)	rX   rY   rZ   r[   r   headbodytailr]   rW   r^   r_   r  r    s    6D6D6Dr^   r  	_featuresc              #   &  #    [         R                  [         R                  4 GH`  n/ n/ n/ nUnSnSn	[        U R                  5       GH#  u  pU
S:X  a$  UR
                  [         R                  :X  a  U	S-  n	OMU	S:  aG  UR
                  [         R                  :X  a  U	S-  n	O#UR
                  [         R                  :X  a  U	S-  n	XuL as  UR
                  [        ;   a_  UR                  UL aP  [        U[        5      (       a;  U[         R                  :X  a  U	S:  d!  [        U5        [        U5        U(       a  UOUnUR                  U5        XvL d  GM  UR
                  U:X  d  GM  UnUnGM&     U(       d  GMW  U(       d  GMa    O   W(       a  W(       d  [        S5      e[        WX[        R                   S9n[        WX[        R"                  S9n[        X@U[        R$                  S9n['        XU5        XU4 H  nU(       d  M  Uv   M     g7f)a  Split line into many lines, starting with the first matching bracket pair.

Note: this usually looks weird, only use this for function definitions.
Prefer RHS otherwise.  This is why this function is not symmetrical with
:func:`right_hand_split` which also handles optional parentheses.
Nr   r   rn   No brackets found	component)rQ   r   r%  r   rs   r~   r&  r!   opening_bracketrz   rR   r'   r}   rU   bracket_split_build_liner  r  r  r   bracket_split_succeeded_or_raise)ru   r  rc   	leaf_typetail_leavesbody_leaveshead_leavescurrent_leavesmatching_bracketrp   r  r   r  r  r  r  s                   r_   r  r    s     jj%**-	"$"$"$$+/$T[[1KEzdii5::5 
99

*QJEYY%**,QJE-II!11((,<</66 #ejj0UQYt$/00;!!$',99	)'+$%0N7 28 I .J ;-..#T7M7R7RD $T7M7R7RD $+7M7R7RD %T6t$6L %s%   EHH'H:HB H	Hrn  c              #   H   #    [        XS9n[        X@XUS9 Sh  vN   g N7f)aD  Split line into many lines, starting with the last matching bracket pair.

If the split was by optional parentheses, attempt splitting without them, too.
`omit` is a collection of closing bracket IDs that shouldn't be considered for
this split.

Note: running this function modifies `bracket_depth` on the leaves of `line`.
rm  rd   rn  N)_first_right_hand_split%_maybe_split_omitting_optional_parens)ru   rc   rd   rn  
rhs_results        r_   rq  rq  \  s*      )9J4$  s   " "c                 2   / n/ n/ nUnSnSn[        U R                  5       Hd  nXSL a  XL a  U(       a  UOUnUR                  U5        XRL d  M-  UR                  [        ;   d  MC  [        U5      U;  d  MT  UR                  nUnUnMf     U(       a  U(       a  U(       d  [        S5      eUR                  5         UR                  5         UR                  5         Sn	[        R                  U R                  ;   Ga5  US   R                  (       Ga   US   R                  US   L Ga
  [        U5      n
/ n/ nUS   R                  [        R                  [        R                   4;   nU(       a  SOSn[#        U
5      SU-   :  a  U
S   R                  [        ;   a  U
S   R                  X   L a  U(       a"  UR                  U
R%                  S5      5        SnUR                  U
R%                  S5      5        UR'                  SU
R%                  5       5        [#        U
5      SU-   :  a-  U
S   R                  [        ;   a  U
S   R                  X   L a  M  U(       a  U
(       a  [)        U
U US   [*        R,                  S9nU R                  R.                  (       a$  U
S   R                  [        R0                  :X  a  SnOQU R                  R2                  [5        S	 X-    5       5      -
  n[7        U[9        U R                  US
9S9(       a  SnOSnU(       a  U
nUR;                  U5        X-   nUn	[)        X@U[*        R<                  S9nU	c  [)        X0U[*        R,                  S9n	[)        X U[*        R>                  S9n[A        UU	U5        [C        UU	UXg5      $ )a  Split the line into head, body, tail starting with the last bracket pair.

Note: this function should not have side effects. It's relied upon by
_maybe_split_omitting_optional_parens to get an opinion whether to prefer
splitting on the right side of an assignment statement.
Nr  r   r   rn   r   r  Tc              3   J   #    U  H  n[        [        U5      5      v   M     g 7frg   )rr   r0  r2  r   s     r_   r3  *_first_right_hand_split.<locals>.<genexpr>  s!      : M D	NN Ms   !#r  rB  F)"reversedrs   r}   r~   r!   r  r  rU   reverser   *hug_parens_with_braces_and_square_bracketsrc   r   rp  rQ   STARr   rr   popinsertr  r  r  rz  COMMAr  sumr   r   extendr  r  r  r   )ru   rn  r  r  r  r  r  closing_bracketr   r  inner_body_leaveshugged_opening_leaveshugged_closing_leavesis_unpackingunpacking_offset
inner_body
should_hugr  r  r  s                       r_   r  r  p  s]    !K K K N&*O&*O%(&0;d#(yy,,D1E"&"6"6"&!, & K -..D::diiGN   N**k"o= -,.,."1~**uzz5;K;K.LL%1q!"a*:&::!"%**.>>!"%55 23  %,,->-B-B1-EF#$ !(():)>)>q)AB!((,=,A,A,CD !"a*:&::!"%**.>>!"%55 23 !%61!%b)055	J 		..%b)..%++=!
"ii33c : 5 M: 7  (WTYYK%P "'J!%J/""#893A!#?6L6Q6QD |':P:U:U
 $?6L6Q6QD %T46T4HHr^   rt  c              #   ~  #    [         R                  U;  a  U R                  R                  [        R
                  :X  a  U R                  R                  (       d  U R                  R                  [        R                  :X  a  U R                  R                  (       ds  UR                  (       db  [        XR                  5      (       aH  [        U R                  5      1Ukn [        XS9n[        XPU5      (       a  [        XQX#US9 S h  vN   g  [;        U R                  5        [;        U R                  5        U R4                  U R&                  U R8                  4 H  nU(       d  M  Uv   M     g  Nh! [          Ga;  nUR"                  (       a   S nAN[%        U R&                  5      (       d  [)        U R&                  US9(       d  [*        R,                  (       a|  U R                  R.                  (       aa  U R                  R.                  R.                  (       a<  U R                  R.                  R.                  R                  [0        R2                  :X  d  [!        S5      UeU R4                  R7                  5       (       d  U R8                  R7                  5       (       a  [!        S5      Ue S nAGNS nAff = f7f)Nrm  r  rB  z<Splitting failed, body is still too long and can't be split.zThe current optional pair of parentheses is bound to fail to satisfy the splitting algorithm because the head or the tail contains multiline strings which by definition never fit one line.)r   FORCE_OPTIONAL_PARENTHESESr  r~   rQ   r   r   r  r   	is_importr   r  r  r  _prefer_split_rhs_oop_over_rhsr  rU   is_chained_assignmentr   r  r   r   r   r   rB   dictsetmakerr  contains_multiline_stringsr  r'   )rt  ru   rc   rd   rn  rhs_ooper  s           r_   r  r    s	     	**(:$$

2##))$$

2##)) %c+;+;<<3&&'/$/%	-d>G-gDAA@4   	 BH 3&&'3&&'88SXXsxx06L 1K
  	)) !**,SXXDA;;++22++2299++2299>>$BSBSS "R
 3355886688!
  9+	sV   CJ=!(E4 	E2
E4 AJ=)	J=2E4 4J:?J5J=DJ5/J=5J::J=r  c                    U R                   R                  5       (       d>  U R                  R                  5       (       d  U R                  R                  5       (       a  g[        R
                  (       a  UR                  R                  (       a  UR                  R                  R                  (       a  UR                  R                  R                  R                  [        R                  :X  aK  UR                  R                  R                  (       a&  [        S U R                  R                   5       5      $ [        UR                   R                  5      S:  a5  UR                   R                  S   R                  [         R"                  :X  d  g[        S UR                   R                  SS  5       5      (       d  g[%        UR                   ['        X"R(                  S-
  S	9S
9(       d  gUR                   R*                  b  gUR                   R                   Vs/ s H  o3R                  PM     snR-                  [         R"                  5      nU R                   R                   Vs/ s H  o3R                  PM     snR-                  [         R"                  5      nUS:  a  XE:  a  gSn[/        U R                   R                  5       H;  nUR                  [         R"                  :X  a    OUR                  [0        ;   d  M9  Sn  O   U=(       dA    [        S U R                   R                   5       5      =(       a    [%        U R                   US
9$ s  snf s  snf )zv
Returns whether we should prefer the result from a split omitting optional parens
(rhs_oop) over the original (rhs).
Tc              3   Z   #    U  H!  oR                   [        R                  :H  v   M#     g 7frg   )r~   rQ   r   r  s     r_   r3  1_prefer_split_rhs_oop_over_rhs.<locals>.<genexpr>3  s     L8K99+8K   )+r   c              3   F   #    U  H  oR                   [        ;   v   M     g 7frg   )r~   r    r  s     r_   r3  r  :  s     F1EyyH$1Es   !Nr   rn   r  rB  Fc              3   Z   #    U  H!  oR                   [        R                  :H  v   M#     g 7frg   )r~   rQ   EQUALr  s     r_   r3  r  _  s     I5HT		U[[(5Hr  )r  r{  r  r  r   r   r  r   r~   rB   r  r{   
delimitersr5  rs   rr   rQ   r  r   r   r  rz  countr  r!   )r  rt  rc   r   rhs_head_equal_countrhs_oop_head_equal_count has_closing_bracket_after_assigns          r_   r  r    sd    	6688<<99;;<<99;; 	//&&&&--&&--22d6G6GGHH$$// L8K8KLLL  A%#((//"*=*B*Bekk*Q F"1EFFF  wt1A1AA1EF  xx$$0 36((//B/$II/BHHU6=ll6I6IJ6Id		6IJPP  a$8$S',$,,-99#99((/3, . 	) 	
 IW\\5H5HII >$W\\= CJs   !M.Mr  r  r  c                     [        [        U5      R                  5       5      nU(       d'  US:X  a  [        S5      eUS:  a  [        SU S35      egg)a[  Raise :exc:`CannotSplit` if the last left- or right-hand split failed.

Do nothing otherwise.

A left- or right-hand split is based on a pair of brackets. Content before
(and including) the opening bracket is left on one line, content inside the
brackets is put on a separate line, and finally content starting with and
following the closing bracket is put on a separate line.

Those are called `head`, `body`, and `tail`, respectively. If the split
produced the same line (all content in `head`) or ended up with an empty `body`
and the `tail` is just the closing bracket, then it's considered failed.
r   z)Splitting brackets produced the same liner   z,Splitting brackets on an empty body to save z characters is not worth itN)rr   r0  r  rU   )r  r  r  tail_lens       r_   r  r  f  s_     3t9??$%Hq=IJJ\>xj I     	 r^   rs   originalr  c                    U (       d  gUR                   (       a  gUR                  (       d  gUR                  S:w  a  g[        S U  5       5      (       a  g[	        S U  5       S 5      nUc  g[        U5      S:X  a  gUR                  (       aN  UR                  R                  (       a3  UR                  R                  R                  [        R                  :X  a  gg)NFTr   c              3      #    U  H8  oR                   [        R                  :H  =(       a    [        U5      (       + v   M:     g 7frg   )r~   rQ   r  r7   r  s     r_   r3  )_ensure_trailing_comma.<locals>.<genexpr>  s0      QW		U[[ D)>t)D%DDQWs   A Ac              3   J   #    U  H  oR                   (       d  M  Uv   M     g 7frg   r   r  s     r_   r3  r    s     DfdTTfs   #	#re   )r  r  r   r5  r   r)   r   next_siblingr~   rQ   VBAR)rs   r  r  leaf_with_parents       r_   _ensure_trailing_commar    s     ??#
 QW    DfDdK+,8 	##00##0055Cr^   r  c                   [        UR                  UR                  S9nU[        R                  L a  SUl        U=R                  S-  sl        [        XU5      (       a  [        [        U 5      S-
  SS5       Hj  nX   R                  [        :X  a  M  X   R                  [        R                  :w  a/  [        [        R                  S5      nU R                  US-   U5          O   [        5       nU[        R                   L a  [#        U 5      nU  HH  nUR%                  US['        U5      U;   S9  UR)                  U5       H  n	UR%                  U	SS9  M     MJ     U[        R                  L a  [+        XB5      (       a  SUl        U$ )aQ  Return a new line with given `leaves` and respective comments from `original`.

If it's the head component, brackets will be tracked so trailing commas are
respected.

If it's the body component, the result line is one-indented inside brackets and as
such has its first leaf's prefix normalized and a trailing comma added when
expected.
ro   Trn   r   rD  r  r  )r   rc   rp   r  r  r|  r  rangerr   r~   r#   rQ   r  rR   r  r   r  r   r}   r  comments_aftershould_split_linery  )
rs   r  r  r  r  r   	new_commar  r   comment_afters
             r_   r  r    sT     x}}HNN;F*///!%!&ODD3v;?B39>>%779>>U[[0 $U[[# 6IMM!a%3 4 $'5O*///=fET(o5 	 	

 &44T:MMM-dM; ;  *///4E5 5 #'Mr^   
split_funcc           
         ^  [        T 5      S[        S[        [           S[        S[
        [           4U 4S jj5       nU$ )zNormalize prefix of the first leaf in every line returned by `split_func`.

This is a decorator over relevant split functions.
ru   rd   rc   re   c              3   ^   >#    T" XU5       H  nSUR                   S   l        Uv   M     g 7fr   )rs   r   )ru   rd   rc   
split_liner  s       r_   split_wrapper0dont_increase_indentation.<locals>.split_wrapper  s2      %TT:J*,Ja ' ;s   *-)r	   r   r   r   r   r   )r  r  s   ` r_   dont_increase_indentationr    sM     :(19=	$  r^   c                     [        [        U R                  5      S-
  SS5       H(  nU R                  U   R                  [        :w  d  M&  Us  $    g )Nrn   r   r   )r  rr   rs   r~   r#   )ru   leaf_idxs     r_   _get_last_non_comment_leafr    sE    #dkk*Q.26;;x %%);;O 7 r^   r   c                     [        U [        R                  1S9(       a  [        R                  U;   $ [        U [        R
                  [        R                  1S9(       a  [        R                  U;   $ g)N)withinT)r?   rB   typedargslistr   TRAILING_COMMA_IN_DEFarglistargumentTRAILING_COMMA_IN_CALL)r   rd   s     r_   _can_add_trailing_commar    sQ    t1123,,88t||T]];<--99r^   safedelimiter_priorityc                    U (       a  U[         :X  aw  UR                  S   R                  [        R                  :w  aL  UR                  S   R                  [
        :w  a+  [        [        R                  S5      nUR                  U5        U$ )Nr   rD  )r   rs   r~   rQ   r  r#   rR   r}   )r  r  ru   r  s       r_   _safe_add_trailing_commar    s_    .0KKO  EKK/KKO  $66c*	IKr^   c              #     ^ ^^#    [        T R                  5      S:X  a  [        S5      SeT R                  S   nT R                  n UR	                  [        U5      1S9nU[        :X  a   UR                  U5      S:X  a  [        S5      e[        T R                  T R                  T R                  S	9m[        R                  nS
nS[        S[         [           4UU 4S jjmS[        S[         [           4UU 4S jjn[#        T 5      n	[%        T R                  5       GHo  u  pT" U5       Sh  vN   U
S:  =(       a4    UR&                  R)                  [        T R                  U
S-
     5      5      nX:w  d
  U[*        ;   a  U" U5       Sh  vN   [-        XkR.                  5      nU(       a  UR.                  U:X  a  [1        X5      nUR2                  [4        :X  a  X:X  a  [7        XuT5      mUR&                  R)                  [        U5      5      nX:X  d  M  U
S-   [        T R                  5      :  a*  U[*        ;  a   U" T R                  U
S-      5       Sh  vN   Tv   [        T R                  T R                  T R                  S	9mGMr     T(       a  [7        XuT5      mTv   gg! [         a    [        S5      Sef = f GN GN: No7f)zSplit according to delimiters of the highest priority.

If the appropriate Features are given, the split will add trailing commas
also in function signatures and calls that contain `*` and `**`.
r   z
Line emptyNr   excludezNo delimiters foundrn   z7Splitting a single attribute from its owner looks wrongrc   rp   r|  Tr   re   c              3      >#     TR                  U SS9  g! [         aA    Tv   [        TR                  TR                  TR
                  S9mTR                  U 5         gf = f7f)EAppend `leaf` to current line or to new line if appending impossible.Tr  r
  Nappend_safe
ValueErrorr   rc   rp   r|  r}   r   rq   ru   s    r_   append_to_line'delimiter_split.<locals>.append_to_line#  sa     	&$$T$= 	&YYdjj$BVBVL %	&&   A$ A$AA!A$ A!!A$c              3   b   >#    TR                  U 5       H  nT" U5       S h  vN   M     g  N	7frg   )r  )r   r  r  ru   s     r_   append_comments(delimiter_split.<locals>.append_comments0  s,     !006M%m444 74s    /-
/)rr   rs   rU   r{   max_delimiter_priorityr  r  r   delimiter_count_with_priorityr   rc   rp   r|  sysmaxsizerR   r   r  r   r  getMIGRATE_COMMENT_DELIMITERSminbracket_depthr  r~   r#   r  )ru   rd   rc   	last_leafbtr  lowest_depthtrailing_comma_safer  last_non_comment_leafr  r   previous_priorityleaf_priorityr  rq   s   `             @@r_   r  r    s     4;;1,'T1BI			B;6696O
 	l*,,-?@AESTTYYdjj$:N:NL ;;L&T &htn & &5d 5x~ 5 5 7t<#DKK0!$'''$qL 
R]]->->t{{8a<().
 3!%??&t,,,<););<4#5#5#E"9$"I>>//H4U3#L ))"T(3.1s4;;//&.HH*4;;x!|+DEEEYYdjj$BVBVL= 1D /\
 	 G  ;/0d:;D 	( -" FsY   AKJ*  CK.K/AKKBKAKK
AK*KKK
Kc              #     ^ ^#    T R                  5       (       d  [        S5      e[        T R                  T R                  T R
                  S9mS[        S[        [           4UU 4S jjnT R                   H;  nU" U5       Sh  vN   T R                  U5       H  nU" U5       Sh  vN   M     M=     T(       a  Tv   gg N= N7f)z4Split standalone comments from the rest of the line.z*Line does not have any standalone commentsr
  r   re   c              3      >#     TR                  U SS9  g! [         aA    Tv   [        TR                  TR                  TR
                  S9mTR                  U 5         gf = f7f)r  Tr  )rp   r|  Nr  r  s    r_   r  0standalone_comment_split.<locals>.append_to_linej  sa     	&$$T$= 	&		T=Q=QL %	&r  N)
r}  rU   r   rc   rp   r|  rR   r   rs   r  )ru   rd   rc   r  r   r  rq   s   `     @r_   r  r  ^  s     
 ,,..FGGYYdjj$:N:NL&T &htn & & !$'''!006M%m444 7    	( 5s$   B CC#C(C)CCrw   r   c          	      	   [        U R                  SS9 H  nUR                  [        ;   d  M    g   U R                  [
        R                  :X  a  [        XU5        Sn[        [        U R                  5      5       GH	  u  pg[        U[        5      (       a(  UR                  [
        R                  :X  a
  [        XqX#S9  [        U[        5      (       a*  UR                  [
        R                  :X  a  [        US1X#S9  [        U[        5      (       a*  UR                  [
        R                   :X  a  [        US1X#S9  US:X  a5  [        U[        5      (       a   UR                  [
        R"                  :X  a  SnU(       Ga  UR                  [
        R$                  :X  a  U R                  [
        R&                  :X  a  [        UR(                  [*        5      (       a`  UR(                  R                  [,        R.                  :X  a8  UR(                  R                  S	:X  a  [1        UU UUSS
9(       a
  [3        XSS9  GO[        U[        5      (       a*  U R                  [
        R                  :X  a  [5        XpX#S9  GOUR                  [
        R$                  :X  a  SU;   a~  [7        UR                  5      S:X  ae  [9        UR                  S   5      (       aH  [;        UR                  S   5      (       a+  UR                  S   R                  [
        R<                  :X  d  [1        XpX#S9(       a
  [3        XSS9  GO[?        U5      (       a  [3        XSS9  OU R                  [
        R@                  :X  a  [C        XU5          gUS:X  a?  UR                  [,        RD                  :X  a!  U R                  [
        RF                  :X  a  GMG  [        U[*        5      (       aG  URH                  b:  URH                  R                  [,        RJ                  :X  a  UR                  S:X  a    g[M        U5      (       d
  [3        XSS9  UR                  [,        RN                  :H  n[        U[*        5      =(       a    UR                  U;   =(       d    UnGM     g)a1  Make existing optional parentheses invisible or create new ones.

`parens_after` is a set of string leaf values immediately after which parens
should be put.

Standardizes on visible parentheses for single-element tuples, and keeps
existing visible parentheses for other tuples and generator expressions.
F)is_endmarkerNr   caserE  r   TrI  r   r   r   r:  r   r   rn   r  )(r   r   r   r   r~   rB   	with_stmt_maybe_wrap_cms_in_parensr   rp  r   rz   rS   	annassignr   
case_blockguardtestlist_star_exprr   for_stmtr   rR   rQ   NAMEr   rC   remove_with_parensrr   r1   r8   testr5   import_from_normalize_import_fromr  except_clauser  r   r2   r  )	rw   r   rc   rd   pc
check_lparr  r   comma_checks	            r_   r   r     s>    DKKe<88w = yyDNN"!$h7J!$t}}"56 eT""uzzT^^'C&t eT""uzzT__'D&VH4
 eT""uzzTZZ'?&TF QJ5$''

d555J

dii'II.u11488&&++uzz9&&,,56%15 (UCE4((TYY$..-H"5TMtyy($'1,!%.."344!%.."455NN1%**dii76T (UCe$$#D>d...&tE:
JJ%**,II!3!33
  5$''&&2&&++u{{:KK6) (//#D?jjEKK/t, 
KK<'6; 	q 7r^   r   r   r  c                 ~   [        U5      (       a;  [        U R                  S   5      (       d   eSUl        SU R                  S   l        g UR                  [
        R                  :w  aT  U R                  U[        [
        R                  S5      5        U R                  [        [
        R                  S5      5        g g )Nr   ry   )r1   r8   r   r   r~   rQ   r  r   rR   r   r   r   )r   r   r  s      r_   r7  r7    s     UV__R01111$&!	uzz	!E4

B#78DR01 
"r^   c                    U R                   S   R                  [        R                  :X  Ga  [	        U R                   5      S:  Ga  U R                   S   R                  [
        R                  :X  Gax  U R                   S   R                   S   R                  [        R                  :X  Ga>  [        U R                   S   U UUSS9(       a  [        X R                   S   SS9  [        [        U R                   S   R                   S   5      n[        [        U R                   S   R                   S   5      nU R                   S   R                   S   n[        U[        5      (       a  UR                  [
        R                  :w  dL  UR                   S   R                  [        R                  :X  d!  [        S UR                    5       5      (       a  [!        U5        [!        U5        g g g g g g g )	Nr   rn   Tr   Fr   r   c              3      #    U  H9  n[        U[        5      =(       a    UR                  [        R                  :H  v   M;     g 7frg   )rz   rR   r~   rQ   r   r1  s     r_   r3  &remove_await_parens.<locals>.<genexpr>  s5      !: ud+N

e>N>N0NN!:s   AA)r   r~   rQ   AWAITrr   rB   r   r   r   rC   r   rR   rz   rS   r   r5  r'   )rw   rc   rd   r  r  bracket_contentss         r_   r   r     s   }}Q+DMM0BQ0FMM!!!TYY.a ))!,11UZZ?2a !-1 $D--*:EJ #4q)9)B)B1)EFO"4q)9)B)B2)FGO#}}Q/88;*D11 %%3#,,Q/44C !1!:!:  
 // 2+ @ / 1G+r^   c                    [         R                  U;  dD  [        U R                  5      S::  d+  U R                  S   R                  [
        R                  :X  a  gSn[        S[        U R                  5      5       H2  nU R                  U   R                  [        R                  :X  d  M0  Un  O   Ub  [        [        R                  S5      n[        [        R                  S5      nU R                  SU nU H  nUR                  5         M     [        [
        R                  U[        [
        R                  U5      U/5      n	U R!                  SU	5        gg)zWhen enabled and safe, wrap the multiple context managers in invisible parens.

It is only safe when `features` contain Feature.PARENTHESIZED_CONTEXT_MANAGERS.
r   rn   Nry   )r   PARENTHESIZED_CONTEXT_MANAGERSrr   r   r~   rB   r   r  rQ   r   rR   r   r   r   rS   testlist_gexpr   )
rw   rc   rd   colon_indexr   r   r   context_managersr   	new_childs
             r_   r-  r-  (  s    	..h>t}}"==  DII-!%K1c$--()==  EKK/K * EJJ#EJJ#==;7%ELLN & IId4#5#57GH$O
	 	!Y') r^   c                    U R                   [        R                  :X  aX  [        U UUUSS9(       a
  [	        XSS9  [        U R                  S   [        5      (       a  [        U R                  S   XUS9  g	g	U R                   [        R                  :X  a5  U R                   H$  n[        U[        5      (       d  M  [        X@X#S9  M&     g	U R                   [        R                  :X  a^  [        S U R                  5        5       5      (       d8  [        U R                  S   U UUSS9(       a  [	        X R                  S   SS9  g	g	g	g	)
z6Recursively hide optional parens in `with` statements.Tr   Fr   rn   r   c              3   Z   #    U  H!  oR                   [        R                  :H  v   M#     g 7frg   )r~   rQ   
COLONEQUALr  s     r_   r3  %remove_with_parens.<locals>.<genexpr>u  s       32?$		U%%%-r  r   N)r~   rB   r   r   rC   rz   r   rS   r4  rD  asexpr_testr5  rs   )rw   r   rc   rd   r   s        r_   r4  r4  R  s   ( yyDII.)-
  e<dmmA&--t}}Q/8T .	d((	(]]E%&&"5TM # 
d&&	&s 326++-3 0 0 /MM!)-
  mmA&6F
0	&r^   r   c                    U R                   [        R                  [        R                  4;  Gd  [	        U 5      (       Gd  [        U 5      (       Gd  [        U 5      (       a  UR                   [        R                  :X  Gdt  [        U 5      (       a>  UR                   [        R                  :X  a   [        U [        R                  5      (       Gd&  [        U 5      (       a  UR                   [        R                  :w  d  U(       d  [        U 5      [        :  a  [         R"                  U;   a  [$        R&                  U;   a  [        U 5      (       a  U R(                  b  U R(                  R                   [        R*                  :X  aq  U R,                  b4  [/        U R,                  5      (       a  U R,                  R0                  S:X  d0  [3        U 5      (       d   [5        U 5      (       d  [7        U 5      (       a  g[9        U 5      (       a  UR                   [        R:                  [        R                  [        R<                  [        R>                  [        R*                  [        R@                  [        R                  [        RB                  [        RD                  [        RF                  [        RH                  [        RF                  4;   a  gU RJ                  S   nU RJ                  S   n[M        U5      (       GaZ  [O        U5      (       GaI  U RJ                  S   n[Q        URR                  RU                  5       5      (       d  SUl        SUl        [W        UUUUUS9  [Y        U5      (       a  UR[                  URJ                  S   5        URJ                  S   RR                  RU                  5       (       aE  URJ                  S   RR                  URJ                  S   RR                  -   URJ                  S   l)        URJ                  S   RR                  RU                  5       (       a+  URJ                  S   RR                  URR                  -   Ul)        gg)	zIf it's safe, make the parens in the atom `node` invisible, recursively.
Additionally, remove repeated, adjacent invisible parens from the atom `node`
as they are redundant.

Returns whether the node should itself be wrapped in invisible parentheses.
asFr   r   rn   ry   r   T).r~   rB   r   exprr/   r5   r;   rL  r,  r*   rQ   r  rA   	expr_stmtr   r   r   !remove_parens_around_except_typesr   UNPARENTHESIZED_EXCEPT_TYPESr   r8  r  r3   r   r=   r<   r0   r@   r.  assert_stmtreturn_stmtfuncdefrD  tnamer2  del_stmtr   r1   r8   r>   r   r  r   r-   r   )rw   r   rc   rd   r   r)  r*  middles           r_   r   r     s    			$))TYY//$TNNv{{d.>.>>TNNt~~-%dEKK88TNNv{{dnn<
 -.t4F
 99TA88HDTNNKK+KK$$(:(:: %%1%d&7&788))//47 &d++#D))D!!;;NNNNLLNNJJMMMMMM
 
 MM!E==DUd 3 3q!
 .fmm.A.A.CDDEKDJ+)E	
 )00 NN6??1-.q!((..00 OOA&--0B0I0II ") r"))//11$oob1884;;Fr^   c                 *   UR                   (       a  UR                  S;   d  g[        5       nSn U R                  S   nUR                  [
        R                  :X  a  SnUR                  [        U5      5        U R                  R                  US9nU[        :H  =(       a]    U R                  R                  =(       a    U=(       d7    UR                   R                  [         R"                  [         R$                  1;   $ ! [        [        4 a     gf = f)zFShould `line` be immediately split with `delimiter_split()` after RHS?z[{(Fr   Tr  )r   r   r   rs   r~   rQ   r  addr  r{   r  
IndexErrorr  r   rc   rz  rB   r   r6  )ru   r  r	  trailing_commar  max_prioritys         r_   r  r    s     ""'<'<'E
 eGNKKO	>>U[[(!NKK9&++BB7BS >) 		'	'	:N 	H!!&&499d6F6F*GG 
# s   A"C? ?DDr  c              #   &  #    [        5       nU R                  (       d  Uv   SU R                  -  nSnSn[        5       nU R                  SS9 GH=  u  pxn	X9-  nX1:  a    gU	[	        UR
                  5      [	        UR                  5      -   :  n
UR                  [        :X  d  U
(       a    gU(       a  XL a  SnMl  UR                  [        ;   a  US:  a  U R                  US-
     OSnU(       aR  UR                  [        R                  :X  a4  UR                  b'  [        UR                  XR                  5      (       d    gUR                  [!        U5      5        GM  GM  UR                  [        ;   d  GM*  US:  a  U R                  US-
     OSnU(       a1  UR                  ["        ;   a  UR                  [!        U5      5        GM|  U(       a?  UR                  [!        U5      5        UR%                  U5        UR'                  5         Uv   U(       aR  UR                  [        R                  :X  a4  UR                  b'  [        UR                  XR                  5      (       d    gUR
                  (       d  GM/  UR                  nUnGM@     g7f)a  Generate sets of closing bracket IDs that should be omitted in a RHS.

Brackets can be omitted if the entire trailer up to and including
a preceding closing bracket fits in one line.

Yielded sets are cumulative (contain results of previous yields, too).  First
set is empty, unless the line should explode, in which case bracket pairs until
the one that needs to explode are omitted.
   NT)is_reversedr   rn   )r   rz  rp   enumerate_with_lengthrr   r   r   r~   r#   r!   rs   rQ   r  r  r4   rZ  r  r"   updateclear)ru   r  rn  lengthr  r  inner_bracketsr  r   leaf_lengthhas_inline_commentprevs               r_   ro  ro    s      D$$
^F&*O&*O"%%N$($>$>4$>$P [(3tzz?S=M+MM99**.@&"&..16t{{519-		U[[0,,83,,dKK  ""2d8, / YY**-2QY4;;uqy)DD		%55 ""2d8,O,-N+$$&
 II,((4/0D0DdKKXX zzz"&"6"6"&m %Qs   E1J8D J=Jry   rv  r  rk  c          	        ^ U(       d  [        U 5      n/ nU" XT5       HF  n[        U5      R                  S5      U:X  a  [        S5      eUR	                  [        UTUS95        MH     [        U5      n[        R                  U;   d  UR                  R                  S:w  d  U R                  R                  (       a  [        S U R                  R                   5       5      (       dx  U R                  5       (       dc  US   R                  5       (       dK  US   R!                  5       (       d3  [#        US   TS9(       d!  [        S U R$                   5       5      (       a  U$ U R'                  5       n[)        XU R$                  5        U[        R                  1-  n	[+        XTXS	9n
[-        U4S
 jU
 5       5      (       a  U
nU$ )Nr  z-Line transformer returned an unchanged resultr   rt  c              3   8   #    U  H  oR                   v   M     g 7frg   )r   )r2  brackets     r_   r3  "run_transformer.<locals>.<genexpr>q  s     K,J}},Js   r   rB  c              3   <   #    U  H  oR                   S L v   M     g 7frg   r  r  s     r_   r3  rl  z  s     ;{t{{d"{s   rv  c              3   8   >#    U  H  n[        UTS 9v   M     g7f)rB  N)r   )r2  lnrc   s     r_   r3  rl    s     
H2.s   )r   r0  r  rJ   r  r  r   r   r  r   rX   r{   	invisibler5  r  rx  r{  r   rs   cloner   r  all)ru   r  rc   rd   rk  r  transformed_linefeatures_set	line_copyfeatures_fopsecond_opinions     `        r_   r  r  [  sv    !$'F%dd; &&t,8!"QRRn%5D8TU	 < x=L**l:''50##--KD,@,@,J,JKKK**,,!999;;!96688q	5
 ;t{{;;;

I)4;;/7#E#E"FFL$dLN 
H
HHHMr^   )rW   )rW   rW   )F)r\   r  r  collections.abcr   r   dataclassesr   enumr   r   	functoolsr   r	   typingr
   r   r   black.bracketsr   r   r   r   r   black.commentsr   r   r   black.linesr   r   r   r   r   r   r   
black.moder   r   r   black.nodesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   black.numericsrD   black.stringsrE   rF   rG   rH   rI   black.transrJ   rK   rL   rM   rN   rO   rP   blib2to3.pgen2rQ   blib2to3.pytreerR   rS   re  LeafIDrf  rU   ra   r0  ri  r  boolr  r  r  rq  r  r  r  r  rp  r  r  r  r  r  r  r  r  r  r   r   r7  r   r-  r4  r   r  ro  r  rW   r^   r_   <module>r     s   
 
 0   $ ( (  E D   . -& & & & & & & & & &N 5    ! & 

4:M/ MHBGDM HBV
!  c]	 =?y
yy&0&9yd^yx3 3D 3T 3>T =
=%g.=6:=d^=F %'!	

 ! V
	
 d^,  "dI
dI
V
dI dIV %'!A	A
A A !	A
 V
A d^AHHH&H.2H	HV4 t 4 D 4!J!"&!9=!	!H.J.. .
 &. 
.b+ + "T hsm $ *W2E $ 	4 	S 	 	QU 	 .~>  V
V$W-V59Vd^V Vr 
$W-59d^ Dq

q
!#hq
15q
AKGATq
	q
h24 2 23 24 2"0d "0$ "0*W:M "0RV "0J'(
'('(&0&9'(	'(T-G
-G-G$(-G4>w4G-G	-Gj */o
oo o !	o
 #'o 
odD 4 D 6I'D I's I'xF?T I'd +
++ + !	+ + 
$Z+r^   