§
    øyIfŠ0  ã                   óœ  — U d 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 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 ddlmZmZ eeef         ZeZ eZ!eZ"eZ#dZ$ee%d<   d	Z&ee%d
<   dZ'ee%d<   dZ(ee%d<   dZ)ee%d<   dZ*ee%d<   ej+        dej,        dej-        dej.        dej/        dej0        dej1        dej2        dej3        dej4        dej5        dej6        dej7        dej8        diZ9ee%d<   dZ:ee%d<    G d„ de;¦  «        Z<e G d „ d!¦  «        ¦   «         Z=d"ed#e#fd$„Z>d,d"ed&e	e         d#e#fd'„Z?d(ed#e#fd)„Z@d*e
e         d#ee!         fd+„ZAd%S )-z,Builds on top of nodes.py to track brackets.é    )Ú	dataclassÚfield)	ÚDictÚFinalÚIterableÚListÚOptionalÚSequenceÚSetÚTupleÚUnion)
ÚBRACKETÚCLOSING_BRACKETSÚCOMPARATORSÚLOGIC_OPERATORSÚMATH_OPERATORSÚOPENING_BRACKETSÚUNPACKING_PARENTSÚVARARGS_PARENTSÚ	is_varargÚsyms)Útoken)ÚLeafÚNodeé   ÚCOMPREHENSION_PRIORITYé   ÚCOMMA_PRIORITYé   ÚTERNARY_PRIORITYé   ÚLOGIC_PRIORITYé   ÚSTRING_PRIORITYé
   ÚCOMPARATOR_PRIORITYé	   é   é   é   é   é   é   é   ÚMATH_PRIORITIESé   ÚDOT_PRIORITYc                   ó   — e Zd ZdZdS )ÚBracketMatchErrorzLRaised when an opening bracket is unable to be matched to a closing bracket.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úB/var/www/piapp/venv/lib/python3.11/site-packages/black/brackets.pyr3   r3   6   s   € € € € € ØVÐVÐVÐVr9   r3   c                   óê  — e Zd ZU dZdZeed<    ee¬¦  «        Z	e
