§
    øyIfo>  ã            	       ó   — U d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	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 d dlmZ d dlmZmZ eeef         Zh d	£Zee d
<   ddhZ!ee d<   h d£Z"ee d<   dZ#dZ$dZ%e G d„ d¦  «        ¦   «         Z&dedee         fd„Z' ed¬¦  «        de(de)de	e&         fd„¦   «         Z*dede+ddfd„Z,de(de(fd „Z-d!ed"ed#eee+e+f                  ddfd$„Z.d!ed"ed#eee+e+f                  de)fd%„Z/ded&e&d"edee         fd'„Z0ded&e&dee         fd(„Z1d)ede)fd*„Z2d)ede)fd+„Z3d,e	e         de)fd-„Z4d.e(d"ede)fd/„Z5dS )0é    N)Ú	dataclass)Ú	lru_cache)Ú
CollectionÚFinalÚIteratorÚListÚOptionalÚTupleÚUnion)ÚModeÚPreview)ÚCLOSING_BRACKETSÚSTANDALONE_COMMENTÚ
WHITESPACEÚcontainer_ofÚfirst_leaf_ofÚmake_simple_prefixÚpreceding_leafÚsyms)Útoken)ÚLeafÚNode>   ú	# fmt:offú
# fmt: offú# yapf: disableÚFMT_OFFz# fmt: skipz
# fmt:skipÚFMT_SKIP>   ú# fmt:onú	# fmt: onú# yapf: enableÚFMT_ONz !:#'z# ú;c                   óP   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   dS )	ÚProtoCommentaž  Describes a piece of syntax that is a comment.

    It's not a :class:`blib2to3.pytree.Leaf` so that:

    * it can be cached (`Leaf` objects should not be reused more than once as
      they store their lineno, column, prefix, and parent information);
    * `newlines` and `consumed` fields are kept separate from the `value`. This
      simplifies handling of special marker comments like ``# fmt: off/on``.
    ÚtypeÚvalueÚnewlinesÚconsumedÚ	form_feedÚleading_whitespaceN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__ÚstrÚbool© ó    úB/var/www/piapp/venv/lib/python3.11/site-packages/black/comments.pyr$   r$       sW   € € € € € € ðð ð €I€I�IØ€J€J�JØ€M€M�MØ€M€M�MØ€O€O�OØÐÐÑÐÐr4   r$   ÚleafÚreturnc              #   ó  K  — d}t          | j        | j        t          j        k    ¬¦  «        D ]A}|j        }t          |j        |j        ¦  «        }t          |j        |j
        |¬¦  «        V — ŒBt          | |¦  «         dS )a—  Clean the prefix of the `leaf` and generate comments from it, if any.

    Comments in lib2to3 are shoved into the whitespace prefix.  This happens
    in `pgen2/driver.py:Driver.parse_tokens()`.  This was a brilliant implementation
    move because it does away with modifying the grammar to include all the
    possible places in which comments can be placed.

    The sad consequence for us though is that comments don't "belong" anywhere.
    This is why this function generates simple parentless Leaf objects for
    comments.  We simply don't know what the correct parent should be.

    No matter though, we can live without this.  We really only need to
    differentiate between inline and standalone comments.  The latter don't
    share the line with any code.

    Inline comments are emitted as regular token.COMMENT leaves.  Standalone
    are emitted with a fake STANDALONE_COMMENT token identifier.
    r   ©Úis_endmarker)ÚprefixN)Úlist_commentsr;   r%   r   Ú	ENDMARKERr(   r   r'   r)   r   r&   Únormalize_trailing_prefix)r6   Útotal_consumedÚpcr;   s       r5   Úgenerate_commentsrA   4   s†   è è € ð& €NÝ˜DœK°d´iÅ5Ä?Ò6RÐSÑSÔSð 5ð 5ˆØœˆÝ# B¤K°´Ñ>Ô>ˆÝ�2”7˜BœH¨VÐ4Ñ4Ô4Ð4Ð4Ð4Ð4Ý˜d NÑ3Ô3Ð3Ð3Ð3r4   i   )Úmaxsizer;   r:   c                ó,  — g }| rd| vr|S d}d}d}d}t          t          j        d| ¦  «        ¦  «        D ]Þ\  }}|t          |¦  «        dz   z  }t          j        d|¦  «        }	|	sJ ‚|	                     ¦   «         \  }
}|s|dz  }d|v rd}|                     d¦  «        s|                     d	¦  «        r|dz  }Œ‡||k    r|st          j	        }nt          }t          |¦  «        }|                     t          ||||||
¬
¦  «        ¦  «         d}d}Œß|S )zNReturn a list of :class:`ProtoComment` objects parsed from the given `prefix`.ú#r   Fz?
é   z^(\s*)(\S.*|)$úTú\)r%   r&   r'   r(   r)   r*   )Ú	enumerateÚreÚsplitÚlenÚmatchÚgroupsÚ
startswithÚendswithr   ÚCOMMENTr   Úmake_commentÚappendr$   )r;   r:   Úresultr(   ÚnlinesÚignored_linesr)   ÚindexÚ	full_linerL   Ú
whitespaceÚlineÚcomment_typeÚcomments                 r5   r<   r<   O   sn  € ð "$€FØð �S Ð&Ð&Øˆà€HØ€FØ€MØ€IÝ%¥b¤h¨w¸Ñ&?Ô&?Ñ@Ô@ð !ð !ÑˆˆyØ•C˜	‘N”N QÑ&Ñ&ˆÝ”Ð*¨IÑ6Ô6ˆØˆˆˆØ Ÿ<š<™>œ>Ñˆ
�DØð 	!Ø�a‰KˆFØ�yÐ Ð Ø �	Ø�Š˜sÑ#Ô#ð 	ð �}Š}˜TÑ"Ô"ð #Ø Ñ"�Øà�MÒ!Ð!¨,Ð!Ý œ=ˆLˆLå-ˆLÝ˜tÑ$Ô$ˆØ�ŠÝØ!ØØØ!Ø#Ø#-ðñ ô ñ		
ô 		
ð 		
ð ˆ	ØˆˆØ€Mr4   r?   c                 óÄ   — | j         |d…         }d|vrE|                     d¦  «        }d|v o|                     d¦  «        }t          ||¦  «        | _         dS d| _         dS )z˜Normalize the prefix that's left over after generating comments.

    Note: don't use backslashes for formatting or you'll lose your voting rights.
    NrG   ú
