o
    Yhx                     @  s  U d dl mZ d dlZd dlZd dlmZmZ d dlmZ er%d dl	m
Z
 edZded< d<ddZd=ddZd=ddZd>ddZd?ddZd@ddZdAdd ZdBd"d#ZdCd'd(Zeh d)eed*d+d,h B Zded-< dDd0d1ZdEd3d4Zed5Zded6< dFd7d8ZdGd:d;ZdS )H    )annotationsN)TYPE_CHECKINGFinal)StreamlitAPIException)SupportsStrz^[a-zA-Z0-9_&\-\. ]+$r   _ALPHANUMERIC_CHAR_REGEXtextr   returnstrc                 C  s   t t|  S )z;Convert an object to text, dedent it, and strip whitespace.)textwrapdedentr
   stripr    r   V/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/streamlit/string_util.py
clean_text   s   r   boolc                 C  s   | r
t t| du S dS )zCheck if a string contains any special chars.

    Special chars in that case are all chars that are not
    alphanumeric, underscore, hyphen or whitespace.
    NF)rematchr   r   r   r   r   _contains_special_chars"   s   r   c                 C  s(   t | sdS ddlm} | dd|v S )z'Check if input string is a valid emoji.Fr   )
ALL_EMOJISu   ️ )r   streamlit.emojisr   replace)r   r   r   r   r   is_emoji+   s   r   
maybe_iconc                 C  s   ddl m} | |v S )z/Check if input string is a valid Material icon.r   )ALL_MATERIAL_ICONS)streamlit.material_icon_namesr   )r   r   r   r   r   is_material_icon5   s   r   icon
str | Nonec                 C  s"   | dur|  drt| S t| S )zFValidate an icon or emoji and return it in normalized format if valid.Nz	:material)
startswithvalidate_material_iconvalidate_emoji)r   r   r   r   validate_icon_or_emoji<   s   r$   maybe_emojic                 C  s(   | d u rdS t | r| S td|  d)Nr   zThe value "zZ" is not a valid emoji. Shortcodes are not allowed, please use a single character instead.)r   r   )r%   r   r   r   r#   C   s   
r#   maybe_material_iconc                 C  s   dg}| du r	dS d}t || }d}|s&td| d|d  d| d	| \}}||vs6|r6t|sGtd| d|d  d| d
d| d| dS )z^Validate a Material icon shortcode and return the icon in
    normalized format if valid.
    materialNr   z^\s*:(.+)\/(.+):\s*$u   ​zThe value `"/zW"` is not a valid Material icon. Please use a Material icon shortcode like **`:materialz/thumb_up:`**z/thumb_up:`**.:)r   r   r   r   groupsr   )r&   supported_icon_packs
icon_regex
icon_matchinvisible_white_space	pack_name	icon_namer   r   r   r"   O   s2   r"   tuple[str, str]c                 C  sL   t | sd| fS ddlm} t|| }|du rd| fS |d|dfS )zReturn a tuple containing the first emoji found in the given string and
    the rest of the string (minus an optional separator between the two).
    r   r   )EMOJI_EXTRACTION_REGEXN      )r   r   r2   r   searchgroup)r   r2   re_matchr   r   r   extract_leading_emojiy   s   r8   stringcharintc                 C  s6   d}d}| D ]}||kr|d7 }t ||}qd}q|S )zBReturns the count of the max sequence of a given char in a string.r   r3   )max)r9   r:   max_sequencecurrent_sequencecr   r   r   max_char_sequence   s   r@   >         	   
                      	TEXTCHARSinpbytesc                 C  s   t | dtS )z8Guess if an input bytesarray can be encoded as a string.N)r   	translaterK   )rL   r   r   r   is_binary_string   s   rO   numc                 C  s\   t | d}d}t|dkr|d7 }|d }t|dksd|ddd	g d
| S )z:Simplifies number into Human readable format, returns str.z.2gr   i  r3   g     @@z{}{}f0.)r   kmbt)floatabsformatrstrip)rP   num_converted	magnituder   r   r   simplify_number   s   
r^   z0^\<[a-zA-Z_]+[a-zA-Z0-9<>._ ]* at 0x[0-9a-f]+\>$_OBJ_MEM_ADDRESSc                 C  s   t t| S )zAReturns True if the string looks like <foo blarg at 0x15ee6f9a0>.)r   r_   r   )r9   r   r   r   is_mem_address_str   s   r`   camel_case_strc                 C  s    t dd| }t dd| S )zConverts UpperCamelCase and lowerCamelCase to snake_case.

    Examples
    --------
        fooBar -> foo_bar
        BazBang -> baz_bang

    z(.)([A-Z][a-z]+)z\1_\2z([a-z0-9])([A-Z]))r   sublower)ra   s1r   r   r   to_snake_case   s   	re   )r   r   r	   r
   )r   r
   r	   r   )r   r
   r	   r   )r   r    r	   r
   )r%   r    r	   r
   )r&   r    r	   r
   )r   r
   r	   r1   )r9   r
   r:   r
   r	   r;   )rL   rM   r	   r   )rP   r;   r	   r
   )r9   r
   r	   r   )ra   r
   r	   r
   ) 
__future__r   r   r   typingr   r   streamlit.errorsr   streamlit.type_utilr   compiler   __annotations__r   r   r   r   r$   r#   r"   r8   r@   	bytearraysetrangerK   rO   r^   r_   r`   re   r   r   r   r   <module>   s6   


	





*



