ó
    áÅŸgÄš  ã                   óh  • S SK r S SKrS SKJrJrJr  S SKJrJr  S SK	J
r
JrJrJr  S SKJrJrJr  S SKJrJr  S SKJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  S SK'J(r(  S S	K)J*r*  S S
K+J,r,J-r-  \" S5      r.\/r0\/r1\\,\-4   r2\ " S S5      5       r3\ " S S5      5       r4\ " S S5      5       r5\ " S S5      5       r6S\\.   S\\7\0\.4      4S jr8 S+S\3S\3S\9\,   S\:SS4
S jjr;SS.S\3S\S \<S\:4S! jjr=S\3S\:4S" jr>S#\4S$\/S\:4S% jr?S\3S&\,S$\/S\:4S' jr@S\3S(\,S$\/S\:4S) jrAS\3S\<4S* jrBg),é    N)ÚCallableÚIteratorÚSequence)Ú	dataclassÚfield)ÚOptionalÚTypeVarÚUnionÚcast)ÚCOMMA_PRIORITYÚDOT_PRIORITYÚBracketTracker)ÚModeÚPreview)ÚBRACKETSÚCLOSING_BRACKETSÚOPENING_BRACKETSÚSTANDALONE_COMMENTÚTEST_DESCENDANTSÚchild_towardsÚis_docstringÚ	is_importÚis_multiline_stringÚis_one_sequence_betweenÚis_type_commentÚis_type_ignore_commentÚis_with_or_async_with_stmtÚmake_simple_prefixÚreplace_childÚsymsÚ
whitespace)Ú	str_width)Útoken)ÚLeafÚNodeÚTc            	       óR  • \ rS rSr% Sr\" SS9r\\S'   Sr	\
\S'   \" \S9r\\   \S	'   \" \S9r\\\\   4   \S
'   \" \S9r\\S'   Sr\\S'   Sr\\S'   Sr\\   \S'    S8S\S\S\SS4S jjrS9S\S\SS4S jjr\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r \S\4S j5       r!\S\4S j5       r"\S\4S j5       r#\S\4S j5       r$\S\4S  j5       r%\S\4S! j5       r&\S\4S" j5       r'SS#.S$\\(\/\4      S\4S% jjr)S\4S& jr*S\4S' jr+S\4S( jr,S\4S) jr-S\4S* jr.S+\S\4S, jr/S-\S\4S. jr0S\S\\   4S/ jr1S:S0 jr2S\S\4S1 jr3 S9S2\S\4\5\6\\
4      4S3 jjr7S;S4 jr8S\94S5 jr:S\4S6 jr;S7r<g)<ÚLineé'   z;Holds leaves and comments. Can be printed with `str(line)`.F)ÚreprÚmoder   Údepth©Údefault_factoryÚleavesÚcommentsÚbracket_trackerÚinside_bracketsÚshould_split_rhsNÚmagic_trailing_commaÚleafÚpreformattedÚtrack_bracketÚreturnc                 ó„  • UR                   [        ;   =(       dG    UR                   [        R                  :H  =(       d#    [	        UR
                  R                  5       5      nU(       d  g[        R                  UR                   :X  a   U R                  (       a  U R                  SS2	 U R                  (       a>  U(       d7  U=R                  [        UU R                  U5      U R                  S9-  sl
        U R                  (       d  U(       a  U(       ay  U R                  R!                  U5        U R                  R"                  (       a  U R%                  U5      (       a  Xl        O&U R%                  U5      (       a  U R'                  5         U R)                  U5      (       d  U R                  R+                  U5        gg)a7  Add a new `leaf` to the end of the line.

Unless `preformatted` is True, the `leaf` will receive a new consistent
whitespace prefix and metadata applied by :class:`BracketTracker`.
Trailing commas are maybe removed, unpacked for loop variables are
demoted from being delimiters.

Inline comments are put aside.
Néþÿÿÿ)Úcomplex_subscriptr+   )Útyper   r#   ÚFSTRING_MIDDLEÚboolÚvalueÚstripÚCOLONÚis_class_paren_emptyr/   Úprefixr!   Úis_complex_subscriptr+   r2   r1   Úmarkr4   Úhas_magic_trailing_commaÚremove_trailing_commaÚappend_commentÚappend)Úselfr5   r6   r7   Ú	has_values        ÚL/var/www/blue/EV-Temp_rev04/venv/lib/python3.13/site-packages/black/lines.pyrI   ÚLine.append5   s;  € ð �I‰IœÑ!÷ (à�y‰yœE×0Ñ0Ñ0÷(ô �D—J‘J×$Ñ$Ó&Ó'ð	 	ö Øä�;‰;˜$Ÿ)™)Ó#¨×(A×(AØ—‘˜B™CÐ Ø�;�;ž|ð �KŠKœ:ØØ"&×";Ñ";¸DÓ"AØ—Y‘Yññ �Kð
 ××¦|¶}Ø× Ñ ×%Ñ% dÔ+Ø�y‰y×-×-Ø×0Ñ0°×6Ñ6Ø04Ô-øØ×.Ñ.¨t×4Ñ4Ø×*Ñ*Ô,Ø×"Ñ" 4×(Ñ(Ø�K‰K×Ñ˜tÕ$ð )ó    c                 ó,  • U R                   R                  S:X  d  U R                   R                  5       (       aL  U R                  (       a  [	        S5      eU R
                  (       a  UR                  [        :X  a  [	        S5      eU R                  XS9  g)zÓLike :func:`append()` but disallow invalid standalone comment structure.

Raises ValueError when any `leaf` is appended after a standalone comment
or when a standalone comment is not the first leaf on the line.
r   z$cannot append to standalone commentsz5cannot append standalone comments to a populated line©r6   N)	r1   r,   Úany_open_for_or_lambdaÚ
is_commentÚ
ValueErrorr/   r<   r   rI   )rJ   r5   r6   s      rL   Úappend_safeÚLine.append_safe^   ss   € ð × Ñ ×&Ñ&¨!Ó+Ø×#Ñ#×:Ñ:×<Ñ<à��Ü Ð!GÓHÐHà�{�{˜tŸy™yÔ,>Ó>Ü ØKóð ð 	�‰�DˆÒ4rN   c                 ó€   • [        U R                  5      S:H  =(       a     U R                  S   R                  [        :H  $ )z"Is this line a standalone comment?é   r   )Úlenr/   r<   r   ©rJ   s    rL   rR   ÚLine.is_commentr   s1   € ô �4—;‘;Ó 1Ñ$×R¨¯©°Q©×)<Ñ)<Ô@RÑ)RÐRrN   c                 óz   • [        U 5      =(       a*    U R                  S   R                  [        R                  :H  $ )zIs this line a decorator?r   )r>   r/   r<   r#   ÚATrY   s    rL   Úis_decoratorÚLine.is_decoratorw   s*   € ô �D‹z×=˜dŸk™k¨!™n×1Ñ1´U·X±XÑ=Ð=rN   c                 óV   • [        U 5      =(       a    [        U R                  S   5      $ )zIs this an import line?r   )r>   r   r/   rY   s    rL   r   ÚLine.is_import|   s    € ô �D‹z×7œi¨¯©°A©Ó7Ð7rN   c                 óV   • [        U 5      =(       a    [        U R                  S   5      $ )zIs this a with_stmt line?r   )r>   r   r/   rY   s    rL   r   ÚLine.is_with_or_async_with_stmt�   s!   € ô �D‹z×HÔ8¸¿¹ÀQ¹ÓHÐHrN   c                 óÀ   • [        U 5      =(       aM    U R                  S   R                  [        R                  :H  =(       a    U R                  S   R
                  S:H  $ )z Is this line a class definition?r   Úclass)r>   r/   r<   r#   ÚNAMEr?   rY   s    rL   Úis_classÚLine.is_class†   sJ   € ô �‹J÷ 0Ø—‘˜A‘×#Ñ#¤u§z¡zÑ1÷0à—‘˜A‘×$Ñ$¨Ñ/ð	
rN   c                 ó¸   • U R                   =(       aC    U R                  SS [        S5       Vs/ sH  n[        [        R
                  S5      PM     sn:H  $ s  snf )zEIs this line a class definition with a body consisting only of "..."?éýÿÿÿNé   Ú.)rf   r/   Úranger$   r#   ÚDOT©rJ   Ú_s     rL   Úis_stub_classÚLine.is_stub_class�   sR   € ð �}‰}÷ 
 §¡¨R¨SÐ!1Ü*/°¬(ó6
Ù*2 QŒD”—‘˜CÖ ©(ñ6
ñ "
ð 	
ùò 6
s   ¯#Ac                 ó¾  •  U R                   S   n U R                   S   nUR                  [        R                  :H  =(       a    UR
                  S:H  =(       db    UR                  [        R                  :H  =(       a>    USL=(       a3    UR                  [        R                  :H  =(       a    UR
                  S:H  $ ! [         a     gf = f! [         a    Sn Nºf = f)zBIs this a function definition? (Also returns True for async defs.)r   FrW   NÚdef)r/   Ú
IndexErrorr<   r#   re   r?   ÚASYNC)rJ   Ú
first_leafÚsecond_leafs      rL   Úis_defÚLine.is_def–   sÄ   € ð	ØŸ™ Q™ˆJð	Ø*.¯+©+°a©.ˆKð —‘¤5§:¡:Ñ-×K°*×2BÑ2BÀeÑ2K÷ 
Ø�O‰OœuŸ{™{Ñ*÷ +Ø 4Ð'÷+à× Ñ ¤E§J¡JÑ.÷+ð ×!Ñ! UÑ*ð		
øô ó 	Ùð	ûô
 ó 	ØŠKð	ús"   ‚B= ’C Â=
C
Ã	C
ÃCÃCc           	      óð   • U R                   =(       a_    U R                  SS [        [        R                  S5      /[        S5       Vs/ sH  n[        [        R                  S5      PM     sn-   :H  $ s  snf )zHIs this line a function definition with a body consisting only of "..."?éüÿÿÿNÚ:rj   rk   )rx   r/   r$   r#   rA   rl   rm   rn   s     rL   Úis_stub_defÚLine.is_stub_def©   sj   € ð �{‰{÷ 
˜tŸ{™{¨2¨3Ð/´D¼¿¹ÀcÓ4JÐ3KÜ*/°¬(óO
Ù*2 QŒD”—‘˜CÖ ©(ñO
ñ 4
ñ  
ð 	
ùò O
s   Á	#A3c                 óÌ  • [        U 5      =(       aÓ    [        U R                  5      S:H  =(       a´    U R                  =(       a¡    U R                  S   R                  [
        R                  :H  =(       ap    U R                  S   R                  S:H  =(       aM    U R                  S   R                  [
        R                  :H  =(       a    U R                  S   R                  S:H  $ )zjIs this a class with no base classes but using parentheses?

Those are unnecessary and should be removed.
é   é   Ú(rj   Ú))	r>   rX   r/   rf   r<   r#   ÚLPARr?   ÚRPARrY   s    rL   rB   ÚLine.is_class_paren_empty°   s®   € ô �‹J÷ ,Ü�D—K‘KÓ  AÑ%÷,à—‘÷,ð —‘˜A‘×#Ñ#¤u§z¡zÑ1÷,ð —‘˜A‘×$Ñ$¨Ñ+÷	,ð
 —‘˜A‘×#Ñ#¤u§z¡zÑ1÷,ð —‘˜A‘×$Ñ$¨Ñ+ð	
rN   c                 óø   • U (       a+  U R                   S   R                  [        R                  :w  a  gU R                   S   R                  nUR                  S5      (       a  gUR                  S5      (       a  gg)z#Is the line a triple quoted string?r   F)z"""z'''T)zr'''zr"""zR'''zR""")r/   r<   r#   ÚSTRINGr?   Ú
startswith)rJ   r?   s     rL   Ú_is_triple_quoted_stringÚLine._is_triple_quoted_stringÀ   sb   € ö �t—{‘{ 1‘~×*Ñ*¬e¯l©lÓ:ØØ—‘˜A‘×$Ñ$ˆØ×Ñ˜N×+Ñ+ØØ×ÑÐ<×=Ñ=ØØrN   c                 óV   • [        U 5      =(       a    [        U R                  S   5      $ )zIs the line a docstring?r   )r>   r   r/   rY   s    rL   r   ÚLine.is_docstringÌ   s    € ô �D‹z×:œl¨4¯;©;°q©>Ó:Ð:rN   c                 ó–   • U R                    Vs/ sH  oR                  PM     snR                  [        R                  5      S:„  $ s  snf )z Is the line a chained assignmentrW   )r/   r<   Úcountr#   ÚEQUAL©rJ   r5   s     rL   Úis_chained_assignmentÚLine.is_chained_assignmentÑ   s6   € ð '+§k¢kÓ2¡k˜d—	”	¡kÑ2×8Ñ8¼¿¹ÓEÈÑIÐIùÒ2s   �Ac                 óŠ   • [        U R                  5      S:X  a  gU R                  S   R                  [        R                  :H  $ )z/Does this line open a new level of indentation.r   Féÿÿÿÿ)rX   r/   r<   r#   rA   rY   s    rL   Úopens_blockÚLine.opens_blockÖ   s5   € ô ˆt�{‰{Ó˜qÓ ØØ�{‰{˜2‰×#Ñ#¤u§{¡{Ñ2Ð2rN   ©Úfirst_leaf_matchesr™   c                óÒ   • [        U R                  5      S:w  a  gU R                  S   nUR                  [        :w  d  UR                  c  gUSL =(       d    U" UR                  5      $ )z•Is this line converted from fmt off/skip code?

If first_leaf_matches is not None, it only returns True if the first
leaf of converted code matches.
rW   Fr   N)rX   r/   r<   r   Úfmt_pass_converted_first_leaf)rJ   r™   r5   s      rL   Úis_fmt_pass_convertedÚLine.is_fmt_pass_convertedÝ   sd   € ô ˆt�{‰{Ó˜qÓ ØØ�{‰{˜1‰~ˆà�I‰IÔ+Ó+Ø×1Ñ1Ñ9àØ! TÐ)÷ 
Ñ-?Ø×.Ñ.ó.
ð 	
rN   c                 óV   • U R                    H  nUR                  [        :X  d  M    g   g)z)If so, needs to be split before emitting.TF)r/   r<   r   r‘   s     rL   Úcontains_standalone_commentsÚ!Line.contains_standalone_commentsñ   s%   € à—K”KˆDØ�y‰yÔ.Õ.Ùñ  ð rN   c                 ó  • [         R                  " U R                  S 5       HY  u  pU[        R                  :w  a  M  [        U5      n[        U5      S:X  a  M7  U H  nU R                  U5      (       d  M      g   M[     g)zFChck if we have an implicit multiline string with comments on the linec                 ó   • U R                   $ ©N)r<   )r5   s    rL   Ú<lambda>ÚGLine.contains_implicit_multiline_string_with_comments.<locals>.<lambda>ü   s   €  d§i¢irN   rW   TF)Ú	itertoolsÚgroupbyr/   r#   rˆ   ÚlistrX   Úcomments_after)rJ   Ú	leaf_typeÚleaf_group_iteratorÚ	leaf_listr5   s        rL   Ú0contains_implicit_multiline_string_with_commentsÚ5Line.contains_implicit_multiline_string_with_commentsù   sr   € ä.7×.?Ò.?Ø�K‰KÑ/ö/
Ñ*ˆIð œEŸL™LÓ(ÙÜÐ0Ó1ˆIÜ�9‹~ Ó"ÙÛ!�Ø×&Ñ& t×,Ó,Úó "ñ/
ð rN   c                 ó6  • [        5       n U R                  S   nUR                  [        U5      5        UR                  [
        R                  :X  d/  UR                  [
        R                  :X  a:  UR                  (       d)  U R                  S   nUR                  [        U5      5        SnU R                  R                  5        H?  u  pEU H4  n[        U5      (       a  U(       d  [        U5      (       d  XA;  a      gSnM6     MA     g! [         a     gf = f)Nr•   r:   FT)Úsetr/   ÚaddÚidr<   r#   ÚCOMMAr…   r?   rt   r0   Úitemsr   r   )rJ   Úignored_idsÚ	last_leafÚcomment_seenÚleaf_idr0   Úcomments          rL   Ú$contains_uncollapsable_type_commentsÚ)Line.contains_uncollapsable_type_comments  sÛ   € Ü“eˆð	ØŸ™ B™ˆIØ�O‰OœB˜y›MÔ*Ø�~‰~¤§¡Ó,Ø—‘¤%§*¡*Ó,°Y·_·_ð !ŸK™K¨™O�	Ø—‘¤ 9£Ô.ð ˆØ!%§¡×!4Ñ!4Ö!6ÑˆGÛ#�Ü" 7×+Ñ+Þ#Ü2°7×;Ñ;Ø#Ó6â#à#’ó $ñ "7ð øô) ó 	Ùð	ús   ŒBD Ä
DÄDc                 ób  • U R                   (       d  g[        S U R                    5       S5      n[        S [        U R                   5       5       S5      nX:X  aU  U R                   SS   HB  nU R                  R	                  [        U5      / 5       H  n[        U5      (       d  M      g   MD     g)NFc              3   óZ   #   • U H"  oR                   S :w  d  M  UR                   v •  M$     g7f©r   N©Úlineno©Ú.0r5   s     rL   Ú	<genexpr>Ú9Line.contains_unsplittable_type_ignore.<locals>.<genexpr>=  s    é € ÐS±;¨4Ç+Á+ÐQRÑBR›;˜4Ÿ;ž;²;ùó   ‚+˜+r   c              3   óZ   #   • U H"  oR                   S :w  d  M  UR                   v •  M$     g7fr¾   r¿   rÁ   s     rL   rÃ   rÄ   ?  s!   é € ÐOÑ%:˜T¿k¹kÈQÑ>N‹[ˆT�[Ž[Ò%:ùrÅ   r:   T)r/   ÚnextÚreversedr0   Úgetr²   r   )rJ   Ú
first_lineÚ	last_lineÚnoder¹   s        rL   Ú!contains_unsplittable_type_ignoreÚ&Line.contains_unsplittable_type_ignore,  s”   € Ø�{�{Øô ÑS°4·;²;ÓSÐUVÓWˆ
ÜÙO¤X¨d¯k©kÔ%:ÓOÐQRó
ˆ	ð Ó"ð Ÿ™ B CÓ(�Ø#Ÿ}™}×0Ñ0´°D³¸2Ö>�GÜ-¨g×6Ó6Ú#ó  ?ñ )ð
 rN   c                 ó:   • [        S U R                   5       5      $ )Nc              3   ó6   #   • U H  n[        U5      v •  M     g 7fr£   )r   rÁ   s     rL   rÃ   Ú2Line.contains_multiline_strings.<locals>.<genexpr>N  s   é € ÐE¹°Ô& t×,Ð,ºùs   ‚)Úanyr/   rY   s    rL   Úcontains_multiline_stringsÚLine.contains_multiline_stringsM  s   € ÜÑE¸¿ºÓEÓEÐErN   Úclosingc                 ó*  • UR                   [        ;   a<  U R                  (       a+  U R                  S   R                   [        R                  :X  d  gUR                   [        R
                  :X  a  gUR                   [        R                  :X  aÀ  UR                  b²  UR                  R                   [        R                  :X  aŠ  UR                  b}  [        UR                  UU R                  [        R                  [        R                  4S9(       a:  UR                  c   eUR                  R                   [        R                  :X  d   eggU R                  (       a  gUR                  b&  [        UR                  XR                  5      (       d  gg)z«Return True if we have a magic trailing comma, that is when:
- there's a trailing comma here
- it's not from single-element square bracket indexing
- it's not a one-tuple
r•   FT)Úbrackets)r<   r   r/   r#   r³   ÚRBRACEÚRSQBÚparentr    ÚtrailerÚopening_bracketr   ÚLSQBÚprev_siblingÚsubscriptlistr   )rJ   rÕ   s     rL   rF   ÚLine.has_magic_trailing_commaP  s#  € ð �L‰LÔ,Ó,Ø——Ø—‘˜B‘×$Ñ$¬¯©Ó3àà�<‰<œ5Ÿ<™<Ó'Øà�<‰<œ5Ÿ:™:Ó%à—‘Ñ*Ø—N‘N×'Ñ'¬4¯<©<Ó7Ø×+Ñ+Ñ7Ü+Ø×+Ñ+ØØ—K‘KÜ#Ÿj™j¬%¯*©*Ð5÷	ð ×+Ñ+Ñ7Ð7Ð7Ø×+Ñ+×0Ñ0´D×4FÑ4FÓFÐFÐFØàà�>�>Øà×"Ñ"Ñ.Ô7NØ×#Ñ# W¯k©k÷8
ñ 8
ð àrN   r¹   c                 óü  • UR                   [        :X  a'  U R                  R                  5       (       a  SUl        gUR                   [
        R                  :w  a  gU R                  (       d  [        Ul         SUl        gU R                  S   nUR                   [
        R                  :X  a�  UR                  (       dŒ  UR                  (       a{  [        [        UR                  R                  5       5      5      S::  aK  [        U5      (       d;  [        U R                  5      S:  a  [        Ul         SUl        gU R                  S   nU R                  R                  [!        U5      / 5      R#                  U5        g)z0Add an inline or standalone comment to the line.Ú Fr•   rj   r�   r:   T)r<   r   r1   Úany_open_bracketsrC   r#   ÚCOMMENTr/   r…   r?   rÚ   rX   r¨   r   r0   Ú
setdefaultr²   rI   )rJ   r¹   r¶   s      rL   rH   ÚLine.append_comment|  s  € ð �L‰LÔ.Ó.Ø×$Ñ$×6Ñ6×8Ñ8àˆGŒNØà�<‰<œ5Ÿ=™=Ó(Øà�{�{Ü-ˆGŒLØˆGŒNØà—K‘K ‘Oˆ	à�N‰NœeŸj™jÓ(Ø—O—OØ× × Ü”D˜×)Ñ)×0Ñ0Ó2Ó3Ó4¸Ó9Ü# G×,Ñ,ô
 �4—;‘;Ó !Ó#Ü1�”Ø!#�”ØàŸ™ B™ˆIØ�‰× Ñ ¤ I£°Ó3×:Ñ:¸7ÔCØrN   c                 óL   • U R                   R                  [        U5      / 5      $ )z;Generate comments that should appear directly after `leaf`.)r0   rÉ   r²   r‘   s     rL   r©   ÚLine.comments_after¡  s   € à�}‰}× Ñ ¤ D£¨2Ó.Ð.rN   c                 ó  • U R                   R                  5       nU R                  R                  [        U5      / 5      nU R                  R	                  [        U R                   S   5      / 5      R                  U5        g)z@Remove the trailing comma and moves the comments attached to it.r•   N)r/   Úpopr0   r²   rå   Úextend)rJ   Útrailing_commaÚtrailing_comma_commentss      rL   rG   ÚLine.remove_trailing_comma¥  s]   € àŸ™Ÿ™Ó*ˆØ"&§-¡-×"3Ñ"3´B°~Ó4FÈÓ"KÐØ�‰× Ñ ¤ D§K¡K°¡OÓ!4°bÓ9×@Ñ@Ø#õ	
rN   c                 óf  • U R                   R                  5       nUc  gUR                  n[        U[        5      (       aH  UR
                  [        R                  :X  a  gUR
                  [        R                  :X  a  [        X15      nUSL=(       a     [        S UR                  5        5       5      $ )zAReturn True iff `leaf` is part of a slice with non-trivial exprs.NFc              3   óD   #   • U H  oR                   [        ;   v •  M     g 7fr£   )r<   r   )rÂ   Úns     rL   rÃ   Ú,Line.is_complex_subscript.<locals>.<genexpr>¼  s   é € ð 3
Ù0K¨1�F‰FÔ&Ö&Ò0Kùs   ‚ )r1   Úget_open_lsqbÚnext_siblingÚ
isinstancer%   r<   r    Ú	listmakerrß   r   rÒ   Ú	pre_order)rJ   r5   Ú	open_lsqbÚsubscript_starts       rL   rD   ÚLine.is_complex_subscript­  s™   € à×(Ñ(×6Ñ6Ó8ˆ	ØÑØà#×0Ñ0ˆä�o¤t×,Ñ,Ø×#Ñ#¤t§~¡~Ó5Øà×#Ñ#¤t×'9Ñ'9Ó9Ü"/°Ó"F�à dÐ*÷ 
¬sñ 3
Ø0?×0IÑ0IÔ0Kó3
ó 0
ð 	
rN   Úis_reversedc              #   ó¼  #   • [        [        [        [           /[        [
        [        [        4      4   U(       a  [        O[        5      nU" U R                  5       Hx  u  p4[        UR                  5      [        UR                  5      -   nSUR                  ;   a    gU R                  U5       H  nU[        UR                  5      -  nM     X4U4v •  Mz     g7f)ztReturn an enumeration of leaves with their length.

Stops prematurely on multiline strings and standalone comments.
Ú
N)r   r   r   r$   r   ÚtupleÚIndexÚenumerate_reversedÚ	enumerater/   rX   rC   r?   r©   )rJ   rû   ÚopÚindexr5   Úlengthr¹   s          rL   Úenumerate_with_lengthÚLine.enumerate_with_lengthÀ  s°   é € ô Ü”hœt‘nÐ%¤x´´e¼T°kÑ0BÑ'CÐCÑDÞ"-Õ´9ó
ˆñ ˜dŸk™kž?‰KˆEÜ˜Ÿ™Ó%¬¨D¯J©J«Ñ7ˆFØ�t—z‘zÓ!Ùà×.Ñ.¨tÖ4�Øœ#˜gŸm™mÓ,Ñ,’ñ 5ð ˜vÐ%Ô%ò +ùs   ‚CCc                 ó€   • [        U R                  U R                  U R                  U R                  U R
                  S9$ )N)r+   r,   r2   r3   r4   )r(   r+   r,   r2   r3   r4   rY   s    rL   ÚcloneÚ
Line.cloneÕ  s8   € ÜØ—‘Ø—*‘*Ø ×0Ñ0Ø!×2Ñ2Ø!%×!:Ñ!:ñ
ð 	
rN   c                 óx  • U (       d  gSU R                   -  n[        U R                  5      n[        U5      nUR                   U UR
                   3nU H  nU[        U5      -  nM     [        R                  R                  U R                  R                  5       5       H  nU[        U5      -  nM     US-   $ )zRender the line.rý   z    )r,   Úiterr/   rÇ   rC   r?   Ústrr¦   ÚchainÚfrom_iterabler0   Úvalues)rJ   Úindentr/   ÚfirstÚresr5   r¹   s          rL   Ú__str__ÚLine.__str__Þ  s    € æØà˜$Ÿ*™*Ñ$ˆÜ�d—k‘kÓ"ˆÜ�V“ˆØ—‘�˜v˜h u§{¡{ mÐ4ˆÛˆDØ”3�t“9ÑŠCñ ä —‘×4Ñ4°T·]±]×5IÑ5IÓ5KÖLˆGØ”3�w“<ÑŠCñ Mð �T‰zÐrN   c                 óR   • [        U R                  =(       d    U R                  5      $ )z/Return True if the line has leaves or comments.)r>   r/   r0   rY   s    rL   Ú__bool__ÚLine.__bool__î  s   € ä�D—K‘K×0 4§=¡=Ó1Ð1rN   )r4   )FF©F)r8   N)r8   r(   )=Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r+   r   Ú__annotations__r,   Úintr¨   r/   r$   Údictr0   ÚLeafIDr   r1   r2   r>   r3   r4   r   rI   rT   ÚpropertyrR   r]   r   r   rf   rp   rx   r}   rB   rŠ   r   r’   r–   r   rœ   rŸ   r­   rº   rÍ   rÓ   rF   rH   r©   rG   rD   r   rþ   rÿ   r  r  r  r  r  Ú__static_attributes__© rN   rL   r(   r(   '   s:  ‡ áEá˜EÑ"€Dˆ$Ó"Ø€Eˆ3ƒNÙ¨tÑ4€FˆD�‰JÓ4á).¸tÑ)D€Hˆd�6˜4 ™:Ð%Ñ&ÓDÙ&+¸NÑ&K€O�^ÓKØ!€O�TÓ!Ø"Ð�dÓ"Ø+/Ð˜( 4™.Ó/ð MRñ'%Øð'%Ø(,ð'%ØEIð'%à	õ'%ñR5 ð 5°Dð 5ÀTõ 5ð( ðS˜Dó Só ðSð ð>˜dó >ó ð>ð ð8˜4ó 8ó ð8ð ðI¨Dó Ió ðIð ð
˜$ó 
ó ð
ð ð
˜tó 
ó ð
ð ð
˜ó 
ó ð
ð$ ð
˜Tó 
ó ð
ð ð
 dó 
ó ð
ð ð	¨$ó 	ó ð	ð ð;˜dó ;ó ð;ð ðJ tó Jó ðJð ð3˜Tó 3ó ð3ð IMò
Ø%-¨h¸°v¸t°|Ñ.DÑ%Eð
à	õ
ð(¨dô ðÀ$ô ð"°dô "ðH°4ô ðBF¨Dô Fð*°ð *¸ô *ðX# dð #¨tô #ðJ/ 4ð /¨D°©Jô /ô
ð
¨ð 
°$ô 
ð( #(ñ&Øð&à	�%˜˜t SÐ(Ñ)Ñ	*õ&ô*
ð˜ô ð 2˜$÷ 2rN   r(   c                   óL   • \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   Srg	)
Ú	RHSResultió  z2Intermediate split result from a right hand split.ÚheadÚbodyÚtailrÜ   Úclosing_bracketr$  N)	r  r  r  r  r  r(   r  r$   r#  r$  rN   rL   r&  r&  ó  s    ‡ á<à
ƒJØ
ƒJØ
ƒJØÓØÖrN   r&  c                   ó˜   • \ rS rSr% Sr\\S'   \S    \S'   \\S'   Sr	\
\S'   \" \S9r\\   \S	'   Sr\
\S
'   Sr\\S'   S\\   4S jrSrg)Ú
LinesBlockiþ  zÍClass that holds information about a block of formatted lines.

This is introduced so that the EmptyLineTracker can look behind the standalone
comments and adjust their empty lines for class or def lines.
r+   Úprevious_blockÚoriginal_liner   Úbeforer-   Úcontent_linesÚafterFÚ	form_feedr8   c                 ó¼   • [        [        U R                  S95      n[        U R                  U R
                  U5      nU/U R                  -   XR                  -  /-   $ )N)r+   )r  r(   r+   r   r/  r2  r0  r1  )rJ   Ú
empty_linerC   s      rL   Ú	all_linesÚLinesBlock.all_lines  sM   € Üœ 4§9¡9Ñ-Ó.ˆ
Ü# D§K¡K°·±ÀÓLˆØˆx˜$×,Ñ,Ñ,°
¿Z¹ZÑ0GÐ/HÑHÐHrN   r$  N)r  r  r  r  r  r   r  r   r(   r/  r  r   r¨   r0  r  r1  r2  r>   r5  r#  r$  rN   rL   r,  r,  þ  s`   ‡ ñð ƒJØ˜\Ñ*Ó*ØÓØ€FˆCƒOÙ$°TÑ:€M�4˜‘9Ó:Ø€Eˆ3ƒNØ€IˆtÓðI˜4 ™9÷ IrN   r,  c            
       óÎ   • \ rS rSr% Sr\\S'   Sr\\	   \S'   Sr
\\   \S'   \" \S9r\\	   \S'   Sr\\   \S	'   S
\	S\4S jrS
\	S\\\4   4S jrS
\	S\S\S\\\4   4S jrSrg)ÚEmptyLineTrackeri  ag  Provides a stateful method that returns the number of potential extra
empty lines needed before and after the currently processed line.

Note: this tracker works on lines that haven't been split yet.  It assumes
the prefix of the first leaf consists of optional newlines.  Those newlines
are consumed by `maybe_empty_lines()` and included in the computation.
r+   NÚprevious_liner-  r-   Úprevious_defsÚsemantic_leading_commentÚcurrent_liner8   c           	      óø  • UR                   S:H  =(       a8    [        UR                  5      =(       a    SUR                  S   R                  ;   nU R	                  U5      u  p4U R
                  (       a  U R
                  R                  OSn[        SX5-
  5      nU R
                  (       a�  U R
                  R
                  cv  [        U R
                  R                  R                  5      S:X  aI  U R
                  R                  R                  (       a$  UR                  (       d  UR                  (       d  Sn[        U R                  U R
                  UUUUS9nUR                  (       ae  U R                   bQ  U R                   R"                  (       d<  U R                   R                  (       a  U(       a  U R$                  b  U(       a  X`l        OUR"                  (       a  U(       a  SU l        Xl        X`l        U$ )z±Return the number of extra empty lines before and after the `current_line`.

This is for separating `def`, `async def` and `class` with extra empty
lines (two on module-level).
r   z
NrW   )r+   r-  r.  r/  r1  r2  )r,   r>   r/   rC   Ú_maybe_empty_linesr-  r1  ÚmaxrX   r.  r   rf   rx   r,  r+   rR   r9  r]   r;  )rJ   r<  r2  r/  r1  Úprevious_afterÚblocks          rL   Úmaybe_empty_linesÚ"EmptyLineTracker.maybe_empty_lines$  sƒ  € ð ×Ñ !Ñ#÷ 8Ü�\×(Ñ(Ó)÷8à˜,×-Ñ-¨aÑ0×7Ñ7Ñ7ð 	ð
 ×/Ñ/°Ó=‰ˆØ6:×6I×6I˜×,Ñ,×2Ò2ÈqˆÜ�Q˜Ñ/Ó0ˆð ××Ø×#Ñ#×2Ñ2Ñ:Ü�D×'Ñ'×5Ñ5×<Ñ<Ó=ÀÓBØ×#Ñ#×1Ñ1×>×>Ø!×*×*¨l×.A×.AàˆFäØ—‘Ø×.Ñ.Ø&ØØØñ
ˆð ×"×"Ø×!Ñ!Ñ)Ø×&Ñ&×3×3à×+Ñ+×6×6¾&Ø×2Ñ2Ñ:¾fà05Ô-øà×*×*®fØ,0ˆDÔ)à)ÔØ#ÔØˆrN   c                 óð  • SnUR                   S:X  a  U R                  R                  (       a  SOSnUR                  (       a=  UR                  S   nUR                  R                  S5      n[        XB5      nSUl        OSn[        U5      nUR                   nS nU R                  (       ag  U R                  S   R                   U:¼  aJ  U R                  R                  5       nU R                  (       a  U R                  S   R                   U:¼  a  MJ  UR                  (       d  UR                  (       a  U R                  R                  U5        U R                  c  gUR                  (       aS  U R                  R                  (       a  gU R                  R                  (       a  U R                  R                  (       a  gUGb
  U R                  c   eU R                  R                  (       aq  UR                  (       a  UR                   (       d  SnO»U(       a8  UR                  (       d'  U R                  R                  (       a  U(       a  SOSnO|U(       a  SnOrSnOoU(       a  SnOeU(       d\  UR                   (       aK  UR                  S   R"                  [$        R&                  :X  a   UR                  S   R(                  S	;  a  SnOSnUR*                  (       d"  UR                  (       d  UR                  (       a  U R-                  XU5      $ U R                  R.                  (       aZ  U R                  R                   S:X  a@  UR                   S:X  a0  UR.                  (       d  [0        R2                  U R                  ;   a  g
U R                  R.                  (       aO  UR.                  (       d>  UR5                  [.        S9(       d&  X`R                  R                   :X  a  U=(       d    SS4$ US4$ )NrW   r   r�   rý   râ   r•   ©r   r   ©r   rW   )ÚwithÚtryÚforÚwhileÚifÚmatch)rW   r   r˜   )r,   r+   Úis_pyir/   rC   r�   Úminr>   r:  rê   rx   rf   rI   r9  r   r–   rp   r<   r#   rA   r?   r]   Ú#_maybe_empty_lines_for_class_or_defr   r   Úalways_one_newline_after_importrœ   )rJ   r<  Úmax_allowedrv   r/  Úuser_had_newliner,   Úprevious_defs           rL   r>  Ú#EmptyLineTracker._maybe_empty_linesV  sî  € ØˆØ×Ñ Ó"Ø#Ÿy™y×/×/™!°QˆKà××à%×,Ñ,¨QÑ/ˆJØ×&Ñ&×,Ñ,¨TÓ2ˆFÜ˜Ó-ˆFØ "ˆJÕàˆFä ›<ÐØ×"Ñ"ˆð ˆØ× ×  T×%7Ñ%7¸Ñ%;×%AÑ%AÀUÓ%JØ×-Ñ-×1Ñ1Ó3ˆLð × ×  T×%7Ñ%7¸Ñ%;×%AÑ%AÀUÕ%Jà×× ,×"7×"7Ø×Ñ×%Ñ% lÔ3à×ÑÑ%àà×$×$Ø×!Ñ!×*×*ØØ×!Ñ!×-×-°$×2DÑ2D×2K×2KØàÒ#Ø×%Ñ%Ñ1Ð1Ð1Ø�y‰y××Ø×(×(°×1K×1KØ‘FÞ <×#6×#6¸4×;MÑ;M×;T×;Tæ"2™Q¸‘FÞØ‘Fà‘FæØ‘FæØ$×*×*Ø$×+Ñ+¨BÑ/×4Ñ4¼¿¹ÓCà$×+Ñ+¨AÑ.×4Ñ4ØMóNð ‘Fà�Fà×$×$¨×(;×(;¸|×?T×?TØ×;Ñ;ØÐ&6óð ð
 ×Ñ×(×(Ø×"Ñ"×(Ñ(¨AÓ-Ø×"Ñ" aÓ'Ø ×*×*Ü×7Ñ7¸4¿9¹9ÓDàð ×Ñ×(×(Ø ×*×*Ø ×6Ñ6Ì)Ð6ÖTØ×+Ñ+×1Ñ1Ó1à—K˜a !Ð#Ð#à�qˆyÐrN   r/  rR  c                 óÒ  • U R                   c   eU R                   R                  (       a.  U R                  R                  (       a  UR                  (       a  ggU R                   R
                  UR
                  :  aa  U R                   R                  (       d  U R                   R                  (       a+  U R                  R                  (       a  gU(       a  SS4$ SS4$ S nU R                   R                  (       a¤  U R                   R
                  UR
                  :X  a€  US:X  az  U R                  nUbj  UR                  b]  UR                  R                  R                  (       d8  UR                  R                  R                  (       d  UR                  S::  a  UnOgU R                  R                  (       Ga5  UR                  (       d  U R                   R                  (       a�  U R                   R
                  UR
                  :  a  SnGOU R                   R
                  UR
                  :”  a  SnOóUR                  (       a  U R                   R                  (       a  SnOÄSnOÁU R                   R
                  UR
                  :”  a  SnOšUR                  (       d  UR                  (       a<  U R                   R                  (       d!  UR
                  (       a  [        SU5      nO?SnO<SnO9UR
                  (       a  SOSnU R                   R                  (       a	  U(       d  SnUb9  UR                  nUb*  [!        UR                  U5      UR"                  -
  Ul        SnUS4$ )NrF  rE  rW   r   r�   )r9  r]   r+   rM  rp   r,   rf   rx   rR   r;  r-  r.  r–   r/  rN  r}   r?  r1  )rJ   r<  r/  rR  Úcomment_to_add_newlinesÚslcÚnewlinesr-  s           rL   rO  Ú4EmptyLineTracker._maybe_empty_lines_for_class_or_def³  s‹  € ð ×!Ñ!Ñ-Ð-Ð-à×Ñ×*×*Ø�y‰y×× L×$>×$>àØà×Ñ×#Ñ# l×&8Ñ&8Ó8Ø×Ñ×'×'¨4×+=Ñ+=×+D×+Dà�y‰y××ØÞ(�1°Ð2Ð2¨a°Ð2Ð2à8<Ðà×Ñ×)×)Ø×"Ñ"×(Ñ(¨L×,>Ñ,>Ó>Ø˜!“à×/Ñ/ˆCà‘Ø×&Ñ&Ñ2Ø×*Ñ*×8Ñ8×A×AØ×*Ñ*×8Ñ8×D×DØ—J‘J !“Oà*-Ñ'àà�9‰9××ÐØ×$×$¨×(:Ñ(:×(C×(CØ×%Ñ%×+Ñ+¨l×.@Ñ.@Ó@Ø ’HØ×'Ñ'×-Ñ-°×0BÑ0BÓBØ ‘HØ!×/×/°D×4FÑ4F×4T×4Tà ‘Hà ‘Hð ×#Ñ#×)Ñ)¨L×,>Ñ,>Ó>Ø‘à×#×# |×'@×'@Ø×(Ñ(×/×/Ø×%×%ô  # 1 f›~‘Hð  !‘Hà‘à(×.×.‘q°AˆHð ×!Ñ!×-×-Ö6FØ�Ø"Ñ.Ø4×CÑCˆNØÑ)äÐ/×6Ñ6¸ÓAÀN×DXÑDXÑXð (Ô.ð �Ø˜ˆ{ÐrN   )r-  r9  r;  )r  r  r  r  r  r   r  r9  r   r(   r-  r,  r   r¨   r:  r;  rB  rþ   r  r>  r>   rO  r#  r$  rN   rL   r8  r8    s³   ‡ ñð ƒJØ$(€M�8˜D‘>Ó(Ø+/€N�H˜ZÑ(Ó/Ù %°dÑ ;€M�4˜‘:Ó;Ø59Ð˜h zÑ2Ó9ð0¨dð 0°zô 0ðd[¨tð [¸¸cÀ3¸h¹ô [ðzNØ ðNØ*-ðNØAEðNà	ˆs�Cˆx‰÷NrN   r8  Úsequencer8   c              #   ó`   #   • [        U 5      S-
  n[        U 5       H  nX4v •  US-  nM     g7f)z;Like `reversed(enumerate(sequence))` if that were possible.rW   N)rX   rÈ   )rZ  r  Úelements      rL   r   r     s4   é € ä�‹M˜AÑ€EÜ˜HÖ%ˆØÐÒØ�‰
Šò &ùs   ‚,.Únew_lineÚold_liner/   r6   c                 óÚ   • U He  n[        UR                  UR                  5      n[        XE5        U R	                  XSS9  UR                  U5       H  nU R	                  USS9  M     Mg     g)a¬  
Append leaves (taken from @old_line) to @new_line, making sure to fix the
underlying Node structure where appropriate.

All of the leaves in @leaves are duplicated. The duplicates are then
appended to @new_line and used to replace their originals in the underlying
Node structure. Any comments attached to the old leaves are reattached to
the new leaves.

Pre-conditions:
    set(@leaves) is a subset of set(@old_line.leaves).
rP   TN)r$   r<   r?   r   rI   r©   )r]  r^  r/   r6   Úold_leafÚnew_leafÚcomment_leafs          rL   Úappend_leavesrc    s]   € ó ˆÜ˜Ÿ™ x§~¡~Ó6ˆÜ�hÔ)Ø�‰˜ˆÑ<à$×3Ñ3°HÖ=ˆLØ�O‰O˜L°tˆOÓ<ó >ò rN   râ   )Úline_strÚliner+   rd  c                ó4  • U(       d  [        U 5      n[        R                  U;  a@  [        U5      UR                  :*  =(       a!    SU;  =(       a    U R                  5       (       + $ U R                  5       (       a  gSU;  a  [        U5      UR                  :*  $ UR                  S5      Gtp4n[        U5      UR                  :”  d  [        U5      UR                  :”  a  g/ nSn/ n[        R                  n	[        U R                  5       GHæ  u  p«U	[        R                  :X  a“  SnUR                  S-   [        U5      :”  a  UR                  S5        O,UR                  S-   [        U5      :  a  UR                  5       nUb4  Ub1  UR                  UR                  S-   :X  a  UR                  n	US:”  a    gUR                  U	::  aˆ  UR                  [         R"                  :X  aj  S/nXØ-  nU R$                  (       d  UR                  S:”  aB  U
[        U R                  5      S-
  :w  d  UR&                  U;  a  XkR                  ==   S-  ss'   U	[        R                  :w  a  [)        X›R                  5      n	[+        U5      (       d  GM�  [        U5      S:”  a    gUnUn[-        U5      U;   d  GM¨  UR                  U5        UR.                  c  GMÉ  UR.                  n[-        U5      U;   a  M>  GMé     [        U5      S:X  a  g[1        S U 5       5      $ )a  For non-multiline strings, return True if `line` is no longer than `line_length`.
For multiline strings, looks at the context around `line` to determine
if it should be inlined or split up.
Uses the provided `line_str` rendering, if any, otherwise computes a new one.
rý   FNrW   r   Tc              3   ó(   #   • U H	  oS :H  v •  M     g7fr¾   r$  )rÂ   Úvals     rL   rÃ   Ú'is_line_short_enough.<locals>.<genexpr>|  s   é € Ð*¡6˜C�aŽx¢6ùs   ‚)Úline_to_stringr   Úmultiline_string_handlingr"   Úline_lengthrŸ   ÚsplitÚmathÚinfr  r/   Úbracket_depthrX   rI   rê   r<   r#   r³   r2   rÞ   rN  r   r  rÚ   Úall)re  r+   rd  r  ro   ÚlastÚcommasÚmultiline_stringÚmultiline_string_contextsÚmax_level_to_updateÚir5   Ú	had_commaÚignore_ctxsÚctxs                  rL   Úis_line_short_enoughr{  $  s°  € ö Ü! $Ó'ˆä×(Ñ(°Ó4ä�hÓ 4×#3Ñ#3Ñ3÷ 8Ø˜HÑ$÷8à×5Ñ5Ó7Ô7ð	
ð ×(Ñ(×*Ñ*ØØ�8Óä˜Ó" d×&6Ñ&6Ñ6Ð6à—n‘n TÓ*�O€EˆtÜ�Ó˜$×*Ñ*Ó*¬i¸«oÀ×@PÑ@PÓ.PØð €FØ'+Ðà*,Ðä-1¯X©XÐÜ˜TŸ[™[×)‰ˆØ¤$§(¡(Ó*Ø'+ˆIØ×!Ñ! AÑ%¬¨F«Ó3Ø—‘˜aÕ Ø×#Ñ# aÑ'¬#¨f«+Ó5Ø"ŸJ™J›L�	àÑ%Ø$Ñ0Ø$×2Ñ2°d×6HÑ6HÈ1Ñ6LÓLð '+×&8Ñ&8Ð#Ø˜q“=á à×ÑÐ!4Ó4¸¿¹ÄeÇkÁkÓ9Qð 04¨fˆKØÑ4ˆKØ×$×$¨×(:Ñ(:¸QÓ(>Ø”S˜Ÿ™Ó%¨Ñ)Ó)¨T×->Ñ->ÀkÓ-Qà×)Ñ)Ó*¨aÑ/Ó*Ø¤$§(¡(Ó*Ü"%Ð&9×;MÑ;MÓ"NÐä˜t×$Ô$ÜÐ,Ó-°Ó1áØ#ÐØˆCä�c“(˜hÖ&Ø)×0Ñ0°Ô5Ø—:‘:Ñ%ÚØ—j‘j�ô	 �c“(˜h×&Ð&ñK *ôZ Ð$Ó%¨Ó*ØäÑ*¡6Ó*Ó*Ð*rN   c                 óŒ  • U R                   n[        U5      S:  a  gUS   R                  [        R                  :X  Ga  US   R                  [        R
                  :X  aå  SnSnUS   nUSSS2    HÐ  nUR                  [        ;   a  UR                  [        ;  a    gUS-  nO�UR                  [        R
                  :X  a  US-  nOiUR                  [        R                  :X  a5  UR                  [        R
                  :X  d  UR                  [        ;   d    gOUR                  [        ;  a    gUS:”  d  MÈ  US:”  d  MÐ    g   g)	zêReturn False if the line cannot be split *for sure*.

This is not an exhaustive search but a cheap heuristic that we can use to
avoid some unfortunate formattings (mostly around wrapping unsplittable code
in unnecessary parentheses).
r�   Fr   rW   r•   r:   NT)	r/   rX   r<   r#   rˆ   rm   r   r   re   )re  r/   Ú
call_countÚ	dot_countrÇ   r5   s         rL   Úcan_be_splitr    sý   € ð �[‰[€FÜ
ˆ6ƒ{�QƒØàˆa�y‡~�~œŸ™Ô%¨&°©)¯.©.¼E¿I¹IÓ*EØˆ
Øˆ	Ø�b‰zˆØ˜2˜6˜r˜6”NˆDØ�y‰yÔ,Ó,Ø—9‘9Ô$4Ó4Ù à˜a‘‘
Ø—‘œeŸi™iÓ'Ø˜Q‘‘	Ø—‘œeŸj™jÓ(ØŸ	™	¤U§Y¡YÓ.°$·)±)Ô?OÓ2OÙ øà—‘Ô"2Ó2Ùà˜1�} ¨a¥Ùñ! #ð$ rN   Úrhsrl  c                 ó  • U R                   nSn[        UR                  5       H‡  nU(       a  XCR                  L a  SnUR                  [
        :X  a	  U(       d    gU(       a  M@  UR                  [        ;   d  MV  UR                  UR                  ;   d  Mr  UR                  (       d  M…  UnM‰     UR                  nUR                  (       d  gUR                  5       nUR                  U5      nUS:”  a  gUS:X  a&  U[        :X  a  U R                  R                  (       a  gU[        :X  a  g[!        UR                  5      S:¼  d   S5       eUR                  S   nUR                  S   n	UR                  ["        ;   a$  U	R                  [        ;  a  [%        X(US9(       a  gUR                  S	   n
UR                  S
   nUR                  [&        R(                  :X  du  UR                  [&        R*                  :X  dW  UR                  [&        R,                  :X  ao  UR.                  (       a^  UR.                  R                  [0        R2                  :w  a6  U
R                  ["        ;   a  g[5        U5      (       a  g[7        X+US9(       a  gg)z÷Does `rhs.body` have a shape safe to reformat without optional parens around it?

Returns True for only a subset of potentially nice looking formattings but
the point is to not return false positives that end up producing lines that
are too long.
NFTrW   r�   zStranded delimiterr   )r  rl  r:   r•   )rr  rl  )r(  rÈ   r/   rÜ   r<   r   r   r?   r1   Ú
delimitersÚmax_delimiter_priorityÚdelimiter_count_with_priorityr   r'  r   r   rX   r   Ú_can_omit_opening_parenr#   r…   rØ   rÙ   rÚ   r    rÛ   r   Ú_can_omit_closing_paren)r€  rl  re  r*  r5   ÚbtÚmax_priorityÚdelimiter_countr  ÚsecondÚpenultimaterr  s               rL   Úcan_omit_invisible_parensrŒ  £  sì  € ð �8‰8€Dð '+€OÜ˜Ÿ™Ö%ˆÞ˜t×'FÑ'FÒFØ"ˆOØ�9‰9Ô*Ó*¶?Ùç�Ø—	‘	Ô-Õ-Ø×$Ñ$¨¯©Õ3Ø—
—
‘
à"ŠOñ &ð 
×	Ñ	€BØ�=�=àà×,Ñ,Ó.€LØ×6Ñ6°|ÓD€OØ˜Óàà˜!ÓØœ>Ó)¨c¯h©h×.Q×.Qð
 ð
 ”|Ó#àäˆt�{‰{Ó˜qÓ Ð6Ð"6Ó6Ð ð �K‰K˜‰N€EØ�[‰[˜‰^€FØ‡z�zÔ%Ó%¨&¯+©+Ô=MÓ*MÜ" 4À+×NØð —+‘+˜b‘/€KØ�;‰;�r‰?€Dð 	�	‰	”U—Z‘ZÓØ�9‰9œŸ™Ó$ð �I‰IœŸ™Ó#Ø——Ø—‘× Ñ ¤D§L¡LÓ0ð ×ÑÔ/Ó/àä˜u×%Ñ%ð ä" 4À×LØàrN   r  c                ó:  • SnSU R                   -  nSnU R                  5        HW  u  pVnUR                  [        ;   a  UR                  UL a  SnU(       d  M4  XG-  nXB:”  a    gUR                  [
        ;   d  MU  SnMY     [        U R                  5      US-   :X  a  gg)ú See `can_omit_invisible_parens`.Fr€   r•   TrW   )r,   r  r<   r   rÜ   r   rX   r/   )re  r  rl  Ú	remainderr  Ú_indexr5   Úleaf_lengths           rL   r…  r…    s�   € à€IØ�—‘‰^€FØ€FØ%)×%?Ñ%?Ö%AÑ!ˆ�kØ�9‰9Ô(Ó(¨T×-AÑ-AÀUÒ-JØˆIßˆ9ØÑ!ˆFØÓ#Øð ð �y‰yÔ,Õ,à!’	ñ &Bô ˆt�{‰{Ó˜v¨™zÓ)ØàrN   rr  c                óÎ   • SU R                   -  nSnU R                  5        H@  u  pVnX7-  nXaR                  L a  U(       d  X2::  a    gM(  UR                  [        ;   d  M>  SnMB     g)rŽ  r€   FT)r,   r  rÜ   r<   r   )re  rr  rl  r  Úseen_other_bracketsr�  r5   r‘  s           rL   r†  r†    sl   € à�—‘‰^€FØÐØ%)×%?Ñ%?Ö%AÑ!ˆ�kØÑˆØ×'Ñ'Ò'Þ" fÓ&;Ùñ '<ð �Y‰YÔ*Õ*à"&Òñ &Bð rN   c                 ó6   • [        U 5      R                  S5      $ )zeReturns the string representation of @line.

WARNING: This is known to be computationally expensive.
rý   )r  r@   )re  s    rL   rj  rj  .  s   € ô
 ˆt‹9�?‰?˜4Ó Ð rN   r  )Cr¦   rn  Úcollections.abcr   r   r   Údataclassesr   r   Útypingr   r	   r
   r   Úblack.bracketsr   r   r   Ú
black.moder   r   Úblack.nodesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   Úblack.stringsr"   Úblib2to3.pgen2r#   Úblib2to3.pytreer$   r%   r&   r  rÿ   r!  ÚLNr(   r&  r,  r8  rþ   r   r¨   r>   rc  r  r{  r  rŒ  r…  r†  rj  r$  rN   rL   Ú<module>rŸ     sò  ðÛ Û ß 8Ñ 8ß (ß 1Ó 1ç GÑ Gß $÷÷ ÷ ÷ õ õ& $Ý  ß &ñ ˆCƒL€Ø€Ø	€Ø
ˆ4�ˆ:Ñ€ð ÷H2ð H2ó ðH2ðV ÷ð ó ðð ÷Ið Ió ðIð* ÷lð ló ðlð^ ¨!¡ð °¸%ÀÀqÀ¹/Ñ1Jô ð NSñ=Øð=Ø"ð=Ø,0°©Jð=ØFJð=à	õ=ð2 02òX+Ø
ðX+ØðX+Ø),ðX+à	õX+ðv!�tð ! ô !ðH^Ø	ð^àð^ð 
ô^ðB $ð °$ð ÀSð ÈTô ð2 $ð °ð ÀCð ÈDô ð"!˜ð ! #õ !rN   