§
    øyIfDš  ã                   ó®  — d dl Z d dlZd dlmZmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZmZmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+m,Z, d d	l-m.Z.m/Z/  ed
¦  «        Z0e1Z2e1Z3ee.e/f         Z4e G d„ d¦  «        ¦   «         Z5e G d„ d¦  «        ¦   «         Z6e G d„ d¦  «        ¦   «         Z7e G d„ d¦  «        ¦   «         Z8dee0         deee2e0f                  fd„Z9	 d+de5de5de	e.         de:ddf
d„Z;ddœde5ded e<de:fd!„Z=de5de:fd"„Z>d#e6d$e1de:fd%„Z?de5d&e.d$e1de:fd'„Z@de5d(e.d$e1de:fd)„ZAde5de<fd*„ZBdS ),é    N)Ú	dataclassÚfield)
ÚCallableÚDictÚIteratorÚListÚOptionalÚSequenceÚTupleÚ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            	       ó¼  — e Zd ZU dZ ed¬¦  «        Zeed<   dZe	ed<    ee
¬¦  «        Zee         ed<    ee¬¦  «        Zeeee         f         ed	<    ee¬¦  «        Zeed
<   dZeed<   dZeed<   dZee         ed<   	 d6dedededdfd„Zd7dededdfd„Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zedefd„¦   «         Z edefd„¦   «         Z!edefd„¦   «         Z"edefd„¦   «         Z#edefd„¦   «         Z$edefd„¦   «         Z%edefd„¦   «         Z&edefd „¦   «         Z'edefd!„¦   «         Z(dd"œd#ee)egef                  defd$„Z*defd%„Z+defd&„Z,defd'„Z-defd(„Z.defd)„Z/d*edefd+„Z0d,edefd-„Z1dedee         fd.„Z2d8d/„Z3dedefd0„Z4	 d7d1ede5e6e7ee	f                  fd2„Z8d9d3„Z9de:fd4„Z;defd5„Z<dS ):ÚLinez;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                 ó¾  — |j         t          v p:|j         t          j        k    p%t	          |j                             ¦   «         ¦  «        }|sdS t          j        |j         k    r| j        r
| j	        dd…= | j	        r:|s8|xj
        t          ||                      |¦  «        | j        ¬¦  «        z  c_
        | j        s|r|rl| j                             |¦  «         | j        j        r|                      |¦  «        r|| _        n)|                      |¦  «        r|                      ¦   «          |                      |¦  «        s| j	                             |¦  «         dS dS )ag  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_emptyr1   Úprefixr$   Úis_complex_subscriptr-   r4   r3   Úmarkr6   Úhas_magic_trailing_commaÚremove_trailing_commaÚappend_commentÚappend)Úselfr7   r8   r9   Ú	has_values        ú?/var/www/piapp/venv/lib/python3.11/site-packages/black/lines.pyrK   zLine.append?   sˆ  € ð ŒI�Ð!ð (àŒy�EÔ0Ò0ð(õ �D”J×$Ò$Ñ&Ô&Ñ'Ô'ð	 	ð ð 	ØˆFåŒ;˜$œ)Ò#Ð#¨Ô(AÐ#Ø”˜B˜C˜CÐ ØŒ;ð 	˜|ð 	ð ˆKŒK�:ØØ"&×";Ò";¸DÑ"AÔ"AØ”Yðñ ô ñ ˆKŒKð
 Ôð 	- |ð 	-°}ð 	-ØÔ ×%Ò% dÑ+Ô+Ð+ØŒyÔ-ð -Ø×0Ò0°Ñ6Ô6ð 5Ø04�DÔ-øØ×.Ò.¨tÑ4Ô4ð -Ø×*Ò*Ñ,Ô,Ð,Ø×"Ò" 4Ñ(Ô(ð 	%ØŒK×Ò˜tÑ$Ô$Ð$Ð$Ð$ð	%ð 	%ó    c                 óþ   — | j         j        dk    s| j                              ¦   «         r<| j        rt	          d¦  «        ‚| j        r|j        t          k    rt	          d¦  «        ‚|                      ||¬¦  «         dS )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©r8   N)	r3   r.   Úany_open_for_or_lambdaÚ
is_commentÚ
ValueErrorr1   r>   r   rK   )rL   r7   r8   s      rN   Úappend_safezLine.append_safeh   s’   € ð Ô Ô&¨!Ò+Ð+ØÔ#×:Ò:Ñ<Ô<ð ,ð Œð IÝ Ð!GÑHÔHÐHàŒ{ð ˜tœyÕ,>Ò>Ð>Ý ØKñô ð ð 	�Š�D |ˆÑ4Ô4Ð4Ð4Ð4rO   c                 óh   — t          | j        ¦  «        dk    o| j        d         j        t          k    S )z"Is this line a standalone comment?é   r   )Úlenr1   r>   r   ©rL   s    rN   rS   zLine.is_comment|   s-   € õ �4”;ÑÔ 1Ò$ÐR¨¬°Q¬Ô)<Õ@RÒ)RÐRrO   c                 ó`   — t          | ¦  «        o| j        d         j        t          j        k    S )zIs this line a decorator?r   )r@   r1   r>   r&   ÚATrY   s    rN   Úis_decoratorzLine.is_decorator�   s%   € õ �D‰zŒzÐ=˜dœk¨!œnÔ1µU´XÒ=Ð=rO   c                 óT   — t          | ¦  «        ot          | j        d         ¦  «        S )zIs this an import line?r   )r@   r   r1   rY   s    rN   r   zLine.is_import†   s#   € õ �D‰zŒzÐ7�i¨¬°A¬Ñ7Ô7Ð7rO   c                 óT   — t          | ¦  «        ot          | j        d         ¦  «        S )zIs this a with_stmt line?r   )r@   r    r1   rY   s    rN   r    zLine.is_with_or_async_with_stmt‹   s$   € õ �D‰zŒzÐHÕ8¸¼ÀQ¼ÑHÔHÐHrO   c                 óŒ   — t          | ¦  «        o5| j        d         j        t          j        k    o| j        d         j        dk    S )z Is this line a class definition?r   Úclass)r@   r1   r>   r&   ÚNAMErA   rY   s    rN   Úis_classzLine.is_class�   s@   € õ �‰JŒJð 0Ø”˜A”Ô#¥u¤zÒ1ð0à”˜A”Ô$¨Ò/ð	
rO   c                 ód   — | j         o)| j        dd…         d„ t          d¦  «        D ¦   «         k    S )zEIs this line a class definition with a body consisting only of "..."?éýÿÿÿNc                 óB   — g | ]}t          t          j        d ¦  «        ‘ŒS ©ú.©r'   r&   ÚDOT©Ú.0Ú_s     rN   ú
<listcomp>z&Line.is_stub_class.<locals>.<listcomp>œ   s1   € ð 6
ð 6
ð 6
Ø%&�D•”˜CÑ Ô ð6
ð 6
ð 6
rO   é   )rb   r1   ÚrangerY   s    rN   Úis_stub_classzLine.is_stub_class™   sG   € ð Œ}ð 
 ¤¨R¨S¨SÔ!1ð 6