rF   Ú )r;   ÚcountrO   r   )r6   r?   Ú	remainderÚnl_countr)   s        r5   r>   r>      sn   € ð
 ”˜N˜O˜OÔ,€IØ�9ÐÐØ—?’? 4Ñ(Ô(ˆØ˜IÐ%ÐB¨)×*<Ò*<¸TÑ*BÔ*Bˆ	Ý(¨°9Ñ=Ô=ˆŒØˆà€D„K€K€Kr4   Úcontentc                 ó  — |                       ¦   «         } | sdS | d         dk    r
| dd…         } d}| r@| d         |k    r4|                      ¦   «                              d¦  «        sd| dd…         z   } | r| d         t          vrd| z   } d| z   S )a  Return a consistently formatted comment from the given `content` string.

    All comments (except for "##", "#!", "#:", '#'") should have a single
    space between the hash sign and the content.

    If `content` didn't start with a hash sign, one is provided.
    rD   r   rE   Nõ   Â ztype:ú )ÚrstripÚlstriprN   ÚCOMMENT_EXCEPTIONS)rb   ÚNON_BREAKING_SPACEs     r5   rQ   rQ   Ž   s¸   € ð �nŠnÑÔ€GØð Øˆsàˆq„z�SÒÐØ˜!˜"˜"”+ˆØÐàð$à�AŒJÐ,Ò,Ð,Ø—’Ñ Ô ×+Ò+¨GÑ4Ô4ð -ð ˜   œÑ#ˆØð  �7˜1”:Õ%7Ð7Ð7Ø˜‘-ˆØ�‰=Ðr4   ÚnodeÚmodeÚlinesc                 ó8   — d}|rt          | ||¦  «        }|°dS dS )zJConvert content between `# fmt: off`/`# fmt: on` into standalone comments.TN)Úconvert_one_fmt_off_pair)rj   rk   rl   Ú	try_agains       r5   Únormalize_fmt_offrp   ¨   sF   € ð €IØ
