o
    vZh                     @   s~  d dl Z d dlZd dlZd dlZd dlmZmZ d dlZd dlZ	d dl
mZ d dlmZmZ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mZ g dZe e!Z"de#de$fddZ%de$de#fddZ&dej'de(e$ fddZ)dej'de(e# fddZ*dej'de(e fddZ+i ej,dde)fej-dde)fej.dde)fej/dd e+fej#dd e+fej0d!d"e+fej1d!d"e+fej2d#d$e+fej3d%d$e+fej4d%d$e+fej5d&d$e+fej6d&d$e+fej$d'd$e+fej7d'd$e+fej8d'd$e+fej9d(d)e+fej:d*d+e*fej;d*d+e*fej<d,d+e*fej=d,d+e*fej>d-d.e+fej?d/d0e*fej@d/d0e*fej3d%d1e+fejAd%d1e+fejBd%d1e+fi	ZCd2d3 ZD	4	4	5dhd6d7ZEdid8d9ZFdjd;d<ZGd=d> ZHd?d@ ZIdkdAdBZJdkdCdDZKdldFdGZL	dmdIdJZMdkdKdLZNdndMdNZOdodPdQZPdRdS ZQdpdUdVZRdWdX ZSdYdZ ZT	dqd\d]ZUdqd^d_ZVdrd`daZWdbdc ZXddde ZY	drdfdgZZdS )s    N)AnyOptional)
struct_pb2)HistogramProtoSummarySummaryMetadata)TensorProto)TensorShapeProto)
layout_pb2)PrCurvePluginData)TextPluginData   )make_np)_prepare_videoconvert_to_HWC)half_to_intint_to_halfhparamsscalarhistogram_raw	histogrammake_histogramimageimage_boxes
draw_boxes
make_imagevideo
make_videoaudiocustom_scalarstexttensor_protopr_curve_rawpr_curvecompute_curvemeshfreturnc                 C      t d| }t d|d S )aA  Casts a half-precision float value into an integer.

    Converts a half precision floating point value, such as `torch.half` or
    `torch.bfloat16`, into an integer value which can be written into the
    half_val field of a TensorProto for storage.

    To undo the effects of this conversion, use int_to_half().

    r&   ir   structpackunpack)r&   buf r/   N/var/www/auris/lib/python3.10/site-packages/torch/utils/tensorboard/summary.pyr   6   s   
r   r)   c                 C   r(   )zCasts an integer value to a half-precision float.

    Converts an integer value obtained from half_to_int back into a floating
    point value.

    r)   r&   r   r*   )r)   r.   r/   r/   r0   r   C   s   r   tc                 C   s   dd |    D S )Nc                 S   s   g | ]}t |qS r/   )r   .0xr/   r/   r0   
<listcomp>N       z'_tensor_to_half_val.<locals>.<listcomp>flattentolistr1   r/   r/   r0   _tensor_to_half_valM   s   r;   c                 C   s   t |   S N)torchZview_as_realr8   r9   r:   r/   r/   r0   _tensor_to_complex_valP   s   r>   c                 C   s   |    S r<   r7   r:   r/   r/   r0   _tensor_to_listS   s   r?   ZDT_HALFZhalf_valZDT_BFLOAT16DT_FLOAT	float_val	DT_DOUBLE
double_valZDT_INT8Zint_valZDT_UINT8ZDT_INT16ZDT_INT32ZDT_INT64Z	int64_valZDT_COMPLEX32Zscomplex_valZDT_COMPLEX64ZDT_BOOLZbool_valZDT_COMPLEX128Zdcomplex_valZ
uint32_valc                 C   s,   t | tjs
|  n| }|jtjkrdS dS )Nr      )
isinstancenpZndarraynumpydtypeuint8)tensorZ	convertedr/   r/   r0   _calc_scale_factoru   s   rK   black   c	                 C   s   ddl m}	m}
 |
 }|	| }||||f\}}}}|j||f||f||f||f||fg||d |ru|}||\}}}}|| || }}td| }|j	||| d|  f|| |fg|d |j
|| || | f|||d | S )Nr   )	ImageDraw	ImageFont)widthfillg?rM   )rQ   )rQ   font)PILrN   rO   Zload_defaultZDrawlineZgetbboxrF   ceilZ	rectangler    )r   ZxminZyminZxmaxZymaxdisplay_strcolorZ
color_textZ	thicknessrN   rO   rR   ZdrawleftrighttopbottomZtext_bottom_left_top_right_bottom
text_widthZtext_heightmarginr/   r/   r0   _draw_single_boxz   s6   
 
