o
    &jG                     @   s   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 d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d
ZdZdddZdddZdd ZG dd deZe dd Zdd ZdS )    N)BytesIO)request)	LogReader)MemCache)GraphReader)lib)ClientManager)logger       c                 C   s   ||| dS )N)statusmsgdata )r   r   r   r   r   T/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/visualdl/server/api.py
gen_result#   s   r   application/jsonc                    s    fdd}|S )Nc                    s   t   fdd}|S )Nc              
      s   d }d}d}z | g|R i |}W n t y, } zd|}d}W Y d }~nd }~ww dkr:tt|||}trC| }n1}d urtdv rtt }tjd|d}	|	 }
|	
|
 W d    n1 skw   Y  | }||fS )	Nr   r   z{}r   zcontent-encodingwb)modefileobj)	Exceptionformatjsondumpsr   callabler   gzipGzipFileencodewritegetvalue)selfargskwargsr   r   r   eZheaders_outputbuffpZ
gzip_value)funcheadersmimetyper   r   wrapper)   s0   


z*result.<locals>.decorator.<locals>.wrapper)	functoolswraps)r(   r+   r)   r*   )r(   r   	decorator(   s   zresult.<locals>.decoratorr   )r*   r)   r/   r   r.   r   result'   s   r0   c                 O   s.   t jt| tg|R i |}|std |S )Nz#Internal server error. Retry later.)r   retryerror_retry_timeserror_sleep_timer	   error)functionr#   r$   resr   r   r   try_callG   s   
r7   c                   @   s  e Zd Zdd Zdd Zdd Ze dd Zd	d
 Ze dd Z	e dd Z
e dd Ze dd Ze dd Ze dd Ze dd Ze dd Ze dd Ze dd Ze dd  Ze d!d" Ze d#d$ Ze d%d& Ze d'd( Ze d)d* Zed+dod-d.Ze d/d0 Ze d1d2 Zed+dod3d4Zed+dod5d6Ze d7d8 Zed9dpd;d<Ze d=d> Z ed?dpd@dAZ!e dBdC Z"edDdpdEdFZ#e 	G	H	IdqdJdKZ$e dLdM Z%edNdOdP Z&edQdRdS Z'e dTdU Z(e dVdW Z)e dXdY Z*e dZd[ Z+e d\d] Z,e d^d_ Z-edQd`da dbdc Z.e ddde Z/e dfdg Z0e dhdi Z1e djdk Z2e dldm Z3dnS )rApic                 C   s~   t || _t|| _| j| j |r)d|v r| j| || j_tj	|| _
nd| _
t| j| _t|d}t|| _d S )Nvdlgraphr   )timeout)r   _readerr   _graph_readerZset_displaynameset_input_graphmodelospathbasename
model_namer   graph_reader_client_managerr   r   Z	cache_get_cache)r"   logdirr>   cache_timeoutcacher   r   r   __init__P   s   


zApi.__init__c                 O   s   | j ||| jg|R i |S N)rD   r;   r"   keyr(   r#   r$   r   r   r   _get`   s   zApi._getc                 O   s    | j |t|| jg|R i |S rI   )rD   r7   r;   rJ   r   r   r   _get_with_retryc   s    zApi._get_with_retryc                 C      |  dtjS )Nzdata/components)rL   r   Zget_componentsr"   r   r   r   
componentsf      zApi.componentsc                 C   s2   t  }|| jjdd || jjdd |S )zE
        Get all component tabs supported by readers in Api.
        T)update)setrR   r;   component_tabsr<   )r"   tabsr   r   r   rT   j   s   zApi.component_tabsc                 C   rN   )Nz	data/runs)rL   r   Zget_runsrO   r   r   r   runss   rQ   zApi.runsc                 C   s   t j}| j|}t|S rI   )r   remote_addrrC   get_datar   Zget_graph_runs)r"   	client_ipgraph_readerr   r   r   
