U
    $)3g	                     @  s   U d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	 ej
dkrTddini Zded	< d
d
dddZdddddZdddddZdS )zA bunch of useful utilities.    )annotationsN)AnyCallable)   	   ZusedforsecurityFzdict[str, Any]HASHLIB_KWARGSzCallable[..., Any])funcreturnc                   s    g t   fdd}|S )z2Decorator to memoize the result of a no-args func.c                     s   s    d S )Nr   )append r   resultr   2/tmp/pip-unpacked-wheel-9z0naxkk/streamlit/util.pywrapped_func$   s    zmemoize.<locals>.wrapped_func)	functoolswraps)r   r   r   r   r   memoize    s    r   r   str)selfr	   c                   s|   j j}dddg t i g tr@ fddtD }n fddj D }ddd |D }| d	| d
S )zA clean repr for a class, excluding both values that are likely defaults,
    and those explicitly default for dataclasses.
    N Fc                 3  sH   | ]@}|j rt|j|jkrt|j kr|jt|jfV  qd S N)reprgetattrnamedefault).0fdefaultsr   r   r   	<genexpr>6   s
   zrepr_.<locals>.<genexpr>c                 3  s"   | ]\}}| kr||fV  qd S r   r   )r   r   v)r   r   r   r   >   s      z, c                 s  s    | ]\}}| d |V  qdS )=Nr   )r   fieldvaluer   r   r   r   @   s     ())		__class____name__setdataclassesZis_dataclassfields__dict__itemsjoin)r   	classnameZfields_valsZfield_reprsr   r   r   repr_-   s    
r/   zbytes | str)sr	   c                 C  s6   t jdt}t| tr | dn| }|| | S )z(Return the md5 hash of the given string.md5zutf-8)r1   )hashlibnewr   
isinstancer   encodeupdate	hexdigest)r0   hbr   r   r   calc_md5D   s    
r:   )__doc__
__future__r   r)   r   r2   systypingr   r   version_infor   __annotations__r   r/   r:   r   r   r   r   <module>   s   