rb   c                    sj  ddl }ddlm}m}m}m mm} ddlm	}m
}	m}
m}m} ddlm}m}m} tts:td tdt|tsHtd td|pKi }t|tsUtd| D ]$\}vsrt|trrtfd	d
|D s}td d dqYg }| } D ]\}|du rqt|ttfr||j _|v rtjdd | D d}nd}| ||!d|d qt|t"r||j _#|v rtjdd | D d}nd}| ||!d|d qt|t$r||j _%|v rtjdd | D d}nd}| ||!d|d qt||j&r;t'|d }||j _| ||!dd qt(d|||	d}t)t)j*|
|+ dd}t,t,j!||dgd} fdd|- D }|||d}|||	d }t)t)j*|
|+ dd}t,t,j!||dgd}||!d!d"}|||	d#}t)t)j*|
|+ dd}t,t,j!||dgd}|||fS )$a2  Output three `Summary` protocol buffers needed by hparams plugin.

    `Experiment` keeps the metadata of an experiment, such as the name of the
      hyperparameters and the name of the metrics.
    `SessionStartInfo` keeps key-value pairs of the hyperparameters
    `SessionEndInfo` describes status of the experiment e.g. STATUS_SUCCESS

    Args:
      hparam_dict: A dictionary that contains names of the hyperparameters
        and their values.
      metric_dict: A dictionary that contains names of the metrics
        and their values.
      hparam_domain_discrete: (Optional[Dict[str, List[Any]]]) A dictionary that
        contains names of the hyperparameters and all discrete values they can hold

    Returns:
      The `Summary` protobufs for Experiment, SessionStartInfo and
        SessionEndInfo
    r   N)DataType
Experiment
HParamInfo
MetricInfo
MetricNameStatus)EXPERIMENT_TAGPLUGIN_DATA_VERSIONPLUGIN_NAMESESSION_END_INFO_TAGSESSION_START_INFO_TAG)HParamsPluginDataSessionEndInfoSessionStartInfoz>parameter: hparam_dict should be a dictionary, nothing logged.z>parameter: metric_dict should be a dictionary, nothing logged.zIparameter: hparam_domain_discrete should be a dictionary, nothing logged.c                 3   s"    | ]}t |t  V  qd S r<   )rE   typer3   d)hparam_dictkr/   r0   	<genexpr>   s     zhparams.<locals>.<genexpr>z"parameter: hparam_domain_discrete[z/] should be a list of same type as hparam_dict[z].c                 S      g | ]}t j|d qS ))number_valuer   Valuerr   r/   r/   r0   r5          
zhparams.<locals>.<listcomp>)valuesZDATA_TYPE_FLOAT64)namerq   domain_discretec                 S   rw   ))string_valuery   rr   r/   r/   r0   r5     r{   ZDATA_TYPE_STRINGc                 S   rw   ))
bool_valuery   rr   r/   r/   r0   r5   (  r{   ZDATA_TYPE_BOOL)r}   rq   z=value should be one of int, float, str, bool, or torch.Tensor)Zsession_start_infoversionplugin_namecontentplugin_data)tagmetadatavaluec                    s   g | ]
} |d dqS )r   )r}   r/   )r3   ru   )rf   rg   r/   r0   r5   J      )Zhparam_infosZmetric_infos)Z
experimentr   ZSTATUS_SUCCESS)status)Zsession_end_infor   ).r=   Z#tensorboard.plugins.hparams.api_pb2rc   rd   re   rf   rg   rh   Z$tensorboard.plugins.hparams.metadatari   rj   rk   rl   rm   Z+tensorboard.plugins.hparams.plugin_data_pb2rn   ro   rp   rE   dictloggerwarning	TypeErroritemslistallintfloatr   rx   r   Z	ListValueappendrz   strr   boolr   Tensorr   
ValueErrorr   
PluginDataSerializeToStringr   keys)rt   Zmetric_dictZhparam_domain_discreter=   rc   rd   re   rh   ri   rj   rk   rl   rm   rn   ro   rp   vZhpsZssir~   r   smdZmtsexpZseir/   )rf   rg   rt   ru   r0   r      s    







