
    sg                     t   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jB                  e"      Z#de$de%fdZ&de%de$fdZ'dejP                  dee%   fdZ)dejP                  dee$   fdZ*dejP                  dee   fdZ+i ejX                  dde)fejZ                  dde)fej\                  dde)fej^                  dde+fejH                  dde+fej`                  dde+fejb                  dde+fejd                  dde+fejf                  d de+fejh                  d de+fejj                  d!de+fejl                  d!de+fejJ                  d"de+fejn                  d"de+fejp                  d"de+fejr                  d#d$e+fejt                  d%d&e*fejv                  d%d&e*fejx                  d'd&e*fejz                  d'd&e*fej|                  d(d)e+fej~                  d*d+e*fej                  d*d+e*fejf                  d d,e+fej                  d d,e+fej                  d d,e+fi	ZCd- ZD	 	 	 dDd.ZEdEd/ZFdFd0ZGd1 ZHd2 ZIdGd3ZJdGd4ZKdHd5ZL	 dId6ZMdGd7ZNdJd8ZOdKd9ZPd: ZQdLd;ZRd< ZSd= ZT	 dMd>ZUdMd?ZVdNd@ZWdA ZXdB ZY	 dNdCZZy)O    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                 `    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     R/var/www/html/venv/lib/python3.12/site-packages/torch/utils/tensorboard/summary.pyr   r   6   s*     ++c1
C==c"1%%    r+   c                 `    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                 v    | j                         j                         D cg c]  }t        |       c}S c c}w N)flattentolistr   )r4   xs     r1   _tensor_to_half_valr:   M   s)    $%IIK$6$6$89qKN999s   6c                 d    t        j                  |       j                         j                         S r6   )torchview_as_realr7   r8   r4   s    r1   _tensor_to_complex_valr?   P   s%    a ((*1133r2   c                 >    | j                         j                         S r6   )r7   r8   r>   s    r1   _tensor_to_listrA   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| j                         n| }|j                  t        j
                  k(  rdS dS )Nr      )
isinstancenpndarraynumpydtypeuint8)tensor	converteds     r1   _calc_scale_factorrb   u   s6    &0&D&I288+144r2   c	                    ddl m}	m}
 |
j                         }|	j	                  |       }||||f\  }}}}|j                  ||f||f||f||f||fg||       |r|}|j                  |      \  }}}}||z
  ||z
  }}t        j                  d|z        }|j                  |||z
  d|z  z
  f||z   |fg|       |j                  ||z   ||z
  |z
  f|||       | S )Nr   )	ImageDraw	ImageFont)widthfillg?   )rg   )rg   font)PILrd   re   load_defaultDrawlinegetbboxr[   ceil	rectangler"   )r   xminyminxmaxymaxdisplay_strcolor
color_text	thicknessrd   re   ri   drawleftrighttopbottomtext_bottom_left_top_right_bottom
text_widthtext_heightmargins                            r1   _draw_single_boxr   z   s/    )!!#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(        j+                  d       t-        d      t%        |t&              s t(        j+                  d       t-        d      |xs i }t%        |t&              st-        d      |j/                         D ]@  \  } vs&t%        |t0              rt3         fd	|D              r0t-        d
 d d       g } |       } j/                         D ],  \  }|
