ó
    áÅŸg¤3  ã            
       ó\  • % S r SSKrSSKrSSKJr  SSKJrJr  SSKJr  SSK	J
r
  SSKJr  Sr\\S	'   \R                  " S
\-   S-   \R                   5      r\\S'   \R                  " S\R$                  5      r\\S'   S\\   S\S\S\4S jrS\S\4S jrS\S\\   4S jrS\S\S\4S jrS\S\4S jrS\SS4S jrS\S\4S jr\" SS9S \S\\   4S! j5       rS\S\4S" jrS#\S$\\   S%\S\ \\   \4   4S& jr!S'\SS4S( jr"\" S)S9S*\S\#4S+ j5       r$S,\S\#4S- jr%S,\S.\#S\#4S/ jr&g)0zN
Simple formatting on strings. Further string formatting code is in trans.py.
é    N)Ú	lru_cache)ÚMatchÚPattern)ÚFinal)ÚWIDTH_TABLE)ÚLeafÚfurbFURBÚSTRING_PREFIX_CHARSz^([z]*)(.*)$ÚSTRING_PREFIX_REz‰(?P<backslashes>\\+)(?P<body>(u(?P<u>[a-fA-F0-9]{4}))|(U(?P<U>[a-fA-F0-9]{8}))|(x(?P<x>[a-fA-F0-9]{2}))|(N\{(?P<N>[a-zA-Z0-9 \-]{2,})\}))ÚUNICODE_ESCAPE_REÚregexÚreplacementÚoriginalÚreturnc                 óB   • U R                  XR                  X5      5      $ )zŠReplace `regex` with `replacement` twice on `original`.

This is used by string normalization to perform replaces on
overlapping matches.
)Úsub)r   r   r   s      ÚN/var/www/blue/EV-Temp_rev04/venv/lib/python3.13/site-packages/black/strings.pyÚ	sub_twicer      s   € ð �9‰9�[§)¡)¨KÓ"BÓCÐCó    Ústringc                 ó<   • U R                  [        5      nUSS S;   $ )zG
Returns:
    True iff @string starts with three quotation characters.