r   Fc           	      C   s   t | }|jdksJ d|j d|j dt|}|rEt|gdd}|r.t|gdd}tjd	d
}t|d}ttj	| ||dgdS ttj	| |dgdS )a  Output a `Summary` protocol buffer containing a single scalar value.

    The generated Summary has a Tensor.proto containing the input Tensor.
    Args:
      name: A name for the generated node. Will also serve as the series name in
        TensorBoard.
      tensor: A real numeric Tensor containing a single value.
      collections: Optional list of graph collections keys. The new summary op is
        added to these collections. Defaults to `[GraphKeys.SUMMARIES]`.
      new_style: Whether to use new style (tensor field) or old style (simple_value
        field). New style could lead to faster data loading.
    Returns:
      A scalar `Tensor` of type `string`. Which contains a `Summary` protobuf.
    Raises:
      ValueError: If tensor has the wrong shape or type.
    r   zBTensor should contain one element (0 dimensions). Was given size: z and z dimensions.r@   )rA   rH   rB   )rC   rH   Zscalarsr   r   r   rJ   r   r   )r   Zsimple_value)
r   squeezendimsizer   r   r   r   r   rz   )	r}   rJ   collections	new_styleZdouble_precisionr   r!   r   r   r/   r/   r0   r   b  s(   

r   c              
   C   s   |  |j dkrtd|jtv r3t|j \}}}tdi d|dtdd |jD d|||i}n
t|  d|j tj	d	d
}t|d}t
t
j| ||dgdS )a  Outputs a `Summary` protocol buffer containing the full tensor.
    The generated Summary has a Tensor.proto containing the input Tensor.
    Args:
      tag: A name for the generated node. Will also serve as the series name in
        TensorBoard.
      tensor: Tensor to be converted to protobuf
    Returns:
      A tensor protobuf in a `Summary` protobuf.
    Raises:
      ValueError: If tensor is too big to be converted to protobuf, or
                     tensor data type is not supported
    l        zAtensor is bigger than protocol buffer's hard limit of 2GB in sizerH   tensor_shapec                 S   rw   )r   )r	   Dimr2   r/   r/   r0   r5     s    z tensor_proto.<locals>.<listcomp>dimz has unsupported tensor dtype rJ   r   r   r   r   rJ   r   Nr/   )Znumelitemsizer   rH   _TENSOR_TYPE_MAPr   r	   shaper   r   r   rz   )r   rJ   rH   
field_nameZconversion_fnr!   r   r   r/   r/   r0   r!     s$   


r!   c           	   	   C   s,   t |||||||d}ttj| |dgdS )a  Output a `Summary` protocol buffer with a histogram.

    The generated
    [`Summary`](https://www.tensorflow.org/code/tensorflow/core/framework/summary.proto)
    has one summary value containing a histogram for `values`.
    Args:
      name: A name for the generated node. Will also serve as a series name in
        TensorBoard.
      min: A float or int min value
      max: A float or int max value
      num: Int number of values
      sum: Float or int sum of all values
      sum_squares: Float or int sum of squares for all values
      bucket_limits: A numeric `Tensor` with upper value per bucket
      bucket_counts: A numeric `Tensor` with number of values per bucket
    Returns:
      A scalar `Tensor` of type `string`. The serialized `Summary` protocol
      buffer.
    minmaxnumsumsum_squaresZbucket_limitZbucketr   Zhistor   )r   r   rz   )	r}   r   r   r   r   r   Zbucket_limitsZbucket_countshistr/   r/   r0   r     s   	r   c                 C   s0   t |}t|t||}ttj| |dgdS )ad  Output a `Summary` protocol buffer with a histogram.

    The generated
    [`Summary`](https://www.tensorflow.org/code/tensorflow/core/framework/summary.proto)
    has one summary value containing a histogram for `values`.
    This op reports an `InvalidArgument` error if any value is not finite.
    Args:
      name: A name for the generated node. Will also serve as a series name in
        TensorBoard.
      values: A real numeric `Tensor`. Any shape. Values to use to
        build the histogram.
    Returns:
      A scalar `Tensor` of type `string`. The serialized `Summary` protocol
      buffer.
    r   r   )r   r   astyper   r   rz   )r}   r|   binsmax_binsr   r/   r/   r0   r     s   r   c              	   C   s  | j dkr	td| d} tj| |d\}}t|}|dure||kre|| }|| }|dkr=tj|d|| ggddd}|d|jdd}t|j d	 f|j	}|dd| |dd< |d |d< |}t
