o
    d=                     @   s4  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZ e Zdd Zdd Z		d-d
dZdd Zdd ZG dd deZdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd.d"d#Z d$d% Z!G d&d' d'ej"j#Z$d(d) Z%d*e&fd+d,Z'dS )/    Nescapewrapsc                 C   s   ddl m} || S )Nr   )to_json_plotly)plotly.io.jsonr   )valuer    r	   P/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/dash/_utils.pyto_json   s   r   c                 K   s2   | }|  D ]\}}d| d }|||}q|S )Nz{%z%})itemsreplace)templatedataskvkeyr	   r	   r
   interpolate_str   s
   r    Fc                    sh   d  fdd| D }d|  d| }|r|d7 }|S |r&|d7 }|S |d| d|  d 7 }|S )N c                    s,   g | ]\}}| d  rt |n| dqS )z=""r   ).0r   r   sanitizer	   r
   
<listcomp>&   s   , zformat_tag.<locals>.<listcomp><z/>>z</)joinr   )tag_name
attributesinnerclosedopenedr   tagr	   r   r
   
format_tag"   s   r%   c                   C   s   t t jdS )N-)struuiduuid4hexstripr	   r	   r	   r
   generate_hash2   s   r,   c                 C   s   t tj| S N)getattrcollectionsabc)memberr	   r	   r
   patch_collections_abc7      r2   c                       sT   e Zd ZdZdd Zdd ZdddZdd
dZ fddZdd Z	dd Z
  ZS )AttributeDicta'  Dictionary subclass enabling attribute lookup/assignment of keys/values.

    For example::
        >>> m = AttributeDict({'foo': 'bar'})
        >>> m.foo
        'bar'
        >>> m.foo = 'not bar'
        >>> m['foo']
        'not bar'
    ``AttributeDict`` objects also provide ``.first()`` which acts like
    ``.get()`` but accepts multiple keys as arguments, and returns the value of
    the first hit, e.g.::
        >>> m = AttributeDict({'foo': 'bar', 'biz': 'baz'})
        >>> m.first('wrong', 'incorrect', 'foo', 'biz')
        'bar'
    c                 C   s   || |< d S r-   r	   )selfr   r   r	   r	   r
   __setattr__M   r3   zAttributeDict.__setattr__c                 C   s$   z| | W S  t y   Y t|w r-   )KeyErrorAttributeError)r5   r   r	   r	   r
   __getattr__P   s   
zAttributeDict.__getattr__Attribute is read-onlyc                    s@    fdd|D }t | ddr| j| dS t| d| dS )z
        Designate named attributes as read-only with the corresponding msg

        Method is additive. Making additional calls to this method will update
        existing messages and add to the current set of _read_only names.
        c                    s   i | ]}| qS r	   r	   )r   namemsgr	   r
   