eeef         ef         ed<    ee¬¦  «        Ze
eef         ed<   dZee         ed<    ee¬¦  «        Zee         ed	<    ee¬¦  «        Zee         ed
<    ee¬¦  «        Zee         ed<   deddfd„Zdefd„Zdefd„Zddee         defd„Zddedefd„Zdedefd„Z dedefd„Z!dedefd„Z"dedefd„Z#dee         fd„Z$dS )ÚBracketTrackerz"Keeps track of brackets on a line.r   Údepth)Údefault_factoryÚbracket_matchÚ
delimitersNÚpreviousÚ_for_loop_depthsÚ_lambda_argument_depthsÚ	invisibleÚleafÚreturnc                 ó$  — |j         t          j        k    rdS | j        dk    r%|j         t          v r| j        |j         f| j        vrdS |                      |¦  «         |                      |¦  «         |j         t          v r…| xj        dz  c_        	 | j                             | j        |j         f¦  «        }n%# t          $ r}t          d|› �¦  «        |‚d}~ww xY w||_        |j        s| j                             |¦  «         | j        |_        | j        dk    rct!          || j        ¦  «        }|r$| j        �|| j        t'          | j        ¦  «        <   n(t)          |¦  «        }|r|| j        t'          |¦  «        <   |j         t*          v rR|| j        | j        t,          |j                  f<   | xj        dz  c_        |j        s| j                             |¦  «         || _        |                      |¦  «         |                      |¦  «         dS )a£  Mark `leaf` with bracket-related metadata. Keep track of delimiters.

        All leaves receive an int `bracket_depth` field that stores how deep
        within brackets a given leaf is. 0 means there are no enclosing brackets
        that started on this line.

        If a leaf is itself a closing bracket and there is a matching opening
        bracket earlier, it receives an `opening_bracket` field with which it forms a
        pair. This is a one-directional link to avoid reference cycles. Closing
        bracket without opening happens on lines continued from previous
        breaks, e.g. `) -> "ReturnType":` as part of a funcdef where we place
        the return type annotation on its own line of the previous closing RPAR.

        If a leaf is a delimiter (a token on which Black can split the line if
        needed) and it's on depth 0, its `id()` is stored in the tracker's
        `delimiters` field.
        Nr   r0   zDUnable to match a closing bracket to the following opening bracket: )Útyper   ÚCOMMENTr=   r   r?   Ú'maybe_decrement_after_for_loop_variableÚ&maybe_decrement_after_lambda_argumentsÚpopÚKeyErrorr3   Úopening_bracketÚvaluerD   ÚappendÚbracket_depthÚis_split_before_delimiterrA   r@   ÚidÚis_split_after_delimiterr   r   Ú maybe_increment_lambda_argumentsÚ!maybe_increment_for_loop_variable)ÚselfrE   rN   ÚeÚdelims        r:   ÚmarkzBracketTracker.markF   s.  € ð$ Œ9�œÒ%Ð%ØˆFð ŒJ˜!ŠOˆOØ”	Õ-Ð-Ð-Ø”˜TœYÐ'¨tÔ/AÐAÐAàˆFà×4Ò4°TÑ:Ô:Ð:Ø×3Ò3°DÑ9Ô9Ð9ØŒ9Õ(Ð(Ð(ØˆJŒJ˜!‰OˆJŒJðØ"&Ô"4×"8Ò"8¸$¼*ÀdÄiÐ9PÑ"QÔ"Q��øÝð ð ð Ý'ð(Ø!%ð(ð (ñô ð ðøøøøðøøøð
 $3ˆDÔ Ø”:ð ,Ø”×%Ò% dÑ+Ô+Ð+Ø!œZˆÔØŒ:˜Š?ˆ?Ý-¨d°D´MÑBÔBˆEØð 6˜œÐ2Ø5:�”¥ 4¤=Ñ 1Ô 1Ñ2Ð2å0°Ñ6Ô6�Øð 6Ø05�D”O¥B t¡H¤HÑ-ØŒ9Õ(Ð(Ð(ØAEˆDÔ˜tœz­7°4´9Ô+=Ð=Ñ>ØˆJŒJ˜!‰OˆJŒJØ”:ð ,Ø”×%Ò% dÑ+Ô+Ð+ØˆŒØ×-Ò-¨dÑ3Ô3Ð3Ø×.Ò.¨tÑ4Ô4Ð4Ð4Ð4s   Â&B8 Â8
CÃCÃCc                 ó8   — t          | j        p| j        ¦  «        S )z®Return True if there is an open for or lambda expression on the line.

        See maybe_increment_for_loop_variable and maybe_increment_lambda_arguments
        for details.)ÚboolrB   rC   ©rW   s    r:   Úany_open_for_or_lambdaz%BracketTracker.any_open_for_or_lambda‚   s   € õ
 �DÔ)ÐI¨TÔ-IÑJÔJÐJr9   c                 ó*   — t          | j        ¦  «        S )zBReturn True if there is an yet unmatched open bracket on the line.)r\   r?   r]   s    r:   Úany_open_bracketsz BracketTracker.any_open_brackets‰   s   € å�DÔ&Ñ'Ô'Ð'r9   r8   Úexcludec                 óh   ‡— t          ˆfd„| j                             ¦   «         D ¦   «         ¦  «        S )z¼Return the highest priority of a delimiter found on the line.

        Values are consistent with what `is_split_*_delimiter()` return.
        Raises ValueError on no delimiters.
        c              3   ó*   •K  — | ]\  }}|‰v¯	|V — Œd S ©Nr8   )Ú.0ÚkÚvra   s      €r:   ú	<genexpr>z8BracketTracker.max_delimiter_priority.<locals>.<genexpr>“   s1   øè è € ÐMÐM™˜˜A¸AÀWÐ<LÐ<L�1Ð<LÐ<LÐ<LÐ<LÐMÐMr9   )Úmaxr@   Úitems)rW   ra   s    `r:   Úmax_delimiter_priorityz%BracketTracker.max_delimiter_priority�   s6   ø€ õ ÐMÐMÐMÐM ¤×!6Ò!6Ñ!8Ô!8ÐMÑMÔMÑMÔMÐMr9   Úpriorityc                 ó¦   ‡— | j         sdS ‰p|                      ¦   «         Št          ˆfd„| j                              ¦   «         D ¦   «         ¦  «        S )zŽReturn the number of delimiters with the given `priority`.

        If no `priority` is passed, defaults to max priority on the line.
        r   c              3   ó(   •K  — | ]}|‰k    ¯d V — ŒdS )r0   Nr8   )re   Úprl   s     €r:   rh   z?BracketTracker.delimiter_count_with_priority.<locals>.<genexpr>ž   s'   øè è € ÐHÐH˜¸!¸xº-¸-�1¸-¸-¸-¸-ÐHÐHr9   )r@   rk   ÚsumÚvalues)rW   rl   s    `r:   Údelimiter_count_with_priorityz,BracketTracker.delimiter_count_with_priority•   s[   ø€ ð
 Œð 	Ø�1àÐ<˜t×:Ò:Ñ<Ô<ˆÝÐHÐHÐHÐH˜dœo×4Ò4Ñ6Ô6ÐHÑHÔHÑHÔHÐHr9   c                 ó¨   — |j         t          j        k    r<|j        dk    r1| xj        dz  c_        | j                             | j        ¦  «         dS dS )zÃIn a for loop, or comprehension, the variables are often unpacks.

        To avoid splitting on the comma in this situation, increase the depth of
        tokens between `for` and `in`.
        Úforr0   TF)rH   r   ÚNAMErO   r=   rB   rP   ©rW   rE   s     r:   rV   z0BracketTracker.maybe_increment_for_loop_variable    sQ   € ð Œ9�œ