ð @Ý,¨T°4¸Ñ?Ô?ˆ	ð ð @ð @ð @ð @ð @r4   c                 óº  ‡— |                       ¦   «         D �]Ã}d}t          |j        d¬¦  «        D �]¦}|j        t          v pt          |j        |¦  «        }|s|j        }Œ0|rb|j        t          k    rRt          |¦  «        }|rA|j        t          v r|j        t          vrŒpt          |j        |¦  «        r|j        t          v rŒ”t          t          |||¦  «        ¦  «        }|sŒµ|d         }	|	j        }
|	j        }|j        t          v r||j        d…         |	_        t          |j        |¦  «        r
d|	_        |}n|d|…         d|j        z  z   }d                     d„ |D ¦   «         ¦  «        }|j        |j        z
  Š|j        t          v r�d}t#          |¦  «        dk    rZt%          ˆfd„|D ¦   «         ¦  «        s?|                     |j        ¦  «        d         }d|v r|                     d¦  «        d	         }||z  }|j        dz   |z   }t          |j        |¦  «        r"|t(          j        |v r|j        nd
|j        z   z  }|                     d¦  «        r
|dd	…         }d}|D ]}|                     ¦   «         }|€|}Œ|
€
J d¦   «         ‚|€
J d¦   «         ‚|
                     |t5          t          ||t7          |	¦  «        ¬¦  «        ¦  «           dS �ŒÅdS )zConvert content of a single `# fmt: off`/`# fmt: on` into a standalone comment.

    Returns True if a pair was converted.
    r   Fr9   Nr^   r]   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N)r1   )Ú.0Úns     r5   ú	<genexpr>z+convert_one_fmt_off_pair.<locals>.<genexpr>ß   s(   è è € Ð"AÐ"A¨a¥3 q¡6¤6Ð"AÐ"AÐ"AÐ"AÐ"AÐ"Ar4   c              3   óP   •K  — | ] }|d          ‰cxk    o|d         k    nc V — Œ!dS )r   rE   Nr3   )rt   rY   Úcomment_linenos     €r5   rv   z+convert_one_fmt_off_pair.<locals>.<genexpr>ã   sX   øè è € ð .ð .Ø=A�D˜”G˜~Ð8Ð8Ò8Ð8°°a´Ò8Ð8Ð8Ð8ð.ð .ð .ð .ð .ð .r4   éÿÿÿÿz  z(INTERNAL ERROR: fmt: on/off handling (1)z(INTERNAL ERROR: fmt: on/off handling (2))r;   Úfmt_pass_converted_first_leafT)Úleavesr<   r;   r&   r   Ú_contains_fmt_skip_commentr(   r%   r   r   r   ÚlistÚgenerate_ignored_nodesÚparentr'   ÚjoinÚlinenorK   ÚanyrJ   r   Ú no_normalize_fmt_skip_whitespacer*   rO   ÚremoveÚinsert_childr   r   )rj   rk   rl   r6   Úprevious_consumedr[   Úshould_pass_fmtÚprevÚignored_nodesÚfirstr   r;   Ústandalone_comment_prefixÚhidden_valueÚfmt_off_prefixÚ	first_idxÚignoredrV   rx   s                     @r5   rn   rn   ±   s�  ø€ ð —’‘”ð Nñ NˆØÐÝ$ T¤[¸uÐEÑEÔEð L	ñ L	ˆGØ%œm­wÐ6ð Õ:TØ”˜tñ;ô ;ˆOð #ð Ø$+Ô$4Ð!Øð ð 	! 7¤<Õ3EÒ#EÐ#EÝ% dÑ+Ô+�Øð !Ø”}­Ð/Ð/°D´IÅZÐ4OÐ4OØ å2°7´=À$ÑGÔGð!à œI­Ð3Ð3à å Õ!7¸¸gÀtÑ!LÔ!LÑMÔMˆMØ ð Øà! !Ô$ˆEØ”\ˆFØ”\ˆFØŒ}¥Ð'Ð'Ø% gÔ&6Ð&8Ð&8Ô9�”Ý)¨'¬-¸Ñ>Ô>ð Ø!�”Ø,2Ð)Ð)ð Ð-Ð-Ð-Ô.°¸Ô8HÑ1HÑHð *ð Ÿ7š7Ð"AÐ"A°=Ð"AÑ"AÔ"AÑAÔAˆLØ!œ[¨7Ô+;Ñ;ˆNØŒ}¥Ð'Ð'Ø!#�Ý�u‘:”: ’>�>­#ð .ð .ð .ð .ØEJð.ñ .ô .ñ +ô +�>ð &,§\¢\°'´-Ñ%@Ô%@ÀÔ%C�NØ˜~Ð-Ð-Ø)7×)=Ò)=¸dÑ)CÔ)CÀBÔ)G˜Ø)¨^Ñ;Ð)Ø&œ}¨tÑ3°lÑB�Ý)¨'¬-¸Ñ>Ô>ð "ØåÔ?À4ÐGÐGð Ô.Ð.àØ”Mñ	!"ñ "�ð
 ×$Ò$ TÑ*Ô*ð 1ð  ,¨C¨R¨CÔ0�Ø'+ˆIØ(ð &ð &�ØŸšÑ(Ô(�ØÐ$Ø %�IøØÐ%Ð%Ð'QÑ%Ô%Ð%ØÐ(Ð(Ð*TÑ(Ô(Ð(Ø×ÒØÝÝ&Ø Ø4Ý2?ÀÑ2FÔ2Fð	ñ ô ñô ð ð �4�4�4ñYL	ð\ ˆ5r4   r[   c              #   óö  K  — t          |j        |¦  «        rt          | |¦  «        E d{V —† dS t          | ¦  «        }|��3|j        t
          j        k    �rt          |¦  «        rdS t          |¦  «        rºt          |j
        ¦  «        D ]¤\  }}t          |t          ¦  «        r$t          |¦  «        r|j        t          v r|V —  dS |j        t
          j        k    r;|t          |j
        ¦  «        dz
  k     r t          |j
        |dz            ¦  «        r dS t          |¦  «        r dS |V — Œ¥n)|j        t
          j        k    r	|j        €dS |V — |j        }|�|j        t
          j        k    �°dS dS dS dS )z¡Starting from the container of `leaf`, generate all leaves until `# fmt: on`.

    If comment is skip, returns leaf only.
    Stops at the end of the block.
    NrE   )r|   r&   Ú%_generate_ignored_nodes_from_fmt_skipr   r%   r   r=   Ú	is_fmt_onÚchildren_contains_fmt_onrH   ÚchildrenÚ
