
    hc                        S SK r S SKrS SKrS SKrSSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJrJrJr  SSKJr  SS	KJr  SS
KJrJrJr  SSKJr  \ R8                  " \5      r\R>                  " S5      r S r!S"S jr"S#S jr#S$S jr$S r%S%S jr&S%S jr'S&S jr(S'S jr)S%S jr*S(S jr+S)S jr,S r-S*S jr.S r/S r0S+S jr1S+S jr2S#S jr3S  r4S%S! jr5g),    N   )
layout_pb2)MeshPluginData)PrCurvePluginData)TextPluginData)HistogramProtoSummarySummaryMetadata)TensorProto)TensorShapeProto)_prepare_videoconvert_to_HWCconvert_to_NTCHW)make_npz	[^-/\w\.]c                     U bJ  [         R                  SU 5      nUR                  S5      nX:w  a  [        R	                  SU  SU S35        Un U $ )N_/zSummary name z is illegal; using z	 instead.)_INVALID_TAG_CHARACTERSsublstriploggerinfo)namenew_names     N/var/www/fran/franai/venv/lib/python3.13/site-packages/tensorboardX/summary.py
_clean_tagr      sZ     *..sD9??3'KKv%8
)LNDK    c	                    SSK Jn	Jn
  U
R                  5       nU	R	                  U 5      nXX$4u  pnnUR                  X4UU4UU4X4X4/XS9  U(       ay  UnUR                  U5      u  nnnnUU-
  UU-
  nn[        R                  " SU-  5      nUR                  UUU-
  SU-  -
  4UU-   U4/US9  UR                  UU-   UU-
  U-
  4XWUS9  U $ )Nr   )	ImageDraw	ImageFont)widthfillg?   )r"   )r"   font)PILr   r    load_defaultDrawlinegetbboxnpceil	rectangletext)imagexminyminxmaxymaxdisplay_strcolor
color_text	thicknessr   r    r$   drawleftrighttopbottomtext_bottomltrb
text_widthtext_heightmargins                            r   _draw_single_boxrD   *   s   (!!#D>>% D"&d!9T#vII{T6NUFO|d[*1:  H\\+.
1a"#a%QK
+,K+-F
:;Z-/5: 	 	
 			F]K+5>?t 	 	
 Lr   c           	         SSK JnJnJnJnJnJn  SSKJnJ	n	J
n
  SnSnSnSnSn/ nU
" 5       nU R                  5        GH  u  nnUc  M  [        U[        5      (       a;  UUR                  U   l        UR!                  U" UUR#                  S5      S	95        M\  [        U[$        5      (       a;  UUR                  U   l        UR!                  U" UUR#                  S
5      S	95        M  [        U[(        [*        45      (       aJ  [-        U5      S   nUUR                  U   l        UR!                  U" UUR#                  S5      S	95        GM  [1        U5      (       aP  [3        US[        U5      5      UR                  U   l        UR!                  U" UUR#                  S5      S	95        GMq  UR!                  U" UUR#                  S5      S	95        GM     U" UUS9n[5        [4        R6                  " UUR9                  5       S9S9n[;        [:        R"                  " UUS9/S9nU Vs/ s H  nU" U" US9S9PM     nnU" UUS9nU" UUS9n[5        [4        R6                  " UUR9                  5       S9S9n[;        [:        R"                  " UUS9/S9nU	" UR#                  S5      S9nU" UUS9n[5        [4        R6                  " UUR9                  5       S9S9n[;        [:        R"                  " UUS9/S9nUUU4$ s  snf )Nr   )DataType
Experiment
HParamInfo
MetricInfo
MetricNameStatus)HParamsPluginDataSessionEndInfoSessionStartInfohparamsz_hparams_/experimentz_hparams_/session_start_infoz_hparams_/session_end_infoDATA_TYPE_STRING)r   typeDATA_TYPE_BOOLDATA_TYPE_FLOAT64__name__DATA_TYPE_UNSET)session_start_infoversionplugin_namecontentplugin_data)tagmetadatavaluer]   )r   )hparam_infosmetric_infos)
experimentrW   STATUS_SUCCESS)status)session_end_inforW   )tensorboardX.proto.api_pb2rF   rG   rH   rI   rJ   rK   %tensorboardX.proto.plugin_hparams_pb2rL   rM   rN   items
isinstancestrrO   string_valueappendValuebool
bool_valueintfloatr   number_valuecallablegetattrr
   
