ó
    áÅŸgÊ=  ã            	       óX  • % S SK r S SKJrJr  S SKJr  S SKJr  S SKJ	r	J
r
Jr  S SKJr  S SK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Jr  \\\4   r1 S
kr\	\S'   SS1r\	\S'   1 Skr \	\S'   Sr!Sr"Sr#\ " S S5      5       r$S\S\\   4S jr%\" SS9S\&S\'S\(\$   4S j5       r)S\S\*SS4S jr+S \&S\&4S! jr,S"\S#\S$\\-\*\*4      SS4S% jr.S"\S#\S$\\-\*\*4      S\'4S& jr/S\S'\$S#\S\\   4S( jr0S\S'\$S\\   4S) jr1S*\S\'4S+ jr2S*\S\'4S, jr3S-\(\   S\'4S. jr4S/\&S#\S\'4S0 jr5g)1é    N)Ú
CollectionÚIterator)Ú	dataclass)Ú	lru_cache)ÚFinalÚOptionalÚUnion)ÚMode)Ú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                   óV   • \ rS rSr% Sr\\S'   \\S'   \\S'   \\S'   \\S'   \\S'   S	r	g
)ÚProtoCommenté!   a†  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_whitespace© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚintÚ__annotations__ÚstrÚboolÚ__static_attributes__r)   ó    ÚO/var/www/blue/EV-Temp_rev04/venv/lib/python3.13/site-packages/black/comments.pyr!   r!   !   s(   ‡ ñð ƒIØƒJØƒMØƒMØƒOØÖr4   r!   ÚleafÚreturnc              #   ó,  #   • Sn[        U R                  U R                  [        R                  :H  S9 HP  nUR
                  n[        UR                  UR                  5      n[        UR                  UR                  US9v •  MR     [        X5        g7f)ac  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   5   sm   é € ð& €NÜ˜DŸK™K°d·i±iÄ5Ç?Á?Ñ6RÔSˆØŸ™ˆÜ# B§K¡K°·±Ó>ˆÜ�2—7‘7˜BŸH™H¨VÑ4Ô4ñ Tô ˜dÕ3ùs   ‚BBi   )Úmaxsizer;   r:   c                ó<  • / nU (       a  SU ;  a  U$ SnSnSnSn[        [        R                  " SU 5      5       HÞ  u  pxU[        U5      S-   -  n[        R                  " SU5      n	U	(       d   eU	R                  5       u  p«U(       d  US-  nSU;   a  SnUR                  S5      (       d  UR                  S	5      (       a  US-  nM�  Xu:X  a  U(       d  [        R                  nO[        n[        U5      nUR                  [        UUUUUU
S
95        SnSnMà     U$ )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<   P   s$  € ð "$€FÞ�S Ó&Øˆà€HØ€FØ€MØ€IÜ%¤b§h¢h¨w¸Ó&?Ö@ÑˆØ”C˜	“N QÑ&Ñ&ˆÜ—’Ð*¨IÓ6ˆÞˆˆuØ Ÿ<™<›>Ñˆ
ÞØ�a‰KˆFØ�yÓ Ø �	Ø�‰˜s×#Ñ#ð �}‰}˜T×"Ñ"Ø Ñ"�ÙàÓ!®,Ü Ÿ=™=‰Lä-ˆLÜ˜tÓ$ˆØ�‰ÜØ!ØØØ!Ø#Ø#-ñô		
ð ˆ	ØŠñC AðD €Mr4   r?   c                 óº   • U R                   US nSU;  a?  UR                  S5      nSU;   =(       a    UR                  S5      n[        X45      U l         gSU l         g)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>   €   sZ   € ð
 —‘˜N˜OÐ,€IØ�9ÓØ—?‘? 4Ó(ˆØ˜IÑ%×B¨)×*<Ñ*<¸TÓ*Bˆ	Ü(¨Ó=ˆŒØà€D…Kr4   Úcontentc                 ó  • U R                  5       n U (       d  gU S   S:X  a  U SS n SnU (       a5  U S   U:X  a,  U R                  5       R                  S5      (       d  SU SS -   n U (       a  U S   [        ;  a  SU -   n SU -   $ )zû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ÞØàˆq�z�SÓØ˜!˜"�+ˆØÐæØ�A‰JÐ,Ó,Ø—‘Ó ×+Ñ+¨G×4Ñ4à˜  ˜Ñ#ˆÞ�7˜1‘:Ô%7Ó7Ø˜‘-ˆØ�‰=Ðr4   ÚnodeÚmodeÚlinesc                 óB   • SnU(       a  [        XU5      nU(       a  M  gg)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   ©   s   € ð €IÞ
Ü,¨T¸Ó?ˆ	÷ Š)r4   c                 óº  ^• U R                  5        GHÅ  nSn[        UR                  SS9 GH¦  nUR                  [        ;   n[        UR                  U5      nU(       d  U(       a  U(       a"  UR                  [        ;   a  UR                  nMd  UR                  [        :w  aL  [        U5      nU(       a:  U(       a  UR                  [        ;  a  M§  U(       a  UR                  [        ;   a  MÄ  [        [        X5U5      5      n	U	(       d  Mâ  U	S   n
U
R                  nU
R                  nUR                  [        ;   a  XÅR                  S U
l        U(       a
  SU
l        UnOUSU SUR                  -  -   nSR!                  S U	 5       5      nUR"                  UR                  -
  mUR                  [        ;   ay  Sn[%        U5      S:”  aR  ['        U4S jU 5       5      (       d8  UR)                  UR                  5      S   nSU;   a  UR)                  S5      S	   nXß-  nUR                  S-   U-   nU(       a  XåR*                  UR                  -   -  nUR-                  S5      (       a  USS	 nSnU	 H  nUR/                  5       nUb  M  UnM     Uc   S
5       eUc   S5       eUR1                  U[3        [        UU[5        U
5      S95            g   GMÈ     g)zwConvert 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   ó6   #   • U H  n[        U5      v •  M     g 7f©N)r1   )Ú.0Úns     r5   Ú	<genexpr>Ú+convert_one_fmt_off_pair.<locals>.<genexpr>à   s   é € Ð"A±=¨a¤3 q§6 6²=ùs   ‚c              3   óV   >#   • U H  oS    Ts=:*  =(       a    US   :*  Os  v •  M!     g7f)r   rE   Nr)   )rt   rY   Úcomment_linenos     €r5   rv   rw   ä   s*   øé € ð .ÙEJ¸T˜‘G˜~×8Ó8°°a±×8Ñ8ÂUùs   ƒ&)éÿÿÿÿ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   r   ÚlistÚgenerate_ignored_nodesÚparentr%   ÚjoinÚlinenorK   ÚanyrJ   r(   rO   ÚremoveÚinsert_childr   r   )rj   rk   rl   r6   Úprevious_consumedr[   Ú
is_fmt_offÚis_fmt_skipÚprevÚignored_nodesÚfirstr€   r;   Ústandalone_comment_prefixÚhidden_valueÚfmt_off_prefixÚ	first_idxÚignoredrV   ry   s                      @r5   rn   rn   ²   s£  ø€ ð —‘—ˆØÐÜ$ T§[¡[¸uÕEˆGØ Ÿ™¬'Ñ1ˆJÜ4°W·]±]ÀDÓIˆKÞ¦{æØ—I‘IÔ!1Ó1à$+×$4Ñ$4Ð!Ùð �|‰|Ô1Ó1Ü% dÓ+�ÞÞ! d§i¡i´zÓ&AÙ Þ" t§y¡y´JÓ'>Ù ä Ô!7¸ÀtÓ!LÓMˆMÞ Ùà! !Ñ$ˆEØ—\‘\ˆFØ—\‘\ˆFØ�}‰}¤Ó'Ø%×&6Ñ&6Ð&8Ð9�”ÞØ!�”Ø,2Ñ)ð Ð-Ð-Ð.°¸×8HÑ8HÑ1HÑHð *ð Ÿ7™7Ñ"A±=Ó"AÓAˆLØ!Ÿ[™[¨7×+;Ñ+;Ñ;ˆNØ�}‰}¤Ó'Ø!#�Ü�u“: “>¬#ô .ÙEJó.÷ +ñ +ð &,§\¡\°'·-±-Ó%@ÀÑ%C�NØ˜~Ó-Ø)7×)=Ñ)=¸dÓ)CÀBÑ)G˜Ø)Ñ;Ð)Ø&Ÿ}™}¨tÑ3°lÑB�ÞØ× :Ñ :¸W¿]¹]Ñ JÑJ�Ø×$Ñ$ T×*Ñ*ð  ,¨C¨RÐ0�Ø'+ˆIÛ(�ØŸ™Ó(�ØÓ$Ø %’Iñ )ð Ñ%ÐQÐ'QÓQÐ%ØÑ(ÐTÐ*TÓTÐ(Ø×ÑØÜÜ&Ø Ø4Ü2?ÀÓ2Fñ	ôò ôQ Fñ ðX r4   r[   c              #   ót  #   • [        UR                  U5      (       a  [        X5       Sh  v•N   g[        U 5      nUGbs  UR                  [
        R                  :w  GaS  [        U5      (       a  g[        U5      (       aÐ  [        UR                  5       H¶  u  pE[        U[        5      (       a*  [        U5      (       a  UR                  [        ;   a  Uv •    gUR                  [
        R                  :X  a>  U[        UR                  5      S-
  :  a"  [        UR                  US-      5      (       a    g[        U5      (       a    gUv •  M¸     O<UR                  [
        R                   :X  a  UR"                  c  gUv •  UR"                  nUb"  UR                  [
        R                  :w  a  GMQ  gggg GN‰7f)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¸ÓG×GÐGØÜ*¨4Ó0€IØ
Ò
 I§N¡N´e·o±oÔ$EÜ�Y×ÑØô $ I×.Ñ.Ü )¨)×*<Ñ*<Ö =‘�Ü˜e¤T×*Ñ*¬y¸×/?Ñ/?Ø—z‘zÔ%5Ó5ð
 $šÙà—J‘J¤%§,¡,Ó.Ø¤ I×$6Ñ$6Ó 7¸!Ñ ;Ó;Ü0°×1CÑ1CÀEÈAÁIÑ1N×OÑOñ Ü+¨E×2Ñ2ÙØ”ò' !>ð* �~‰~¤§¡Ó-°)×2HÑ2HÑ2Pð ØŠOØ!×.Ñ.ˆIðA Ñ
 I§N¡N´e·o±o×$EÐ
Ð$EÐ
ò 	Hùs   ‚*F8¬F5­FF8Æ1F8c              #   óø  #   • U R                   nU R                  n[        U R                  SS9nU(       a  UR                  US   R                  :w  a  gUbo  SU l        U/nSUR                  ;  aJ  UR                   b=  UR                   nUR                  SU5        SUR                  ;  a  UR                   b  M=  U Sh  v•N   gUGb*  UR                  [        R                  :X  Ga
  U R                  [        R                  :X  aë  SU l        / nUR                   nUb_  UR                  [        R                  :w  aA  UR                  SU5        UR                   nUb   UR                  [        R                  :w  a  MA  UR                  nUbQ  UR                   bD  UR                   R                  [        R                  :X  a  UR                  SUR                   5        [        U5       Sh  v•N   gggg GN5 N7f)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’   7  s«  é € ð ×$Ñ$€LØ�[‰[€Fô ˜TŸ[™[°uÑ=€HÞ�w—}‘}¨°©×(9Ñ(9Ó9ØØÑØˆŒØ �>ˆØ˜,×-Ñ-Ó-°,×2KÑ2KÑ2WØ'×4Ñ4ˆLØ�O‰O˜A˜|Ô,ð ˜,×-Ñ-Ó-°,×2KÑ2KÓ2Wð ×ÑàÒ˜vŸ{™{¬d¯j©jÔ8¸T¿Y¹YÌ%Ï-É-Ó=Wð
 ˆŒØ"$ˆØ×,Ñ,ˆØÑ(¨^×-@Ñ-@ÄDÇJÁJÓ-NØ× Ñ   NÔ3Ø+×8Ñ8ˆNð Ñ(¨^×-@Ñ-@ÄDÇJÁJÕ-Nð
 —m‘mˆàÑ#Ø×(Ñ(Ñ4Ø×(Ñ(×-Ñ-´·±Ó<à× Ñ   K×$<Ñ$<Ô=Ü˜Ó&×&Ñ&ð) >XÐ8Ðò 	ñ, 	'ùs2   ‚B7G:Â;G:Ã G5ÃB;G:Å>A.G:Ç,G8Ç-	G:Ç8G:rš   c                 ó    • Sn[        U R                  SS9 H3  nUR                  [        ;   a  SnM  UR                  [        ;   d  M1  SnM5     U$ )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“   a  sJ   € ð €FÜ  ×!1Ñ!1ÀÔFˆØ�=‰=œFÓ"ØŠFØ�]‰]œgÕ%ØŠFñ	 Gð
 €Mr4   c                 ón   • U R                    H%  n[        U5      nUc  M  [        U5      (       d  M%    g   g)z2Determine if children have formatting switched on.TF)r•   r   r“   )rš   r›   r6   s      r5   r”   r”   n  s2   € à×#Ô#ˆÜ˜UÓ#ˆØÓ¤	¨$§£Ùñ $ð
 r4   Úcomment_listc                 óZ   • U  H%  nUR                   R                  S5      (       d  M%    g   g)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¬   x  s,   € ó  ˆØ�=‰=×#Ñ#Ð$F×GÓGÙñ  ð r4   Úcomment_linec                 óT  • U /U R                  [        5      SS  Vs/ sH  n[        UR                  5       -   PM     snQU R                  [        5      R                  [        5       Vs/ sH  n[        UR                  5       -   PM     snQn[	        S U 5       5      $ s  snf s  snf )a9  
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)
rE   Nc              3   ó0   #   • U H  o[         ;   v •  M     g 7frs   )r   )rt   r[   s     r5   rv   Ú-_contains_fmt_skip_comment.<locals>.<genexpr>œ  s   é € ÐJÑ2I wœ(Ö"Ò2Iùs   ‚)rJ   Ú_COMMENT_PREFIXÚstripÚ_COMMENT_LIST_SEPARATORrƒ   )r­   rk   r[   Úsemantic_comment_blockss       r5   r}   r}   †  s¶   € ð 	ðð (×-Ñ-¬oÓ>¸q¸rÑBó

áB�ô ˜gŸm™m›oÔ-ÙBñ

ðð (×-Ñ-¬oÓ>×DÑDÜ'ôó

ñ�ô ˜gŸm™m›oÔ-ññ

ðÐô ÑJÑ2IÓJÓJÐJùò

ùò

s   � B Á* B%)6rI   Úcollections.abcr   r   Údataclassesr   Ú	functoolsr   Útypingr   r   r	   Ú
black.moder
   Ú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/   r>   rQ   Útuplerp   rn   r   r’   r“   r”   r¬   r}   r)   r4   r5   Ú<module>r¿      s  ðÜ 	ß 0Ý !Ý ß )Ñ )å ÷	÷ 	ó 	õ !ß &ð ˆ4�ˆ:Ñ€â?€ˆÓ ?Ø  ,Ð/€ˆ%Ó /Ú;€ˆÓ ;àÐ Ø€ØÐ ð ÷ð ó ðð&4˜Bð 4 8¨D¡>ô 4ñ6 �4Ñð,˜#ð ,°ð ,¸¸lÑ9Kó ,ó ð,ð^ Bð ¸ð Àô ð˜#ð  #ô ð4@Ø
ð@Øð@Ø#-¨e°C¸°H©oÑ#>ð@à	ô@ðSØ
ðSØðSØ#-¨e°C¸°H©oÑ#>ðSà	ôSðl,/Ø
ð,/Ø%ð,/Ø-1ð,/àˆb�\ô,/ð^''Ø
ð''Ø%ð''àˆb�\ô''ðT
˜ð 
 ô 
ð¨ð ¨tô ð¨$¨t©*ð ¸ô ðK¨Sð K¸ð KÀõ Kr4   