t%        |t4        t6        f      r||j8                     _        |v r<t=        j>                  |   D cg c]  }t=        j@                  |       c}      }nd}|jC                   ||jA                  d      |             t%        |tD              r||j8                     _#        |v r<t=        j>                  |   D cg c]  }t=        j@                  |       c}      }nd}|jC                   ||jA                  d      |             1t%        |tH              r||j8                     _%        |v r<t=        j>                  |   D cg c]  }t=        j@                  |       c}      }nd}|jC                   ||jA                  d      |             t%        ||jL                        rLtO        |      d   }||j8                     _        |jC                   ||jA                  d                   $tQ        d        |||      }tS        tS        jT                  ||jW                                     }tY        tY        j@                  ||      g      }|j[                         D cg c]  } | ||             }} |||      } |||      }tS        tS        jT                  ||jW                                     }tY        tY        j@                  |
|      g      } ||	jA                  d       !      } |||"      }tS        tS        jT                  ||jW                                     }tY        tY        j@                  ||      g      }|||fS c c}w c c}w c c}w c c}w )#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   N   K   | ]  }t        |t                         y wr6   )rZ   type).0dhparam_dictks     r1   	<genexpr>zhparams.<locals>.<genexpr>   s!     Fqz!T+a.%9:Fs   "%z"parameter: hparam_domain_discrete[z/] should be a list of same type as hparam_dict[z].)number_value)valuesDATA_TYPE_FLOAT64)namer   domain_discrete)string_valueDATA_TYPE_STRING)
bool_value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valuer   )r   )hparam_infosmetric_infos)
experimentr   STATUS_SUCCESS)status)session_end_infor   ).r<   #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   rZ   dictloggerwarning	TypeErroritemslistallintfloatr   r   r   	ListValueValueappendstrr   boolr   Tensorr   
ValueErrorr	   
PluginDataSerializeToStringr   keys)r   metric_dicthparam_domain_discreter<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   vhpsssir   r   r   smdr   mtsexpseis   `                        `   r1   r   r      s   (     k4(WXL
 	
 k4(WXL
 	
 49r,d3W
 	
 ',,. 1[ a&FAFF4QC7fghfiikl  C

C!!# L
19a#u&*+CKKN'**BLBVBV "8!: #((a8C #'JJ!(;<$3 a*+CKKN'**","6"6 "8!: #((a8# #'JJ!(:;$3 a()CKKN%**","6"6 "8!: #((A6# #'JJ!(89$3 a&
1A*+CKKN'JJzqx~~>Q/RSTK
 	
UL
\  3@STG
#..#W-F-F-H
C
 +ACPQ
RC7B7G7G7I
J!::!,-
JC
J
#C
8C38KLG
#..#W-F-F-H
C
 >CHI
JC
-= >
?C>QRG
#..#W-F-F-H
C
 +?#NO
PCS=G,,D Ks   *R/
:R4
R9
9R>c                    t        |      j                         }|j                  dk(  s"J d|j                   d|j                   d       t	        |      }|rct        |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.rE   )rF   r^   rG   )rH   r^   scalarsr   r   r   r`   r   r   )r   simple_value)
r   squeezendimsizer   r
   r	   r   r   r   )	r   r`   collections	new_styledouble_precisionr   r#   r   r   s	            r1   r   r   b  s    " V_$$&Fqx	KFKK=X]^d^i^i]jjvwx 6]F"fXZH&6(+NL%00YG+6' 
 	
 gmm6JKLLr2   c                    |j                         |j                  z  dk\  rt        d      |j                  t        v ret        |j                     \  }}}t        di d|dt        |j                  D cg c]  }t        j                  |       c}      | ||      i}nt        |  d|j                         t        j                  d	      }t        |
      }t        t        j                  | ||      g      S c c}w )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 sizer^   tensor_shaper   dimz has unsupported tensor dtype r`   r   r   r   r   r`   r    )numelitemsizer   r^   _TENSOR_TYPE_MAPr
   r   shapeDimr	   r   r   r   )	r   r`   r^   
field_nameconversion_fnr9   r#   r   r   s	            r1   r#   r#     s     ||~'G4O
 	
 ||''+;FLL+I(z=" 
 0?E||L!)--15L! M&1
 C5 >v||nMNN!,,BK
k
2C'--C#lSTUU Ms   2Dc           	      j    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     s>    * "D '--D=>??r2   c                     t        |      }t        |j                  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     s=    " V_F&--.h?D'--D=>??r2   c           
      8   | j                   dk(  rt        d      | j                  d      } t        j                  | |      \  }}t        |      }|||kD  r||z  }||z  }|dk7  rt        j                  |d||z
  ggdd      }|j                  d|      j                  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kD  r||