ð 6
Ý*/°©(¬(ð6
ñ 6
ô 6
ò "
ð 	
rO   c                 ó6  — 	 | j         d         }n# t          $ r Y dS w xY w	 | j         d         }n# t          $ r d}Y nw xY w|j        t          j        k    r|j        dk    p8|j        t          j        k    o#|duo|j        t          j        k    o
|j        dk    S )zBIs this a function definition? (Also returns True for async defs.)r   FrW   NÚdef)r1   Ú
IndexErrorr>   r&   ra   rA   ÚASYNC)rL   Ú
first_leafÚsecond_leafs      rN   Úis_defzLine.is_def    sÌ   € ð	Øœ QœˆJˆJøÝð 	ð 	ð 	Ø�5�5ð	øøøð	Ø*.¬+°a¬.ˆKˆKøÝð 	ð 	ð 	ØˆKˆKˆKð	øøøà”¥5¤:Ò-ÐK°*Ô2BÀeÒ2Kð 
ØŒO�uœ{Ò*ð +Ø 4Ð'ð+àÔ ¥E¤JÒ.ð+ð Ô! UÒ*ð		
s   ‚ �
�¢0 °?¾?c                 óœ   — | j         oE| j        dd…         t          t          j        d¦  «        gd„ t          d¦  «        D ¦   «         z   k    S )zHIs this line a function definition with a body consisting only of "..."?éüÿÿÿNú:c                 óB   — g | ]}t          t          j        d ¦  «        ‘ŒS rf   rh   rj   s     rN   rm   z$Line.is_stub_def.<locals>.<listcomp>¶   s7   € ð O
ð O
ð O
Ø%&�D•”˜CÑ Ô ðO
ð O
ð O
rO   rn   )rw   r1   r'   r&   rC   ro   rY   s    rN   Úis_stub_defzLine.is_stub_def³   sb   € ð Œ{ð 
˜tœ{¨2¨3¨3Ô/µD½¼ÀcÑ4JÔ4JÐ3Kð O
ð O
Ý*/°©(¬(ðO
ñ O
ô O
ñ 4
ò  
ð 	
rO   c                 ó6  — t          | ¦  «        oŠt          | j        ¦  «        dk    or| j        ok| j        d         j        t
          j        k    oK| j        d         j        dk    o5| j        d         j        t
          j        k    o| j        d         j        dk    S )zzIs this a class with no base classes but using parentheses?

        Those are unnecessary and should be removed.
        é   é   ú(rn   ú))	r@   rX   r1   rb   r>   r&   ÚLPARrA   ÚRPARrY   s    rN   rD   zLine.is_class_paren_emptyº   s—   € õ �‰JŒJð ,Ý�D”KÑ Ô  AÒ%ð,à”ð,ð ”˜A”Ô#¥u¤zÒ1ð,ð ”˜A”Ô$¨Ò+ð	,ð
 ”˜A”Ô#¥u¤zÒ1ð,ð ”˜A”Ô$¨Ò+ð	
rO   c                 óÎ   — | r | j         d         j        t          j        k    rdS | j         d         j        }|                     d¦  «        rdS |                     d¦  «        rdS dS )z#Is the line a triple quoted string?r   F)z"""z'''T)zr'''zr"""zR'''zR""")r1   r>   r&   ÚSTRINGrA   Ú
startswith)rL   rA   s     rN   Ú_is_triple_quoted_stringzLine._is_triple_quoted_stringÊ   sp   € ð ð 	�t”{ 1”~Ô*­e¬lÒ:Ð:Ø�5Ø”˜A”Ô$ˆØ×Ò˜NÑ+Ô+ð 	Ø�4Ø×ÒÐ<Ñ=Ô=ð 	Ø�4ØˆurO   c                 ó”   — t           j        | j        vr| j        S t	          | ¦  «        ot          | j        d         | j        ¦  «        S )zIs the line a docstring?r   )r   Úunify_docstring_detectionr-   r‡   r@   r   r1   rY   s    rN   r   zLine.is_docstringÖ   s@   € õ Ô,°D´IÐ=Ð=ØÔ0Ð0Ý�D‰zŒzÐE�l¨4¬;°q¬>¸4¼9ÑEÔEÐErO   c                 óf   — d„ | j         D ¦   «                              t          j        ¦  «        dk    S )z Is the line a chained assignmentc                 ó   — g | ]	}|j         ‘Œ
S © ©r>   ©rk   r7   s     rN   rm   z.Line.is_chained_assignment.<locals>.<listcomp>à   s   € Ð2Ð2Ð2˜d�”	Ð2Ð2Ð2rO   rW   )r1   Úcountr&   ÚEQUALrY   s    rN   Úis_chained_assignmentzLine.is_chained_assignmentÝ   s/   € ð 3Ð2 d¤kÐ2Ñ2Ô2×8Ò8½¼ÑEÔEÈÒIÐIrO   c                 óv   — t          | j        ¦  «        dk    rdS | j        d         j        t          j        k    S )z/Does this line open a new level of indentation.r   Féÿÿÿÿ)rX   r1   r>   r&   rC   rY   s    rN   Úopens_blockzLine.opens_blockâ   s4   € õ ˆtŒ{ÑÔ˜qÒ Ð Ø�5ØŒ{˜2ŒÔ#¥u¤{Ò2Ð2rO   ©Úfirst_leaf_matchesr–   c                óª   — t          | j        ¦  «        dk    rdS | j        d         }|j        t          k    s|j        €dS |du p ||j        ¦  «        S )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   r1   r>   r   Úfmt_pass_converted_first_leaf)rL   r–   r7   s      rN   Úis_fmt_pass_convertedzLine.is_fmt_pass_convertedé   sm   € õ ˆtŒ{ÑÔ˜qÒ Ð Ø�5ØŒ{˜1Œ~ˆàŒIÕ+Ò+Ð+ØÔ1Ð9à�5Ø! TÐ)ð 
Ð-?Ð-?ØÔ.ñ.
ô .
ð 	
rO   c                 ó@   — | j         D ]}|j        t          k    r dS ŒdS )z)If so, needs to be split before emitting.TF)r1   r>   r   ©rL   r7   s     rN   Úcontains_standalone_commentsz!Line.contains_standalone_commentsý   s4   € à”Kð 	ð 	ˆDØŒyÕ.Ò.Ð.Ø�t�tð /ð ˆurO   c                 óì   — t          j        | j        d„ ¦  «        D ]W\  }}|t          j        k    rŒt          |¦  «        }t          |¦  «        dk    rŒ9|D ]}|                      |¦  «        r  dS ŒŒXdS )zFChck if we have an implicit multiline string with comments on the linec                 ó   — | j         S ©Nr�   )r7   s    rN   ú<lambda>zGLine.contains_implicit_multiline_string_with_comments.<locals>.<lambda>  s   €  d¤i€ rO   rW   TF)Ú	itertoolsÚgroupbyr1   r&   r…   ÚlistrX   Úcomments_after)rL   Ú	leaf_typeÚleaf_group_iteratorÚ	leaf_listr7   s        rN   Ú0contains_implicit_multiline_string_with_commentsz5Line.contains_implicit_multiline_string_with_comments  s¢   € å.7Ô.?ØŒKÐ/Ð/ñ/
ô /
ð 
	 ð 
	 Ñ*ˆIÐ*ð �EœLÒ(Ð(ØÝÐ0Ñ1Ô1ˆIÝ�9‰~Œ~ Ò"Ð"ØØ!ð  ð  �Ø×&Ò& tÑ,Ô,ð  Ø˜4˜4˜4ð ð ð ˆurO   c                 ó  — t          ¦   «         }	 | j        d         }|                     t          |¦  «        ¦  «         |j        t
          j        k    s|j        t
          j        k    r6|j        s/| j        d         }|                     t          |¦  «        ¦  «         n# t          $ r Y dS w xY wd}| j
                             ¦   «         D ]4\  }}|D ],}t          |¦  «        r|st          |¦  «        s||vr  dS d}Œ-Œ5dS )Nr“   r<   FT)Úsetr1   ÚaddÚidr>   r&   ÚCOMMArƒ   rA   rs   r2   Úitemsr   r   )rL   Úignored_idsÚ	last_leafÚcomment_seenÚleaf_idr2   Úcomments          rN   Ú$contains_uncollapsable_type_commentsz)Line.contains_uncollapsable_type_comments  s'  € Ý‘e”eˆð	Øœ BœˆIØ�OŠO�B˜y™MœMÑ*Ô*Ð*ØŒ~¥¤Ò,Ð,Ø”¥%¤*Ò,Ð,°Y´_Ð,ð !œK¨œO�	Ø—’¥ 9¡¤Ñ.Ô.Ð.øøÝð 	ð 	ð 	Ø�5�5ð	øøøð ˆØ!%¤×!4Ò!4Ñ!6Ô!6ð 		$ð 		$ÑˆG�XØ#ð $ð $�Ý" 7Ñ+Ô+ð $Ø#ð $Ý2°7Ñ;Ô;ð$à#¨;Ð6Ð6à#˜t˜t˜tà#��ð$ð ˆus   �BB  Â 