t|d}	tj|	d|	d d	 gd
d\}
}t|
}
t|d	 }~	|
dkr||
d	 | ntdg|d| g}||
|d	  }|j dks|j dkrtd| | }t|  |  t| |  || | dS )zDConvert values into a histogram proto using logic from histogram.cc.r   zThe input has no element.)r   NZconstant)Z	pad_widthmodeZconstant_values)Zaxisr   rY   )Zsidez1The histogram is empty, please file a bug report.r   )r   r   reshaperF   r   lenpadr   emptyrH   cumsumZgreaterZsearchsortedr   Zconcatenatedotr   r   r   r9   )r|   r   r   countsZlimitsZnum_binsZsubsamplingZsubsampling_remainderZ
new_limits
cum_countsstartendZsum_sqr/   r/   r0   r     sP   

 .
r   NCHWc                 C   s`   t |}t||}t|}|tj}|| ddtj}t||d}t	t	j
| |dgdS )aJ  Output a `Summary` protocol buffer with images.

    The summary has up to `max_images` summary values containing images. The
    images are built from `tensor` which must be 3-D with shape `[height, width,
    channels]` and where `channels` can be:
    *  1: `tensor` is interpreted as Grayscale.
    *  3: `tensor` is interpreted as RGB.
    *  4: `tensor` is interpreted as RGBA.
    The `name` in the outputted Summary.Value protobufs is generated based on the
    name, with a suffix depending on the max_outputs setting:
    *  If `max_outputs` is 1, the summary value tag is '*name*/image'.
    *  If `max_outputs` is greater than 1, the summary value tags are
       generated sequentially as '*name*/image/0', '*name*/image/1', etc.
    Args:
      tag: A name for the generated node. Will also serve as a series name in
        TensorBoard.
      tensor: A 3-D `uint8` or `float32` `Tensor` of shape `[height, width,
        channels]` where `channels` is 1, 3, or 4.
        'tensor' can either have values in [0, 1] (float32) or [0, 255] (uint8).
        The image() function will scale the image values to [0, 255] by applying
        a scale factor of either 1 (uint8) or 255 (float32). Out-of-range values
        will be clipped.
    Returns:
      A scalar `Tensor` of type `string`. The serialized `Summary` protocol
      buffer.
    r   rD   )rescaler   r   r   )r   r   rK   r   rF   float32cliprI   r   r   rz   )r   rJ   r   dataformatsscale_factorr   r/   r/   r0   r      s   
r   CHWc                 C   sd   t |}t||}t |}|tjt| }t|ddtj|||d}t	t	j
| |dgdS )z/Output a `Summary` protocol buffer with images.r   rD   )r   roislabelsr   r   )r   r   r   rF   r   rK   r   r   rI   r   rz   )r   Ztensor_imageZtensor_boxesr   r   r   r   r/   r/   r0   r   E  s   
r   c              
   C   sf   |j d }t|}|D ]%}t| ||df ||df ||df ||df |d u r)d n|| dd} q| S )Nr   r   rM      Red)rV   rW   )r   rangerb   )Z
disp_imageZboxesr   Z	num_boxesZlist_gtr)   r/   r/   r0   r   V  s   




	r   c                 C   s   ddl m} | j\}}}t|| }t|| }	|| }
|dur(t|
||d}
|jj}|
|	|f|}
ddl	}|
 }|
j|dd | }|  tj||||dS )z=Convert a numpy representation of an image to Image protobuf.r   )ImageN)r   ZPNG)formatheightrP   Z
colorspaceZencoded_image_string)rS   r   r   r   Z	fromarrayr   Z
ResamplingZLANCZOSresizeioBytesIOsavegetvaluecloser   )rJ   r   r   r   r   r   rP   ZchannelZscaled_heightZscaled_widthr   Z	ANTIALIASr   outputZimage_stringr/   r/   r0   r   g  s(   
r      c                 C   s\   t |}t|}t|}|tj}|| ddtj}t||}t	t	j
| |dgdS )Nr   rD   r   r   )r   r   rK   r   rF   r   r   rI   r   r   rz   )r   rJ   fpsr   r   r/   r/   r0   r     s   
r   c                 C   s`  zdd l }W n ty   td Y d S w zddl m} W n ty,   tdd Y d S w dd l}| j\}}}}|jt| |d}	|jddd	j	}
z
|	j
|
dd d
 W n$ tyw   z
