§
    Ì²ÅjzŠ  ã                   ó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     úPC:\Projects\Historical\venv\Lib\site-packages\torch/utils/tensorboard/summary.pyr   r   6   s,   € õ Œ+�c˜1Ñ
Ô
€CÝŒ=˜˜cÑ"Ô" 1Ô%Ð%ó    r+   c                 ób   — t          j        d| ¦  «        }t          j        d|¦  «        d         S )z–Casts 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,   € õ Œ+�c˜1Ñ
Ô
€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Ð9˜q�K˜‰NŒNÐ9Ð9Ð9r2   ©ÚflattenÚtolist©r4   s    r1   Ú_tensor_to_half_valr@   M   s*   € Ø9Ð9 A§I¢I¡K¤K×$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   € Ø�9Š9‰;Œ;×ÒÑÔÐ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Ø”¥2¤8Ò+Ð+ˆ1ˆ1°Ð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Ø"&¨¨d°DÐ!9Ñ€Tˆ5�#�vØ‡I‚IØ
�ˆ�t˜V�n u¨f o¸¸s°|ÀdÈCÀ[ÐQØØð ñ ô ð ð
 ð 
Øˆà'+§|¢|°KÑ'@Ô'@Ñ$ˆˆt�V˜WØ"(¨5¡.°'¸D±.�Kˆ
Ý”˜ Ñ+Ñ,Ô,ˆØ�Šà�{ [Ñ0°1°v±:Ñ=Ð>Ø˜
Ñ" 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ÐF¸q•z !¥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µ  øøøø€ ð( €L€L€Lðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð õ �k¥4Ñ(Ô(ð 
Ý�ŠÐWÑXÔXÐXÝØLñ
ô 
ð 	
õ �k¥4Ñ(Ô(ð 
Ý�ŠÐWÑXÔXÐXÝØLñ
ô 
ð 	
ð 4Ð9°rÐÝÐ,­dÑ3Ô3ð 
ÝØWñ
ô 
ð 	
ð '×,Ò,Ñ.Ô.ð ð ‰ˆˆ1à�[Ð Ð Ý˜a¥Ñ&Ô&ð !åÐFÐFÐFÐFÐFÀAÐFÑFÔFÑFÔFð !õ Øl°QÐlÐlÐghÐlÐlÐlñô ð ð	 !ð €Cà
Ð
Ñ
Ô
€CØ×!Ò!Ñ#Ô#ð L
ñ L
‰ˆˆ1Øˆ9ØÝ�a�#�u˜Ñ&Ô&ð 	Ø*+ˆCŒK˜ŒNÔ'àÐ*Ð*Ð*ÝBLÔBVðð à!7¸Ô!:ðñ ô ðCñ Cô C��ð #'�à�JŠJØ�
ØØ!ŸšÐ(;Ñ<Ô<Ø$3ðñ ô ñô ð ð å�a�ÑÔð 	Ø*+ˆCŒK˜ŒNÔ'àÐ*Ð*Ð*Ý",Ô"6ðð à!7¸Ô!:ðñ ô ð#ñ #ô #��ð #'�à�JŠJØ�
ØØ!ŸšÐ(:Ñ;Ô;Ø$3ðñ ô ñô ð ñ å�a�ÑÔð 	Ø()ˆCŒK˜ŒNÔ%àÐ*Ð*Ð*Ý",Ô"6ðð à!7¸Ô!:ðñ ô ð#ñ #ô #��ð #'�à�JŠJØ�
ØØ!ŸšÐ(8Ñ9Ô9Ø$3ðñ ô ñô ð ñ å�a˜œÑ&Ô&ð 	Ý˜‘
”
˜1”ˆAØ*+ˆCŒK˜ŒNÔ'Ø�JŠJ�z�z q¨x¯~ª~Ð>QÑ/RÔ/RÐSÑSÔSÑTÔTÐTÙÝØKñ
ô 
ð 	
ð  Ð°3Ð@SÐTÑTÔT€GÝ
Ý#Ô.Ø#¨W×-FÒ-FÑ-HÔ-Hð
ñ 
ô 
ðñ ô €Cõ
 �œÐ+AÈCÐPÑPÔPÐQÐ
RÑ
RÔ
R€Cà
JÐ
JÐ
JÐ
JÐ
J°{×7GÒ7GÑ7IÔ7IÐ
JÑ
JÔ
J€Cà
ˆ* #°CÐ
8Ñ
8Ô
8€CàÐ¨3Ð8KÐLÑLÔL€GÝ
Ý#Ô.Ø#¨W×-FÒ-FÑ-HÔ-Hð
ñ 
ô 
ðñ ô €Cõ
 �œ¨>ÀCÐHÑHÔHÐIÐ
JÑ
JÔ
J€Cà
ˆ. §¢Ð-=Ñ >Ô >Ð
?Ñ
?Ô
?€CØÐ°Ð>QÐRÑRÔR€GÝ
Ý#Ô.Ø#¨W×-FÒ-FÑ-HÔ-Hð
ñ 
ô 
ðñ ô €Cõ
 �œÐ+?È#ÐNÑNÔNÐOÐ
PÑ
PÔ
P€Cà��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ÒÐÐØwÈFÌKÐwÐwÐ^dÔ^iÐwÐwÐwñ 	ÔÐõ �6‰]Œ]€FØð MÝ"¨f¨X¸ZÐHÑHÔHˆØð 	OÝ&°6°(À+ÐNÑNÔNˆLå%Ô0¸YÐGÑGÔGˆÝ¨+Ð6Ñ6Ô6ˆÝå”ØØ'Ø ðñ ô ðð
ñ 
ô 
ð 	
õ �gœm°À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:
      tag: A name for the generated node. Will also serve as the series name in
        TensorBoard.
      tensor: Tensor to be converted to protobuf
    Returns:
      A tensor protobuf in a `Summary` protobuf.
    Raises:
      ValueError: If tensor is too big to be converted to protobuf, or
                     tensor data type is not supported
    l        zAtensor is bigger than protocol buffer's hard limit of 2GB in 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ñ
ô 
ð 	
ð „|Õ'Ð'Ð'Ý+;¸F¼LÔ+IÑ(ˆˆz˜=Ý"ð 
ð 
à˜ØÕ 0ØLÐL¸v¼|ÐLÑLÔLð!ñ !ô !ð ˜M˜M¨&Ñ1Ô1ðð
ð 
ˆˆõ ˜CÐMÐM¸v¼|ÐMÐMÑNÔNÐNå!Ô,¸ÐBÑBÔB€KÝ
 kÐ
2Ñ
2Ô
2€CÝ�'œ-¨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Ô4�N€FˆFÝ�6‰{Œ{€HØÐ ¨8Ò 3Ð 3Ø (Ñ*ˆØ (¨;Ñ 6ÐØ  AÒ%Ð%Ý”VØØ˜{Ð-BÑBÐCÐDØØ !ð	ñ ô ˆFð —’  KÑ0Ô0×4Ò4¸"Ð4Ñ=Ô=ˆÝ”X˜vœ{¨Q™Ð0°&´,Ñ?Ô?ˆ
Ø   " [ Ô1ˆ
�3�B�3‰Ø œˆ
�2‰Øˆõ ”�2œ: f¨aÑ0Ô0Ñ1Ô1€JÝ” ¨a°¸B´À!Ñ1CÐ-DÈ7ÐSÑSÔS�J€Eˆ3Ý�‰JŒJ€EÝ
ˆc‰(Œ(�Q‰,€CØð $)¨1¢9 9ˆˆu�q‰y˜3ˆÔÐµ"´.À1À#ÀvÈdÈsÈdÄ|ÐATÑ2UÔ2Uð ð �E˜C !™G�OÔ$€Fà„{�aÒÐ˜6œ;¨!Ò+Ð+ÝÐLÑMÔMÐMà�ZŠZ˜ÑÔ€FÝØ�JŠJ‰LŒLØ�JŠJ‰LŒLÝ�‰KŒKØ�JŠJ‰LŒLØØ—]’]‘_”_Ø�}Š}‰Œðñ ô ð 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Ý˜F KÑ0Ô0€Få% fÑ-Ô-€LØ�]Š]�2œ:Ñ&Ô&€FØ�|Ñ#×)Ò)¨!¨SÑ1Ô1×8Ò8½¼ÑBÔB€FÝ�v wÐ/Ñ/Ô/€EÝ�'œ-¨C°uÐ=Ñ=Ô=Ð>Ð?Ñ?Ô?Ð?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Ø×&Ò&¥r¤zÑ2Ô2Õ5GÈÑ5UÔ5UÑU€LÝØ×Ò˜!˜SÑ!Ô!×(Ò(­¬Ñ2Ô2ØØØð	ñ ô €Eõ �'œ-¨C°uÐ=Ñ=Ô=Ð>Ð?Ñ?Ô?Ð?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Ø & ˜˜°F¸1´IØð
ñ 
ô 
ˆ
ˆ
ð Ð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   € àÐÐÐÐÐà#œ\Ñ€FˆE�7Ý˜ Ñ(Ñ)Ô)€MÝ�u˜w‘Ñ'Ô'€LØ�OŠO˜FÑ#Ô#€EØÐÝ˜5 $¨vÐ6Ñ6Ô6ˆØÔ Ô(€IØ�LŠL˜,¨Ð6¸	ÑBÔB€EØ€I€I€Ià�ZŠZ‰\Œ\€FØ	‡J‚Jˆv˜e€JÑ$Ô$Ð$Ø—?’?Ñ$Ô$€LØ
‡L‚L�N„N€NÝŒ=ØØØØ)ð	ñ ô ð 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ÔB€FÝ�v˜sÑ#Ô#€EÝ�'œ-¨C°uÐ=Ñ=Ô=Ð>Ð?Ñ?Ô?Ð?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  Ú_tÚhÚwÚcr/  Úfilenamer(   Útensor_strings                r1   r   r   Œ  sh  € ðØˆˆˆˆøÝð ð ð ÝÐ/Ñ0Ô0Ð0ØˆˆðøøøðØ)Ð)Ð)Ð)Ð)Ð)Ð)øÝð ð ð ÝØDØ@ñ	
ô 	
ð 	
ð 	ˆˆðøøøð €O€O€Oà”,�K€Bˆˆ1ˆað × Ò ¥ f¡¤°3Ð Ñ7Ô7€Dà×*Ò*°&ÀÐ*ÑGÔGÔL€Hð4Ø�Š�x¨°tˆÑ<Ô<Ð<Ð<øÝð 4ð 4ð 4ð	4Ø�NŠN˜8¨UÀˆNÑGÔGÐGÐGøÝð 	4ð 	4ð 	4Ø�NŠN˜8¨UˆNÑ3Ô3Ð3Ð3Ð3ð	4øøøøøð4øøøõ 
ˆh˜Ñ	Ô	ð ! ØŸš™œˆð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ðPÝ
Œ	�(ÑÔÐÐøÝð Pð Pð PÝ�ŠÐNÑOÔOÐOÐOÐOðPøøøõ Œ=Ø˜ a¸mðñ ô ð 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   rw  ÚarrayrL  r  ÚfioÚ
wave_writeÚaudio_stringr    s
             r1   r    r    ·  s×  € Ý�F‰OŒO€EØ�MŠM‰OŒO€EÝ
ˆ5�z„z‡~‚~ÑÔ˜!ÒÐÝÐDÑEÔEÐEØ—
’
˜2˜qÑ!Ô!ˆØŒ:˜Š?ˆ?ˆ?ÐC‰?Œ?ˆ?Ø•R”X�bœhÑ'Ô'Ô+Ñ+×3Ò3°EÑ:Ô:€Eà€I€I€IØ€K€K€Kà
�*Š*‰,Œ,€CØ	�Š�3˜Ñ	Ô	ð + Ø×Ò Ñ"Ô"Ð"Ø×Ò Ñ"Ô"Ð"Ø×Ò Ñ,Ô,Ð,Ø×Ò˜uœzÑ*Ô*Ð*ð	+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +ð
 —<’<‘>”>€LØ‡I‚I�K„K€KÝŒMØØØ”k "”oØ)Ø ðñ ô €Eõ �'œ-¨C°uÐ=Ñ=Ô=Ð>Ð?Ñ?Ô?Ð?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_metadataÚtagsÚmgccr‘  Úmlccr¹   rà   rf   s                 r1   r!   r!   Õ  sÖ  € Ø€JØ—’‘”ð Fñ F‰ˆˆ1ØˆØ*+¯'ª'©)¬)ð 	!ð 	!Ñ&ˆJ˜Ø! !Ô$ˆDØ˜aÔ  HÒ,Ð,Ý˜4‘y”y A’~�~�~�~Ý!Ô4å"Ô5×<Ò<Ø"& q¤'°°a´ÀÀQÄð =ñ ô ððñ ô �õ #Ô(¨zÀ$ÐGÑGÔG��å!Ô7¸DÐAÑAÔA�Ý"Ô(¨zÀTÐJÑJÔJ�Ø�MŠM˜%Ñ Ô Ð Ð Ø×Ò�*Ô-°A¸VÐDÑDÔDÑEÔEÐEÑEåÔ¨
Ð3Ñ3Ô3€FÝ!Ô,Ð9IÐJÑJÔJ€KÝ
 kÐ
2Ñ
2Ô
2€CÝØØ×,Ò,Ñ.Ô.Ð/Ý%Ñ'Ô'ðñ ô €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Ç   € Ý!Ô,Ø¥N¸1Ð$=Ñ$=Ô$=×$OÒ$OÑ$QÔ$Qðñ ô €Kõ  kÐ
2Ñ
2Ô
2€CÝØØ—K’K¨�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'  € ð ˜ÒÐØˆÝŒ8�R˜˜R  Y°Ð7Ñ8Ô8€DÝ,Ø .ðñ ô çÒÑÔð õ "Ô,ØÐ)=ðñ ô €Kõ  kÐ
2Ñ
2Ô
2€CÝØØ—,’,˜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ÝØ�¨NÀGðñ ô €Dõ -Ø .ðñ ô çÒÑÔð õ "Ô,ØÐ)=ðñ ô €Kõ  kÐ
2Ñ
2Ô
2€CÝØØ—,’,˜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 )NgH¯¼šò×z>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à€Øˆõ ”X�bœh {°nÀqÑ6HÑ'IÑJÔJÑKÔK€NØ—=’=¥¤Ñ,Ô,€LØ˜.¨1Ñ,Ð-€OÝ”LØØØØ˜wÑ&ð	ñ ô �M€J�õ ”LØØØØ�|Ñ# wÑ.ð	ñ ô �M€J�õ 
Œ�:˜d˜d ˜dÔ#Ñ	$Ô	$ T T r TÔ	*€BÝ	Œ�:˜d˜d ˜dÔ#Ñ	$Ô	$ T T r TÔ	*€BØ	ˆAŒ�‰€BØ	ˆAŒ�‰€BØ•R”Z °°R±Ñ8Ô8Ñ8€IØ•"”*˜^¨R°"©WÑ5Ô5Ñ5€FÝŒ8�R˜˜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   r{  Ú
componentsrÈ  rC   r»   Útensor_metadataÚtensor_summarys              r1   Ú_get_tensor_summaryrÒ  _  s*  € ð. €L€L€LØ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˜&¨v°a¬yÐ/DˆvÐ/DÐ/DÐ/Dr2   c                 ó   — g | ]\  }}|‘ŒS r7   r7   )r9   rf   r{  s      r1   r;   zmesh.<locals>.<listcomp>Æ  s   € Ð<Ð<Ð<Ñ0˜6 <ˆÐ<Ð<Ð<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   r{  s                  r1   r'   r'   £  s  € ð, 2Ð1Ð1Ð1Ð1Ð1ØGÐGÐGÐGÐGÐGå" ;Ñ/Ô/€Kà€Ià	�>Ô(Ð)Ø	�Ô#Ð$Ø	�Ô%Ð&ð€Gð
 FÐE GÐEÑEÔE€GØ×0Ò0Ø<Ð<°GÐ<Ñ<Ô<ñô €Jð !(ð 
ð 
Ñˆ�Ø×ÒÝØØØØØØØñô ñ
	
ô 
	
ð 
	
ð 
	
õ ˜Ð#Ñ#Ô#Ð#r2   )ri   ri   rj   )NNN)NFFrB   )r   r*  )r   r2  N)r   NN)rW  )rt  )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ð :ð :ð :ð :ð4˜eœlð 4¨t°E¬{ð 4ð 4ð 4ð 4ð �u”|ð  ¨¨S¬	ð  ð  ð  ð  ðØ	„J�˜JÐ(;Ð<ðà	„M�I˜zÐ+>Ð?ðð 
„N�] JÐ0CÐDðð 
„M�J ¨_Ð=ð	ð
 
„K�*˜k¨?Ð;ðð 
„M�K ¨Ð?ðð 
„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¨?Ð;ð!ð" 
„O�n nÐ6LÐMð#ð$ 
„K�. .Ð2HÐIØ	„O�n nÐ6LÐMØ	„L�> >Ð3IÐJØ	„J�˜J¨Ð8Ø	Ô�¨Ð8NÐOØ	„M�O ^Ð5KÐLØ	„K�*˜l¨OÐ<Ø	„L�:˜|¨_Ð=Ø	„N�Z ¨Ð?ð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ð 9ðB8ð 8ð 8ðvð ð ð OSð3$ð 3$ð 3$ð 3$ð 3$ð 3$r2   