B.Â-B.c                 óZ  — | j         sdS t          d„ | j         D ¦   «         d¦  «        }t          d„ t          | j         ¦  «        D ¦   «         d¦  «        }||k    rP| j         dd …         D ]@}| j                             t          |¦  «        g ¦  «        D ]}t          |¦  «        r  dS ŒŒAdS )NFc              3   ó:   K  — | ]}|j         d k    ¯|j         V — ŒdS ©r   N©ÚlinenorŽ   s     rN   ú	<genexpr>z9Line.contains_unsplittable_type_ignore.<locals>.<genexpr>I  s1   è è € ÐSÐS¨4À$Ä+ÐQRÒBRÐBR˜4œ;ÐBRÐBRÐBRÐBRÐSÐSrO   r   c              3   ó:   K  — | ]}|j         d k    ¯|j         V — ŒdS r·   r¸   rŽ   s     rN   rº   z9Line.contains_unsplittable_type_ignore.<locals>.<genexpr>K  s0   è è € ÐOÐO˜T¸d¼kÈQÒ>NÐ>NˆTŒ[Ð>NÐ>NÐ>NÐ>NÐOÐOrO   r<   T)r1   ÚnextÚreversedr2   Úgetr¬   r   )rL   Ú
first_lineÚ	last_lineÚnoder³   s        rN   Ú!contains_unsplittable_type_ignorez&Line.contains_unsplittable_type_ignore8  sÛ   € ØŒ{ð 	Ø�5õ ÐSÐS°4´;ÐSÑSÔSÐUVÑWÔWˆ
ÝØOÐO¥X¨d¬kÑ%:Ô%:ÐOÑOÔOÐQRñ
ô 
ˆ	ð ˜Ò"Ð"ð œ B C CÔ(ð $ð $�Ø#œ}×0Ò0µ°D±´¸2Ñ>Ô>ð $ð $�GÝ-¨gÑ6Ô6ð $Ø#˜t˜t˜tð$ð$ð ˆurO   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó4   K  — | ]}t          |¦  «        V — Œd S rŸ   )r   rŽ   s     rN   rº   z2Line.contains_multiline_strings.<locals>.<genexpr>Z  s+   è è € ÐEÐE°Õ& tÑ,Ô,ÐEÐEÐEÐEÐEÐErO   )Úanyr1   rY   s    rN   Úcontains_multiline_stringszLine.contains_multiline_stringsY  s!   € ÝÐEÐE¸¼ÐEÑEÔEÑEÔEÐErO   Úclosingc                 ó.  — |j         t          v r'| j        r | j        d         j         t          j        k    sdS |j         t          j        k    rdS |j         t          j        k    r„|j        �{|j        j         t          j	        k    ra|j
        �Zt          |j
        || j        t          j        t          j        f¬¦  «        r'|j        €J ‚|j        j         t          j        k    sJ ‚dS dS | j        rdS |j
        �t          |j
        || j        ¦  «        sdS dS )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“   FTN)Úbrackets)r>   r   r1   r&   r­   ÚRBRACEÚRSQBÚparentr#   ÚtrailerÚopening_bracketr   ÚLSQBÚprev_siblingÚsubscriptlistr   )rL   rÇ   s     rN   rH   zLine.has_magic_trailing_comma\  s#  € ð ŒLÕ,Ð,Ð,Ø”ð -à”˜B”Ô$­¬Ò3Ð3à�5àŒ<�5œ<Ò'Ð'Ø�4àŒ<�5œ:Ò%Ð%à”Ð*Ø”NÔ'­4¬<Ò7Ð7ØÔ+Ð7Ý+ØÔ+ØØ”KÝ#œj­%¬*Ð5ð	ñ ô ð 8ð Ô+Ð7Ð7Ð7ØÔ+Ô0µDÔ4FÒFÐFÐFÐFØ�uà�4àŒ>ð 	Ø�4àÔ"Ð.Õ7NØÔ# W¨d¬kñ8
ô 8
Ð.ð �4àˆurO   r³   c                 ó¦  — |j         t          k    r"| j                             ¦   «         r	d|_        dS |j         t
          j        k    rdS | j        st          |_         d|_        dS | j        d         }|j         t
          j        k    rŽ|j	        s‡|j
        r€t          t          |j
                             ¦   «         ¦  «        ¦  «        dk    rIt          |¦  «        s:t          | j        ¦  «        dk     rt          |_         d|_        dS | j        d         }| j                             t!          |¦  «        g ¦  «                             |¦  «         dS )z0Add an inline or standalone comment to the line.Ú Fr“   rn   r   r<   T)r>   r   r3   Úany_open_bracketsrE   r&   ÚCOMMENTr1   rƒ   rA   rÌ   rX   r£   r   r2   Ú