|	j
|
ddd W n tyt   |	j
|
dd Y nw Y nw t|
d}| }W d    n1 sw   Y  zt|
 W n ty   td Y nw tj||||dS )Nr   zadd_video needs package moviepy)editorz6moviepy is installed, but can't import moviepy.editor.z2Some packages could be missing [imageio, requests])r   z.gifF)suffixdelete)verboser   )r   progress_bar)r   rbz5The temporary file used by moviepy cannot be deleted.r   )moviepyImportErrorprintr   tempfiler   ZImageSequenceClipr   NamedTemporaryFiler}   Z	write_gifr   openreadosremoveOSErrorr   r   r   r   )rJ   r   r   Zmpyr   Z_thwcr   filenamer&   Ztensor_stringr/   r/   r0   r     sP   
r   D  c           
      C   s  t |}| }t| dkrtd |dd}|jdks#J d|ttj	j 
d}dd l}dd l}| }||d}|d |d || ||j W d    n1 saw   Y  | }|  tj|d|jd |d	d
}	ttj| |	dgdS )Nr   z4warning: audio amplitude out of range, auto clipped.r   z%input tensor should be 1 dimensional.z<i2r   wbrM   z	audio/wav)sample_rateZnum_channelsZlength_framesZencoded_audio_stringcontent_type)r   r   r   )r   r   absr   r   r   r   rF   Ziinfoint16r   r   waver   r   ZsetnchannelsZsetsampwidthZsetframerateZwriteframesdatar   r   r   ZAudior   rz   )
r   rJ   r   arrayr   r   ZfioZ
wave_writeZaudio_stringr   r/   r/   r0   r     s4   


r   c                 C   s  g }|   D ]Y\}}g }|  D ]D\}}|d }|d dkrBt|dks&J tjtjj|d |d |d dgd}tj||d}	ntj|d	}
tj||
d
}	||	 q|tj||d qtj	|d} t
jdd}t
|d}td|  gt d}ttjd||dgdS )Nr   r   ZMarginr   rM   )r   lowerupper)Zseries)titlera   r   )r  	multiline)r  chart)categoryr   r   r   	DT_STRINGrH   Z
string_valr   Zcustom_scalars__config__r   r   )r   r   r
   ZMarginChartContentZSeriesZChartZMultilineChartContentr   ZCategoryZLayoutr   r   r   r   r	   r   rz   )Zlayout
categoriesru   r   ZchartsZ
chart_nameZchart_metadatatagsZmgccr  Zmlccr   r   rJ   r/   r/   r0   r     s<   
r   c                 C   sf   t jdtdd d}t |d}td|jddgttjd	d
gdd}ttj	| d ||dgdS )Nr    r   )r   r   r   r  utf_8)encodingr   r   r   r  z/text_summaryr   r   )
r   r   r   r   r   encoder	   r   r   rz   )r   r    r   r   rJ   r/   r/   r0   r      s   
r       c	                 C   s   |dkrd}t ||||||f}	td|d }
tjd|
d}t|d}td|	d t	t	j
|	jd d	t	j
|	jd
 d	gdd}ttj| ||dgdS )Nr  r   r   num_thresholds	pr_curvesr   r   r@   r   r   r   r   rH   rA   r   r   r   )rF   stackr   r   r   r   r   r   r9   r	   r   r   r   rz   )r   tpfptnfn	precisionrecallr  weightsr   pr_curve_plugin_datar   r   rJ   r/   r/   r0   r"   	  s,   

r"   c           
      C   s   t |d}t||||d}td|d }tjd|d}t|d}td|d	 t	t	j
|jd d
t	j
|jd d
gdd}	ttj| ||	dgdS )Nr  )r  r  r   r  r  r   r   r@   r   r   r   r   r  r   r   )r   r$   r   r   r   r   r   r   r9   r	   r   r   r   rz   )
r   r   predictionsr  r  r   r  r   r   rJ   r/   r/   r0   r#   #  s.   


r#   c                 C   s
  d}|d u rd}t t ||d  }| t j}d|d f}t j||||| d\}}	t j|||d| | d\}
}	t |d d d d d d }t |
d d d d d d }|d | }|d | }|t |||  }|t |||  }t ||||||fS )NgHz>g      ?r   r   )r   r   r  r   )	rF   int32floorr   float64r   r   maximumr  )r   r  r  r  Z_MINIMUM_COUNTZbucket_indicesZfloat_labelsZhistogram_rangeZ
tp_buckets_Z
fp_bucketsr  r  r  r  r  r  r/   r/   r0   r$   >  s2   