d	z
  | nt        j                  dg|d| g      }||
|d	z    }|j                   dk(  s|j                   dk(  rt        d      | j                  |       }t!        | j#                         | j%                         t        |       | j                         ||j'                         |j'                               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   reshaper[   r   lenpadr   emptyr^   cumsumgreatersearchsortedr   concatenatedotr   r   r   r8   )r   r   r  countslimitsnum_binssubsamplingsubsampling_remainder
new_limits
cum_countsstartendsum_sqs                r1   r   r     s   {{a455^^BF\\&t4NFF6{H8 3(* (; 6 A%VV{-BBCD !	F K044"4=XXv{{Q0&,,?
 "[1
3B
2 2::fa01JaB!1C-D7SJE3JE
c(Q,C $)19uqy3"..1#vds|AT2U  EC!G$F{{a6;;!+LMMZZFJJLJJLKJJL]]_}} r2   c                 F   t        |      }t        ||      }t        |      }|j                  t        j
                        }||z  j                  dd      j                  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   rY   )rescaler   r   r   )r   r   rb   r   r[   float32clipr_   r   r   r   )r   r`   r  dataformatsscale_factorr   s         r1   r   r      s    6 V_FFK0F%f-L]]2::&F|#))!S188BFvw/E'--Cu=>??r2   c                 X   t        |      }t        ||      }t        |      }|j                  t        j                        t        |      z  }t        |j                  dd      j                  t        j                        |||      }t        t        j                  | |      g      S )z/Output a `Summary` protocol buffer with images.r   rY   )r  roislabelsr  r   )r   r   r   r[   r   rb   r   r!  r_   r   r   )r   tensor_imagetensor_boxesr  r"  r&  r   s          r1   r   r   E  s     <(L!,<L<(L&&rzz25G5UUL!S!((2	E '--Cu=>??r2   c           
          |j                   d   }t        |      }|D ]/  }t        | ||df   ||df   ||df   ||df   |d n||   d      } 1 | S )Nr   r   rh      Red)ru   rv   )r   ranger   )
disp_imageboxesr&  	num_boxeslist_gtr+   s         r1   r   r   V  sy    AIIG 	
%!Q$K!Q$K!Q$K!Q$K &F1I

	
 r2   c                    ddl m} | j                  \  }}}t        ||z        }t        ||z        }	|j	                  |       }
|t        |
||      }
|j                  j                  }|
j                  |	|f|      }
ddl	}|j                         }|
j                  |d       |j                         }|j                          t        j                  ||||      S )z=Convert a numpy representation of an image to Image protobuf.r   )ImageN)r&  PNG)formatheightrf   
colorspaceencoded_image_string)rj   r2  r   r   	fromarrayr   
ResamplingLANCZOSresizeioBytesIOsavegetvaluecloser   )r`   r  r%  r&  r2  r6  rf   channelscaled_heightscaled_widthr   	ANTIALIASr=  outputimage_strings                  r1   r   r   g  s    #\\FE7()Muw'LOOF#E5$v6  ((ILL,6	BEZZ\F	JJveJ$??$L
LLN==)	 r2   c                 B   t        |      }t        |      }t        |      }|j                  t        j
                        }||z  j                  dd      j                  t        j                        }t        ||      }t        t        j                  | |      g      S )Nr   rY   r  r   )r   r   rb   r   r[   r   r!  r_   r   r   r   )r   r`   fpsr#  r   s        r1   r   r     s|    V_FF#F%f-L]]2::&F|#))!S188BFvs#E'--Cu=>??r2   c                    	 dd l }	 ddl m} dd l}| j
                  \  }}}}|j                  t        |       |      }	|j                  dd	      j                  }
	 |	j                  |
dd 
       t        |
d      5 }|j                         }d d d        	 t        j                  |
       t'        j(                  |||      S # t        $ r t        d       Y y w xY w# t        $ r t        dd       Y y w xY w# t        $ r; 	 |	j                  |
dd       n"# t        $ r |	j                  |
d       Y nw xY wY w xY w# 1 sw Y   xY w# t         $ r t"        j%                  d       Y w xY w)Nr   zadd_video needs package moviepy)editorz6moviepy is installed, but can't import moviepy.editor.z2Some packages could be missing [imageio, requests])rI  z.gifF)suffixdelete)verboser   )rN  progress_bar)rN  rbz5The temporary file used by moviepy cannot be deleted.r5  )moviepyImportErrorprintrK  tempfiler   ImageSequenceClipr   NamedTemporaryFiler   	write_gifr   openreadosremoveOSErrorr   r   r   r2  )r`   rI  rQ  mpyrT  r4   hwcr!  filenamer(   tensor_strings                r1   r   r     sw   ) JAq!Q   f3 7D**&*GLLH4xt< 
h	 !!P
		( ==am G  /0
  D@	
 	   4	4NN8UNG 	4NN8UN3	44! !
  PNOPsv   C C C9 <E E CCC65C69	D=DD=D74D=6D77D=<D= E	E-,E-c                 @   t        |      }|j                         }t        |      j                         dkD  rt	        d       |j                  dd      }|j                  dk(  sJ d       |t        j                  t        j                        j                  z  j                  d      }dd l}dd l}|j                         }|j                  |d      5 }|j                  d       |j!                  d       |j#                  |       |j%                  |j&                         d d d        |j)                         }|j+                          t-        j.                  |d|j0                  d   |d	
      }	t-        t-        j2                  | |	      g      S # 1 sw Y   rxY w)Nr   z4warning: audio amplitude out of range, auto clipped.r  z%input tensor should be 1 dimensional.z<i2r   wbrh   z	audio/wav)sample_ratenum_channelslength_framesencoded_audio_stringcontent_type)r   r    r   )r   r   absr   rS  r!  r   r[   iinfoint16r   r=  waver>  rX  setnchannelssetsampwidthsetframeratewriteframesdatar@  rA  r   Audior   r   )