isinstancer   r   ÚINDENTrK   ÚDEDENTÚnext_sibling)r6   r[   rk   Ú	containerrV   Úchilds         r5   r~   r~     sÀ  è è € õ " '¤-°Ñ6Ô6ð Ý8¸¸wÑGÔGÐGÐGÐGÐGÐGÐGÐGØˆÝ*¨4Ñ0Ô0€IØ
Ñ
 I¤Nµe´oÒ$EÑ$EÝ�YÑÔð 	ØˆFõ $ IÑ.Ô.ð 	/Ý )¨)Ô*<Ñ =Ô =ð ð ‘��uÝ˜e¥TÑ*Ô*ð ­y¸Ñ/?Ô/?ð Ø”zÕ%5Ð5Ð5ð
 $˜˜˜Ø�F�Fà”J¥%¤,Ò.Ð.Ø¥ IÔ$6Ñ 7Ô 7¸!Ñ ;Ò;Ð;Ý0°Ô1CÀEÈAÁIÔ1NÑOÔOð <ð
 �F�FÝ+¨EÑ2Ô2ð Ø�F�FØ����ð'ð* Œ~¥¤Ò-Ð-°)Ô2HÐ2Pð �ØˆOˆOˆOØ!Ô.ˆIðA Ð
 I¤Nµe´oÒ$EÑ$EÐ$EÐ$EÐ
