
    1Vh1                         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j.                         Z G d dej2                        Zy)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                      e Zd ZdZej
                  Zd Zd Zd Z	d Z
d ZddZd	 Z	 	 	 dd
Zd Zej"                  j$                  d        Zej"                  j$                  d        Zej"                  j$                  d        Zy)GraphsPluginzGraphs Plugin for TensorBoard.c                 &    |j                   | _        y)z|Instantiates GraphsPlugin via TensorBoard core.

        Args:
          context: A base_plugin.TBContext instance.
        N)data_provider_data_provider)selfcontexts     W/home/dcms/DCMS/lib/python3.12/site-packages/tensorboard/plugins/graph/graphs_plugin.py__init__zGraphsPlugin.__init__*   s     &33    c                 J    | j                   | j                  | j                  dS )N)z/graphz/infoz/run_metadata)graph_route
info_routerun_metadata_router   s    r   get_plugin_appszGraphsPlugin.get_plugin_apps2   s%    &&__!44
 	
r   c                      y)z@The graphs plugin is active iff any run has a graph or metadata.F r   s    r   	is_activezGraphsPlugin.is_active9   s    r   c                     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   s    r   data_plugin_nameszGraphsPlugin.data_plugin_names=   s9      --88,,44
 	
r   c                 0    t        j                  dd      S )Nztf-graph-dashboardT)element_namedisable_reload)r   FrontendMetadatar   s    r   frontend_metadatazGraphsPlugin.frontend_metadataF   s    ++-
 	
r   Nc                    i dfd	}| j                   j                  ||t        j                        }|j	                         D ]S  \  }}|j	                         D ];  \  }}|j
                  dk7  rt        j                  d       + |||      \  }	}
d|
d<   = U | j                   j                  ||t        j                        }|j	                         D ]X  \  }}|j	                         D ]@  \  }}|j
                  dk7  rt        j                  d       + |||      \  }	}
d|
d<   d|
d<   B Z | j                   j                  ||t        j                        }|j	                         D ]S  \  }}|j	                         D ];  \  }}|j
                  dk7  rt        j                  d       + |||      \  }	}
d|
d	<   = U | j                   j                  ||t        j                        }|j	                         D ])  \  }}t        j                  |v s ||d      \  }}	d|d
<   + | j                   j                  ||t        j                        }|j	                         D ]  \  }}|D ]  } |||      \  }	}
d|
d<     S )z9Returns a dict of all runs and their data availabilities.Nc                     j                  | | i dd      }d }|r&|j                  d      j                  ||dddd      }||fS )NF)runtags	run_graphr3   )tagconceptual_graphop_graphprofile)
setdefaultget)r2   r5   run_itemtag_itemresults       r   add_row_itemz,GraphsPlugin.info_impl.<locals>.add_row_itemQ   sh    ((!&	H H#<</::",1$)#(	 h''r   )experiment_idplugin_name   1z/Ignoring unrecognizable version of RunMetadata.Tr7   r8   r6   r4   r$   )r   list_blob_sequencesr   r'   itemsplugin_contentloggerwarningr&   r(   r%   RUN_GRAPH_NAMEr)   )r   ctx
experimentr>   mappingrun_namer3   r5   tag_data_r<   r;   r=   s               @r   	info_implzGraphsPlugin.info_implM   s   	(2 %%99$ DD : 

 &mmo 	,NHd!% 
,X **d2NNI  ,Xs ;H'+$
,	, %%99$ 99 : 

 &mmo 		,NHd!% ,X**d2NNI  ,Xs ;H&*#'+$,		, %%99$ 88 : 

 &mmo 	4NHd!% 4X**d2NNI  ,Xs ;H/3+,4	4 %%99$ ,, : 

 &mmo 	-NHd&&$. ,Xt <1(,%	- %%99$ @@ : 

 &mmo 	+NHd + ,Xs ;H&*#+	+
 r   c           
      ~   |D ]  }| j                   j                  |||t        j                  |g|g      d      }|j	                  |i       j	                  |d      }	 |d   j
                  d   }	| j                   j                  ||	j                        c S  t        j                         # t        $ r Y w xY w)N)runsr3      )r?   r@   run_tag_filter
downsampler!   r   )blob_key)r   read_blob_sequencesr
   RunTagFilterr:   values
IndexError	read_blobrT   r   NotFoundError)
r   rH   rI   plugin_namesr2   r5   r@   blob_sequencesblob_sequence_datablob_refs
             r   
