o
    2h                     @   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__JSONCSV r   r   d/var/www/html/chatgem/venv/lib/python3.10/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.
        scalarr   )	data_kindlatest_known_versionN)
sampling_hintsgetplugin_name_DEFAULT_DOWNSAMPLING_downsample_todata_provider_data_providerr   _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)element_name)r   FrontendMetadatar'   r   r   r   frontend_metadataK   s   zScalarsPlugin.frontend_metadataNc                 C   s   | j j||tjd}dd |D }| D ]-\}}| D ]$\}}t|j}	| j|	j	||s1q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   s    z,ScalarsPlugin.index_impl.<locals>.<dictcomp>)displayNamedescription)r   list_scalarsr   PLUGIN_NAMEitemsparse_plugin_metadataplugin_contentr    okversionr   markdown_to_safe_htmlr2   display_name)r!   ctx
experimentmappingresultr/   tag_to_contenttag	metadatummdr2   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 r+t	d||f dd |D }|t
jkrRt }	t|	}
|
g d |
| |	 dfS |d	fS )
'Result of the form `(body, mime_type)`.runstagsr-   r   
downsamplerun_tag_filterNz!No scalar data for run=%r, tag=%rc                 S      g | ]
}|j |j|jfqS r   	wall_timestepvaluer.   xr   r   r   
<listcomp>s       z.ScalarsPlugin.scalars_impl.<locals>.<listcomp>)z	Wall timeStepValueztext/csvapplication/json)r   read_scalarsr   r4   r   r   RunTagFilterr   r   NotFoundErrorr	   r   ioStringIOr   writerwriterow	writerowsgetvalue)r!   r<   rA   r/   r=   output_formatall_scalarsscalarsvalues	string_ior]   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 )rE   rF   rI   c                    s$   i | ]\}}|d d |  D qS )c                 S   rL   r   rM   rQ   r   r   r   rS      rT   zBScalarsPlugin.scalars_multirun_impl.<locals>.<dictcomp>.<listcomp>r   )r.   r/   run_datarA   r   r   r0      s    z7ScalarsPlugin.scalars_multirun_impl.<locals>.<dictcomp>rW   )r   rX   r   r4   r   r   rY   r5   )r!   r<   rA   rG   r=   rb   bodyr   rh   r   scalars_multirun_impl}   s   
z#ScalarsPlugin.scalars_multirun_implc                 C   s4   t |j}t |j}| j||d}t||dS )N)r=   rW   )r   r"   environr-   rD   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.rA   r/   Nz2Both run and tag must be specified: tag=%r, run=%rformat)argsr   r   InvalidArgumentErrorr   r"   rk   r-   rf   r   rl   )	r!   rm   rA   r/   r<   r=   ra   ri   	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r#td|d }t	
|j}t	|j}| ||||\}}t|||S )z@Given a tag and list of runs, return dict of ScalarEvent arrays.POSTrA   rG      z"tag must be specified exactly oncer   )methodwerkzeug
exceptionsMethodNotAllowedformgetlistlenr   rq   r   r"   rk   r-   rj   r   rl   )	r!   rm   rH   rG   rA   r<   r=   ri   rr   r   r   r   r%      s   
z$ScalarsPlugin.scalars_multirun_route)N)r   r   r   r   r   r4   r   r#   r(   r)   r,   rD   rf   rj   r   Requestapplicationr&   r$   r%   r   r   r   r   r   -   s     


r   )r   r   r[   werkzeug.exceptionsrv   r   tensorboardr   r   tensorboard.backendr   tensorboard.datar   tensorboard.pluginsr   tensorboard.plugins.scalarr   r   r	   TBPluginr   r   r   r   r   <module>   s   