<dictcomp>`   s    z/AttributeDict.set_read_only.<locals>.<dictcomp>
_read_onlyFN)r.   r?   updateobjectr6   )r5   namesr=   new_read_onlyr	   r<   r
   set_read_onlyY   s   zAttributeDict.set_read_only*Object is final: No new keys may be added.c                 C   s   t | d| dS )zPrevent any new keys being set._finalN)rA   r6   )r5   r=   r	   r	   r
   finalizef   s   zAttributeDict.finalizec                    sR   || j di v rt| j| || j d}|r"|| vr"t||t ||S )Nr?   rF   )__dict__getr8   r?   super__setitem__)r5   r   val	final_msg	__class__r	   r
   rK   j   s   
zAttributeDict.__setitem__c                 C   s   |  D ]\}}|| |< qd S r-   )r   )r5   otherr   r   r	   r	   r
   r@   t   s   
zAttributeDict.updatec                 G   s6   |D ]}|  |}|r|  S q|stt| i S d S r-   )rI   nextiter)r5   rB   r;   r   r	   r	   r
   firstz   s   
zAttributeDict.first)r:   )rE   )__name__
__module____qualname____doc__r6   r9   rD   rG   rK   r@   rS   __classcell__r	   r	   rN   r
   r4   ;   s    
	

r4   c                    sH   d fdd t | ttfr dd fdd| D  d S  | S )Nc                    sZ   |   ddd | j }| jr+ s$tddd D d  |d  7 }|S )N.z\.c                 s   s    | ]}t |V  qd S r-   )r'   r   xr	   r	   r
   	<genexpr>       z6create_callback_id.<locals>._concat.<locals>.<genexpr>utf-8@)	component_id_strr   component_propertyallow_duplicatehashlibmd5r   encode	hexdigest)r[   _id)hashed_inputsinputsr	   r
   _concat   s   z#create_callback_id.<locals>._concat.....c                 3   s    | ]} |V  qd S r-   r	   rZ   )rj   r	   r
   r\      r]   z%create_callback_id.<locals>.<genexpr>)
isinstancelisttupler   )outputri   r	   )rj   rh   ri   r
   create_callback_id   s
    rq   c                 C   s@   |  drdd | dd dD S | dd\}}||d	S )
Nrk   c                 S      g | ]}t |qS r	   )split_callback_id)r   oir	   r	   r
   r          z%split_callback_id.<locals>.<listcomp>   rl   rY      )idproperty)
startswithsplitrsplit)callback_idid_propr	   r	   r
   rs      s   

rs   c                 C   s   t | trtj| dddS | S )NT),:)	sort_keys
separators)rm   dictjsondumps)r   r	   r	   r
   stringify_id   s   
r   c                 C   sZ   t  }| D ]%}t|tr|n|g}|D ]}t|d }|d|| d|d  < qq|S )Nry   r   rY   rz   )r4   rm   rn   r   rI   )inputs_listri   iinputsiiiid_strr	   r	   r
   inputs_to_dict   s   r   c                 C   s@   g }| D ]}t |tr|t| q|dd |D  q|S )Nc                 S   rr   r	   )r4   r   r   r	   r	   r
   r      ru   z,convert_to_AttributeDict.<locals>.<listcomp>)rm   r   appendr4   )nested_listnew_dictr   r	   r	   r
   convert_to_AttributeDict   s   
r   c                 C   s   dd | D S )Nc                 S   s.   g | ]}t |trd d |D n|dqS )c                 S   s   g | ]}| d qS )r   )rI   r   r	   r	   r
   r      s    z-inputs_to_vals.<locals>.<listcomp>.<listcomp>r   )rm   rn   rI   )r   r   r	   r	   r
   r      s     z"inputs_to_vals.<locals>.<listcomp>r	   )ri   r	   r	   r
   inputs_to_vals   s   r   c              	   C   s   t jdk}tjtj| |d|dE}|  | d u r>t	d z|
  W n ty=   td |  |
  Y nw W d    d S W d    d S W d    d S 1 sYw   Y  d S )Nwin32)posix)shellu/   🚨 trying to terminate subprocess in safe wayu!   🚨 first try communicate failed)sysplatform
subprocessPopenshlexr|   waitpollloggerwarningcommunicate	Exception	exceptionkill)cmdis_winprocr	   r	   r
   run_command_with_process   s$   


	"r   c                 C   sJ   t j| dd}t| d W  d    S 1 sw   Y  d S )Nr^   )encoding)ioopenrc   rd   readre   rf   )pathfpr	   r	   r
   compute_md5   s   $r   c                    s    fdd}|S )Nc                    s   t   fdd}|S )Nc                     s0   t d j  | i |}t d j |S )Nu   🏗️  [%s] 🏗️️  - %su/   ::: 🍻🍻🍻 [%s] job done 🍻🍻🍻 :::)r   inforT   )argskwargsres)funcr=   r	   r
   _wrapper   s   z&job.<locals>.wrapper.<locals>._wrapperr   )r   r   r<   )r   r
   wrapper   s   zjob.<locals>.wrapperr	   )r=   r   r	   r<   r
   job   s   
r   c                 C   s   d dd t| D S )Nr   c                 s   s"    | ]}t tjtj V  qd S r-   )secretschoicestringascii_lettersdigits)r   _r	   r	   r
   r\      s    
zgen_salt.<locals>.<genexpr>)r   range)charsr	   r	   r
   gen_salt   s   
r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )
OrderedSetc                 G   s   g | _ |D ]}| | qd S r-   )_dataadd)r5   r   r   r	   r	   r
   __init__   s   zOrderedSet.__init__c                 C   s   || j vr| j | d S d S r-   )r   r   r5   r   r	   r	   r
   r      s   
zOrderedSet.addc                 C   s   | j | d S r-   )r   remover   r	   r	   r
   discard   s   zOrderedSet.discardc                 C   s
   || j v S r-   r   )r5   r[   r	   r	   r
   __contains__      
zOrderedSet.__contains__c                 C   s
   t | jS r-   )lenr   )r5   r	   r	   r
   __len__   r   zOrderedSet.__len__c                 c   s    | j D ]}|V  qd S r-   r   )r5   r   r	   r	   r
   __iter__  s   
zOrderedSet.__iter__N)	rT   rU   rV   r   r   r   r   r   r   r	   r	   r	   r
   r      s    r   c                 C   s   t | ttfs
| gS | S r-   )rm   rn   ro   )objr	   r	   r
   coerce_to_list  s   r   r;   c                 C   s   |  dd S )Nr_   r   )r|   )r;   r	   r	   r
   clean_property_name  s   r   )r   FFF)r   )(r   r   r(   rc   r/   r   loggingr   r   r   r   htmlr   	functoolsr   	getLoggerr   r   r   r%   r,   r2   r   r4   rq   rs   r   r   r   r   r   r   r   r   r0   
MutableSetr   r   r'   r   r	   r	   r	   r
   <module>   sD   	
H