_read_blobzGraphsPlugin._read_blob   s    ' 	K!00DD(''443%seL E N "0!3!3C!<!@!@b!I-a077: &&00h// 1  	  ""$$  s    B00	B<;B<c           	         |rMt        j                  | j                  ||t        j                  g||            }t        j                  |      }	n|R| j                  ||t        j                  g|t        j                        }
t        j                  j                  |
      }	nt        j                  t        j                  g}| j                  |||||      }t        j                  j                  |      }t!        j"                  |j$                  D cg c]  }|j&                   c}      }	t)        j*                  |	||       t-        |	      dfS c c}w z=Result of the form `(body, mime_type)`; may raise `NotFound`.ztext/x-protobuf)jsonloadsr_   r   r(   r   keras_model_to_graph_defr%   rG   r	   GraphDef
FromStringr&   r'   r   RunMetadatar   merge_graph_defsfunction_graphspre_optimization_graphr   prepare_graph_for_uistr)r   rH   r2   r5   is_conceptualrI   limit_attr_sizelarge_attrs_keykeras_model_configgraph	graph_rawpluginsraw_run_metadatarun_metadata
func_graphs                  r   
graph_implzGraphsPlugin.graph_impl   sH    !%556" 778JKE[%%&''I &&11)<E
 11<<G  $Z#s  &11<<=MNL// '3&B&B" 55E 	**?O	
 E
-..s   Ec                     t         j                  t         j                  g}| j                  |||||      }t        j
                  j                  |      }t        |      dfS ra   )r   r)   r&   r_   r   rg   rf   rl   )r   rH   rI   r2   r5   rs   rt   ru   s           r   run_metadata_implzGraphsPlugin.run_metadata_impl  s^     44--
  ??3
GS#N!--889IJL!#455r   c                     t        j                  |j                        }t        j                  |j                        }| j	                  ||      }t        j                  ||d      S )Nzapplication/json)r   r   environr?   rN   r   Respond)r   requestrH   rI   infos        r   r   zGraphsPlugin.info_route  sP    !!'//2 ..w?
~~c:.  $0BCCr   c           	         t        j                  |j                        }t        j                  |j                        }|j                  j                  d      }|j                  j                  d      }|j                  j                  dd      }|dk(  rdnd}|t        j                  |dd	d
      S |j                  j                  dd      }|	 t        |      }|j                  j                  dd      }		 | j                  |||||||	      }
|
\  }}t        j                  |||      S # t        $ r t        j                  |dd	d
      cY S w xY w# t        $ r-}t        j                  ||j                  d	d
      cY d}~S d}~ww xY w)zKGiven a single run, return the graph definition in protobuf
        format.r2   r5   
conceptualFtrueTN!query parameter "run" is required
text/plain  rn   z4query parameter `limit_attr_size` must be an integerro   )code)r   r   r{   r?   argsr:   r   r|   int
ValueErrorrw   message)r   r}   rH   rI   r2   r5   conceptual_argrm   rn   ro   r=   ebody	mime_types                 r   r   zGraphsPlugin.graph_route  s    !!'//2 ..w?
llu%llu% )),> .& 8e;$$<lC  ",,**+<dC&"%o"6 ",,**+<dC	Q__F #y  $	::/   ((J 	 (  	Q$$WaiiCPP	Qs0   D. ;E .!EE	F"F FFc                    t        j                  |j                        }t        j                  |j                        }|j                  j                  d      }|j                  j                  d      }|t        j                  |ddd      S |t        j                  |ddd      S | j                  ||||      \  }}t        j                  |||      S )z9Given a tag and a run, return the session.run() metadata.r5   r2   z!query parameter "tag" is requiredr   r   r   )	r   r   r{   r?   r   r:   r   r|   ry   )r   r}   rH   rI   r5   r2   r   r   s           r   r   zGraphsPlugin.run_metadata_routeA  s     !!'//2 ..w?
llu%llu%;$$<lC  ;$$<lC  !223
CMy  $	::r   r$   )NNN)__name__
__module____qualname____doc__r   r%   r@   r   r   r"   r*   r/   rN   r_   rw   ry   r   Requestapplicationr   r   r   r!   r   r   r   r   %   s    (&&K4


gR%2 7/r	6 !!D "D !!*; "*;X !!; ";r   r   )r   rb   werkzeugr   tensorboardr   r   tensorboard.backendr   r   tensorboard.compat.protor   r	   tensorboard.datar
   tensorboard.pluginsr   tensorboard.plugins.graphr   r   r   tensorboard.utilr   
get_loggerrE   TBPluginr   r!   r   r   <module>r      sZ    %    # ) - / . % + 0 0 . '				 l;;'' l;r   