PluginDataSerializeToStringr	   )hparam_dictmetric_dictrF   rG   rH   rI   rJ   rK   rL   rM   rN   PLUGIN_NAMEPLUGIN_DATA_VERSIONEXPERIMENT_TAGSESSION_START_INFO_TAGSESSION_END_INFO_TAGhpsssikvrZ   smdmtsexpseis                            r   rO   rO   B   s      K+N;7 C

C!!#19a*+CKKN'JJzqx~~>P/QRSa()CKKN%JJzqx~~>N/OPQa#u&&
1A*+CKKN'JJzqx~~>Q/RSTA;;*1!ZQ*HCKKN'JJzqx~~>P/QRS

:18>>:K+LMN3 $6  3@STG
o&@&@[IPIbIbId'f gC
+ACPQ
RC7B
C{!::!,-{C
C
#C
8C38KLG
o&@&@[IPIbIbId'f gC
>CHI
JC
-= >
?C>QRG
o&@&@[IPIbIbId'f gC
+?#NO
PCS= Ds   +K>c                 F   [        U 5      n [        U5      nUR                  5       R                  S:X  d   S5       e[	        UR                  5       5      nUS:X  a"  US:X  a  [        [
        R                  " XS9/S9$ [        X#S9n[        [
        R                  " XUS9/S9$ )a  Outputs 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.
  display_name: The title of the plot. If empty string is passed, `name` will be used.
  summary_description: The comprehensive text that will showed by clicking the information icon on TensorBoard.
Returns:
  A scalar `Tensor` of type `string`. Which contains a `Summary` protobuf.
Raises:
  ValueError: If tensor has the wrong shape or type.
r   zscalar should be 0D )r]   simple_valuer_   )display_namesummary_description)r]   r   r^   )r   r   squeezendimrs   r	   ro   r
   )r   scalarr   r   r^   s        r   r   r      s     dDV_F>>  A%<'<<%6>>#$Fr1R7gmmJKLLLbH'--DPXYZ[[r   c           
      X    [        UUUUUUUS9n[        [        R                  " XS9/S9$ )a  Outputs 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	   ro   )	r   r   r   r   r   r   bucket_limitsbucket_countshists	            r   histogram_rawr      s;    ( c!!!&1'4!.0D '--D=>??r   c                     [        U 5      n [        U5      n[        UR                  [        5      X#5      n[        [
        R                  " XS9/S9$ )a0  Outputs 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   make_histogramastypers   r	   ro   )r   valuesbinsmax_binsr   s        r   	histogramr      sC      dDV_F&--.?D'--D=>??r   c           
      $   U R                   S:X  a  [        S5      eU R                  S5      n [        R                  " XS9u  p4[        U5      nUb  XR:  a  XR-  nXV-  nUS:w  a  [        R                  " USXg-
  //SSS9nUR                  SU5      R                  SS9n[        R                  " UR                   S	-   4UR                  5      nUSSU2   USS& US   US'   Un[        R                  " [        R                  " US5      5      n	[        R                  " U	SU	S   S	-
  /S
S9u  p[        U
5      n
[        U5      S	-   nA	U
S:  a  X:S	-
  U O[        R                  " S/USU /5      nXJUS	-    nUR                   S:X  d  UR                   S:X  a  [        S5      eU R                  U 5      n[!        U R#                  5       U R%                  5       [        U 5      U R                  5       UUR'                  5       UR'                  5       S9$ )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   r9   )sidez1The histogram is empty, please file a bug report.r   )size
ValueErrorreshaper*   r   lenpadr   emptydtypecumsumgreatersearchsortedrr   concatenatedotr   r   r   tolist)r   r   r   countslimitsnum_binssubsamplingsubsampling_remainder
new_limits
cum_countsstartendsum_sqs                r   r   r      s   {{a455^^BF\\&4NF6{H 3* ( 6 A%VVF;3V/W.X!+Q@FK044"4=XXv{{Q0&,,?
 "[1
3B
2 2::fa01JaB!1C-D7SJEJE
c(Q,C ',aiVAIc"R^^aS&QURU,DW5XF#'"F{{a6;;!+LMMZZFfjjl$jjl!&k$jjl&,'-}}!'2 2r   c                    [        U 5      n [        U5      n[        X5      nUR                  [        R
                  :w  a"  US-  R                  [        R
                  5      n[        XS9n[        [        R                  " XS9/S9$ )ao  Outputs 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.

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).
Returns:
  A scalar `Tensor` of type `string`. The serialized `Summary` protocol
  buffer.
     o@)rescaler]   r.   r_   )
r   r   r   r   r*   uint8r   
make_imager	   ro   )r]   tensorr   dataformatsr.   s        r   r.   r.     si    * S/CV_FF0F||rxx5.((2v/E'--C=>??r   c                    [        U5      n[        X5      n[        U5      nUR                  [        R                  :w  a"  US-  R                  [        R                  5      n[        UUX%S9n[        [        R                  " XS9/S9$ )z0Outputs a `Summary` protocol buffer with images.r   )r   roislabelsr   r_   )	r   r   r   r*   r   r   r   r	   ro   )r]   tensor_imagetensor_boxesr   r   r   r.   s          r   image_boxesr   +  sv    <(L!,<L<(LRXX%$u,44RXX>|&(9E '--C=>??r   c                     UR                   S   n[        U5      nU H)  n[        U XS4   XS4   XS4   XS4   Uc  S OX%   SS9n M+     U $ )Nr   r   r#      Red)r3   r4   )shaperangerD   )
disp_imageboxesr   	num_boxeslist_gtis         r   
draw_boxesr   :  si    AIIG%j&+qDk&+qDk&+qDk&+qDk:@.$fi,13
  r   c                 (   SSK nSSKJn  SSK Jn  U R                  u  pxn	[        Xq-  5      n
[        X-  5      nUR                  U 5      nUb
  [        XUS9nU" UR                  5      U" S5      :  a(  UR                  X4UR                  R                  5      nOUR                  X4UR                  5      nSSKnUR                  5       nUR                  USS9  UR                  5       nUR!                  5         ["        R                  " UUU	US	9$ )
z7Convert an numpy representation image to Image protobufr   N)parse)Image)r   z9.1.0PNG)formatheightr!   
colorspaceencoded_image_string)r%   packaging.versionr   r   r   rr   	fromarrayr   __version__resize
ResamplingLANCZOSioBytesIOsavegetvaluecloser	   )r   r   r   r   r%   r   r   r   r!   channelscaled_heightscaled_widthr.   r   outputimage_strings                   r   r   r   I  s    '#\\F7()Mu'LOOF#E5v6S__w/l:E<L<L<T<TUl:EMMJZZ\F	JJveJ$??$L
LLN==$$+.:< <r   c                 $   [        U 5      n [        U5      n[        XS9n[        U5      nUR                  [
        R                  :w  a"  US-  R                  [
        R                  5      n[        X5      n[        [        R                  " XS9/S9$ )N)input_formatr   r   r_   )r   r   r   r   r   r*   r   r   
make_videor	   ro   )r]   r   fpsr   videos        r   r   r   d  sq    
S/CV_Ff?FF#F||rxx5.((2v#E'--C=>??r   c                 t   SS K nSSKJn  SSKJn  SSKJn   U" U" S5      5      n SSKJ	n  U" U" S	5      5      n	Xe" S
5      :  a   X" S5      :  a  [        R                  S5        U R                  u  ppUS:X  a,  Xe" S
5      :  d  X" S5      :  a  [        R                  " U SSS9n U" [        U 5      US9nUR!                  SSS9 nUR"                  nXe" S5      :  a&  [        R%                  S5        UR'                  USS9  O-Xe" S5      :  a  UR'                  USS S9  OUR'                  US S9  [)        US5       nUR+                  5       nS S S 5         [,        R.                  " U5        S S S 5        [2        R4                  " XUWS9$ ! U a    [        R                  S5         g f = f! [         a9     SSKJ	n   GN! [         a!  n[        R                  SU5         S nA g S nAff = ff = f! , (       d  f       N= f! [0         a    [        R%                  S5         Nf = f! , (       d  f       N= f)Nr   )PackageNotFoundErrorrW   )Versionmoviepyzmoviepy is not installed.)ImageSequenceClipzgCan't create video. moviepy is installed, but can't import moviepy.video.io.ImageSequenceClip due to %rimageio2z2.29zYou are using moviepy >= 2.0.0 and imageio < 2.29.0. This combination is known to cause issues when writing videos. Please upgrade imageio to 2.29 or later, or use moviepy < 2.0.0.r   z2.27r   r   r   )r   z.gifF)suffixdeletez1.0.0z8Upgrade to moviepy >= 1.0.0 to supress the progress bar.)verbosez	2.0.0dev1)r  r   )r   rbz5The temporary file used by moviepy cannot be deleted.r   )tempfileimportlib.metadatar   rW   r   r   r   errorr  r  ImportError"moviepy.video.io.ImageSequenceClipr   r*   repeatlistNamedTemporaryFiler   warning	write_gifopenreadosremoveOSErrorr	   r   )r   r   r	  r   get_versionr   moviepy_versionr  eimageio_versionr>   hwcclipfpfilenameftensor_strings                      r   r   r   q  s   79)!+i"89
- k)45O'#,&?WV_+LO	

 JA! 	Av73<'WV_,612.T&\s3D		$	$F5	$	AR77WW--NNUVNN8UN3w{33NN8U4N@ NN8DN1(D!QFFHM "	TIIh# 
B* ==q}]]s   01  		LL 	LLy 			T "!
  	TNNRS	T% 
B	As   F F- A7H)>G3H)HF*)F*-
G08G
G,G'!G0'G,,G03
H	=H)H&#H)%H&&H))
H7c                 T   SSK nSSKn[        U5      n[        U5      R	                  5       S:  a  [        S5        UR                  SS5      nUR                  S:X  a  [        R                  " USS9nUR                  S:X  d   S5       eUR                  u  pVUS:X  d  US:X  d   S	5       eUR                  5        nUR                  XqUS
S9  UR                  5       nSSS5        [        R                  " UUUWSS9n	[        [        R                   " X	S9/S9$ ! , (       d  f       NB= f)z
Args:
  tensor: A 2-D float Tensor of shape `[frames, channels]` where `channels` is 1 or 2.
    The values should between [-1, 1]. We also accepts 1-D tensor.
r   Nr   z4warning: audio amplitude out of range, auto clipped.r   r   r#   z%Input tensor should be 2 dimensional.z&The second dimension should be 1 or 2.wav)
samplerater   z	audio/wav)sample_ratenum_channelslength_framesencoded_audio_stringcontent_type)r]   audior_   )r   	soundfiler   absr   printr  r   r*   expand_dimsr   r   writer   r	   Audioro   )
r]   r   r'  r   r-  r)  r(  fioaudio_stringr,  s
             r   r,  r,    s    V_F
6{1DER#{{aQ/;;!DDD"(,,M1 1[3[[1	EJ||~ 
 MMk'3(5/;'2	4E
 '--C=>?? 
s   ;"D
D'c           
         / nU R                  5        H  u  p#/ nUR                  5        H  u  pVUS   nUS   S:X  aa  [        U5      S:X  d   e[        R                  " [        R                  R	                  US   US   US   S9/S9n[        R
                  " XXS9n	O([        R                  " US	9n
[        R
                  " XZS
9n	UR                  U	5        M     UR                  [        R                  " X$S95        M     [        R                  " US9n [        R                  " SS9n[        US9n[        SU R                  5       /[        5       S9n[        [        R                   " SXS9/S9$ )Nr   r   Marginr   r#   )r`   lowerupper)series)titlerC   ra   )r:  	multiline)r:  chart)categorycustom_scalars)rY   r[   	DT_STRINGr   
string_valtensor_shapecustom_scalars__config__r]   r   r^   r_   )rj   r   r   MarginChartContentSeriesChartMultilineChartContentrn   CategoryLayoutr
   rw   r   rx   r   r	   ro   )layout
categoriesr   r   charts
chart_namechart_meatadatatagsmgccr<  mlccrw   r   r   s                 r   r>  r>    sg   J+,779'J"1%Dq!X-4yA~%~!44Z=Z=Z=a=ahlmnhohlmnhohlmnho >b >q =r s #((zG!77DA"((zJMM%  ,5 	*--ADE   
3F ++8HIJ
j
1C{%+%=%=%?$@&6&8:F '--,Fvdeffr   c           
         SS K n[        R                  " S[        SS9R	                  5       S9n[        US9n[        SUR                  SS9/[        [        R                  " S	S
9/S9S9n[        [        R                  " U S-   XES9/S9$ )Nr   r-   r   rX   r[   r?  utf_8)encodingr   r   dimr@  z/text_summaryr]   r^   r   r_   )jsonr
   rw   r   rx   r   encoder   Dimr	   ro   )r]   r-   rZ  rw   r   r   s         r   r-   r-     s     ++N1$=$O$O$QSJ
j
1C{%)[['[%B$C&6<L<P<PVW<X;Y&Z\F '--C/,AC_`aar   c	                    US:  a  Sn[         R                  " XX4XV45      n	[        SUS9R                  5       n
[        R
                  " SU
S9n[	        US9n[        SU	R                  S5      R                  5       [        [        R                  " U	R                  S   S	9[        R                  " U	R                  S
   S	9/S9S9n[        [        R                  " XUS9/S9$ )N   r   rW   num_thresholds	pr_curvesrX   r[   DT_FLOATr   rV  r   rW  r   	float_valrB  rY  r_   )r*   stackr   rx   r
   rw   r   r   r   r   r\  r   r	   ro   )r]   tpr   tnfn	precisionrecallr`  weightsdatapr_curve_plugin_datarw   r   r   s                 r   pr_curve_rawrn    s    88RRY78D,.22C2C2E  ++)=?J
j
1Cz#'<<#3#:#:#<&6"2"6"6DJJqM"JL\L`L`fjfpfpqrfsLt!u'wxF '--CfMNOOr   c                    [        US5      n[        XX4S9n[        SUS9R                  5       n[        R
                  " SUS9n[	        US9n[        SUR                  S	5      R                  5       [        [        R                  " UR                  S   S
9[        R                  " UR                  S   S
9/S9S9n	[        [        R                  " XU	S9/S9$ )Nr^  )r`  rk  r   r_  ra  rX   r[   rb  r   rV  r   rW  rc  rY  r_   )r   compute_curver   rx   r
   rw   r   r   r   r   r\  r   r	   ro   )
r]   r   predictionsr`  rk  rl  rm  rw   r   r   s
             r   pr_curverr    s    -N(6ID,.22C2C2E  ++)=?J
j
1Cz#'<<#3#:#:#<&6"2"6"6DJJqM"JL\L`L`fjfpfpqrfsLt!u'wxF '--CfMNOOr   c                 f   SnUc  Sn[         R                  " [         R                  " XS-
  -  5      5      nU R                  [        5      nSUS-
  4n[         R
                  " UUUXc-  S9u  p[         R
                  " UUUSU-
  U-  S9u  p[         R                  " US S S2   5      S S S2   n[         R                  " U
S S S2   5      S S S2   nUS   U-
  nUS   U-
  nU[         R                  " XKU-   5      -  nU[         R                  " XKU-   5      -  n[         R                  " XXUU45      $ )NgHz>g      ?r   r   )r   r   rk  r   )	r*   int32floorr   rs   r   r   maximumre  )r   rq  r`  rk  _MINIMUM_COUNTbucket_indicesfloat_labelshistogram_range
tp_bucketsr   
fp_bucketsrf  r   rg  rh  ri  rj  s                    r   rp  rp    s8   N XXbhh{q6H'IJKN=='L.1,-OLL&	(MJ
 LL|#w.	0MJ 
:dd#	$TrT	*B	:dd#	$TrT	*B	AB	ABRZZR88I"**^"W55F88RRY788r   c                    [        SU UUUR                  S9nUR                  5       n[        [        R                  " SUS9S9n[        SUR                  S5      R                  5       [        [        R                  " UR                  S   S9[        R                  " UR                  S	   S9[        R                  " UR                  S
   S9/S9S9n[        R                  " U  SU 3UUS9nU$ )Nr   )rW   r   r+  json_configr   meshrX   r[   rb  r   rV  r   r#   rW  rc  r   rD  )r   r   rx   r
   rw   r   r   r   r   r\  r	   ro   )r]   r   r+  r~  mesh_plugin_datarZ   r   tensor_summarys           r   _get_tensor_summaryr  <  s    %!ll 002G
#..C
 z#)>>"#5#<#<#>&6-11v||AG-11v||AG-11v||AG< 'F ]]e1\N#N
 r   c                     SS K n/ nUS4US4US4/nU H=  u  pUc  M
  UR                  [        U [        U5      XR	                  USS95      5        M?     [        US9$ )Nr   r   r#   r   T)	sort_keysr_   )rZ  rn   r  r   dumpsr	   )
r]   verticescolorsfacesconfig_dictrZ  	summariestensorsr   r+  s
             r   r  r  Y  sw    I	1	
	G !(>WV_lJJ{fjJDkl	n !( ##r   )blackr  r#   )NN)r   r   )N)r   CHW)r   r  N)r   NN)   NTCHW)iD  )r^  N)6loggingr  re_renumpyr*   protor   proto.plugin_mesh_pb2r   proto.plugin_pr_curve_pb2r   proto.plugin_text_pb2r   proto.summary_pb2r   r	   r
   proto.tensor_pb2r   proto.tensor_shape_pb2r   utilsr   r   r   x2numr   	getLoggerrT   r   compiler   r   rD   rO   r   r   r   r   r.   r   r   r   r   r   r,  r>  r-   rn  rr  rp  r  r   r   r   <module>r     s     	    1 8 1 H G ) 4 C C 			8	$++l3 $0K\\2@<@,+2\@@@<6
@A^H@@g6bP P$9>:$r   