graph_runsw   s   
zApi.graph_runsc                 C   rN   )Nz	data/tags)rL   r   Zget_tagsrO   r   r   r   tags}   rQ   zApi.tagsc                 C   rN   )Nz	data/logs)rL   r   Zget_logsrO   r   r   r   logs   rQ   zApi.logsc                 C   rN   )Nzdata/plugin/scalars/tags)rM   r   Zget_scalar_tagsrO   r   r   r   scalar_tags      zApi.scalar_tagsc                 C   rN   )Nzdata/plugin/multiscalars/tags)rM   r   Zget_scalars_tagsrO   r   r   r   scalars_tags   r_   zApi.scalars_tagsc                 C   rN   )Nzdata/plugin/images/tags)rM   r   Zget_image_tagsrO   r   r   r   
image_tags   r_   zApi.image_tagsc                 C   rN   )Nzdata/plugin/text/tags)rM   r   Zget_text_tagsrO   r   r   r   	text_tags   rQ   zApi.text_tagsc                 C   rN   )Nzdata/plugin/audio/tags)rM   r   Zget_audio_tagsrO   r   r   r   
audio_tags   r_   zApi.audio_tagsc                 C   rN   )Nzdata/plugin/embeddings/tags)rM   r   Zget_embeddings_tagsrO   r   r   r   embedding_tags   r_   zApi.embedding_tagsc                 C   rN   )Nzdata/plugin/pr_curves/tags)rM   r   Zget_pr_curve_tagsrO   r   r   r   pr_curve_tags   r_   zApi.pr_curve_tagsc                 C   rN   )Nzdata/plugin/roc_curves/tags)rM   r   Zget_roc_curve_tagsrO   r   r   r   roc_curve_tags   r_   zApi.roc_curve_tagsc                 C   rN   )Nzdata/plugin/hparams/importance)rM   r   Zget_hparam_importancerO   r   r   r   hparam_importance   r_   zApi.hparam_importancec                 C   rN   )Nzdata/plugin/hparams/indicators)rM   r   Zget_hparam_indicatorrO   r   r   r   hparam_indicator   r_   zApi.hparam_indicatorc                 C   rN   )Nzdata/plugin/hparams/list)rM   r   Zget_hparam_listrO   r   r   r   hparam_list   r_   zApi.hparam_listc                 C   "   t jd||}| |tj||S )Nzdata/plugin/hparams/metric)r?   r@   joinrM   r   Zget_hparam_metric)r"   runmetricrK   r   r   r   hparam_metric      zApi.hparam_metricztext/csvtsvc                 C      t jd|}| |tj|S )Nzdata/plugin/hparams/data)r?   r@   rk   rM   r   Zget_hparam_data)r"   typerK   r   r   r   hparam_data      zApi.hparam_datac                 C   rj   )Nzdata/plugin/scalars/scalars)r?   r@   rk   rM   r   Z
get_scalarr"   rl   tagrK   r   r   r   scalar_list   ro   zApi.scalar_listc                 C   &   t jd|||}| |tj|||S )Nz data/plugin/multiscalars/scalars)r?   r@   rk   rM   r   Zget_scalars)r"   rl   rv   sub_tagrK   r   r   r   scalars_list   s   zApi.scalars_listc                 C   rx   )Nzdata/plugin/scalars/data)r?   r@   rk   rM   r   Zget_scalar_data)r"   rl   rv   rr   rK   r   r   r   scalar_data   s   zApi.scalar_datac                 C   s*   t jd||||}| |tj||||S )Nzdata/plugin/multiscalars/data)r?   r@   rk   rM   r   Zget_scalars_data)r"   rl   rv   ry   rr   rK   r   r   r   scalars_data   s   zApi.scalars_datac                 C   rj   )Nzdata/plugin/images/images)r?   r@   rk   rM   r   Zget_image_tag_stepsr"   r   rv   rK   r   r   r   
image_list   ro   zApi.image_listz	image/pngr   c                 C   2   t |}tjd||t|}| |tj|||S )Nz"data/plugin/images/individualImage)intr?   r@   rk   strrM   r   Zget_individual_imager"   r   rv   indexrK   r   r   r   image_image      zApi.image_imagec                 C   rj   )Nzdata/plugin/text/text)r?   r@   rk   rM   r   Zget_text_tag_stepsr}   r   r   r   	text_list   ro   zApi.text_listz
text/plainc                 C   r   )Nzdata/plugin/text/individualText)r   r?   r@   rk   r   rM   r   Zget_individual_textr   r   r   r   	text_text   r   zApi.text_textc                 C   rj   )Nzdata/plugin/audio/audio)r?   r@   rk   rM   r   Zget_audio_tag_stepsru   r   r   r   
audio_list   ro   zApi.audio_listz	audio/wavc                 C   r   )Nz!data/plugin/audio/individualAudio)r   r?   r@   rk   r   rM   r   Zget_individual_audio)r"   rl   rv   r   rK   r   r   r   audio_audio   r   zApi.audio_audiodefaultpcar   c                 C   s4   t |}tjd|t||}| |tj||||S )Nz!data/plugin/embeddings/embeddings)r   r?   r@   rk   r   rM   r   Zget_embeddings)r"   rl   rv   	reduction	dimensionrK   r   r   r   embedding_embedding  s   
zApi.embedding_embeddingc                 C   rN   )Nzdata/plugin/embeddings/list)rM   r   Zget_embeddings_listrO   r   r   r   embedding_list  r_   zApi.embedding_listztext/tab-separated-valuesc                 C   rq   )Nzdata/plugin/embeddings/metadata)r?   r@   rk   rM   r   Zget_embedding_labelsr"   namerK   r   r   r   embedding_metadata  rt   zApi.embedding_metadatazapplication/octet-streamc                 C   rq   )Nzdata/plugin/embeddings/tensor)r?   r@   rk   rM   r   Zget_embedding_tensorsr   r   r   r   embedding_tensor  rt   zApi.embedding_tensorc                 C   rN   )Nzdata/plugin/histogram/tags)rM   r   Zget_histogram_tagsrO   r   r   r   histogram_tags  r_   zApi.histogram_tagsc                 C   rj   )Nzdata/plugin/histogram/histogram)r?   r@   rk   rM   r   Zget_histogramru   r   r   r   histogram_list#  ro   zApi.histogram_listc                 C   rj   )Nzdata/plugin/pr_curves/pr_curve)r?   r@   rk   rM   r   Zget_pr_curveru   r   r   r   pr_curves_pr_curve(  ro   zApi.pr_curves_pr_curvec                 C   rj   )Nz data/plugin/roc_curves/roc_curve)r?   r@   rk   rM   r   Zget_roc_curveru   r   r   r   roc_curves_roc_curve-  ro   zApi.roc_curves_roc_curvec                 C   rq   )Nzdata/plugin/pr_curves/steps)r?   r@   rk   rM   r   Zget_pr_curve_stepr"   rl   rK   r   r   r   pr_curves_steps2  rt   zApi.pr_curves_stepsc                 C   rq   )Nzdata/plugin/roc_curves/steps)r?   r@   rk   rM   r   Zget_roc_curve_stepr   r   r   r   roc_curves_steps7  rt   zApi.roc_curves_stepsc                 C   s   t | jrdd| j iS d S )NzContent-Dispositionzattachment; filename="%s")lenrB   )sr   r   r   <lambda><  s
   
