U
    Vc                     @   sH   d Z ddlZddlmZ ddlmZ ejZejZd	ddZd
ddZ	dS )zScalar summaries and TensorFlow operations to create them.

A scalar summary stores a single floating-point value, as a rank-0
tensor.
    N)metadata)
summary_v2c                 C   s   ddl m  m} |dkr| }tj||d}|| V |||g8 |jj	d|
||j||dW  5 Q R  W  5 Q R  S Q R X W 5 Q R X dS )a  Create a legacy scalar summary op.

    Arguments:
      name: A unique name for the generated summary node.
      data: A real numeric rank-0 `Tensor`. Must have `dtype` castable
        to `float32`.
      display_name: Optional name for this summary in TensorBoard, as a
        constant `str`. Defaults to `name`.
      description: Optional long-form description for this summary, as a
        constant `str`. Markdown is supported. Defaults to empty.
      collections: Optional list of graph collections keys. The new
        summary op is added to these collections. Defaults to
        `[Graph Keys.SUMMARIES]`.

    Returns:
      A TensorFlow summary op.
    r   Ndisplay_namedescriptionZscalar_summary)nametensorcollectionssummary_metadata)tensorflow.compat.v1compatv1r   create_summary_metadataZ
name_scopeZcontrol_dependenciesZassert_scalarsummaryZtensor_summarycastfloat32)r   datar   r   r	   tfr
    r   F/tmp/pip-unpacked-wheel-g8kmtpbc/tensorboard/plugins/scalar/summary.pyop!   s     r   c           	      C   s   ddl m  m} t|}|jdkr4td|j |jjdkrPtd|jj	 |
|tj}|dkrn| }tj||d}|j| }| }|jjd|  ||d	 |S )
a%  Create a legacy scalar summary protobuf.

    Arguments:
      name: A unique name for the generated summary, including any desired
        name scopes.
      data: A rank-0 `np.array` or array-like form (so raw `int`s and
        `float`s are fine, too).
      display_name: Optional name for this summary in TensorBoard, as a
        `str`. Defaults to `name`.
      description: Optional long-form description for this summary, as a
        `str`. Markdown is supported. Defaults to empty.

    Returns:
      A `tf.Summary` protobuf object.
    r   Nr   z.Expected scalar shape for data, saw shape: %s.)biufz!Cast %s to float is not supportedr   z%s/scalar_summary)tagr   r   )r   r   r   nparrayshape
ValueErrorZdtypekindr   Zmake_tensor_protoZastyper   r   r   ZSummaryMetadataZ
FromStringZSerializeToStringZSummaryvalueadd)	r   r   r   r   r   r   r
   Ztf_summary_metadatar   r   r   r   pbE   s2    

 r#   )NNN)NN)
__doc__Znumpyr   Ztensorboard.plugins.scalarr   r   ZscalarZ	scalar_pbr   r#   r   r   r   r   <module>   s   
$