setdefaultr¬   rK   )rL   r³   r°   s      rN   rJ   zLine.append_commentˆ  s9  € ð ŒLÕ.Ò.Ð.ØÔ$×6Ò6Ñ8Ô8ð /ð  ˆGŒNØ�5àŒ<�5œ=Ò(Ð(Ø�5àŒ{ð 	Ý-ˆGŒLØˆGŒNØ�5à”K ”Oˆ	àŒN�eœjÒ(Ð(Ø”Oð )àÔ ð )õ •D˜Ô)×0Ò0Ñ2Ô2Ñ3Ô3Ñ4Ô4¸Ò9Ð9Ý# GÑ,Ô,ð :õ �4”;ÑÔ !Ò#Ð#Ý1�”Ø!#�”Ø�uàœ BœˆIØŒ× Ò ¥ I¡¤°Ñ3Ô3×:Ò:¸7ÑCÔCÐCØˆtrO   c                 óR   — | j                              t          |¦  «        g ¦  «        S )z;Generate comments that should appear directly after `leaf`.)r2   r¾   r¬   r›   s     rN   r¤   zLine.comments_after­  s    € àŒ}× Ò ¥ D¡¤¨2Ñ.Ô.Ð.rO   c                 ó  — | j                              ¦   «         }| j                             t          |¦  «        g ¦  «        }| j                             t          | j         d         ¦  «        g ¦  «                             |¦  «         dS )z@Remove the trailing comma and moves the comments attached to it.r“   N)r1   Úpopr2   r¬   rÖ   Úextend)rL   Útrailing_commaÚtrailing_comma_commentss      rN   rI   zLine.remove_trailing_comma±  sx   € àœŸšÑ*Ô*ˆØ"&¤-×"3Ò"3µB°~Ñ4FÔ4FÈÑ"KÔ"KÐØŒ× Ò ¥ D¤K°¤OÑ!4Ô!4°bÑ9Ô9×@Ò@Ø#ñ	
ô 	
ð 	
ð 	
ð 	
rO   c                 óJ  — | j                              ¦   «         }|€dS |j        }t          |t          ¦  «        r<|j        t          j        k    rdS |j        t          j        k    rt          ||¦  «        }|duo*t          d„ |                     ¦   «         D ¦   «         ¦  «        S )zAReturn True iff `leaf` is part of a slice with non-trivial exprs.NFc              3   ó2   K  — | ]}|j         t          v V — Œd S rŸ   )r>   r   )rk   Úns     rN   rº   z,Line.is_complex_subscript.<locals>.<genexpr>È  s;   è è € ð 3
ð 3
Ø+,ˆAŒFÕ&Ð&ð3
ð 3
ð 3
ð 3
ð 3
ð 3
rO   )r3   Úget_open_lsqbÚnext_siblingÚ
isinstancer(   r>   r#   Ú	listmakerrÑ   r   rÅ   Ú	pre_order)rL   r7   Ú	open_lsqbÚsubscript_starts       rN   rF   zLine.is_complex_subscript¹  s·   € àÔ(×6Ò6Ñ8Ô8ˆ	ØÐØ�5à#Ô0ˆå�o¥tÑ,Ô,ð 	GØÔ#¥t¤~Ò5Ð5Ø�uàÔ#¥tÔ'9Ò9Ð9Ý"/°ÀÑ"FÔ"F�à dÐ*ð 
­sð 3
ð 3
Ø0?×0IÒ0IÑ0KÔ0Kð3
ñ 3
ô 3
ñ 0
ô 0
ð 	
rO   Úis_reversedc              #   óÈ  K  — t          t          t          t                   gt          t
          t          t          f                  f         |rt          nt          ¦  «        } || j	        ¦  «        D ]p\  }}t          |j        ¦  «        t          |j        ¦  «        z   }d|j        v r dS |                      |¦  «        D ]}|t          |j        ¦  «        z  }Œ|||fV — ŒqdS )z„Return an enumeration of leaves with their length.

        Stops prematurely on multiline strings and standalone comments.
        ú
N)r   r   r
   r'   r   r   ÚIndexÚenumerate_reversedÚ	enumerater1   rX   rE   rA   r¤   )rL   rç   ÚopÚindexr7   Úlengthr³   s          rN   Úenumerate_with_lengthzLine.enumerate_with_lengthÌ  sé   è è € õ Ý•h�t”nÐ%¥xµµe½T°kÔ0BÔ'CÐCÔDØ"-Ð<ÕÐµ9ñ
