a
    
d                     @   s   d 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
ZG dd dZG dd dejZdS )zwThe TensorBoard Scalars plugin.

See `http_api.md` in this directory for specifications of the routes for
this plugin.
    N)wrappers)errors)plugin_util)	http_util)provider)base_plugin)metadatai  c                   @   s   e Zd ZdZdZdZdS )OutputFormatz<An enum used to list the valid output formats for API calls.jsoncsvN)__name__
__module____qualname____doc__ZJSONCSV r   r   r/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/tensorboard/plugins/scalar/scalars_plugin.pyr	   &   s   r	   c                   @   s   e Zd ZdZejZdd Zdd Zdd Z	dd	 Z
dddZdd Zdd Zejjdd Zejjdd Zejjdd Zd
S )ScalarsPluginzScalars Plugin for TensorBoard.c                 C   s2   |j pi | jt| _|j| _tjddd| _	dS )z}Instantiates ScalarsPlugin via TensorBoard core.

        Args:
          context: A base_plugin.TBContext instance.
        Zscalarr   )Z	data_kindZlatest_known_versionN)
Zsampling_hintsgetplugin_name_DEFAULT_DOWNSAMPLING_downsample_toZdata_provider_data_providerr   Z_MetadataVersionChecker_version_checker)selfcontextr   r   r   __init__2   s    
zScalarsPlugin.__init__c                 C   s   | j | j| jdS )N)z/scalarsz/scalars_multirunz/tags)scalars_routescalars_multirun_route
tags_router   r   r   r   get_plugin_appsA   s    zScalarsPlugin.get_plugin_appsc                 C   s   dS )NFr   r    r   r   r   	is_activeH   s    zScalarsPlugin.is_activec                 C   s   t jddS )Nztf-scalar-dashboard)Zelement_name)r   ZFrontendMetadatar    r   r   r   frontend_metadataK   s    zScalarsPlugin.frontend_metadataNc                 C   s   | j j||tjd}dd |D }| D ]Z\}}| D ]H\}}t|j}	| j|	j	||sbq:t
|j}
|j|
d|| |< q:q*|S )zJReturn {runName: {tagName: {displayName: ..., description:
        ...}}}.)experiment_idr   c                 S   s   i | ]
}|i qS r   r   ).0runr   r   r   
<dictcomp>V       z,ScalarsPlugin.index_impl.<locals>.<dictcomp>)ZdisplayNamedescription)r   Zlist_scalarsr   PLUGIN_NAMEitemsZparse_plugin_metadataZplugin_contentr   okversionr   Zmarkdown_to_safe_htmlr)   Zdisplay_name)r   ctx
experimentmappingresultr&   Ztag_to_contenttagZ	metadatumZmdr)   r   r   r   
index_implN   s$    zScalarsPlugin.index_implc              	   C   s   | j j||tj| jtj|g|gdd}||i |d}|du rVt	d||f dd |D }|t
jkrt }	t|	}
|
g d |
| |	 dfS |d	fS dS )
'Result of the form `(body, mime_type)`.runstagsr$   r   Z
downsampleZrun_tag_filterNz!No scalar data for run=%r, tag=%rc                 S   s   g | ]}|j |j|jfqS r   Z	wall_timestepvaluer%   xr   r   r   
<listcomp>s   r(   z.ScalarsPlugin.scalars_impl.<locals>.<listcomp>)z	Wall timeZStepValueztext/csvapplication/json)r   read_scalarsr   r*   r   r   RunTagFilterr   r   ZNotFoundErrorr	   r   ioStringIOr   writerwriterow	writerowsgetvalue)r   r.   r2   r&   r/   output_formatall_scalarsZscalarsvaluesZ	string_iorE   r   r   r   scalars_imple   s(    



zScalarsPlugin.scalars_implc              	      sD   | j j||tj| jtj| gdd} fdd| D }|dfS )r4   r5   r8   c                    s$   i | ]\}}|d d |  D qS )c                 S   s   g | ]}|j |j|jfqS r   r9   r<   r   r   r   r>      r(   zBScalarsPlugin.scalars_multirun_impl.<locals>.<dictcomp>.<listcomp>r   )r%   r&   Zrun_datar2   r   r   r'      s   z7ScalarsPlugin.scalars_multirun_impl.<locals>.<dictcomp>r@   )r   rA   r   r*   r   r   rB   r+   )r   r.   r2   r6   r/   rJ   bodyr   rM   r   scalars_multirun_impl}   s    
z#ScalarsPlugin.scalars_multirun_implc                 C   s4   t |j}t |j}| j||d}t||dS )N)r/   r@   )r   r   environr$   r3   r   Respond)r   requestr.   r/   indexr   r   r   r      s    zScalarsPlugin.tags_routec           	      C   s   |j d}|j d}|du s(|du r:td||f t|j}t|j}|j d}| |||||\}}t	
|||S )z9Given a tag and single run, return array of ScalarEvents.r2   r&   Nz2Both run and tag must be specified: tag=%r, run=%rformat)argsr   r   InvalidArgumentErrorr   r   rP   r$   rL   r   rQ   )	r   rR   r2   r&   r.   r/   rI   rN   	mime_typer   r   r   r      s    
zScalarsPlugin.scalars_routec           	      C   s   |j dkrtjdg|jd}|jd}t|dkrFtd|d }t	
|j}t	|j}| ||||\}}t|||S )z@Given a tag and list of runs, return dict of ScalarEvent arrays.POSTr2   r6      z"tag must be specified exactly oncer   )methodwerkzeug
exceptionsZMethodNotAllowedformgetlistlenr   rV   r   r   rP   r$   rO   r   rQ   )	r   rR   r7   r6   r2   r.   r/   rN   rW   r   r   r   r      s    
z$ScalarsPlugin.scalars_multirun_route)N)r   r   r   r   r   r*   r   r   r!   r"   r#   r3   rL   rO   r   RequestZapplicationr   r   r   r   r   r   r   r   -   s   


r   )r   r   rC   Zwerkzeug.exceptionsr[   r   Ztensorboardr   r   Ztensorboard.backendr   Ztensorboard.datar   Ztensorboard.pluginsr   Ztensorboard.plugins.scalarr   r   r	   ZTBPluginr   r   r   r   r   <module>   s   