Ò"Ð" t¤z°UÒ':Ð':ØˆJŒJ˜!‰OˆJŒJØÔ!×(Ò(¨¬Ñ4Ô4Ð4Ø�4àˆur9   c                 óÖ   — | j         ra| j         d         | j        k    rK|j        t          j        k    r6|j        dk    r+| xj        dz  c_        | j                              ¦   «          dS dS )z>See `maybe_increment_for_loop_variable` above for explanation.éÿÿÿÿÚinr0   TF)rB   r=   rH   r   ru   rO   rL   rv   s     r:   rJ   z6BracketTracker.maybe_decrement_after_for_loop_variable­   sn   € ð Ô!ð	àÔ% bÔ)¨T¬ZÒ7Ð7Ø”	�UœZÒ'Ð'Ø”
˜dÒ"Ð"àˆJŒJ˜!‰OˆJŒJØÔ!×%Ò%Ñ'Ô'Ð'Ø�4àˆur9   c                 ó¨   — |j         t          j        k    r<|j        dk    r1| xj        dz  c_        | j                             | j        ¦  «         dS dS )zÂIn a lambda expression, there might be more than one argument.

        To avoid splitting on the comma in this situation, increase the depth of
        tokens between `lambda` and `:`.
        Úlambdar0   TF)rH   r   ru   rO   r=   rC   rP   rv   s     r:   rU   z/BracketTracker.maybe_increment_lambda_arguments»   sQ   € ð Œ9�œ
