§
    øyIft3  ã            
       ón  — U d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZ ddlmZ dZeed<    ej        d	ez   d
z   ej        ¦  «        Zeed<    ej        dej        ¦  «        Zeed<   de	e         dededefd„Zdedefd„Zdedee         fd„Zdededefd„Zdedefd„Zdeddfd„Zdedefd„Z ed¬¦  «        dede	e         fd „¦   «         Zdedefd!„Z d"ed#ee         d$ede
ee         ef         fd%„Z!d&eddfd'„Z" ed(¬¦  «        d)ede#fd*„¦   «         Z$d+ede#fd,„Z%d+ed-e#de#fd.„Z&dS )/zN
Simple formatting on strings. Further string formatting code is in trans.py.
é    N)Ú	lru_cache)ÚFinalÚListÚMatchÚPatternÚTuple)Ú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                 óV   — |                       ||                       ||¦  «        ¦  «        S )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      úA/var/www/piapp/venv/lib/python3.11/site-packages/black/strings.pyÚ	sub_twicer      s&   € ð �9Š9�[ %§)¢)¨K¸Ñ"BÔ"BÑCÔCÐCó    Ústringc                 óN   — |                       t          ¦  «        }|dd…         dv S )zS
    Returns:
        True iff @string starts with three quotation characters.
    Né   >   ú"""ú''')Úlstripr   )r   Ú
raw_strings     r   Úhas_triple_quotesr   %   s)   € ð
 —’Õ2Ñ3Ô3€JØ�b�q�bŒ>˜^Ð+Ð+r   Úsc                 ó–  — g }|                       ¦   «         D ]‡}|                     ¦   «         }|r||k    r|                     |¦  «         Œ4t          |¦  «        t          |¦  «        z
  }|d|…                              ¦   «         }|                     ||z   ¦  «         Œˆ|                      d¦  «        r|                     d¦  «         |S )zh
    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Ø—’‘”ð 1ð 1ˆØŸš™œˆØð 	1 °Ò 5Ð 5Ø�LŠL˜ÑÔÐÐå ™IœI­¨MÑ(:Ô(:Ñ:ˆMØ˜.˜=˜.Ô)×4Ò4Ñ6Ô6ˆFØ�LŠL˜ -Ñ/Ñ0Ô0Ð0Ð0Ø‡z‚z�$ÑÔð Ø�Š�RÑÔÐØ€Lr   Ú	docstringr-   c                 ób  — | sdS t          | ¦  «        }t          j        }|dd …         D ]E}|                     ¦   «         }|r-t	          |t          |¦  «        t          |¦  «        z
  ¦  «        }ŒF|d                              ¦   «         g}|t          j        k     r�t          |¦  «        dz
  }t          |dd …         ¦  «        D ]W\  }}||d …                              ¦   «         }	|	s||k    r| 	                    ||	z   ¦  «         ŒB| 	                    d¦  «         ŒXd 
                    |¦  «        S )Nr#   é   r   é   r"   )r.   ÚsysÚmaxsizer   Úminr&   ÚstripÚ	enumerateÚrstripr%   Újoin)
r/   r-   r)   Úindentr*   ÚstrippedÚtrimmedÚlast_line_idxÚir+   s
             r   Úfix_docstringr?   A   s1  € àð ØˆrÝ,¨YÑ7Ô7€EåŒ[€FØ�a�b�b”	ð <ð <ˆØ—;’;‘=”=ˆØð 	<Ý˜¥ T¡¤­S°©]¬]Ñ!:Ñ;Ô;ˆFøà�QŒx�~Š~ÑÔÐ €GØ•”ÒÐÝ˜E™
œ
 Q™ˆÝ   q r r¤Ñ+Ô+ð 	#ð 	#‰GˆAˆtØ    œM×0Ò0Ñ2Ô2ˆMØð #  ]Ò 2Ð 2Ø—’˜v¨Ñ5Ñ6Ô6Ð6Ð6à—’˜rÑ"Ô"Ð"Ð"Ø�9Š9�WÑÔÐr   c                 óˆ   — t          | ¦  «         d}d}| |         t          v r|| |         z  }|dz  }| |         t          v °|S )z‡
    Pre-conditions:
        * assert_is_leaf_string(@string)

    Returns:
        @string's prefix (e.g. '', 'r', 'f', or 'rf').
    r#   r   r1   )Úassert_is_leaf_stringr   )r   r-   Ú
prefix_idxs      r   Úget_string_prefixrC   Y   s_   € õ ˜&Ñ!Ô!Ð!à€FØ€JØ
�Ô
Õ 3Ð
3Ð
3Ø�&˜Ô$Ñ$ˆØ�a‰ˆ
ð �Ô
Õ 3Ð
3Ð
3ð €Mr   c                 ó  — |                       d¦  «        }|                       d¦  «        }d||fv rt          ||¦  «        }nt          ||¦  «        }d|cxk    rt          | ¦  «        dz
  k     sn J | ›d�¦   «         ‚| d         dv sJ | ›d�¦   «         ‚t	          | d	|…         ¦  «                             t	          t          ¦  «        ¦  «        s7J t	          | d	|…         ¦  «        › d
t	          t          ¦  «        › d�¦   «         ‚d	S )aH  
    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   r1   z0 is missing a starting quote character (' or ").)rF   rE   z/ is missing an ending quote character (' or ").Nz is NOT a subset of ú.)ÚfindÚmaxr5   r&   ÚsetÚissubsetr   )r   Ú
dquote_idxÚ
squote_idxÚ	quote_idxs       r   rA   rA   l   s]  € ð  —’˜SÑ!Ô!€JØ—’˜SÑ!Ô!€JØ	ˆj˜*Ð%Ð%Ð%Ý˜
 JÑ/Ô/ˆ	ˆ	å˜
 JÑ/Ô/ˆ	ð 	
ˆYÐ(Ð(Ò(Ð(�˜V™œ q™Ò(Ð(Ð(Ð(Ð(Ø
ÐEÐEÐEñ 	)Ô(Ð(à�"Œ:ð ð ð ð ð ÐDÐDÐDñô ð õ ˆv�j�y�jÔ!Ñ"Ô"×+Ò+ÝÕÑ Ô ñô ð Sð Så
ˆf�Z�i�ZÔ Ñ
!Ô
!ÐRÐRµsÕ;NÑ7OÔ7OÐRÐRÐRñSô Sð Sð Sð Sr   c                 óÌ  — t                                | ¦  «        }|€J d| ›�¦   «         ‚|                     d¦  «        }|                     dd¦  «                             dd¦  «                             dd	¦  «                             d
d	¦  «        }t	          |¦  «        dk    r)d|d                              ¦   «         k    r|ddd…         }|› |                     d¦  «        › �S )z#Make all string prefixes lowercase.Nzfailed to match string r1   ÚFÚfÚBÚbÚUr#   Úur2   Úrr   rG   )r   ÚmatchÚgroupÚreplacer&   Úlower)r    rX   Úorig_prefixÚ
new_prefixs       r   Únormalize_string_prefixr^   �   sÞ   € å×"Ò" 1Ñ%Ô%€EØÐÐÐ=¸Ð=Ð=ÑÔÐØ—+’+˜a‘.”.€Kà×Ò˜C Ñ%Ô%ß	Š��cÑ	Ô	ß	Š��bÑ	Ô	ß	Š��bÑ	Ô	ð	 õ ˆ:�„˜!ÒÐ  z°!¤}×':Ò':Ñ'<Ô'<Ò <Ð <Ø   " Ô%ˆ
ØÐ*˜%Ÿ+š+ a™.œ.Ð*Ð*Ð*r   é@   )r4   Úpatternc                 ó*   — t          j        | ¦  «        S )N)ÚreÚcompile)r`   s    r   Ú_cached_compilerd   ¤   s   € åŒ:�gÑÔÐr   c                 ó"  — |                       t          ¦  «        }|dd…         dk    r| S |dd…         dk    rd}d}n|d         dk    rd}d}nd}d}|                      |¦  «        }|dk    r| S | d|…         }t          d	|› �¦  «        }t          d
|› �¦  «        }t          d
|› �¦  «        }| |t	          |¦  «        z   t	          |¦  «         …         }	d|                     ¦   «         v r|                     |	¦  «        r| S |	}
nNt          |d|› �|	¦  «        }
|	|
k    r|
}	|› |› |	› |› �} t          |d|› �|
¦  «        }
t          |d|› �|
¦  «        }
d|                     ¦   «         v r:t          j	        d|
t          j
        ¦  «        }|D ]}dt          |¦  «        v r| c S Œ|dk    r|
dd…         dk    r|
dd…         dz   }
|	                     d¦  «        }|
                     d¦  «        }||k    r| S ||k    r|dk    r| S |› |› |
› |› �S )úvPrefer double quotes but only if it doesn't cause more escaping.

    Adds or removes backslashes as appropriate.
    Nr   r   r   r   rE   rF   rG   ú(([^\\]|^)(\\\\)*)ú([^\\]|^)\\((?:\\\\)*)rW   ú\1\2ú\1\\rR   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   rI   rd   r&   ÚcasefoldÚsearchr   rb   Ú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ˆR„y�EÒÐØˆà	ˆr�ˆrŒ�eÒ	Ð	Øˆ
Øˆ	ˆ	Ø	ˆqŒ�SŠˆØˆ
Øˆ	ˆ	àˆ
Øˆ	Ø—f’f˜ZÑ(Ô(€OØ˜"ÒÐØˆàÐ�ÐÔ €FÝ)Ð*KÀ	Ð*KÐ*KÑLÔLÐÝ'Ð(MÀ)Ð(MÐ(MÑNÔNÐÝ(Ð)OÀ:Ð)OÐ)OÑPÔPÐØˆ_�s :™œÑ.µ#°j±/´/Ð1AÐAÔB€DØ
ˆf�oŠoÑÔÐÐØ×%Ò% dÑ+Ô+ð 	ð ˆHð ˆˆõ Ð.Ð0C¸	Ð0CÐ0CÀTÑJÔJˆØ�8ÒÐàˆDØÐ9˜:Ð9 tÐ9¨ZÐ9Ð9ˆAÝÐ/Ð1E¸Ð1EÐ1EÀxÑPÔPˆÝÐ0Ð2E¸)Ð2EÐ2EÀxÑPÔPˆà
ˆf�oŠoÑÔÐÐÝ”*ðð
 ÝŒJñ
ô 
ˆð ð 	ð 	ˆAØ•s˜1‘v”vˆ~ˆ~à���ð ð �EÒÐ˜h r s sœm¨sÒ2Ð2à˜C˜R˜C”= 5Ñ(ˆØŸ
š
 4Ñ(Ô(ÐØ—~’~ dÑ+Ô+ÐØÐ+Ò+Ð+ØˆàÐ,Ò,Ð,°¸sÒ1BÐ1BØˆàÐ6�iÐ6 Ð6¨9Ð6Ð6Ð6r   ÚquoteÚmiddlesÚis_raw_fstringc                 óF  — | dk    r|| fS | dk    rd}n| dk    rd}nd}t          d|› �¦  «        }t          d|› �¦  «        }t          d| › �¦  «        }|r)|D ]"}|                     |j        ¦  «        r|| fc S Œ#|dfS g }|D ]g}|j        }	t          |d|› �|	¦  «        }
|	|
k    r|
|_        t          |d| › �|
¦  «        }
t          |d|› �|
¦  «        }
|                     |
¦  «         Œh|dk    r1|d	                              d¦  «        r|d	         d
d	…         dz   |d	<   t          ||¦  «        D ]4\  }}
|j                             d¦  «        }|
                     d¦  «        }Œ5||k    r|| fS ||k    r
| dk    r|| fS t          ||¦  «        D ]\  }}
|
|_        Œ||fS )rf   r   r   rE   rF   rg   rh   ri   rj   rG   Nrl   rk   )rd   rn   rs   r   r%   r(   Úziprr   )r�   r‚   rƒ   ru   rw   rx   ry   ÚmiddleÚnew_segmentsÚsegmentÚnew_segmentr~   r   s                r   Únormalize_fstring_quotesrŠ   ó   sV  € ð �‚~€~Ø˜ˆ~Ðà	�%ŠˆØˆ	ˆ	Ø	�#ŠˆØˆ	ˆ	àˆ	å)Ð*KÀ	Ð*KÐ*KÑLÔLÐÝ'Ð(MÀ)Ð(MÐ(MÑNÔNÐÝ(Ð)JÀ5Ð)JÐ)JÑKÔKÐØð Øð 	&ð 	&ˆFØ"×)Ò)¨&¬,Ñ7Ô7ð &ð  �~Ð%Ð%Ð%ð&ð ˜ˆ|Ðà€LØð 
)ð 
)ˆØ”,ˆåÐ 1Ð3F¸9Ð3FÐ3FÈÑPÔPˆØ�kÒ!Ð!à&ˆFŒLåÐ 2°O¸E°O°OÀ[ÑQÔQˆÝÐ 3Ð5H¸YÐ5HÐ5HÈ+ÑVÔVˆØ×Ò˜KÑ(Ô(Ð(Ð(à�EÒÐ˜l¨2Ô.×7Ò7¸Ñ<Ô<Ðà'¨Ô+¨C¨R¨CÔ0°5Ñ8ˆ�RÑå" 7¨LÑ9Ô9ð 3ð 3Ñˆ�Ø"œL×.Ò.¨tÑ4Ô4ÐØ&×,Ò,¨TÑ2Ô2ÐÐàÐ+Ò+Ð+Ø˜ˆ~ÐàÐ,Ò,Ð,°¸#²°Ø˜ˆ~Ðå" 7¨LÑ9Ô9ð #ð #Ñˆ�Ø"ˆŒˆà�IÐÐr   Úleafc                 óÜ   — | j         }t          |¦  «        }d|                     ¦   «         v rdS dt          t                   dt          fd„}t          j        t          ||¦  «        | _         dS )zLReplace hex codes in Unicode escape sequences with lowercase representation.rW   Nr}   r   c                 óÜ  — |                       ¦   «         }|d         }t          |¦  «        dz  dk    r||d         z   S |d         r |dz   |d                              ¦   «         z   S |d         r |dz   |d                              ¦   «         z   S |d         r |dz   |d                              ¦   «         z   S |d         sJ d	| › �¦   «         ‚|d
z   |d                              ¦   «         z   dz   S )NÚbackslashesr2   r   rz   rV   rU   ÚxÚNzUnexpected match: zN{Ú})Ú	groupdictr&   r[   Úupper)r}   ÚgroupsÚback_slashess      r   rZ   z3normalize_unicode_escape_sequences.<locals>.replace;  s  € Ø—’‘”ˆØ˜mÔ,ˆåˆ|ÑÔ˜qÑ  AÒ%Ð%Ø &¨¤.Ñ0Ð0à�#Œ;ð 	Cà #Ñ%¨¨s¬×(9Ò(9Ñ(;Ô(;Ñ;Ð;Ø�CŒ[ð 		Cà #Ñ%¨¨s¬×(9Ò(9Ñ(;Ô(;Ñ;Ð;Ø�CŒ[ð 	Cà #Ñ%¨¨s¬×(9Ò(9Ñ(;Ô(;Ñ;Ð;à˜#”;Ð8Ð8Ð 8°QÐ 8Ð 8Ñ8Ô8Ð8à $Ñ&¨°¬×):Ò):Ñ)<Ô)<Ñ<¸sÑBÐBr   )rs   rC   r[   r   rq   rb   r   r   )r‹   Útextr-   rZ   s       r   Ú"normalize_unicode_escape_sequencesr—   4  sv   € àŒ:€DÝ˜tÑ$Ô$€FØ
ˆf�lŠl‰nŒnÐÐØˆðC•5�”:ð C¥#ð Cð Cð Cð Cõ* ”Õ)¨7°DÑ9Ô9€D„J€J€Jr   i   Úcharc                 óâ   — t           }t          | ¦  «        }t          |¦  «        dz
  }d}|dz  }	 ||         \  }}}||k     r|dz
  }n||k    r|dz   }n
|dk     rdn|S ||k     rn	||z   dz  }Œ>dS )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.
    r1   r   r2   )r	   Úordr&   )	r˜   ÚtableÚ	codepointÚhighestÚlowestÚidxÚstart_codepointÚend_codepointÚwidths	            r   Ú
char_widthr£   S  s­   € õ €EÝ�D‘	”	€IÝ�%‰jŒj˜1‰n€GØ€FØ
�Q‰,€Cð
&Ø05°c´
Ñ-ˆ˜¨Ø�Ò&Ð&Ø˜A‘gˆGˆGØ˜Ò&Ð&Ø˜1‘WˆFˆFà š	˜	�1�1 uÐ,Ø�VÒÐØØ˜Ñ AÑ%ˆð
&ð ˆ1r   Úline_strc                 óŒ   — |                       ¦   «         rt          | ¦  «        S t          t          t          | ¦  «        ¦  «        S )a  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©   n  s<   € ð ×ÒÑÔð å�8‰}Œ}ÐÝ�s•:˜xÑ(Ô(Ñ)Ô)Ð)r   Ú	max_widthc                 ó�   — d}t          | ¦  «        D ]&\  }}t          |¦  «        }||z   |k    r|c S ||z  }Œ't          | ¦  «        S )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   )r7   r£   r&   )r¤   rª   Útotal_widthr>   r˜   r¢   s         r   Úcount_chars_in_widthr­   {  sb   € ð
 €KÝ˜XÑ&Ô&ð ð ‰ˆˆ4Ý˜4Ñ Ô ˆØ�;Ñ Ò*Ð*ØˆHˆHˆHØ�uÑˆˆÝˆx‰=Œ=Ðr   )'Ú__doc__rb   r3   Ú	functoolsr   Útypingr   r   r   r   r   Úblack._width_tabler	   Úblib2to3.pytreer
   r   Ú__annotations__rc   ÚDOTALLr   rp   r   rq   r   Úboolr   r.   r?   rC   rA   r^   rd   r€   rŠ   r—   Úintr£   r©   r­   © r   r   ú<module>r¸      sƒ  ððð ð ð 
€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à *Ð *Ð *Ð *Ð *Ð *Ø  Ð  Ð  Ð  Ð  Ð  à'Ð �UÐ 'Ð 'Ñ 'Ø$˜"œ*Ø
Ð Ñ  ;Ñ.°´	ñô Ð �%ð ð ñ ð &˜2œ:ð	ð „Jñô Ð �5ð ð ñ ðD�W˜S”\ð D°ð D¸sð DÀsð Dð Dð Dð Dð,˜cð , dð ,ð ,ð ,ð ,ð¨ð °°S´	ð ð ð ð ð&˜Sð ¨#ð °#ð ð ð ð ð0˜cð  cð ð ð ð ð& S #ð  S¨$ð  Sð  Sð  Sð  SðF+˜sð + sð +ð +ð +ð +ð* €�2ÐÑÔð˜Sð  W¨S¤\ð ð ð ñ ÔððG7˜sð G7 sð G7ð G7ð G7ð G7ðT>Øð>à�$ŒZð>ð ð>ð ˆ4�Œ:�sˆ?Ôð	>ð >ð >ð >ðB:¨Tð :°dð :ð :ð :ð :ð> €�4ÐÑÔð�Sð ˜Sð ð ð ñ Ôðð4
*˜ð 
* ð 
*ð 
*ð 
*ð 
*ð 3ð °3ð ¸3ð ð ð ð ð ð r   