o
    2h!                     @   s  d 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 dd Zdd	 Zd
d Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'd d! Z(d"d# Z)d$S )%aH  Utilities to migrate legacy summaries/events to generic data form.

For legacy summaries, this populates the `SummaryMetadata.data_class`
field and makes any necessary transformations to the tensor value. For
`graph_def` events, this creates a new summary event.

This should be effected after the `data_compat` transformation.
    )	event_pb2)summary_pb2)metadata)tensor_utilc                 C   sB   |  d}|dkrt| S |dkrt| S |dkrt| |S | fS )a  Migrate an event to a sequence of events.

    Args:
      event: An `event_pb2.Event`. The caller transfers ownership of the
        event to this method; the event may be mutated, and may or may
        not appear in the returned sequence.
      initial_metadata: Map from tag name (string) to `SummaryMetadata`
        proto for the initial occurrence of the given tag within the
        enclosing run. While loading a given run, the caller should
        always pass the same dictionary here, initially `{}`; this
        function will mutate it and reuse it for future calls.

    Returns:
      A sequence of `event_pb2.Event`s to use instead of `event`.
    what	graph_deftagged_run_metadatasummary)
WhichOneof_migrate_graph_event"_migrate_tagged_run_metadata_event_migrate_summary_event)eventinitial_metadatar    r   W/var/www/html/chatgem/venv/lib/python3.10/site-packages/tensorboard/dataclass_compat.pymigrate_event*   s   

r   c                 C   sb   t  }| j|_| j|_|jjjtjd}| j	}|j
t|g tj|jj_tj|j_| |fS N)tag)r   Event	wall_timestepr	   valueaddgraphs_metadataRUN_GRAPH_NAMEr   tensorCopyFromr   make_tensor_protoPLUGIN_NAMEr   plugin_dataplugin_namer   DATA_CLASS_BLOB_SEQUENCE
data_class)	old_eventresultr   graph_bytesr   r   r   r   D   s   
r   c                 C   sb   t  }| j|_| j|_| j}|jjj|jd}|j	
t|jg tj|jj_tj|j_|fS r   )r   r   r   r   r   r	   r   r   r   r   r   r   r   run_metadatar   PLUGIN_NAME_TAGGED_RUN_METADATAr   r    r!   r   r"   r#   )r$   r%   trmr   r   r   r   r   S   s   
r   c                    sj   | j j} fdd|D }t|t|kr$tdd t||D r$| fS | j jd d = | j j| | fS )Nc                    s    g | ]}t | D ]}|q	qS r   )_migrate_value).0oldnewr   r   r   
<listcomp>d   s
    
z*_migrate_summary_event.<locals>.<listcomp>c                 s   s    | ]	\}}||u V  qd S )Nr   )r+   xyr   r   r   	<genexpr>i   s    
z)_migrate_summary_event.<locals>.<genexpr>)r	   r   lenallzipextend)r   r   values
new_valuesr   r.   r   r   b   s   
r   c                 C   s  | | j}d}|du rd}t }|| j ||| j< |jtjkr&| fS |jj	}|t
jkr3t| S |tjkr<t| S |tjkrEt| S |tjkrNt| S |tjkrWt| S |tjkr`t| S |tjkrit| S |tjkrrt| S |tjkr{t| S |tjtjtj fv rt!| S | fS )z;Convert an old value to a stream of new values. May mutate.FNT)"getr   r   SummaryMetadatar   r   r#   DATA_CLASS_UNKNOWNr    r!   histograms_metadatar   _migrate_histogram_valueimages_metadata_migrate_image_valueaudio_metadata_migrate_audio_valuescalars_metadata_migrate_scalar_valuetext_metadata_migrate_text_valuehparams_metadata_migrate_hparams_valuepr_curves_metadata_migrate_pr_curve_valuemesh_metadata_migrate_mesh_valuecustom_scalars_metadata_migrate_custom_scalars_valuer   PLUGIN_NAME_RUN_METADATA#PLUGIN_NAME_RUN_METADATA_WITH_GRAPHPLUGIN_NAME_KERAS_MODEL_migrate_graph_sub_plugin_value)r   r   r   initialr!   r   r   r   r*   r   sF   









r*   c                 C      |  dr
tj| j_| fS Nr   )HasFieldr   DATA_CLASS_SCALARr   r#   r   r   r   r   rC         

rC   c                 C   rS   rT   rU   r   DATA_CLASS_TENSORr   r#   rW   r   r   r   r=      rX   r=   c                 C   rS   rT   )rU   r   r"   r   r#   rW   r   r   r   r?      rX   r?   c                 C   rS   rT   rY   rW   r   r   r   rE      rX   rE   c                 C   sx   |  dr
tj| j_| j}d}t|jjdkr(||jj	 j
9 }t|jjdks|dkr9|jd d | |jd d < | fS )Nr      )rU   r   r"   r   r#   r   r3   tensor_shapedimpopsize
string_val)r   r   strider   r   r   rA      s   

rA   c                 C   s2   |  dr
tj| j_|  ds| jtj | fS )Nr   r   )	rU   r   rZ   r   r#   r   r   rF   NULL_TENSORrW   r   r   r   rG      s
   


rG   c                 C   rS   rT   rY   rW   r   r   r   rI      rX   rI   c                 C   rS   rT   rY   rW   r   r   r   rK      rX   rK   c                 C   rS   rT   rY   rW   r   r   r   rM      rX   rM   c                 C   s4   |  dr
tj| j_| jjj}|s|jdd | fS )Nr   r[   )r_   )	rU   r   r"   r   r#   r   r\   r]   r   )r   shaper   r   r   rQ      s   


rQ   N)*__doc__tensorboard.compat.protor   r   tensorboard.plugins.audior   r@   !tensorboard.plugins.custom_scalarrL   tensorboard.plugins.graphr   tensorboard.plugins.histogramr<   tensorboard.plugins.hparamsrF   tensorboard.plugins.imager>   tensorboard.plugins.meshrJ   tensorboard.plugins.pr_curverH   tensorboard.plugins.scalarrB   tensorboard.plugins.textrD   tensorboard.utilr   r   r   r   r   r*   rC   r=   r?   rE   rA   rG   rI   rK   rM   rQ   r   r   r   r   <module>   s:   
*