zApi.<lambda>c                 C   s   t jd}| |tjS )Nzdata/plugin/graphs/static_graph)r?   r@   rk   rM   r   Zget_static_graph)r"   rK   r   r   r   graph_static_graph<  s   zApi.graph_static_graphc                 C   sl   t j}| j|}|d ur| dkrd}nd}nd}|d ur+| dkr(d}nd}nd}tj||||dS )NtrueTF)
expand_allrefreshr   rW   rC   rX   lowerr   Z	get_graph)r"   rl   r   r   rY   rZ   r   r   r   graph_graphC  s   zApi.graph_graphc                 C   sr   t j}| j|}t j}d|v r5t jd }d|jv r%||j d d S d|jv r7||j d d S d S d S )NfileZpdmodelr9   )	r   rW   rC   rX   filesfilenamer=   streamread)r"   rY   rZ   r   Zfile_handler   r   r   graph_uploadX  s   


zApi.graph_uploadc                 C   l   t j}| j|}|d ur| dkrd}nd}nd}|d ur+| dkr(d}nd}nd}t|||||S Nr   TFr   )r"   rl   nodeidexpand
keep_staterY   rZ   r   r   r   graph_manipulatef  s   zApi.graph_manipulatec                 C   r   r   )r   rW   rC   rX   r   r   Zget_graph_search)r"   rl   r   r   is_noderY   rZ   r   r   r   graph_searchz  s   zApi.graph_searchc                 C   s   t j}| j|}t||S rI   )r   rW   rC   rX   r   Zget_graph_all_nodes)r"   rl   rY   rZ   r   r   r   graph_get_all_nodes  s   zApi.graph_get_all_nodesN)rp   )r   )r   r   r   )4__name__
__module____qualname__rH   rL   rM   r0   rP   rT   rV   r[   r\   r]   r^   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rn   rs   rw   rz   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   r   r8   O   s    
	


































