U
    Uc!                     @   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)Z
WhichOneof_migrate_graph_event"_migrate_tagged_run_metadata_event_migrate_summary_event)eventinitial_metadatar    r   @/tmp/pip-unpacked-wheel-g8kmtpbc/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_metadataZRUN_GRAPH_NAMEr   tensorCopyFromr   make_tensor_protoPLUGIN_NAMEr   plugin_dataplugin_namer   DATA_CLASS_BLOB_SEQUENCE
data_class)	old_eventresultr   Z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   Zrun_metadatar   ZPLUGIN_NAME_TAGGED_RUN_METADATAr   r   r   r   r    r!   )r"   r#   Ztrmr   r   r   r   r   S   s    
r   c                    sj   | j j} fdd|D }t|t|krHtdd t||D rH| 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   | ]\}}||k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   valuesZ
new_valuesr   r(   r   r   b   s    
r   c                 C   s  | | j}d}|dkr:d}t }|| j ||| j< |jtjkrL| fS |jj	}|t
jkrft| S |tjkrxt| S |tjkrt| S |tjkrt| S |tjkrt| S |tjkrt| S |tjkrt| S |tjkrt| S |tjkrt| S |tjtjtj fkrt!| S | fS )z;Convert an old value to a stream of new values. May mutate.FNT)"getr   r   ZSummaryMetadatar   r   r!   Z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   ZPLUGIN_NAME_RUN_METADATAZ#PLUGIN_NAME_RUN_METADATA_WITH_GRAPHZPLUGIN_NAME_KERAS_MODEL_migrate_graph_sub_plugin_value)r   r   r   initialr   r   r   r   r$   r   sF    









r$   c                 C   s   |  drtj| j_| fS Nr   )HasFieldr   ZDATA_CLASS_SCALARr   r!   r   r   r   r   r:      s    

r:   c                 C   s   |  drtj| j_| fS rG   rH   r   DATA_CLASS_TENSORr   r!   rI   r   r   r   r4      s    

r4   c                 C   s   |  drtj| j_| fS rG   )rH   r   r    r   r!   rI   r   r   r   r6      s    

r6   c                 C   s   |  drtj| j_| fS rG   rJ   rI   r   r   r   r<      s    

r<   c                 C   sj   |  drtj| j_| j}d}t|jjdkrB||jj	 j
9 }q|dkrd|jd d | |jd d < | fS )Nr      )rH   r   r    r   r!   r   r-   tensor_shapedimpopsizeZ
string_val)r   r   Zstrider   r   r   r8      s    

r8   c                 C   s2   |  drtj| j_|  ds,| jtj | fS )Nr   r   )	rH   r   rK   r   r!   r   r   r=   ZNULL_TENSORrI   r   r   r   r>      s
    


r>   c                 C   s   |  drtj| j_| fS rG   rJ   rI   r   r   r   r@      s    

r@   c                 C   s   |  drtj| j_| fS rG   rJ   rI   r   r   r   rB      s    

rB   c                 C   s   |  drtj| j_| fS rG   rJ   rI   r   r   r   rD      s    

rD   c                 C   s4   |  drtj| j_| jjj}|s.|jdd | fS )Nr   rL   )rP   )	rH   r   r    r   r!   r   rM   rN   r   )r   shaper   r   r   rE      s    


rE   N)*__doc__Ztensorboard.compat.protor   r   Ztensorboard.plugins.audior   r7   Z!tensorboard.plugins.custom_scalarrC   Ztensorboard.plugins.graphr   Ztensorboard.plugins.histogramr3   Ztensorboard.plugins.hparamsr=   Ztensorboard.plugins.imager5   Ztensorboard.plugins.meshrA   Ztensorboard.plugins.pr_curver?   Ztensorboard.plugins.scalarr9   Ztensorboard.plugins.textr;   Ztensorboard.utilr   r   r
   r   r   r$   r:   r4   r6   r<   r8   r>   r@   rB   rD   rE   r   r   r   r   <module>   s8   
*