r   r`   re  arrayr=  rm  fio
wave_writeaudio_stringr    s
             r1   r    r      sH   FOEMMOE
5z~~!DE

2q!::?CCC?RXXbhh'+++33E:E
**,C	3	 +"",uzz*	+
 <<>LIIKMMkk"o) E '--Cu=>??+ +s   AFFc           
         g }| j                         D ]  \  }}g }|j                         D ]  \  }}|d   }|d   dk(  rht        |      dk(  sJ t        j                  t        j                  j	                  |d   |d   |d         g      }t        j
                  ||      }	n-t        j                  |	      }
t        j
                  ||

      }	|j                  |	        |j                  t        j                  ||              t        j                  |      } t        j                  d      }t        |      }t        d| j                         gt                     }t        t        j                   d||      g      S )Nr   r   Marginr*  rh   )r   lowerupper)series)titler   r   )r}  	multiline)r}  chart)categoryr!   r   r   	DT_STRINGr^   
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   r`   s                 r1   r!   r!     s}   J F1+,779 	!'J"1%Dq!X-4yA~%~!44"55<<"&q'aQ =  #((z$G!77DA"((zTJMM% 	!  	*--AVDE%F( 
3F!,,9IJK
k
2C,,./%'F
 MM8RUV
 r2   c           	      @   t        j                  dt        d      j                               }t        |      }t	        d|j                  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   r`   s        r1   r"   r"     s    !,,N1$=$O$O$QK k
2CKKK12%+;+?+?Q+G*HIF
 }}!6VTU r2   c	                    |dkD  rd}t        j                  ||||||f      }	t        d|      j                         }
t	        j
                  d|
      }t	        |      }t        d|	j                  d      j                         t        t        j                  |	j                  d   	      t        j                  |	j                  d
   	      g            }t        t        j                  | ||      g      S )N   r   r   num_thresholds	pr_curvesr   r   rE   r  r   r   r   r^   rF   r   r   r   )r[   stackr   r   r	   r   r
   r
  r8   r   r   r   r   r   )r   tpfptnfn	precisionrecallr  weightsrr  pr_curve_plugin_datar   r   r`   s                 r1   r$   r$   	  s     88RRY78D,.  ",,)=K k
