o
    2h1                     @   s   d 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dlmZ ddlmZ ddlmZ ddlmZ ddlmZ e ZG dd dejZdS )zThe TensorBoard Graphs plugin.    N)wrappers)errors)plugin_util)	http_util)process_graph)
config_pb2)	graph_pb2)provider)base_plugin)
graph_util)
keras_util)metadata)
tb_loggingc                   @   s   e Zd ZdZejZdd Zdd Zdd Z	dd	 Z
d
d ZdddZdd Z			d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 )GraphsPluginzGraphs Plugin for TensorBoard.c                 C   s   |j | _dS )z|Instantiates GraphsPlugin via TensorBoard core.

        Args:
          context: A base_plugin.TBContext instance.
        N)data_provider_data_provider)selfcontext r   b/var/www/html/chatgem/venv/lib/python3.10/site-packages/tensorboard/plugins/graph/graphs_plugin.py__init__*   s   zGraphsPlugin.__init__c                 C   s   | j | j| jdS )N)z/graphz/infoz/run_metadata)graph_route
info_routerun_metadata_router   r   r   r   get_plugin_apps2   s   zGraphsPlugin.get_plugin_appsc                 C   s   dS )z@The graphs plugin is active iff any run has a graph or metadata.Fr   r   r   r   r   	is_active9   s   zGraphsPlugin.is_activec                 C   s   t jt jt jt jt jfS N)r   PLUGIN_NAMEPLUGIN_NAME_RUN_METADATA#PLUGIN_NAME_RUN_METADATA_WITH_GRAPHPLUGIN_NAME_KERAS_MODELPLUGIN_NAME_TAGGED_RUN_METADATAr   r   r   r   data_plugin_names=   s   zGraphsPlugin.data_plugin_namesc                 C   s   t jdddS )Nztf-graph-dashboardT)element_namedisable_reload)r
   FrontendMetadatar   r   r   r   frontend_metadataF   s   zGraphsPlugin.frontend_metadataNc                    s  i  d fdd	}| j j||tjd}| D ]#\}}| D ]\}}|jdkr.td q|||\}	}
d|
d< qq| j j||tjd}| D ]'\}}| D ]\}}|jdkr`td qQ|||\}	}
d|
d	< d|
d< qQqI| j j||tj	d}| D ]#\}}| D ]\}}|jdkrtd q|||\}	}
d|
d
< qq| j j||tj
d}| D ]\}}tj|v r||d\}}	d|d< q| j j||tjd}| D ]\}}|D ]}|||\}	}
d|
d	< qqԈ S )z9Returns a dict of all runs and their data availabilities.Nc                    s@     | | i dd}d }|r|d ||dddd}||fS )NF)runtags	run_graphr)   )tagconceptual_graphop_graphprofile)
setdefaultget)r(   r+   run_itemtag_itemresultr   r   add_row_itemQ   s$   


z,GraphsPlugin.info_impl.<locals>.add_row_item)experiment_idplugin_name   1z/Ignoring unrecognizable version of RunMetadata.Tr-   r.   r,   r*   r   )r   list_blob_sequencesr   r    itemsplugin_contentloggerwarningr   r!   r   RUN_GRAPH_NAMEr"   )r   ctx
experimentr5   mappingrun_namer)   r+   tag_data_r2   r1   r   r3   r   	info_implM   s   





	

zGraphsPlugin.info_implc           
   	   C   s   |D ];}| j j|||tj|g|gddd}||i |d}z	|d jd }	W n	 ty2   Y qw | j j||	jd  S t	
 )N)runsr)      )r6   r7   run_tag_filter
downsampler   r   )blob_key)r   read_blob_sequencesr	   RunTagFilterr0   values
IndexError	read_blobrJ   r   NotFoundError)
r   r?   r@   plugin_namesr(   r+   r7   blob_sequencesblob_sequence_datablob_refr   r   r   
_read_blob   s$   
zGraphsPlugin._read_blobc              	   C   s   |rt | ||tjg||}t|}	n7|du r-| ||tjg|tj}
t	j
|
}	n tjtjg}| |||||}tj|}tdd |jD }	t|	|| t|	dfS )=Result of the form `(body, mime_type)`; may raise `NotFound`.Nc                 S   s   g | ]}|j qS r   )pre_optimization_graph).0
func_graphr   r   r   
<listcomp>   s    z+GraphsPlugin.graph_impl.<locals>.<listcomp>text/x-protobuf)jsonloadsrU   r   r!   r   keras_model_to_graph_defr   r>   r   GraphDef
FromStringr   r    r   RunMetadatar   merge_graph_defsfunction_graphsr   prepare_graph_for_uistr)r   r?   r(   r+   is_conceptualr@   limit_attr_sizelarge_attrs_keykeras_model_configgraph	graph_rawpluginsraw_run_metadatarun_metadatar   r   r   
graph_impl   sH   	
	zGraphsPlugin.graph_implc                 C   s6   t jt jg}| |||||}tj|}t|dfS )rV   r[   )r   r"   r   rU   r   ra   r`   re   )r   r?   r@   r(   r+   rl   rm   rn   r   r   r   run_metadata_impl  s   zGraphsPlugin.run_metadata_implc                 C   s2   t |j}t |j}| ||}t||dS )Nzapplication/json)r   r   environr6   rE   r   Respond)r   requestr?   r@   infor   r   r   r     s   zGraphsPlugin.info_routec              
   C   s$  t |j}t |j}|jd}|jd}|jdd}|dkr%dnd}|du r3t|dd	d
S |jdd}|durVzt|}W n t	yU   t|dd	d
 Y S w |jdd}	z| 
|||||||	}
W n t	y } ztj||jd	d
dW  Y d}~S d}~ww |
\}}t|||S )zKGiven a single run, return the graph definition in protobuf
        format.r(   r+   
conceptualFtrueTN!query parameter "run" is required
text/plain  rg   z4query parameter `limit_attr_size` must be an integerrh   )code)r   r   rq   r6   argsr0   r   rr   int
ValueErrorro   message)r   rs   r?   r@   r(   r+   conceptual_argrf   rg   rh   r4   ebody	mime_typer   r   r   r     sN   	 zGraphsPlugin.graph_routec                 C   s   t |j}t |j}|jd}|jd}|du r$t|dddS |du r0t|dddS | ||||\}}t|||S )z9Given a tag and a run, return the session.run() metadata.r+   r(   Nz!query parameter "tag" is requiredrx   ry   rw   )	r   r   rq   r6   r{   r0   r   rr   rp   )r   rs   r?   r@   r+   r(   r   r   r   r   r   r   A  s   zGraphsPlugin.run_metadata_router   )NNN)__name__
__module____qualname____doc__r   r   r7   r   r   r   r#   r'   rE   rU   ro   rp   r   Requestapplicationr   r   r   r   r   r   r   r   %   s*    	
i
9

,r   )r   r\   werkzeugr   tensorboardr   r   tensorboard.backendr   r   tensorboard.compat.protor   r   tensorboard.datar	   tensorboard.pluginsr
   tensorboard.plugins.graphr   r   r   tensorboard.utilr   
get_loggerr<   TBPluginr   r   r   r   r   <module>   s"   