ô 
ˆð ˜2˜dœk™?œ?ð 	&ð 	&‰KˆE�4Ý˜œÑ%Ô%­¨D¬J©¬Ñ7ˆFØ�t”zÐ!Ð!Ø��à×.Ò.¨tÑ4Ô4ð -ð -�Ø�#˜gœmÑ,Ô,Ñ,��à˜˜vÐ%Ð%Ð%Ð%Ð%ð	&ð 	&rO   c                 ó\   — t          | j        | j        | j        | j        | j        ¬¦  «        S )N)r-   r.   r4   r5   r6   )r+   r-   r.   r4   r5   r6   rY   s    rN   Úclonez
Line.cloneá  s5   € ÝØ”Ø”*Ø Ô0Ø!Ô2Ø!%Ô!:ð
ñ 
ô 
ð 	
rO   c                 óV  — | sdS d| j         z  }t          | j        ¦  «        }t          |¦  «        }|j        › |› |j        › �}|D ]}|t          |¦  «        z  }Œt          j         	                    | j
                             ¦   «         ¦  «        D ]}|t          |¦  «        z  }Œ|dz   S )zRender the line.ré   z    )r.   Úiterr1   r¼   rE   rA   Ústrr¡   ÚchainÚfrom_iterabler2   Úvalues)rL   Úindentr1   ÚfirstÚresr7   r³   s          rN   Ú__str__zLine.__str__ê  s¸   € àð 	Ø�4à˜$œ*Ñ$ˆÝ�d”kÑ"Ô"ˆÝ�V‘”ˆØ”Ð4˜vÐ4 u¤{Ð4Ð4ˆØð 	ð 	ˆDØ•3�t‘9”9ÑˆCˆCÝ ”×4Ò4°T´]×5IÒ5IÑ5KÔ5KÑLÔLð 	 ð 	 ˆGØ•3�w‘<”<ÑˆCˆCà�T‰zÐrO   c                 ó8   — t          | j        p| j        ¦  «        S )z/Return True if the line has leaves or comments.)r@   r1   r2   rY   s    rN   Ú__bool__zLine.__bool__ú  s   € å�D”KÐ0 4¤=Ñ1Ô1Ð1rO   )FF©F)r:   N)r:   r+   )=Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r-   r   Ú__annotations__r.   Úintr£   r1   r   r'   Údictr2   r   ÚLeafIDr   r3   r4   r@   r5   r6   r	   rK   rU   ÚpropertyrS   r\   r   r    rb   rp   rw   r|   rD   r‡   r   r‘   r”   r   r™   rœ   r¨   r´   rÂ   rÆ   rH   rJ   r¤   rI   rF   r   r   rê   rð   rò   rõ   rü   rþ   rŒ   rO   rN   r+   r+   1   sa  € € € € € € àEÐEà�˜EÐ"Ñ"Ô"€Dˆ$Ð"Ð"Ñ"Ø€Eˆ3€N€N�NØ˜¨tÐ4Ñ4Ô4€FˆD�ŒJÐ4Ð4Ñ4à).¨¸tÐ)DÑ)DÔ)D€Hˆd�6˜4 œ:Ð%Ô&ÐDÐDÑDØ&+ e¸NÐ&KÑ&KÔ&K€O�^ÐKÐKÑKØ!€O�TÐ!Ð!Ñ!Ø"Ð�dÐ"Ð"Ñ"Ø+/Ð˜( 4œ.Ð/Ð/Ñ/ð MRð'%ð '%Øð'%Ø(,ð'%ØEIð'%à	ð'%ð '%ð '%ð '%ðR5ð 5 ð 5°Dð 5ÀTð 5ð 5ð 5ð 5ð( ðS˜Dð Sð Sð Sñ „XðSð ð>˜dð >ð >ð >ñ „Xð>ð ð8˜4ð 8ð 8ð 8ñ „Xð8ð ðI¨Dð Ið Ið Iñ „XðIð ð
˜$ð 
ð 
ð 
ñ „Xð
ð ð
˜tð 
ð 
ð 
ñ „Xð
ð ð
˜ð 
ð 
ð 
ñ „Xð
ð$ ð
˜Tð 
ð 
ð 
ñ „Xð
ð ð
 dð 
ð 
ð 
ñ „Xð
ð ð	¨$ð 	ð 	ð 	ñ „Xð	ð ðF˜dð Fð Fð Fñ „XðFð ðJ tð Jð Jð Jñ „XðJð ð3˜Tð 3ð 3ð 3ñ „Xð3ð IMð
ð 
ð 
Ø%-¨h¸°v¸t°|Ô.DÔ%Eð
à	ð
ð 
ð 
ð 
ð(¨dð ð ð ð ðÀ$ð ð ð ð ð"°dð "ð "ð "ð "ðH°4ð ð ð ð ðBF¨Dð Fð Fð Fð Fð*°ð *¸ð *ð *ð *ð *ðX# dð #¨tð #ð #ð #ð #ðJ/ 4ð /¨D°¬Jð /ð /ð /ð /ð
ð 
ð 
ð 
ð
¨ð 
°$ð 
ð 
ð 
ð 
ð( #(ð&ð &Øð&à	�%˜˜t SÐ(Ô)Ô	*ð&ð &ð &ð &ð*
ð 
ð 
ð 
ð˜ð ð ð ð ð 2˜$ð 2ð 2ð 2ð 2ð 2ð 2rO   r+   c                   óF   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   dS )Ú	RHSResultz2Intermediate split result from a right hand split.ÚheadÚbodyÚtailrÎ   Úclosing_bracketN)r   r  r  r  r+   r  r'   rŒ   rO   rN   r
  r
  ÿ  sK   € € € € € € à<Ð<à
€J€J�JØ
€J€J�JØ
€J€J�JØÐÐÑØÐÐÑÐÐrO   r
  c                   ó®   — e Zd ZU dZeed<   ed          ed<   eed<   dZe	ed<    e
e¬¦  «        Zee         ed<   dZe	ed	<   d
Zeed<   dee         fd„ZdS )Ú
LinesBlockzÙ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_feedr:   c                 óª   — t          t          | j        ¬¦  «        ¦  «        }t          | j        | j        |¦  «        }|g| j        z   || j        z  gz   S )N)r-   )rõ   r+   r-   r!   r  r  r  r  )rL   Ú
empty_linerE   s      rN   Ú	all_lineszLinesBlock.all_lines  sP   € Ý� 4¤9Ð-Ñ-Ô-Ñ.Ô.ˆ
Ý# D¤K°´ÀÑLÔLˆØˆx˜$Ô,Ñ,°
¸T¼ZÑ0GÐ/HÑHÐHrO   N)r   r  r  r  r   r  r	   r+   r  r  r   r£   r  r   rõ   r  r  r@   r  rŒ   rO   rN   r  r  
  s¹   € € € € € € ðð ð €J€J�JØ˜\Ô*Ð*Ð*Ñ*ØÐÐÑØ€FˆC€O€O�OØ$˜u°TÐ:Ñ:Ô:€M�4˜”9Ð:Ð:Ñ:Ø€Eˆ3€N€N�NØ€IˆtÐÐÑðI˜4 œ9ð Ið Ið Ið Ið Ið IrO   r  c            
       óò   — e Zd ZU dZeed<   dZee         ed<   dZ	ee
         ed<    ee¬¦  «        Zee         ed<   dZee
         ed<   d	ed
e
fd„Zd	ed
eeef         fd„Zd	ededed
eeef         fd„ZdS )ÚEmptyLineTrackera{  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_liner:   c                 ó„  — |j         dk    o't          |j        ¦  «        od|j        d         j        v }|                      |¦  «        \  }}| j        r| j        j        nd}t          d||z
  ¦  «        }| j        rO| j        j        €Ct          | j        j	        j        ¦  «        dk    r!| j        j	        j
        r|j        s	|j        sd}t          | j        | j        ||||¬¦  «        }|j        r2| j        �#| j        j        s| j        j        r|r| j        �|r|| _        n|j        r|rd| _        || _        || _        |S )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  r  r  )r.   r@   r1   rE   Ú_maybe_empty_linesr  r  ÚmaxrX   r  r   rb   rw   r  r-   rS   r  r\   r  )rL   r  r  r  r  Úprevious_afterÚblocks          rN   Úmaybe_empty_linesz"EmptyLineTracker.maybe_empty_lines0  sž  € ð Ô !Ò#ð 8Ý�\Ô(Ñ)Ô)ð8à˜,Ô-¨aÔ0Ô7Ð7ð 	ð
 ×/Ò/°Ñ=Ô=‰ˆ�Ø6:Ô6IÐP˜Ô,Ô2Ð2ÈqˆÝ�Q˜ Ñ/Ñ0Ô0ˆð Ôð	ð Ô#Ô2Ð:Ý�DÔ'Ô5Ô<Ñ=Ô=ÀÒBÐBØÔ#Ô1Ô>ð Cà!Ô*ð Cà.:Ô.Að Cð ˆFåØ”ØÔ.Ø&ØØØð
