
    Χg                     b   d dl Z d dlZd dlZd dlZd dlmZ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j!        e"          Z#de$de%fdZ&de%de$fdZ'dej(        dee%         fdZ)dej(        dee$         fdZ*dej(        dee         f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j0        dde+fej1        dde+fej2        dde+fej3        d de+fej4        d de+fej5        d!de+fej6        d!de+fej%        d"de+fej7        d"de+fej8        d"de+fej9        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(d)e+fej?        d*d+e*fej@        d*d+e*fej3        d d,e+fejA        d d,e+fejB        d d,e+fi	ZCd- ZD	 	 	 dLd0ZEdMd1ZFdNd3ZGd4 ZHd5 ZIdOd6ZJdOd7ZKdPd9ZL	 dQd;ZMdOd<ZNdRd=ZOdSd?ZPd@ ZQdTdBZRdC ZSdD ZT	 dUdFZUdUdGZVdVdHZWdI ZXdJ ZY	 dVdKZZdS )W    N)AnyList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                 b    t          j        d|           }t          j        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(   bufs     [/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/utils/tensorboard/summary.pyr   r   6   s,     +c1

C=c""1%%    r+   c                 b    t          j        d|           }t          j        d|          d         S )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+   r0   s     r1   r   r   C   s,     +c1

C=c""1%%r2   tc                 b    d |                                                                  D             S )Nc                 ,    g | ]}t          |          S  )r   .0xs     r1   
<listcomp>z'_tensor_to_half_val.<locals>.<listcomp>N   s    999qKNN999r2   flattentolistr4   s    r1   _tensor_to_half_valr@   M   s*    99AIIKK$6$6$8$89999r2   c                 r    t          j        |                                                                           S N)torchview_as_realr=   r>   r?   s    r1   _tensor_to_complex_valrE   P   s+    a  ((**11333r2   c                 N    |                                                                  S rB   r<   r?   s    r1   _tensor_to_listrG   S   s    99;;r2   DT_HALFhalf_valDT_BFLOAT16DT_FLOAT	float_val	DT_DOUBLE
double_valDT_INT8int_valDT_UINT8DT_INT16DT_INT32DT_INT64	int64_valDT_COMPLEX32scomplex_valDT_COMPLEX64DT_BOOLbool_valDT_COMPLEX128dcomplex_val
uint32_valc                     t          | t          j                  s|                                 n| }|j        t          j        k    rdndS )Nr      )
isinstancenpndarraynumpydtypeuint8)tensor	converteds     r1   _calc_scale_factorrh   u   s<    &0&D&DP&I28++114r2   black   c	                    ddl m}	m}
 |
                                }|	                    |           }||||f\  }}}}|                    ||f||f||f||f||fg||           |r|}|                    |          \  }}}}||z
  ||z
  }}t          j        d|z            }|	                    |||z
  d|z  z
  f||z   |fg|           |
                    ||z   ||z
  |z
  f|||           | S )Nr   )	ImageDraw	ImageFont)widthfillg?rj   )ro   )ro   font)PILrl   rm   load_defaultDrawlinegetbboxra   ceil	rectangler"   )r   xminyminxmaxymaxdisplay_strcolor