Ð
Ð$EÐ$EÐ
Ð
r4   c              #   óú  K  — | j         }| j        }t          | j        d¬¦  «        }|r|j        |d         j        k    rdS |�Qd| _        |g}d|j        vr4|j         �-|j         }|                     d|¦  «         d|j        vr|j         ­-|E d{V —† dS |�á|j        t          j        k    rÎ| j        t          j
        k    r»d| _        g }|j         }|�I|j        t          j        k    r4|                     d|¦  «         |j         }|�|j        t          j        k    °4|j        }|�<|j         �5|j         j        t          j        k    r|                     d|j         ¦  «         t          |¦  «        E d{V —† dS dS dS dS )zLGenerate all leaves that should be ignored by the `# fmt: skip` from `leaf`.Fr9   r   Nr^   r]   )Úprev_siblingr   r<   r;   r&   Úinsertr%   r   Úsuiter   ÚNEWLINEÚASYNCÚiter)	r6   r[   rœ   r   ÚcommentsÚsiblingsr‰   Úparent_siblingÚgrandparents	            r5   r‘   r‘   :  sË  è è € ð Ô$€LØŒ[€Fõ ˜Tœ[°uÐ=Ñ=Ô=€HØð �w”}¨°¬Ô(9Ò9Ð9ØˆØÐØˆŒØ �>ˆØ˜,Ô-Ð-Ð-°,Ô2KÐ2WØ'Ô4ˆLØ�OŠO˜A˜|Ñ,Ô,Ð,ð ˜,Ô-Ð-Ð-°,Ô2KÐ2Wð ÐÐÐÐÐÐÐÐÐàÐ˜vœ{­d¬jÒ8Ð8¸T¼YÍ%Ì-Ò=WÐ=Wð
 ˆŒØ"$ˆØÔ,ˆØÐ(¨^Ô-@ÅDÄJÒ-NÐ-NØ× Ò   NÑ3Ô3Ð3Ø+Ô8ˆNð Ð(¨^Ô-@ÅDÄJÒ-NÐ-Nð
 ”mˆàÐ#ØÔ(Ð4ØÔ(Ô-µ´Ò<Ð<à× Ò   KÔ$<Ñ=Ô=Ð=Ý˜Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð) 	ÐÐ8Ð8Ð=WÐ=Wr4   r™   c                 ó~   — d}t          | j        d¬¦  «        D ]#}|j        t          v rd}Œ|j        t          v rd}Œ$|S )zŠDetermine whether formatting is switched on within a container.
    Determined by whether the last `# fmt:` comment is `on` or `off`.
    Fr9   T)r<   r;   r&   r!   r   )r™   Úfmt_onr[   s      r5   r’   r’   d  sT   € ð €FÝ  Ô!1ÀÐFÑFÔFð ð ˆØŒ=�FÐ"Ð"ØˆFˆFØŒ]�gÐ%Ð%ØˆFøØ€Mr4   c                 ó`   — | j         D ]%}t          |¦  «        }|�t          |¦  «        r dS Œ&dS )z2Determine if children have formatting switched on.NTF)r”   r   r’   )r™   rš   r6   s      r5   r“   r“   q  s?   € àÔ#ð ð ˆÝ˜UÑ#Ô#ˆØÐ¥	¨$¡¤ÐØ�4�4øàˆ5r4   Úcomment_listc                 óJ   — | D ]}|j                              d¦  «        r dS Œ dS )zÁ
    Returns:
        True iff one of the comments in @comment_list is a pragma used by one
        of the more common static analysis tools for python (e.g. mypy, flake8,
        pylint).
    )z# type:z# noqaz	# pylint:TF)r&   rN   )r©   r[   s     r5   Úcontains_pragma_commentr«   {  s?   € ð  ð ð ˆØŒ=×#Ò#Ð$FÑGÔGð 	Ø�4�4ð	ð ˆ5r4   Úcomment_linec                 ó
  — | gd„ |                       t          ¦  «        dd…         D ¦   «         ¢d„ |                      t          ¦  «                              t          ¦  «        D ¦   «         ¢}t	          d„ |D ¦   «         ¦  «        S )aQ  
    Checks if the given comment contains FMT_SKIP alone or paired with other comments.
    Matching styles:
      # fmt:skip                           <-- single comment
      # noqa:XXX # fmt:skip # a nice line  <-- multiple comments (Preview)
      # pylint:XXX; fmt:skip               <-- list of comments (; separated, Preview)
    c                 óF   — g | ]}t           |                     ¦   «         z   ‘ŒS r3   ©Ú_COMMENT_PREFIXÚstrip©rt   r[   s     r5   ú
<listcomp>z._contains_fmt_skip_comment.<locals>.<listcomp>“  s5   € ð 

ð 

ð 

àõ ˜gŸmšm™oœoÑ-ð

ð 

ð 

r4   rE   Nc                 óF   — g | ]}t           |                     ¦   «         z   ‘ŒS r3   r¯   r²   s     r5   r³   z._contains_fmt_skip_comment.<locals>.<listcomp>—  s5   € ð 

ð 

ð 

àõ ˜gŸmšm™oœoÑ-ð

ð 

ð 

r4   c              3   ó(   K  — | ]}|t           v V — Œd S rs   )r   r²   s     r5   rv   z-_contains_fmt_skip_comment.<locals>.<genexpr>Ÿ  s'   è è € ÐJÐJ wˆw�(Ð"ÐJÐJÐJÐJÐJÐJr4   )rJ   r°   r±   Ú_COMMENT_LIST_SEPARATORr‚   )r¬   rk   Úsemantic_comment_blockss      r5   r|   r|   ‰  s©   € ð 	ðð

ð 

à'×-Ò-­oÑ>Ô>¸q¸r¸rÔBð

ñ 

ô 

ðð

ð 

à'×-Ò-­oÑ>Ô>×DÒDÝ'ñô ð

ñ 

ô 

ðÐõ ÐJÐJÐ2IÐJÑJÔJÑJÔJÐJr4   )6rI   Údataclassesr   Ú	functoolsr   Útypingr   r   r   r   r	   r
   r   Ú
black.moder   r   Úblack.nodesr   r   r   r   r   r   r   r   Úblib2to3.pgen2r   Úblib2to3.pytreer   r   ÚLNr   r0   r   r!   rh   r°   r¶   r$   rA   r1   r2   r<   r/   r>   rQ   rp   rn   r~   r‘   r’   r“   r«   r|   r3   r4   r5   ú<module>rÀ      s  ðØ 	€	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ Là $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð !Ð  Ð  Ð  Ð  Ð  Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &ð ˆ4�ˆ:Ô€à?Ð?Ð?€ˆÐ ?Ð ?Ñ ?Ø  ,Ð/€ˆ%Ð /Ð /Ñ /Ø;Ð;Ð;€ˆÐ ;Ð ;Ñ ;àÐ Ø€ØÐ ð ðð ð ð ð ñ ô ñ „ðð&4˜Bð 4 8¨D¤>ð 4ð 4ð 4ð 4ð6 €�4ÐÑÔð,˜#ð ,°ð ,¸¸lÔ9Kð ,ð ,ð ,ñ Ôð,ð^ Bð ¸ð Àð ð ð ð ð˜#ð  #ð ð ð ð ð4@Ø
ð@Øð@Ø#-¨e°C¸°H¬oÔ#>ð@à	ð@ð @ð @ð @ðWØ
ðWØðWØ#-¨e°C¸°H¬oÔ#>ðWà	ðWð Wð Wð Wðt,/Ø
ð,/Ø%ð,/Ø-1ð,/àˆb„\ð,/ð ,/ð ,/ð ,/ð^''Ø
ð''Ø%ð''àˆb„\ð''ð ''ð ''ð ''ðT
˜ð 
 ð 
ð 
ð 
ð 
ð¨ð ¨tð ð ð ð ð¨$¨t¬*ð ¸ð ð ð ð ðK¨Sð K¸ð KÀð Kð Kð Kð Kð Kð Kr4   