2C,,r"))+% $$$**Q-8 $$$**Q-8
	F '--C#fMNOOr2   c                    t        |d      }t        ||||      }t        d|      j                         }t	        j
                  d|      }t	        |      }t        d|j                  d	      j                         t        t        j                  |j                  d   
      t        j                  |j                  d   
      g            }	t        t        j                  | ||	      g      S )Nr  )r  r  r   r  r  r   r   rE   r  r   r   r   r  r   r   )r   r&   r   r   r	   r   r
   r
  r8   r   r   r   r   r   )
r   r&  predictionsr  r  rr  r  r   r   r`   s
             r1   r%   r%   #  s    -NNGD -.  ",,)=K k
2C,,r"))+% $$$**Q-8 $$$**Q-8
	F '--C#fMNOOr2   c                    d}|d}t        j                  t        j                  ||dz
  z              }| j                  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  )	r[   int32floorr   float64r   r  maximumr  )r&  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 XXbhh{nq6H'IJKN==,L.1,-OLLw&	MJ LL|#w.	MJ 
:dd#	$TrT	*B	:dd#	$TrT	*B	AB	ABRZZR88I"**^R"W55F88RRY788r2   c                    ddl }ddlm}  |j                  |      }|j	                  | ||||j
                  ||      }	t        d|j                  d      j                         t        t        j                  |j
                  d         t        j                  |j
                  d         t        j                  |j
                  d	         g
            }t        j                  |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_configrE   r  r   r   rh   r   r  r   )r<   tensorboard.plugins.meshr   	as_tensorcreate_summary_metadatar   r
   r
  r8   r   r   r   r   get_instance_name)r   display_namedescriptionr`   ri  
componentsr  r<   r   tensor_metadatatensor_summarys              r1   _get_tensor_summaryr  _  s    . 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{}T)	sort_keys)jsondumps)config_dictr  s     r1   _get_json_configr    s#    Kjj=r2   c                 z   ddl m} ddlm} t	        |      }	g }
||j
                  f||j                  f||j                  fg}|D cg c]
  }|d   	| }}|j                  |D cg c]  \  }}|	 c}}      }|D ]%  \  }}|
j                  t        | ||||||	             ' t        |
      S c c}w c c}}w )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  )MeshPluginDatar   )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`   ri  r  s                  r1   r'   r'     s    , 2G";/KI	>(()	##$	%%&G
 %,E&vay/DvEGE004;<06<<J !( 

	

 ##% F<s   
B2B2(B7
)blackr  rh   )NNN)NFFr6   )r   NCHW)r   CHWN)r   NN)   )iD  )r  N)NN)[r  loggingrZ  r-   typingr   r   r   r<   r]   r[   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:   r?   rA   halffloat16bfloat16r   r  doubleint8r_   qint8rl  shortr  qint32int64	complex32chalf	complex64cfloatr   
complex128cdoublequint8quint4x2r   rb   r   r   r   r#   r   r   r   r   r   r   r   r   r   r    r!   r"   r$   r%   r&   r  r  r'   r   r2   r1   <module>r     s     	  & &   & 
 < F 8 J C   20 
		8	$&5 &S &&3 &5 &:5<< :DI :4ell 4tE{ 4 u||  S	  	JJJ(;<	MMIz+>? 
NN]J0CD 
MMJ_=	
 
KK*k?; 
MMK? 
LL;o> 
JJI7 
KK*i9 
KK*i9 
KK*i9 
KK*i9 
II
I7 
KK*i9 
LL:y/:  
KK*k?;!" 
OOnn6LM#$ 
KK..2HI	OOnn6LM	LL>>3IJ	JJJ8	8NO	MMO^5KL	KK*lO<	LL:|_=	NNZ?5 <5 (Vzz(MV"VJ@B@,4n"@L KO@""4@(V@<"J  IMP4P69B8v OS3$r2   