r$   c              	   C   s   ddl }ddlm} ||}|j| ||||j||d}	td|d t	t	j
|jd dt	j
|jd dt	j
|jd	 dgd
d}tj|| |||	d}
|
S )a  Create a tensor summary with summary metadata.

    Args:
      name: Uniquely identifiable name of the summary op. Could be replaced by
        combination of name and type to make it unique even outside of this
        summary.
      display_name: Will be used as the display name in TensorBoard.
        Defaults to `name`.
      description: A longform readable description of the summary data. Markdown
        is supported.
      tensor: Tensor to display in summary.
      content_type: Type of content inside the Tensor.
      components: Bitmask representing present parts (vertices, colors, etc.) that
        belong to the summary.
      json_config: A string, JSON-serialized dictionary of ThreeJS classes
        configuration.

    Returns:
      Tensor summary with metadata.
    r   Nr   )json_configr@   r   r   r   rM   r   r  r   )r=   tensorboard.plugins.meshr   Z	as_tensorZcreate_summary_metadatar   r   r   r9   r	   r   r   rz   Zget_instance_name)r}   display_namedescriptionrJ   r   
componentsr#  r=   r   Ztensor_metadataZtensor_summaryr/   r/   r0   _get_tensor_summary_  s8   


r(  c                 C   s   d}| durt j| dd}|S )z5Parse and returns JSON string from python dictionary.z{}NT)	sort_keys)jsondumps)config_dictr#  r/   r/   r0   _get_json_config  s   r-  c                 C   s   ddl m} ddlm} t|}	g }
||jf||jf||jfg}dd |D }|dd |D }|D ]\}}|
	t
| ||||||	 q3t|
dS )a'  Output a merged `Summary` protocol buffer with a mesh/point cloud.

    Args:
      tag: A name for this summary operation.
      vertices: Tensor of shape `[dim_1, ..., dim_n, 3]` representing the 3D
        coordinates of vertices.
      faces: Tensor of shape `[dim_1, ..., dim_n, 3]` containing indices of
        vertices within each triangle.
      colors: Tensor of shape `[dim_1, ..., dim_n, 3]` containing colors for each
        vertex.
      display_name: If set, will be used as the display name in TensorBoard.
        Defaults to `name`.
      description: A longform readable description of the summary data. Markdown
        is supported.
      config_dict: Dictionary with ThreeJS classes names and configuration.

    Returns:
      Merged summary for mesh/point cloud representation.
    r   r"  )MeshPluginDatac                 S   s   g | ]
}|d  dur|qS )r   Nr/   )r3   rJ   r/   r/   r0   r5     r   zmesh.<locals>.<listcomp>c                 S   s   g | ]\}}|qS r/   r/   )r3   rJ   r   r/   r/   r0   r5     r6   r   )r$  r   Z(tensorboard.plugins.mesh.plugin_data_pb2r.  r-  ZVERTEXZFACEZCOLORZget_components_bitmaskr   r(  r   )r   ZverticescolorsZfacesr,  r%  r&  r   r.  r#  Z	summariesZtensorsr'  rJ   r   r/   r/   r0   r%     s2   
r%   )rL   rL   rM   )NNN)NFFr<   )r   r   )r   r   N)r   NN)r   )r   )r  N)NN)[r*  loggingr   r+   typingr   r   r=   rG   rF   Zgoogle.protobufr   Z$tensorboard.compat.proto.summary_pb2r   r   r   Z#tensorboard.compat.proto.tensor_pb2r   Z)tensorboard.compat.proto.tensor_shape_pb2r	   Z!tensorboard.plugins.custom_scalarr
   Z,tensorboard.plugins.pr_curve.plugin_data_pb2r   Z(tensorboard.plugins.text.plugin_data_pb2r   Z_convert_npr   _utilsr   r   __all__	getLogger__name__r   r   r   r   r   r   r   r;   r>   r?   ZhalfZfloat16Zbfloat16r   r  doubleZint8rI   Zqint8r   Zshortr  Zqint32Zint64Z	complex32ZchalfZ	complex64Zcfloatr   Z
complex128ZcdoubleZquint8Zquint4x2r   rK   rb   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r    r"   r#   r$   r(  r-  r%   r/   r/   r/   r0   <module>   s   

	


+ 
>+%
!

7&




+%


!;