ñ 
ô 
ˆð Ô"ð 
	1ØÔ!Ð)ØÔ&Ô3ð *ð Ô+Ô6ð *ð ;Að *ð Ô2Ð:¸fÐ:à05�Ô-øàÔ*ð 	1¨fð 	1Ø,0ˆDÔ)à)ˆÔØ#ˆÔØˆrO   c                 óp  — d}|j         dk    r| j        j        rdnd}|j        r?|j        d         }|j                             d¦  «        }t          ||¦  «        }d|_        nd}t          |¦  «        }|j         }d }| j        rL| j        d         j         |k    r6| j         	                    ¦   «         }| j        r| j        d         j         |k    °6|j
        s|j        r| j                             |¦  «         | j        €dS |j        r(| j        j        rdS | j        j        r| j        j
        rdS |�‘| j        €J ‚| j        j        r5|j        r
|j        sd}nk|r|j
        s| j        j
        r|rdnd}nO|rd}nJd}nG|rd}nB|s>|j         r7|j        d         j        t$          j        k    r|j        d         j        d	vrd}nd}|j        s|j
        s|j        r|                      |||¦  «        S | j        j        r8|j        s1|                     t.          ¬
¦  «        s|| j        j         k    r|pddfS |dfS )NrW   r   r   ré   rÓ   r“   ©r   r   ©r   rW   )ÚwithÚtryÚforÚwhileÚifÚmatchr•   )r.   r-   Úis_pyir1   rE   r�   Úminr@   r  rÙ   rw   rb   rK   r  r   r”   rp   r>   r&   rC   rA   r\   Ú#_maybe_empty_lines_for_class_or_defr   r™   )rL   r  Úmax_allowedru   r  Úuser_had_newliner.   Úprevious_defs           rN   r!  z#EmptyLineTracker._maybe_empty_linesb  sé  € ØˆØÔ Ò"Ð"Ø#œyÔ/Ð6˜!˜!°QˆKàÔð 	à%Ô,¨QÔ/ˆJØÔ&×,Ò,¨TÑ2Ô2ˆFÝ˜ Ñ-Ô-ˆFØ "ˆJÔÐàˆFå ™<œ<ÐØÔ"ˆð ˆØÔ ð 	4 TÔ%7¸Ô%;Ô%AÀUÒ%JÐ%JØÔ-×1Ò1Ñ3Ô3ˆLð Ô ð 	4 TÔ%7¸Ô%;Ô%AÀUÒ%JÐ%JàÔð 	4 ,Ô"7ð 	4ØÔ×%Ò% lÑ3Ô3Ð3àÔÐ%à�4àÔ$ð 	ØÔ!Ô*ð Ø�tØÔ!Ô-ð °$Ô2DÔ2Kð Ø�tàÐ#ØÔ%Ð1Ð1Ð1ØŒyÔð ØÔ(ð °Ô1Kð Ø�F�FØð  <Ô#6ð ¸4Ô;MÔ;Tð à"2Ð9˜Q˜Q¸�F�FØð Ø�F�Fà�F�Fàð Ø�F�Fàðà$Ô*ðð %Ô+¨BÔ/Ô4½¼ÒCÐCà$Ô+¨AÔ.Ô4ØMðNð Nð �F�Fà�FàÔ$ð 	¨Ô(;ð 	¸|Ô?Tð 	Ø×;Ò;Ø˜fÐ&6ñô ð ð
 ÔÔ(ð	$à Ô*ð	$ð !×6Ò6Í)Ð6ÑTÔTð	$ð ˜Ô+Ô1Ò1Ð1à�K˜a !Ð#Ð#à�qˆyÐrO   r  r3  c                 óÂ  — | j         €J ‚| j         j        r| j        j        r	|j        rdS dS | j         j        |j        k     r.| j         j        s| j         j        r| j        j        rdS |rdnddfS d }| j         j        r]| j         j        |j        k    rH|dk    rB| j	        }|�7|j
        �0|j
        j        j        s|j
        j        j        s|j        dk    r|}ndS | j        j        r¬|j        s| j         j        rI| j         j        |j        k     rd}nœ| j         j        |j        k    rd}n„|j        r| j         j        rd}nnd}nk| j         j        |j        k    rd}nS|j        s|j        r'| j         j        s|j        rt          d|¦  «        }n!d}nd}n|j        rdnd}| j         j        r|sd}|�-|j
        }|�$t!          |j        |¦  «        |j        z
  |_        d}|dfS )Nr(  r'  rW   r   r   )r  r\   r-   r/  rp   r.   rb   rw   rS   r  r  r  r”   r  r0  r|   r"  r  )rL   r  r  r3  Úcomment_to_add_newlinesÚslcÚnewlinesr  s           rN   r1  z4EmptyLineTracker._maybe_empty_lines_for_class_or_def¶  s‚  € ð Ô!Ð-Ð-Ð-àÔÔ*ð 	ØŒyÔð  LÔ$>ð à�tØ�4àÔÔ# lÔ&8Ò8Ð8ØÔÔ'ð 9Ø+/Ô+=Ô+Dð 9ð ŒyÔð Ø�tØ(Ð/�1�1¨a°Ð2Ð2à8<ÐàÔÔ)ð	àÔ"Ô(¨LÔ,>Ò>Ð>Ø˜!’�àÔ/ˆCà�ØÔ&Ð2ØÔ*Ô8ÔAð 3àÔ*Ô8ÔDð 3ð ”J !’O�Oà*-Ð'Ð'à�tàŒ9Ôð "	ØÔ$ð ¨Ô(:Ô(Cð ØÔ%Ô+¨lÔ.@Ò@Ð@Ø �H�HØÔ'Ô-°Ô0BÒBÐBØ �H�HØ!Ô/ð !°DÔ4FÔ4Tð !à �H�Hà �H�Hð Ô#Ô)¨LÔ,>Ò>Ð>Ø��àÔ#ðØ'3Ô'@ðàÔ(Ô/ðð  Ô%ð !õ  # 1 f™~œ~�H�Hð  !�H�Hà��à(Ô.Ð5�q�q°AˆHð Ô!Ô-ð Ð6Fð Ø�Ø"Ð.Ø4ÔCˆNØÐ)åÐ/Ô6¸ÑAÔAÀNÔDXÑXð (Ô.ð �Ø˜ˆ{ÐrO   )r   r  r  r  r   r  r  r	   r+   r  r  r   r£   r  r   r  r%  r   r  r!  r@   r1  rŒ   rO   rN   r  r     s%  € € € € € € ðð ð €J€J�JØ$(€M�8˜D”>Ð(Ð(Ñ(Ø+/€N�H˜ZÔ(Ð/Ð/Ñ/Ø % °dÐ ;Ñ ;Ô ;€M�4˜”:Ð;Ð;Ñ;Ø59Ð˜h zÔ2Ð9Ð9Ñ9ð0¨dð 0°zð 0ð 0ð 0ð 0ðdR¨tð R¸¸cÀ3¸h¼ð Rð Rð Rð RðhNØ ðNØ*-ðNØAEðNà	ˆs�CˆxŒðNð Nð Nð Nð Nð NrO   r  Úsequencer:   c              #   óh   K  — t          | ¦  «        dz
  }t          | ¦  «        D ]}||fV — |dz  }ŒdS )z;Like `reversed(enumerate(sequence))` if that were possible.rW   N)rX   r½   )r9  rî   Úelements      rN   rë   rë     sS   è è € å�‰MŒM˜AÑ€EÝ˜HÑ%Ô%ð ð ˆØ�gÐÐÐÐØ�‰