Né   >   ú"""ú''')Úlstripr
   )r   Ú
raw_strings     r   Úhas_triple_quotesr   &   s$   € ð
 —‘Ô2Ó3€JØ�b�qˆ>˜^Ñ+Ð+r   Úsc                 ó^  • / nU R                  5        Ho  nUR                  5       nU(       a  X2:X  a  UR                  U5        M2  [        U5      [        U5      -
  nUSU R	                  5       nUR                  XS-   5        Mq     U R                  S5      (       a  UR                  S5        U$ )z\
Splits string into lines and expands only leading tabs (following the normal
Python rules)
NÚ
Ú )Ú
splitlinesr   ÚappendÚlenÚ
expandtabsÚendswith)r   ÚlinesÚlineÚstripped_lineÚprefix_lengthÚprefixs         r   Ú lines_with_leading_tabs_expandedr,   /   s‘   € ð
 €EØ—‘–ˆØŸ™›ˆÞ Ó 5Ø�L‰L˜Öä ›I¬¨MÓ(:Ñ:ˆMØ˜.˜=Ð)×4Ñ4Ó6ˆFØ�L‰L˜Ñ/Ö0ñ ð 	‡z�z�$×ÑØ�‰�RÔØ€Lr   Ú	docstringr+   c                 ó$  • U (       d   S5       e[        U 5      n[        R                  nUSS   H=  nUR                  5       nU(       d  M  [	        U[        U5      [        U5      -
  5      nM?     US   R                  5       /nU[        R                  :  ai  [        U5      S-
  n[        USS  5       HI  u  p„XCS  R                  5       n	U	(       d  X‡:X  a  UR                  X-   5        M8  UR                  S5        MK     SR                  U5      $ )Nz4INTERNAL ERROR: Multiline docstrings cannot be emptyé   r   é   r!   r    )r,   ÚsysÚmaxsizer   Úminr$   ÚstripÚ	enumerateÚrstripr#   Újoin)
r-   r+   r'   Úindentr(   ÚstrippedÚtrimmedÚlast_line_idxÚir)   s
             r   Úfix_multiline_docstringr=   B   sç   € æÐLÐLÓLˆ9Ü,¨YÓ7€Eä�[‰[€FØ�a�b“	ˆØ—;‘;“=ˆßˆ8Ü˜¤ T£¬S°«]Ñ!:Ó;ŠFñ ð
 �Q‰x�~‰~ÓÐ €GØ”—‘ÓÜ˜E›
 Q™ˆÜ   q r Ö+‰GˆAØ  ˜M×0Ñ0Ó2ˆMÞ Ó 2Ø—‘˜vÑ5Ö6à—‘˜rÖ"ñ ,ð �9‰9�WÓÐr   c                 óp   • [        U 5        SnSnX   [        ;   a  XU   -  nUS-  nX   [        ;   a  M  U$ )zs
Pre-conditions:
    * assert_is_leaf_string(@string)

Returns:
    @string's prefix (e.g. '', 'r', 'f', or 'rf').
r!   r   r/   )Úassert_is_leaf_stringr
   )r   r+   Ú
prefix_idxs      r   Úget_string_prefixrA   Y   sM   € ô ˜&Ô!à€FØ€JØ
Ñ
Ô 3Ó
3Ø˜Ñ$Ñ$ˆØ�a‰ˆ
ð Ñ
Ô 3Õ
3ð €Mr   c                 ó¢  • U R                  S5      nU R                  S5      nSX4;   a  [        X5      nO[        X!5      nSUs=::  a  [        U 5      S-
  :  d  O   U < S35       eU S   S;   d   U < S35       e[	        U S	U 5      R                  [	        [        5      5      (       d&   [	        U S	U 5       S
[	        [        5       S35       eg	)a  
Checks the pre-condition that @string has the format that you would expect
of `leaf.value` where `leaf` is some Leaf such that `leaf.type ==
token.STRING`. A more precise description of the pre-conditions that are
checked are listed below.

Pre-conditions:
    * @string starts with either ', ", <prefix>', or <prefix>" where
    `set(<prefix>)` is some subset of `set(STRING_PREFIX_CHARS)`.
    * @string ends with a quote character (' or ").

Raises:
    AssertionError(...) if the pre-conditions listed above are not
    satisfied.
Ú"Ú'éÿÿÿÿr   r/   z0 is missing a starting quote character (' or ").)rD   rC   z/ is missing an ending quote character (' or ").Nz is NOT a subset of Ú.)ÚfindÚmaxr3   r$   ÚsetÚissubsetr
   )r   Ú
dquote_idxÚ
squote_idxÚ	quote_idxs       r   r?   r?   l   s   € ð  —‘˜SÓ!€JØ—‘˜SÓ!€JØ	ˆjÐ%Ó%Ü˜
Ó/‰	ä˜
Ó/ˆ	ð 	
ˆYÕ(œ˜V› q™Õ(ðFà
‰ÐDÐEóFØ(à�"‰:ð ó ð Eð ‰ÐCÐDóEð ô ˆv�j�yÐ!Ó"×+Ñ+ÜÔÓ ÷ñ ð Sä
ˆf�Z�iÐ Ó
!Ð	"Ð"6´sÔ;NÓ7OÐ6PÐPQÐRóSñ r   c                 ót  • [         R                  U 5      nUc   SU < 35       eUR                  S5      nUR                  SS5      R                  SS5      R                  SS	5      R                  S
S	5      n[	        U5      S:X  a  SUS   R                  5       :w  a  USSS2   nU UR                  S5       3$ )z#Make all string prefixes lowercase.Nzfailed to match string r/   ÚFÚfÚBÚbÚUr!   Úur0   Úrr   rE   )r   ÚmatchÚgroupÚreplacer$   Úlower)r   rV   Úorig_prefixÚ
new_prefixs       r   Únormalize_string_prefixr\   �   s¹   € ä×"Ñ" 1Ó%€EØÑÐ=Ð 7¸±uÐ=Ó=ÐØ—+‘+˜a“.€Kà×Ñ˜C Ó%ß	‰��cÓ	ß	‰��bÓ	ß	‰��bÓ	ð	 ô ˆ:ƒ˜!Ó  z°!¡}×':Ñ':Ó'<Ó <Ø¡ " Ñ%ˆ
Øˆ\˜%Ÿ+™+ a›.Ð)Ð*Ð*r   é@   )r2   Úpatternc                 ó.   • [         R                  " U 5      $ )N)ÚreÚcompile)r^   s    r   Ú_cached_compilerb   ¤   s   € ä�:Š:�gÓÐr   c                 ó’  • U R                  [        5      nUSS S:X  a  U $ USS S:X  a  SnSnOUS   S:X  a  SnSnOSnSnU R                  U5      nUS:w  d   S	U < 35       eU SU n[        S
U 35      n[        SU 35      n[        SU 35      nX[	        U5      -   [	        U5      *  n	SUR                  5       ;   a  UR                  U	5      (       a  U $ U	n
OA[        USU 3U	5      n
Xš:w  a  U
n	U U U	 U 3n [        USU 3U
5      n
[        USU 3U
5      n
SUR                  5       ;   aB  [        R                  " SU
[        R                  5      nU H  nS[        U5      ;   d  M  U s  $    US:X  a  U
SS S:X  a  U
SS S-   n
U	R                  S5      nU
R                  S5      nXí:”  a  U $ Xí:X  a  US:X  a  U $ U U U
 U 3$ )únPrefer double quotes but only if it doesn't cause more escaping.

Adds or removes backslashes as appropriate.
Nr   r   r   r   rC   rD   rE   z!INTERNAL ERROR: Malformed string ú(([^\\]|^)(\\\\)*)ú([^\\]|^)\\((?:\\\\)*)rU   ú\1\2ú\1\\rP   zü
            (?:(?<!\{)|^)\{  # start of the string or a non-{ followed by a single {
                ([^{].*?)  # contents of the brackets except if begins with {{
            \}(?:(?!\})|$)  # A } followed by end of the string or a non-}
            Ú\ú\")r   r
   rG   rb   r$   ÚcasefoldÚsearchr   r`   ÚfindallÚVERBOSEÚstrÚcount)r   ÚvalueÚ
orig_quoteÚ	new_quoteÚfirst_quote_posr+   Úunescaped_new_quoteÚescaped_new_quoteÚescaped_orig_quoteÚbodyÚnew_bodyÚmatchesÚmÚorig_escape_countÚnew_escape_counts                  r   Únormalize_string_quotesr~   ©   s<  € ð
 �H‰HÔ(Ó)€EØˆRˆa€y�EÓØˆà	ˆr�ˆ�eÓ	Øˆ
Ø‰	Ø	ˆq‰�S‹Øˆ
Ø‰	àˆ
Øˆ	Ø—f‘f˜ZÓ(€OØ˜bÓ ÐKÐ$EÀaÁUÐ"KÓKÐ àÐ�Ð €FÜ)Ð-?À	¸{Ð*KÓLÐÜ'Ð+AÀ)ÀÐ(MÓNÐÜ(Ð,BÀ:À,Ð)OÓPÐØœs :›Ñ.´#°j³/Ð1AÐB€DØ
ˆf�o‰oÓÓØ×%Ñ% d×+Ñ+ð ˆHð ‰ô Ð.°4¸	°{Ð0CÀTÓJˆØÓàˆDØ�(˜:˜, t f¨Z¨LÐ9ˆAÜÐ/°D¸¸Ð1EÀxÓPˆÜÐ0°T¸)¸Ð2EÀxÓPˆà
ˆf�o‰oÓÓÜ—*’*ðð
 Ü�J‰Jó
ˆó ˆAØ”s˜1“v�~à’ñ ð
 �EÓ˜h r s˜m¨sÓ2à˜C˜R�= 5Ñ(ˆØŸ
™
 4Ó(ÐØ—~‘~ dÓ+ÐØÓ+ØˆàÓ,°¸sÓ1BØˆàˆX�i�[  
¨9¨+Ð6Ð6r   ÚquoteÚmiddlesÚis_raw_fstringc                 ó
  • U S:X  a  X4$ U S:X  a  SnOU S:X  a  SnOSn[        SU 35      n[        SU 35      n[        SU  35      nU(       a2  U H(  nUR                  UR                  5      (       d  M%  X4s  $    US4$ / nU H[  nUR                  n	[        USU 3U	5      n
Xš:w  a  X§l        [        USU  3U
5      n
[        USU 3U
5      n
UR	                  U
5        M]     US:X  a'  US	   R                  S5      (       a  US	   S
S	 S-   US	'   [        X5       H1  u  pzUR                  R                  S5      nU
R                  S5      nM3     WW:”  a  X4$ XË:X  a	  U S:X  a  X4$ [        X5       H  u  pzX§l        M     X4$ )rd   r   r   rC   rD   re   rf   rg   rh   rE   Nrj   ri   )rb   rl   rq   r   r#   r&   Úziprp   )r   r€   r�   rs   ru   rv   rw   ÚmiddleÚnew_segmentsÚsegmentÚnew_segmentr|   r}   s                r   Únormalize_fstring_quotesrˆ   ò   sÎ  € ð �ƒ~Øˆ~Ðà	�%‹Ø‰	Ø	�#‹Ø‰	àˆ	ä)Ð-?À	¸{Ð*KÓLÐÜ'Ð+AÀ)ÀÐ(MÓNÐÜ(Ð,BÀ5À'Ð)JÓKÐÞÛˆFØ"×)Ñ)¨&¯,©,×7Ó7ð �~Ò%ñ	 ð ˜ˆ|Ðà€LÛˆØ—,‘,ˆäÐ 1°d¸9¸+Ð3FÈÓPˆØÓ!à&ŒLäÐ 2°t¸E¸7°OÀ[ÓQˆÜÐ 3¸¸Y¸KÐ5HÈ+ÓVˆØ×Ñ˜KÖ(ñ ð �EÓ˜l¨2Ñ.×7Ñ7¸×<Ñ<à'¨Ñ+¨C¨RÐ0°5Ñ8ˆ�RÑä" 7Ö9ÑˆØ"ŸL™L×.Ñ.¨tÓ4ÐØ&×,Ñ,¨TÓ2Òñ  :ð Ð+Ó+Øˆ~ÐàÓ,°¸#³Øˆ~Ðä" 7Ö9ÑˆØ"Žñ  :ð ÐÐr   Úleafc                 óÌ   • U R                   n[        U5      nSUR                  5       ;   a  gS[        [           S[        4S jn[
        R                  " [        X15      U l         g)zLReplace hex codes in Unicode escape sequences with lowercase representation.rU   Nr{   r   c                 ó�  • U R                  5       nUS   n[        U5      S-  S:X  a  X!S   -   $ US   (       a  US-   US   R                  5       -   $ US   (       a  US-   US   R                  5       -   $ US   (       a  US-   US   R                  5       -   $ US   (       d
   S	U  35       eUS
-   US   R                  5       -   S-   $ )NÚbackslashesr0   r   rx   rT   rS   ÚxÚNzUnexpected match: zN{Ú})Ú	groupdictr$   rY   Úupper)r{   ÚgroupsÚback_slashess      r   rX   Ú3normalize_unicode_escape_sequences.<locals>.replace:  sÝ   € Ø—‘“ˆØ˜mÑ,ˆäˆ|Ó˜qÑ  AÓ%Ø¨¡.Ñ0Ð0à�#�;à #Ñ%¨¨s©×(9Ñ(9Ó(;Ñ;Ð;Ø�C�[à #Ñ%¨¨s©×(9Ñ(9Ó(;Ñ;Ð;Ø�C�[à #Ñ%¨¨s©×(9Ñ(9Ó(;Ñ;Ð;à˜#—;Ð8Ð"4°Q°CÐ 8Ó8�;à $Ñ&¨°©×):Ñ):Ó)<Ñ<¸sÑBÐBr   )rq   rA   rY   r   ro   r`   r   r   )r‰   Útextr+   rX   s       r   Ú"normalize_unicode_escape_sequencesr–   3  sU   € à�:‰:€DÜ˜tÓ$€FØ
ˆf�l‰l‹nÓØðC”5œ‘:ð C¤#ô Cô* —’Ô)¨7Ó9€D…Jr   i   Úcharc                 ó¾   • [         n[        U 5      n[        U5      S-
  nSnUS-  n X   u  pgnX&:  a  US-
  nOX':”  a  US-   nO
US:  a  S$ U$ X4:  a   gX4-   S-  nM7  )a  Return the width of a single character as it would be displayed in a
terminal or editor (which respects Unicode East Asian Width).

Full width characters are counted as 2, while half width characters are
counted as 1.  Also control characters are counted as 0.
r/   r   r0   )r   Úordr$   )	r—   ÚtableÚ	codepointÚhighestÚlowestÚidxÚstart_codepointÚend_codepointÚwidths	            r   Ú
char_widthr¢   R  s‹   € ô €EÜ�D“	€IÜ�%‹j˜1‰n€GØ€FØ
�Q‰,€CØ
Ø05±
Ñ-ˆ¨ØÓ&Ø˜A‘g‰GØÓ&Ø˜1‘W‰Fà ›	�1Ð, uÐ,ØÓØàð Ñ AÑ%ˆñ r   Úline_strc                 ót   • U R                  5       (       a  [        U 5      $ [        [        [        U 5      5      $ )zóReturn the width of `line_str` as it would be displayed in a terminal
or editor (which respects Unicode East Asian Width).

You could utilize this function to determine, for example, if a string
is too wide to display in a terminal or editor.
)Úisasciir$   ÚsumÚmapr¢   )r£   s    r   Ú	str_widthr¨   m  s/   € ð ×Ñ×Ñä�8‹}ÐÜŒs”:˜xÓ(Ó)Ð)r   Ú	max_widthc                 óz   • Sn[        U 5       H   u  p4[        U5      nXR-   U:”  a  Us  $ X%-  nM"     [        U 5      $ )zŽCount the number of characters in `line_str` that would fit in a
terminal or editor of `max_width` (which respects Unicode East Asian
Width).
r   )r5   r¢   r$   )r£   r©   Útotal_widthr<   r—   r¡   s         r   Úcount_chars_in_widthr¬   z  sH   € ð
 €KÜ˜XÖ&‰ˆÜ˜4Ó ˆØÑ Ó*ØŠHØÑŠñ	 'ô
 ˆx‹=Ðr   )'Ú__doc__r`   r1   Ú	functoolsr   r   r   Útypingr   Úblack._width_tabler   Úblib2to3.pytreer   r
   Ú__annotations__ra   ÚDOTALLr   rn   r   ro   r   Úboolr   Úlistr,   r=   rA   r?   r\   rb   r~   Útuplerˆ   r–   Úintr¢   r¨   r¬   © r   r   Ú<module>r¹      s  ðòó 
Û 
Ý ß Ý å *Ý  à'Ð �UÓ 'ØŸ*š*Ø
Ð Ñ  ;Ñ.°·	±	óÐ �%ó ð Ÿ:š:ð	ð ‡J�JóÐ �5ó ðD�W˜S‘\ð D°ð D¸sð DÀsô Dð,˜cð , dô ,ð¨ð °°S±	ô ð& sð °Cð ¸Cô ð.˜cð  cô ð& S #ð  S¨$ô  SðF+˜sð + sô +ñ* �2Ñð˜Sð  W¨S¡\ó ó ððF7˜sð F7 sô F7ðR>Øð>à�$‰Zð>ð ð>ð ˆ4�‰:�sˆ?Ñô	>ðB:¨Tð :°dô :ñ> �4Ñð�Sð ˜Só ó ðð4
*˜ð 
* ô 
*ð 3ð °3ð ¸3õ r   