color_text	thicknessrl   rm   rp   drawleftrighttopbottomtext_bottom_left_top_right_bottom
text_widthtext_heightmargins                            r1   _draw_single_boxr   z   sq    )(((((((!!##D>>%  D"&dD!9T5#vII
tVnufos|dC[Q    
  
'+||K'@'@$tVW"(5.'D.K
+,,{[01v:=>
"K0  	 	
 	
 	
 			F]K+5>?	 	 	
 	
 	
 Lr2   c           	      
    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&                    s)t(                              d           t-          d          |pi }t%          |t&                    st-          d          |                                D ]P\  } vs1t%          |t0                    rt3           fd	|D                       st-          d
 d d          Qg } |            }                                 D ](\  }|	t%          |t4          t6          f          rs||j                 _        |v r&t=          j        d |         D                       }nd}|                      ||!                    d          |                     t%          |tD                    rt||j                 _#        |v r&t=          j        d |         D                       }nd}|                      ||!                    d          |                     !t%          |tH                    rt||j                 _%        |v r&t=          j        d |         D                       }nd}|                      ||!                    d          |                     t%          ||j&                  r\tO          |          d         }||j                 _        |                      ||!                    d                               tQ          d           |||	          }tS          tS          j*        |
|+                                                    }tY          tY          j!        ||          g          }fd|-                                D             } |||          } |||	          }tS          tS          j*        |
|+                                                    }tY          tY          j!        ||          g          } ||!                    d                     } |||	!          }tS          tS          j*        |
|+                                                    }tY          tY          j!        ||          g          }|||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   ^   K   | ]'}t          |t                                       V  (d S rB   )r`   type)r9   dhparam_dictks     r1   	<genexpr>zhparams.<locals>.<genexpr>   s9      FFqz!T+a.%9%9::FFFFFFr2   z"parameter: hparam_domain_discrete[z/] should be a list of same type as hparam_dict[z].c                 8    g | ]}t          j        |           S ))number_valuer   Valuer9   r   s     r1   r;   zhparams.<locals>.<listcomp>   6        #(a888  r2   )valuesDATA_TYPE_FLOAT64)namer   domain_discretec                 8    g | ]}t          j        |           S ))string_valuer   r   s     r1   r;   zhparams.<locals>.<listcomp>  r   r2   DATA_TYPE_STRINGc                 8    g | ]}t          j        |           S ))
bool_valuer   r   s     r1   r;   zhparams.<locals>.<listcomp>(  s6        #(A666  r2   DATA_TYPE_BOOL)r   r   z=value should be one of int, float, str, bool, or torch.Tensor)session_start_infoversionplugin_namecontentplugin_data)tagmetadatavaluec                 <    g | ]}  |                     S )r   )r   r7   )r9   r   r   r   s     r1   r;   zhparams.<locals>.<listcomp>J  s3    
J
J
J!::::!,,,---
J
J
Jr2   )hparam_infosmetric_infos)
experimentr   STATUS_SUCCESS)status)session_end_infor   ).rC   #tensorboard.plugins.hparams.api_pb2r   r   r   r   r   r   $tensorboard.plugins.hparams.metadatar   r   r   r   r   +tensorboard.plugins.hparams.plugin_data_pb2r   r   r   r`   dictloggerwarning	TypeErroritemslistallintfloatr   r   r   	ListValueappendr   strr   boolr   Tensorr   
ValueErrorr	   
PluginDataSerializeToStringr   keys)r   metric_dicthparam_domain_discreterC   r   r   r   r   r   r   r   r   r   r   r   r   vhpsssir   r   smdmtsexpseir   r   r   s   `                        @@@r1   r   r      s   ( LLL                                      k4(( 
WXXXL
 
 	
 k4(( 
WXXXL
 
 	
 49r,d33 
W
 
 	
 ',,..  1[  a&& !FFFFFAFFFFF ! lQllghlll  	 ! C



C!!## L
 L
19a#u&& 	*+CKN'***BLBV !7!:  C C C #'JJ
!(;<<$3     a 	*+CKN'***","6 !7!:  # # # #'JJ
!(:;;$3     a 	()CKN%***","6 !7!:  # # # #'JJ
!(899$3     a&& 	

1A*+CKN'JJzzqx~~>Q/R/RSSSTTTK
 
 	
  3@STTTG
#.#W-F-F-H-H
 
 
  C
 +ACPPPQ
R
R
RC
J
J
J
J
J{7G7G7I7I
J
J
JC
*#C
8
8
8C38KLLLG
#.#W-F-F-H-H
 
 
  C
 >CHHHI
J
J
JC
.-= > >
?
?
?C>QRRRG
#.#W-F-F-H-H
 
 
  C
 +?#NNNO
P
P
PCS=r2   Fc                    t          |                                          }|j        dk    sJ d|j         d|j         d            t	          |          }|rqt          |gd          }|rt          |gd          }t          j        d	
          }t          |          }t          t          j	        | ||          g          S t          t          j	        | |          g          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.rK   )rL   rd   rM   )rN   rd   scalarsr   r   r   rf   r   r   )r   simple_value)
r   squeezendimsizer   r
   r	   r   r   r   )	r   rf   collections	new_styledouble_precisionr   r#   r   r   s	            r1   r   r   b  s   " V__$$&&FqwFKww^d^iwww 	 6]]F M"fXZHHH 	O&6(+NNNL%0YGGG+666'   
 
 
 	
 gm6JJJKLLLLr2   c                    |                                 |j        z  dk    rt          d          |j        t          v rOt          |j                 \  }}}t          di d|dt          d |j        D                       | ||          i}nt          |  d|j                   t          j	        d	          }t          |
          }t          t          j        | ||          g          S )a  Outputs a `Summary` protocol buffer containing the full tensor.
    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: 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 sizerd   tensor_shapec                 8    g | ]}t          j        |           S )r   )r   Dimr8   s     r1   r;   z tensor_proto.<locals>.<listcomp>  s'    LLL!)-1555LLLr2   dimz has unsupported tensor dtype rf   r   r   r   r   rf   r   r7   )numelitemsizer   rd   _TENSOR_TYPE_MAPr
   r   shaper	   r   r   r   )r   rf   rd   
field_nameconversion_fnr#   r   r   s           r1   r#   r#     s    ||~~'G44O
 
 	
 |'''+;FL+I(z=" 
 
 0LLv|LLL! ! ! MM&11
 
 CMMv|MMNNN!,BBBK
k
2
2
2C'-C#lSSSTUUUUr2   c           	      x    t          |||||||          }t          t          j        | |          g          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_squaresbucket_limitbucketr   histor   )r   r   r   )	r   r   r   r  r  r  bucket_limitsbucket_countshists	            r1   r   r     sR    * "  D '-D===>????r2   c                     t          |          }t          |                    t                    ||          }t	          t	          j        | |          g          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   r   )r   r   binsmax_binsr
  s        r1   r   r     sO    " V__F&--..h??D'-D===>????r2   c           
         | j         dk    rt          d          |                     d          } t          j        | |          \  }}t          |          }|||k    r||z  }||z  }|dk    rt          j        |d||z
  ggdd          }|                    d|                              d          }t          j        |j         d	z   f|j	                  }|dd|         |dd<   |d         |d<   |}t          j
        t          j        |d                    }	t          j        |	d|	d         d	z
  gd
          \  }
}t          |
          }
t          |          d	z   }~	|
dk    r||
d	z
  |         nt          j        dg|d|         g          }||
|d	z            }|j         dk    s|j         dk    rt          d          |                     |           }t!          |                                 |                                 t          |           |                                 ||                                |                                          S )zDConvert values into a histogram proto using logic from histogram.cc.r   zThe input has no element.)r  Nconstant)	pad_widthmodeconstant_values)axisr   r   )sidez1The histogram is empty, please file a bug report.r   )r   r   reshapera   r   lenpadr  emptyrd   cumsumgreatersearchsortedr   concatenatedotr   r   r   r>   )r   r  r  countslimitsnum_binssubsamplingsubsampling_remainder
new_limits
cum_countsstartendsum_sqs                r1   r   r     sd   {a4555^^BF\&t444NFF6{{H8 3 3(* (; 6 A%%V{-BBCD !	  F K0044"4==Xv{Q0&,??
 "[1
3B3
2 2:fa0011JaB!1C-D7SSSJE3JJE
c((Q,C $)199uqy3".1#vdsd|AT2U2U  EC!GO$F{a6;!++LMMMZZFJJLLJJLLKKJJLL]]__}}   r2   NCHWc                 t   t          |          }t          ||          }t          |          }|                    t          j                  }||z                      dd                              t          j                  }t          ||          }t          t          j
        | |          g          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   r_   )rescaler   r   r   )r   r   rh   r  ra   float32clipre   r   r   r   )r   rf   r,  dataformatsscale_factorr   s         r1   r   r      s    6 V__FFK00F%f--L]]2:&&F|#))!S1188BBFvw///E'-Cu===>????r2   CHWc                    t          |          }t          ||          }t          |          }|                    t          j                  t          |          z  }t          |                    dd                              t          j                  |||          }t          t          j
        | |          g          S )z/Output a `Summary` protocol buffer with images.r   r_   )r,  roislabelsr-  r   )r   r   r  ra   r.  rh   r   r/  re   r   r   )r   tensor_imagetensor_boxesr,  r0  r5  r   s          r1   r   r   E  s     <((L!,<<L<((L&&rz225G5U5UUL!S!!((22	  E '-Cu===>????r2   c           
          |j         d         }t          |          }|D ]B}t          | ||df         ||df         ||df         ||df         |d n||         d          } C| S )Nr   r   rj      Red)r|   r}   )r   ranger   )
disp_imageboxesr5  	num_boxeslist_gtr+   s         r1   r   r   V  s    AIIG 	
 	
%!Q$K!Q$K!Q$K!Q$K &F1I
 
 


 r2   c                    ddl m} | j        \  }}}t          ||z            }t          ||z            }	|                    |           }
|t          |
||          }
|j        j        }|
                    |	|f|          }
ddl	}|
                                }|
                    |d           |                                }|                                 t          j        ||||          S )z=Convert a numpy representation of an image to Image protobuf.r   )ImageN)r5  PNG)formatheightrn   
colorspaceencoded_image_string)rq   rA  r   r   	fromarrayr   
ResamplingLANCZOSresizeioBytesIOsavegetvaluecloser   )rf   r,  r4  r5  rA  rE  rn   channelscaled_heightscaled_widthr   	ANTIALIASrL  outputimage_strings                  r1   r   r   g  s    #\FE7())Muw''LOOF##E5$v666 (ILL,6	BBEIIIZZ\\F	JJveJ$$$??$$L
LLNNN=)	   r2      c                 p   t          |          }t          |          }t          |          }|                    t          j                  }||z                      dd                              t          j                  }t          ||          }t          t          j
        | |          g          S )Nr   r_   r-  r   )r   r   rh   r  ra   r.  r/  re   r   r   r   )r   rf   fpsr1  r   s        r1   r   r     s    V__FF##F%f--L]]2:&&F|#))!S1188BBFvs##E'-Cu===>????r2   c                 >   	 dd l }n # t          $ r t          d           Y d S w xY w	 ddl m} n!# t          $ r t          dd           Y d S w xY wdd l}| j        \  }}}}|                    t          |           |          }	|                    dd	          j	        }
	 |	
                    |
dd 
           nQ# t          $ rD 	 |	
                    |
dd           n'# t          $ r |	
                    |
d           Y nw xY wY nw xY wt          |
d          5 }|                                }d d d            n# 1 swxY w Y   	 t          j        |
           n*# t           $ r t"                              d           Y nw xY wt'          j        ||||          S )Nr   zadd_video needs package moviepy)editorz6moviepy is installed, but can't import moviepy.editor.z2Some packages could be missing [imageio, requests])rY  z.gifF)suffixdelete)verboser   )r^  progress_bar)r^  rbz5The temporary file used by moviepy cannot be deleted.rD  )moviepyImportErrorprintr[  tempfiler   ImageSequenceClipr   NamedTemporaryFiler   	write_gifr   openreadosremoveOSErrorr   r   r   rA  )rf   rY  ra  mpyrd  r4   hwcr/  filenamer(   tensor_strings                r1   r   r     sh      /000)))))))   D@	
 	
 	
 	 OOOJAq!Q   f3 77D**&*GGLH4xt<<<< 4 4 4	4NN8UNGGGG 	4 	4 	4NN8UN33333	44 
h		 !! ! ! ! ! ! ! ! ! ! ! ! ! ! !P
	( P P PNOOOOOP =am   su    $$/ AA!B: :
DCD!D?DDDDD<<E E E $FFD  c                    t          |          }|                                }t          |                                          dk    r%t	          d           |                    dd          }|j        dk    s
J d            |t          j        t          j	                  j        z  
                    d          }dd l}dd l}|                                }|                    |d          5 }|                    d           |                    d           |                    |           |                    |j                   d d d            n# 1 swxY w Y   |                                }|                                 t-          j        |d|j        d         |d	
          }	t-          t-          j        | |	          g          S )Nr   z4warning: audio amplitude out of range, auto clipped.r  z%input tensor should be 1 dimensional.z<i2r   wbrj   z	audio/wav)sample_ratenum_channelslength_framesencoded_audio_stringcontent_type)r   r    r   )r   r   absr   rc  r/  r   ra   iinfoint16r  rL  waverM  rh  setnchannelssetsampwidthsetframeratewriteframesdatarO  rP  r   Audior   r   )
r   rf   rv  arrayrL  r~  fio
wave_writeaudio_stringr    s
             r1   r    r      s   FOOEMMOOE
5zz~~!DEEE

2q!!:???C???RXbh''++33E::EIIIKKK
**,,C	3		 +"""""",,,uz***	+ + + + + + + + + + + + + + +
 <<>>LIIKKKMk"o)   E '-Cu===>????s   .AEEEc           
      z   g }|                                  D ]\  }}g }|                                 D ]\  }}|d         }|d         dk    rtt          |          dk    sJ t          j        t          j                            |d         |d         |d                   g          }t          j        ||          }	n+t          j        |	          }
t          j        ||

          }	|                    |	           |                    t          j        ||                     t          j	        |          } t          j        d          }t          |          }t          d|                                 gt                                }t          t          j        d||          g          S )Nr   r   Marginr9  rj   )r   lowerupper)series)titler   r   )r  	multiline)r  chart)categoryr!   r   r   	DT_STRINGrd   
string_valr   custom_scalars__config__r   r   )r   r  r   MarginChartContentSeriesChartMultilineChartContentr   CategoryLayoutr	   r   r
   r   r   r   r   )layout
categoriesr   r   charts
chart_namechart_meatadatatagsmgccr  mlccr   r   rf   s                 r1   r!   r!     s   J F F1+,7799 	! 	!'J"1%Dq!X--4yyA~~~~!4"5<<"&q'aQ =     #(z$GGG!7DAAA"(zTJJJMM%    *-AVDDDEEEE
333F!,9IJJJK
k
2
2
2C,,../%''  F
 M8RUVVV
   r2   c           	      r   t          j        dt          d                                                    }t          |          }t	          d|                    d          gt          t          j        d	
          g                    }t          t          j	        | dz   ||          g          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   r   )r   r"   r   r   rf   s        r1   r"   r"     s    !,N1$=$=$=$O$O$Q$Q  K k
2
2
2CKKK112%+;+?Q+G+G+G*HIII  F
 }!6VTTTU   r2      c	                 *   |dk    rd}t          j        ||||||f          }	t          d|                                          }
t	          j        d|
          }t	          |          }t          d|	                    d                                          t          t          j
        |	j        d         	          t          j
        |	j        d
         	          g                    }t          t          j        | ||          g          S )Nr  r   r   num_thresholds	pr_curvesr   r   rK   r  r   r   r   rd   rL   r   r   r   )ra   stackr   r   r	   r   r
   r  r>   r   r   r   r   r   )r   tpfptnfn	precisionrecallr  weightsr  pr_curve_plugin_datar   r   rf   s                 r1   r$   r$   	  s'    8RRY788D,.    ",)=  K k
2
2
2C,,r""))++% $$*Q-888 $$*Q-888
 
 
	 	 	F '-C#fMMMNOOOOr2   c                 ,   t          |d          }t          ||||          }t          d|                                          }t	          j        d|          }t	          |          }t          d|                    d	                                          t          t          j
        |j        d         
          t          j
        |j        d         
          g                    }	t          t          j        | ||	          g          S )Nr  )r  r  r   r  r  r   r   rK   r  r   r   r   r  r   r   )r   r&   r   r   r	   r   r
   r  r>   r   r   r   r   r   )
r   r5  predictionsr  r  r  r  r   r   rf   s
             r1   r%   r%   #  s'   --NNG  D -.    ",)=  K k
2
2
2C,,r""))++% $$*Q-888 $$*Q-888
 
 
	 	 	F '-C#fMMMNOOOOr2   c                    d}|d}t          j        t          j        ||dz
  z                      }|                     t           j                  }d|dz
  f}t          j        |||||z            \  }}	t          j        |||d|z
  |z            \  }
}	t          j        |d d d                   d d d         }t          j        |
d d d                   d d d         }|d         |z
  }|d         |z
  }|t          j        |||z             z  }|t          j        |||z             z  }t          j        ||||||f          S )NgHz>g      ?r   r   )r  r;  r  r  )	ra   int32floorr  float64r   r  maximumr  )r5  r  r  r  _MINIMUM_COUNTbucket_indicesfloat_labelshistogram_range
tp_buckets_
fp_bucketsr  r  r  r  r  r  s                    r1   r&   r&   >  sl   N Xbh{nq6H'IJJKKN==,,L.1,-OLw&	  MJ L|#w.	  MJ 
:ddd#	$	$TTrT	*B	:ddd#	$	$TTrT	*B	AB	ABRZR888I"*^R"W555F8RRY7888r2   c                    ddl }ddlm}  |j        |          }|                    | ||||j        ||          }	t          d|                    d                                          t          t          j
        |j        d                   t          j
        |j        d                   t          j
        |j        d	                   g
                    }t          j        |                    | |          ||	          }
|
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_configrK   r  r   r   rj   r   r  r   )rC   tensorboard.plugins.meshr   	as_tensorcreate_summary_metadatar   r
   r  r>   r   r   r   r   get_instance_name)r   display_namedescriptionrf   rz  
componentsr  rC   r   tensor_metadatatensor_summarys              r1   _get_tensor_summaryr  _  s*   . LLL111111U_V$$F66 7  O ..$$++--% $&,q/::: $&,q/::: $&,q/:::
 
 

 
 
F ]&&t\::   N r2   c                 :    d}| t          j        | d          }|S )z5Parse and returns JSON string from python dictionary.z{}NT)	sort_keys)jsondumps)config_dictr  s     r1   _get_json_configr    s'    Kj===r2   c                 F   ddl m} ddlm} t	          |          }	g }
||j        f||j        f||j        fg}d |D             }|                    d |D                       }|D ]-\  }}|
	                    t          | ||||||	                     .t          |
          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                 "    g | ]}|d          
|S )r   r7   )r9   rf   s     r1   r;   zmesh.<locals>.<listcomp>  s!    EEE&vay/Dv/D/D/Dr2   c                     g | ]\  }}|S r7   r7   )r9   rf   rz  s      r1   r;   zmesh.<locals>.<listcomp>  s    <<<06<<<<r2   r   )r  r   (tensorboard.plugins.mesh.plugin_data_pb2r  r  VERTEXFACECOLORget_components_bitmaskr   r  r   )r   verticescolorsfacesr  r  r  r   r  r  	summariestensorsr  rf   rz  s                  r1   r'   r'     s   , 211111GGGGGG";//KI	>()	#$	%&G
 FEGEEEG00<<G<<< J !( 
 
 
	
 
	
 
	
 
	
 ####r2   )ri   ri   rj   )NNN)NFFrB   )r   r*  )r   r2  N)r   NN)rW  )rs  )r  N)NN)[r  loggingrj  r-   typingr   r   r   rC   rc   ra   google.protobufr   $tensorboard.compat.proto.summary_pb2r   r   r	   #tensorboard.compat.proto.tensor_pb2r
   )tensorboard.compat.proto.tensor_shape_pb2r   !tensorboard.plugins.custom_scalarr   ,tensorboard.plugins.pr_curve.plugin_data_pb2r   (tensorboard.plugins.text.plugin_data_pb2r   _convert_npr   _utilsr   r   __all__	getLogger__name__r   r   r   r   r   r   r@   rE   rG   halffloat16bfloat16r.  r  doubleint8re   qint8r}  shortr  qint32int64	complex32chalf	complex64cfloatr   
complex128cdoublequint8quint4x2r   rh   r   r   r   r#   r   r   r   r   r   r   r   r   r   r    r!   r"   r$   r%   r&   r  r  r'   r7   r2   r1   <module>r     s     				  & & & & & & & & & &      & & & & & &         
 < ; ; ; ; ; F F F F F F 8 8 8 8 8 8 J J J J J J C C C C C C             2 2 2 2 2 2 2 2  0 
	8	$	$&5 &S & & & &&3 &5 & & & &:5< :DI : : : :4el 4tE{ 4 4 4 4 u|  S	        	JJ(;<	MIz+>? 
N]J0CD 
MJ_=	
 
K*k?; 
MK? 
L;o> 
JI7 
K*i9 
K*i9 
K*i9 
K*i9 
I
I7 
K*i9 
L:y/:  
K*k?;!" 
Onn6LM#$ 
K..2HI	Onn6LM	L>>3IJ	JJ8	8NO	MO^5KL	K*lO<	L:|_=	NZ?5  <5 5 5 ( ( ( (Vz z z zz(M (M (M (MV"V "V "VJ@ @ @B@ @ @ @,4 4 4 4n"@ "@ "@ "@L KO@ @ @ @"   "   4@ @ @ @( ( (V@ @ @ @<" " "J    IMP P P P4P P P P69 9 9 9B8 8 8v   OS3$ 3$ 3$ 3$ 3$ 3$r2   