ˆˆðð rO   FÚnew_lineÚold_liner1   r8   c                 óð   — |D ]r}t          |j        |j        ¦  «        }t          ||¦  «         |                      ||¬¦  «         |                     |¦  «        D ]}|                      |d¬¦  «         ŒŒsdS )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).
    rQ   TN)r'   r>   rA   r"   rK   r¤   )r<  r=  r1   r8   Úold_leafÚnew_leafÚcomment_leafs          rN   Úappend_leavesrB    s‘   € ð ð =ð =ˆÝ˜œ x¤~Ñ6Ô6ˆÝ�h Ñ)Ô)Ð)Ø�Š˜¨|ˆÑ<Ô<Ð<à$×3Ò3°HÑ=Ô=ð 	=ð 	=ˆLØ�OŠO˜L°tˆOÑ<Ô<Ð<Ð<ð	=ð=ð =rO   rÓ   )Úline_strÚliner-   rC  c                ó”  — |st          | ¦  «        }t          j        |vr1t          |¦  «        |j        k    od|vo|                      ¦   «          S |                      ¦   «         rdS d|vrt          |¦  «        |j        k    S |                     d¦  «        �^}}}t          |¦  «        |j        k    st          |¦  «        |j        k    rdS g }d}g }t          j        }	t          | j
        ¦  «        D �]¦\  }
}|	t          j        k    r‰d}|j        dz   t          |¦  «        k    r|                     d¦  «         n/|j        dz   t          |¦  «        k     r|                     ¦   «         }|�%|�#|j        |j        dz   k    r|j        }	|dk    r dS |j        |	k    rh|j        t           j        k    rSdg}||z  }| j        s|j        dk    r9|
t          | j
        ¦  «        dz
  k    s	|j        |vr||j        xx         dz  cc<   |	t          j        k    rt)          |	|j        ¦  «        }	t+          |¦  «        r`t          |¦  «        dk    r dS |}|}t-          |¦  «        |v r5|                     |¦  «         |j        €n|j        }t-          |¦  «        |v °5�Œ¨t          |¦  «        dk    rdS t1          d„ |D ¦   «         ¦  «        S )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   ó"   K  — | ]
}|d k    V — ŒdS r·   rŒ   )rk   Úvals     rN   rº   z'is_line_short_enough.<locals>.<genexpr>  s&   è è € Ð*Ð*˜Cˆs�aŠxÐ*Ð*Ð*Ð*Ð*Ð*rO   )Úline_to_stringr   Úmultiline_string_handlingr%   Úline_lengthrœ   ÚsplitÚmathÚinfrì   r1   Úbracket_depthrX   rK   rÙ   r>   r&   r­   r4   rÐ   r0  r   rõ   rÌ   Úall)rD  r-   rC  rú   rl   ÚlastÚcommasÚmultiline_stringÚmultiline_string_contextsÚmax_level_to_updateÚir7   Ú	had_commaÚignore_ctxsÚctxs                  rN   Úis_line_short_enoughrY  '  s(  € ð ð (Ý! $Ñ'Ô'ˆåÔ(°Ð4Ð4å�hÑÔ 4Ô#3Ò3ð 8Ø˜HÐ$ð8à×5Ò5Ñ7Ô7Ð7ð	
ð ×(Ò(Ñ*Ô*ð ØˆuØ�8ÐÐå˜Ñ"Ô" dÔ&6Ò6Ð6à—n’n TÑ*Ô*�O€EˆAˆtÝ�ÑÔ˜$Ô*Ò*Ð*­i¸©o¬oÀÔ@PÒ.PÐ.PØˆuð €FØ'+Ðà*,Ðå-1¬XÐÝ˜Tœ[Ñ)Ô)ð )!ñ )!‰ˆˆ4Ø¥$¤(Ò*Ð*Ø'+ˆIØÔ! AÑ%­¨F©¬Ò3Ð3Ø—’˜aÑ Ô Ð Ð ØÔ# aÑ'­#¨f©+¬+Ò5Ð5Ø"ŸJšJ™LœL�	àÐ%Ø$Ð0Ø$Ô2°dÔ6HÈ1Ñ6LÒLÐLð '+Ô&8Ð#Ø˜q’=�=à ˜5˜5àÔÐ!4Ò4Ð4¸¼ÅeÄkÒ9QÐ9Qð 04¨fˆKØÐ4Ñ4ˆKØÔ$ð 0¨Ô(:¸QÒ(>Ð(>Ø•S˜œÑ%Ô%¨Ñ)Ò)Ð)¨TÔ->ÀkÐ-QÐ-Qà�tÔ)Ð*Ð*Ô*¨aÑ/Ð*Ð*Ñ*Ø¥$¤(Ò*Ð*Ý"%Ð&9¸4Ô;MÑ"NÔ"NÐå˜tÑ$Ô$ð 	!ÝÐ,Ñ-Ô-°Ò1Ð1à�u�uØ#ÐØˆCå�c‘(”(˜hÐ&Ð&Ø)×0Ò0°Ñ5Ô5Ð5Ø”:Ð%ØØ”j�õ	 �c‘(”(˜hÐ&Ð&ùõ Ð$Ñ%Ô%¨Ò*Ð*ØˆtåÐ*Ð* 6Ð*Ñ*Ô*Ñ*Ô*Ð*rO   c                 ó  — | j         }t          |¦  «        dk     rdS |d         j        t          j        k    rÑ|d         j        t          j        k    r¶d}d}|d         }|ddd…         D ]ž}|j        t          v r|j        t          vr dS |dz  }nh|j        t          j        k    r|dz  }nM|j        t          j        k    r'|j        t          j        k    s|j        t          v s dS n|j        t          vr dS |dk    r	|dk    r dS ŒŸdS )	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)	r1   rX   r>   r&   r…   ri   r   r   ra   )rD  r1   Ú
call_countÚ	dot_countr¼   r7   s         rN   Úcan_be_splitr]  ‚  s  € ð Œ[€FÝ
ˆ6�{„{�Q‚€Øˆuàˆa„y„~�œÒ%Ð%¨&°¬)¬.½E¼IÒ*EÐ*EØˆ
Øˆ	Ø�bŒzˆØ˜2˜6˜r˜6”Nð 	ð 	ˆDØŒyÕ,Ð,Ð,Ø”9Õ$4Ð4Ð4Ø ˜5˜5à˜a‘�
�
Ø”�eœiÒ'Ð'Ø˜Q‘�	�	Ø”�eœjÒ(Ð(Øœ	¥U¤YÒ.Ð.°$´)Õ?OÐ2OÐ2OØ ˜5˜5øà”Õ"2Ð2Ð2Ø�u�uà˜1Š}ˆ} ¨a¢ Ø�u�uøàˆ4rO   ÚrhsrJ  c                 óè  — | j         }d}t          |j        ¦  «        D ]K}|r||j        u rd}|j        t
          k    r|s dS |s%|j        t          v r|j        |j        v r	|j        r|}ŒL|j        }|j	        sdS | 
                    ¦   «         }|                     |¦  «        }|dk    rdS |dk    r|t          k    r| j        j        rdS |t          k    rdS t!          |j        ¦  «        dk    s
J d¦   «         ‚|j        d         }|j        d         }	|j        t"          v r"|	j        t          vrt%          |||¬¦  «        rdS |j        d	         }
|j        d
         }|j        t&          j        k    sK|j        t&          j        k    s6|j        t&          j        k    rV|j        rO|j        j        t0          j        k    r5|
j        t"          v rdS t5          |¦  «        rdS t7          |||¬¦  «        rdS dS )a  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ú   rJ  r<   r“   )rP  rJ  )r  r½   r1   rÎ   r>   r   r   rA   r3   Ú
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^  rJ  rD  r  r7   ÚbtÚmax_priorityÚdelimiter_countrú   ÚsecondÚpenultimaterP  s               rN   Úcan_omit_invisible_parensrj  ¦  sA  € ð Œ8€Dð '+€OÝ˜œÑ%Ô%ð #ð #ˆØð 	#˜t Ô'FÐFÐFØ"ˆOØŒ9Õ*Ò*Ð*°?Ð*Ø�5�5àð	#à”	Õ-Ð-Ð-ØÔ$¨¬Ð3Ð3Ø”
ð 4ð #ˆOøà	Ô	€BØŒ=ð àˆtà×,Ò,Ñ.Ô.€LØ×6Ò6°|ÑDÔD€OØ˜ÒÐàˆuà˜!ÒÐØ�>Ò)Ð)¨c¬hÔ.QÐ)ð
 �5ð
 •|Ò#Ð#àˆtåˆtŒ{ÑÔ˜qÒ Ð Ð Ð"6Ñ Ô Ð ð ŒK˜ŒN€EØŒ[˜Œ^€FØ„zÕ%Ð%Ð%¨&¬+Õ=MÐ*MÐ*MÝ" 4¨uÀ+ÐNÑNÔNð 	Ø�4ð ”+˜b”/€KØŒ;�rŒ?€Dð 	Œ	•U”ZÒÐØŒ9�œÒ$Ð$ð ŒI�œÒ#Ð#Ø”ð $à”Ô ¥D¤LÒ0Ð0ð ÔÕ/Ð/Ð/à�5å˜uÑ%Ô%ð 	ð �4å" 4¨dÀÐLÑLÔLð 	Ø�4àˆ5rO   rú   c                ó  — d}d| j         z  }d}|                      ¦   «         D ]>\  }}}|j        t          v r|j        |u rd}|r||z  }||k    r n.|j        t
          v rd}Œ?t          | j        ¦  «        |dz   k    rdS dS )ú See `can_omit_invisible_parens`.Fr~   r“   TrW   )r.   rð   r>   r   rÎ   r   rX   r1   )rD  rú   rJ  Ú	remainderrï   Ú_indexr7   Úleaf_lengths           rN   rc  rc    s´   € à€IØ�”‰^€FØ€FØ%)×%?Ò%?Ñ%AÔ%Að ð Ñ!ˆ��kØŒ9Õ(Ð(Ð(¨TÔ-AÀUÐ-JÐ-JØˆIØð 	"Ø�kÑ!ˆFØ˜Ò#Ð#Ø�àŒyÕ,Ð,Ð,à!�	øõ ˆtŒ{ÑÔ˜v¨™zÒ)Ð)Ø�4àˆ5rO   rP  c                ó¨   — d| j         z  }d}|                      ¦   «         D ]0\  }}}||z  }||j        u r|s||k    r dS Œ |j        t          v rd}Œ1dS )rl  r~   FT)r.   rð   rÎ   r>   r   )rD  rP  rJ  rï   Úseen_other_bracketsrn  r7   ro  s           rN   rd  rd     s‡   € à�”‰^€FØÐØ%)×%?Ò%?Ñ%AÔ%Að 'ð 'Ñ!ˆ��kØ�+ÑˆØ�4Ô'Ð'Ð'Ø"ð  f°Ò&;Ð&;Ø�t�tð '<ð ŒYÕ*Ð*Ð*à"&Ðøàˆ5rO   c                 óF   — t          | ¦  «                             d¦  «        S )zmReturns the string representation of @line.

    WARNING: This is known to be computationally expensive.
    ré   )rõ   rB   )rD  s    rN   rH  rH  1  s   € õ
 ˆt‰9Œ9�?Š?˜4Ñ Ô Ð rO   rÿ   )Cr¡   rL  Údataclassesr   r   Útypingr   r   r   r   r	   r
   r   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  r  rë   r@   rB  rõ   rY  r]  rj  rc  rd  rH  rŒ   rO   rN   ú<module>r|     s¢  ðØ Ð Ð Ð Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð HÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& $Ð #Ð #Ð #Ð #Ð #Ø  Ð  Ð  Ð  Ð  Ð  Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &ð €GˆC�L„L€Ø€Ø	€Ø
ˆ4�ˆ:Ô€ð ðJ2ð J2ð J2ð J2ð J2ñ J2ô J2ñ „ðJ2ðZ ðð ð ð ð ñ ô ñ „ðð ðIð Ið Ið Ið Iñ Iô Iñ „ðIð* ðcð cð cð cð cñ cô cñ „ðcðL ¨!¤ð °¸%ÀÀqÀ¼/Ô1Jð ð ð ð ð NSð=ð =Øð=Ø"ð=Ø,0°¬Jð=ØFJð=à	ð=ð =ð =ð =ð2 02ðX+ð X+ð X+Ø
ðX+ØðX+Ø),ðX+à	ðX+ð X+ð X+ð X+ðv!�tð ! ð !ð !ð !ð !ðH^Ø	ð^àð^ð 
ð^ð ^ð ^ð ^ðB $ð °$ð ÀSð ÈTð ð ð ð ð2 $ð °ð ÀCð ÈDð ð ð ð ð"!˜ð ! #ð !ð !ð !ð !ð !ð !rO   