r8   c                 G   sN   t  }| jrt| jS | jr$|D ]}||d| |d qt|S dgS )zi
    Get component tabs in all apis, so tabs can be presented according to existed data in frontend.
    rT   Zstatic_graph)rS   rT   listrE   rR   add)Zvdl_argsZrequest_argsZapisZall_tabsapir   r   r   get_component_tabs  s   
r   c                    st  t | ||}i d|jg fd|jg fd|jg fd|jg fd|jg fd|jg fd|jg fd|jg fd	|j	g fd
|j
g fd|jg fd|jg fd|jg fd|jg fd|jddgfd|jg dfd|jg dfi d|jg dfd|jddgfd|jg dfd|jddgfd|jg dfd|jddgfd|jg dfd|jg d fd!|jg fd"|jd#gfd$|jd#gfd%|jddgfd&|jg d'fd(|jg fd)|j g fd*|j!g d+fd,|j"dgf|j#g d-f|j$ddgf|j%ddgf|j&dgf|j'dgf|j(g f|j)d.gf|j*g f|j+g f|j,dd/gf|j-g fd0 d1t.f fd2d3}|S )4NrP   rV   r[   r\   r]   zscalar/tagszscalars/tagsz
image/tagsz	text/tagsz
audio/tagszembedding/tagszhistogram/tagszpr-curve/tagszroc-curve/tagszscalar/listrl   rv   zscalars/list)rl   rv   ry   zscalar/data)rl   rv   rr   zscalars/data)rl   rv   ry   rr   z
image/listzimage/image)rl   rv   r   z	text/listz	text/textz
audio/listzaudio/audiozembedding/embedding)rl   rv   r   r   zembedding/listzembedding/tensorr   zembedding/metadatazhistogram/listzgraph/graph)rl   r   r   zgraph/static_graphzgraph/uploadzgraph/search)rl   r   r   r   zgraph/get_all_nodes)rl   r   r   r   rr   rm   )zgraph/manipulatezpr-curve/listzroc-curve/listzpr-curve/stepszroc-curve/stepszhparams/importancezhparams/datazhparams/indicatorszhparams/listzhparams/metricrT   r@   c                    sH    | }|sttddddd fS |\}} fdd|D }|| S )N   zapi not found)r   r   r   c                    s   g | ]}  |qS r   )get).0r   r#   r   r   
<listcomp>  s    z1create_api_call.<locals>.call.<locals>.<listcomp>)r   r   r   r   )r@   r#   ZroutemethodZcall_arg_namesZ	call_argsZroutesr   r   call  s   
zcreate_api_call.<locals>.call)/r8   rP   rV   r[   r\   r]   r^   r`   ra   rb   rc   rd   r   re   rf   rw   rz   r{   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rg   rs   rh   ri   rn   rT   r   )rE   r>   rF   r   r   r   r   r   create_api_call  s   








	







 
!"$%


3	r   )Nr   r   )r   N)r,   r   r   r?   ior   Zflaskr   Zvisualdlr   Zvisualdl.python.cacher   Zvisualdl.reader.graph_readerr   Zvisualdl.serverr   Zvisualdl.server.client_managerr   Zvisualdl.server.logr	   r2   r3   r   r0   r7   objectr8   r   r   r   r   r   r   <module>   s.   

   J