Ò"Ð" t¤z°XÒ'=Ð'=ØˆJŒJ˜!‰OˆJŒJØÔ(×/Ò/°´
Ñ;Ô;Ð;Ø�4àˆur9   c                 óÀ   — | j         rV| j         d         | j        k    r@|j        t          j        k    r+| xj        dz  c_        | j                              ¦   «          dS dS )z=See `maybe_increment_lambda_arguments` above for explanation.rx   r0   TF)rC   r=   rH   r   ÚCOLONrL   rv   s     r:   rK   z5BracketTracker.maybe_decrement_after_lambda_argumentsÈ   sa   € ð Ô(ð	àÔ,¨RÔ0°D´JÒ>Ð>Ø”	�Uœ[Ò(Ð(àˆJŒJ˜!‰OˆJŒJØÔ(×,Ò,Ñ.Ô.Ð.Ø�4àˆur9   c                 ó^   — | j                              | j        dz
  t          j        f¦  «        S )z7Return the most recent opening square bracket (if any).r0   )r?   Úgetr=   r   ÚRSQBr]   s    r:   Úget_open_lsqbzBracketTracker.get_open_lsqbÕ   s&   € àÔ!×%Ò% t¤z°A¡~µu´zÐ&BÑCÔCÐCr9   )r8   )r   )%r4   r5   r6   r7   r=   ÚintÚ__annotations__r   Údictr?   r   r   ÚDepthÚNodeTyper   r@   ÚLeafIDÚPriorityrA   r	   ÚlistrB   r   rC   rD   rZ   r\   r^   r`   r   rk   rr   rV   rJ   rU   rK   r�   r8   r9   r:   r<   r<   :   sf  € € € € € € à,Ð,à€Eˆ3€N€N�NØ8=¸ÈdÐ8SÑ8SÔ8S€M�4˜˜e X˜oÔ.°Ð4Ô5ÐSÐSÑSØ).¨¸tÐ)DÑ)DÔ)D€J��V˜XÐ%Ô&ÐDÐDÑDØ#€Hˆh�tŒnÐ#Ð#Ñ#Ø"' %¸Ð"=Ñ"=Ô"=Ð�d˜3”iÐ=Ð=Ñ=Ø).¨¸tÐ)DÑ)DÔ)DÐ˜T #œYÐDÐDÑDØ!˜E°$Ð7Ñ7Ô7€Iˆt�DŒzÐ7Ð7Ñ7ð:5˜ð :5 $ð :5ð :5ð :5ð :5ðxK¨ð Kð Kð Kð Kð( 4ð (ð (ð (ð (ðNð N¨h°vÔ.>ð NÈð Nð Nð Nð Nð	Ið 	I°hð 	IÀsð 	Ið 	Ið 	Ið 	Ið°dð ¸tð ð ð ð ð¸Dð ÀTð ð ð ð ð°Tð ¸dð ð ð ð ð¸4ð ÀDð ð ð ð ðD˜x¨œ~ð Dð Dð Dð Dð Dð Dr9   r<   rE   rF   c                 ó>   — | j         t          j        k    rt          S dS )zñReturn the priority of the `leaf` delimiter, given a line break after it.

    The delimiter priorities returned here are from those delimiters that would
    cause a line break after themselves.

    Higher numbers are higher priority.
    r   )rH   r   ÚCOMMAr   )rE   s    r:   rT   rT   Ú   s   € ð „y•E”KÒÐÝÐàˆ1r9   NrA   c                 óô  — t          | t          t          z  ¬¦  «        rdS | j        t          j        k    rB| j        r;| j        j        t          j        t          j	        hvr|�|j        t          v rt          S | j        t          v r=| j        r6| j        j        t          j        t          j        hvrt          | j                 S | j        t           v rt"          S | j        t          j        k    r|�|j        t          j        k    rt&          S | j        t          j        t          j        hvrdS | j        dk    r+| j        r$| j        j        t          j        t          j        hv s| j        t          j        k    r1t3          | j        t6          ¦  «        r| j        j        dk    rt8          S | j        dk    r2| j        r+| j        j        t          j        t          j        hv rt8          S | j        dv r(| j        r!| j        j        t          j        k    rt@          S | j        dk    rt"          S | j        d	k    rT| j        rM| j        j        t          j!        t          j"        hv r)|� |j        t          j        k    r|j        d
k    st"          S | j        d
k    rJ| j        rC| j        j        t          j!        k    r)|� |j        t          j        k    r|j        dk    st"          S | j        tF          v r| j        rtH          S dS )zóReturn the priority of the `leaf` delimiter, given a line break before it.

    The delimiter priorities returned here are from those delimiters that would
    cause a line break before themselves.

    Higher numbers are higher priority.
    )Úwithinr   Nrt   ÚasyncÚif>   r�   ÚelseÚisry   Únot)%r   r   r   rH   r   ÚDOTÚparentr   Úimport_fromÚdotted_namer   r1   r   ÚfactorÚ	star_exprr/   r   r&   ÚSTRINGr$   ru   ÚASYNCrO   Úcomp_forÚold_comp_forÚ
isinstanceÚprev_siblingr   r   Úcomp_ifÚold_comp_ifÚtestr    Úcomp_opÚ
comparisonr   r"   )rE   rA   s     r:   rR   rR   è   sÅ  € õ ��oÕ0AÑAÐBÑBÔBð ð ˆqð 	Œ	•U”YÒÐØŒKð 	àŒKÔ¥TÔ%5µtÔ7GÐ$HÐHÐHØÐ ¤Õ2BÐ!BÐ!BåÐð 	Œ	•^Ð#Ð#ØŒKð 	$àŒKÔ¥T¤[µ$´.Ð$AÐAÐAå˜tœyÔ)Ð)à„y•KÐÐÝ"Ð"ð 	Œ	•U”\Ò!Ð!ØÐ ØŒM�Uœ\Ò)Ð)åÐà„y�œ¥U¤[Ð1Ð1Ð1Øˆqð 	Œ
�eÒÐØŒKð 	àŒKÔ¥¤µÔ0AÐ BÐBÐBØŒ9�œÒ#Ð#õ ˜4Ô,­dÑ3Ô3ð	*àÔ Ô&¨'Ò1Ð1å)Ð)ð 	Œ
�dÒÐØŒKð 	àŒKÔ¥¤­tÔ/?Ð @Ð@Ð@å%Ð%à„z�^Ð#Ð#¨¬Ð#¸¼Ô8HÍDÌIÒ8UÐ8UÝÐà„z�TÒÐÝ"Ð"ð 	Œ
�dÒÐØŒKð 	àŒKÔ¥¤­t¬Ð ?Ð?Ð?àÐ Ø”¥¤Ò+Ð+Ø” %Ò'Ð'õ #Ð"ð 	Œ
�eÒÐØŒKð 	àŒKÔ¥¤Ò,Ð,àÐ Ø”¥¤Ò+Ð+Ø” $Ò&Ð&õ #Ð"à„z•_Ð$Ð$¨¬Ð$ÝÐàˆ1r9   Únodec                 óö  — | j         t          j        k    rdS | j        d         }| j        d         }|j         t          j        k    r|j         t          j        k    sdS t          ¦   «         }| j        dd…         D ]Y}t          |t          ¦  «        r| 
                    |¦  «         Œ-|                     ¦   «         D ]}| 
                    |¦  «         ŒŒZ	 |                     ¦   «         S # t          $ r Y dS w xY w)zÔReturn maximum delimiter priority inside `node`.

    This is specific to atoms with contents contained in a pair of parentheses.
    If `node` isn't an atom or there are no enclosing parentheses, returns 0.
    r   rx   r0   )rH   r   ÚatomÚchildrenr   ÚLPARÚRPARr<   r�   r   rZ   Úleavesrk   Ú
ValueError)r¤   ÚfirstÚlastÚbtÚcrE   s         r:   Úmax_delimiter_priority_in_atomr°   H  s   € ð „y•D”IÒÐØˆqàŒM˜!Ô€EØŒ=˜Ô€DØŒJ�%œ*Ò$Ð$¨¬µe´jÒ)@Ð)@Øˆqå	Ñ	Ô	€BØŒ]˜1˜R˜4Ô ð ð ˆÝ�a�ÑÔð 	Ø�GŠG�A‰JŒJˆJˆJàŸš™
œ
ð ð �Ø—’˜‘”��ððØ×(Ò(Ñ*Ô*Ð*øåð ð ð Øˆqˆqðøøøs   ÃC* Ã*
C8Ã7C8rª   c                 ój  — 	 t          d„ t          | ¦  «        D ¦   «         ¦  «        }n# t          $ r t          ¦   «         cY S w xY wg }t          ¦   «         }t	          |t          | ¦  «        ¦  «        D ]¾}| |         }|j        t          v r'|                     t          |j                 |f¦  «         |j        t          v rq|rm|j        |d         d         k    rV|                     ¦   «         \  }}t	          ||dz   ¦  «        D ]*}|                     t          | |         ¦  «        ¦  «         Œ+Œ¼ nŒ¿|S )z«Return leaves that are inside matching brackets.

    The input `leaves` can have non-matching brackets at the head or tail parts.
    Matching brackets are included.
    c              3   ó<   K  — | ]\  }}|j         t          v ¯|V — Œd S rd   )rH   r   )re   ÚiÚls      r:   rh   z6get_leaves_inside_matching_brackets.<locals>.<genexpr>l  s<   è è € ð 
ð 
Ù�!�Q¨q¬vÕ9IÐ/IÐ/IˆAÐ/IÐ/IÐ/IÐ/Ið
ð 
r9   rx   r   r0   )ÚnextÚ	enumerateÚStopIterationÚsetÚrangeÚlenrH   r   rP   r   r   rL   ÚaddrS   )	rª   Ústart_indexÚbracket_stackÚidsr³   rE   Ú_ÚstartÚjs	            r:   Ú#get_leaves_inside_matching_bracketsrÂ   d  s_  € ðåð 
ð 
Ý# FÑ+Ô+ð
ñ 
ô 
ñ 
ô 
ˆˆøõ ð ð ð Ý‰uŒuˆˆˆðøøøà€MÝ
‰%Œ%€CÝ�;¥ F¡¤Ñ,Ô,ð 
ð 
ˆØ�aŒyˆØŒ9Õ(Ð(Ð(Ø× Ò ¥'¨$¬)Ô"4°aÐ!8Ñ9Ô9Ð9ØŒ9Õ(Ð(Ð(Øð  ¤¨m¸BÔ.?ÀÔ.BÒ!BÐ!BØ(×,Ò,Ñ.Ô.‘��5Ý˜u a¨!¡eÑ,Ô,ð +ð +�AØ—G’G�B˜v aœy™MœMÑ*Ô*Ð*Ð*ð+ð �ð )ð €Js   ‚&) ©AÁArd   )Br7   Údataclassesr   r   Útypingr   r   r   r   r	   r
   r   r   r   Úblack.nodesr   r   r   r   r   r   r   r   r   r   Úblib2to3.pgen2r   Úblib2to3.pytreer   r   ÚLNr‚   r…   r‡   r†   rˆ   r   rƒ   r   r    r"   r$   r&   ÚVBARÚ
CIRCUMFLEXÚAMPERÚ	LEFTSHIFTÚ
RIGHTSHIFTÚPLUSÚMINUSÚSTARÚSLASHÚDOUBLESLASHÚPERCENTÚATÚTILDEÚ
DOUBLESTARr/   r1   Ú	Exceptionr3   r<   rT   rR   r°   rÂ   r8   r9   r:   ú<module>rØ      sO  ðØ 2Ð 2Ð 2à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ Uðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð !Ð  Ð  Ð  Ð  Ð  Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &ð ˆ4�ˆ:Ô€Ø€Ø	€Ø€Ø€ð !#Ð ˜Ð "Ð "Ñ "Ø€�Ð Ð Ñ ØÐ �%Ð Ð Ñ Ø€�Ð Ð Ñ Ø€�Ð Ð Ñ ØÐ �UÐ Ð Ñ à	„J�Ø	Ô�aØ	„K�Ø	„O�QØ	Ô�aØ	„J�Ø	„K�Ø	„J�Ø	„K�Ø	Ô�qØ	„M�1Ø	„HˆaØ	„K�Ø	Ô�að€�ð ð ñ ð  €ˆeÐ Ð Ñ ðWð Wð Wð Wð W˜	ñ Wô Wð Wð ð\Dð \Dð \Dð \Dð \Dñ \Dô \Dñ „ð\Dð~ 4ð ¨Hð ð ð ð ð]ð ] Dð ]°H¸T´Nð ]Èhð ]ð ]ð ]ð ]ð@¨ð °ð ð ð ð ð8°¸´ð À3ÀvÄ;ð ð ð ð ð ð r9   