§
    �ŠtjŸ‡  ã                   óX  — d dl Z d dlZd dlZd dl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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j"        d"de)f“ej5        d"de)f“ej6        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j1        d d,e)fej?        d d,e)fej@        d d,e)fi	¥ZAde"fd-„ZB	 	 	 dLd0„ZCdMd1„ZDdNd3„ZEd4„ ZFd5„ ZGdOd6„ZHdOd7„ZIdPd9„ZJ	 dQd;„ZKdOd<„ZLdRd=„ZMdSd?„ZNd@„ ZOdTdB„ZPdC„ ZQdD„ ZR	 dUdF„ZSdUdG„ZTdVdH„ZUdI„ ZVdJ„ ZW	 dVdK„ZXdS )Wé    N)ÚAny)Ú
struct_pb2)ÚHistogramProtoÚSummaryÚSummaryMetadata)ÚTensorProto)ÚTensorShapeProto)Ú
layout_pb2)ÚPrCurvePluginData)ÚTextPluginDataé   )Úmake_np)Ú_prepare_videoÚconvert_to_HWC)Úhalf_to_intÚint_to_halfÚhparamsÚscalarÚhistogram_rawÚ	histogramÚmake_histogramÚimageÚimage_boxesÚ
draw_boxesÚ
make_imageÚvideoÚ
make_videoÚaudioÚcustom_scalarsÚtextÚtensor_protoÚpr_curve_rawÚpr_curveÚcompute_curveÚmeshÚfÚreturnc                 ób   — t          j        d| ¦  «        }t          j        d|¦  «        d         S )aA  Casts a half-precision float value into an integer.

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

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

    r&   Úir   ©ÚstructÚpackÚunpack)r&   Úbufs     ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/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)   r.   s     r/   r   r   C   s,   € õ Œ+�c˜1Ñ
Ô
€CÝŒ=˜˜cÑ"Ô" 1Ô%Ð%r0   Útc                 ób   — d„ |                       ¦   «                              ¦   «         D ¦   «         S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS © )r   ©Ú.0Úxs     r/   ú
<listcomp>z'_tensor_to_half_val.<locals>.<listcomp>N   s   € Ð9Ð9Ð9˜q�K˜‰NŒNÐ9Ð9Ð9r0   ©ÚflattenÚtolist©r2   s    r/   Ú_tensor_to_half_valr>   M   s*   € Ø9Ð9 A§I¢I¡K¤K×$6Ò$6Ñ$8Ô$8Ð9Ñ9Ô9Ð9r0   c                 ór   — t          j        | ¦  «                             ¦   «                              ¦   «         S ©N)ÚtorchÚview_as_realr;   r<   r=   s    r/   Ú_tensor_to_complex_valrC   P   s+   € ÝÔ˜aÑ Ô ×(Ò(Ñ*Ô*×1Ò1Ñ3Ô3Ð3r0   c                 óN   — |                       ¦   «                              ¦   «         S r@   r:   r=   s    r/   Ú_tensor_to_listrE   S   s   € Ø�9Š9‰;Œ;×ÒÑÔÐr0   Ú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     r/   Ú_calc_scale_factorrf   u   s<   € Ý&0°½¼Ñ&DÔ&DÐP�—’‘”�È&€IØ”¥2¤8Ò+Ð+ˆ1ˆ1°Ð4r0   Ú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š™™™™™©?rh   )rm   )rm   Úfont)ÚPILrj   rk   Úload_defaultÚDrawÚlineÚgetbboxr_   ÚceilÚ	rectangler    )r   ÚxminÚyminÚxmaxÚymaxÚdisplay_strÚcolorÚ
color_textÚ	thicknessrj   rk   rn   ÚdrawÚleftÚrightÚtopÚbottomÚtext_bottomÚ_leftÚ_topÚ_rightÚ_bottomÚ
text_widthÚtext_heightÚmargins                            r/   Ú_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¸Ñ>Ð?ØØØð	 	ñ 	
ô 	
ð 	
ð €Lr0   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 r@   )r^   Útype)r7   ÚdÚhparam_dictÚks     €€r/   ú	<genexpr>zhparams.<locals>.<genexpr>ì   s9   øè è € ÐFÐF¸q•z !¥T¨+°a¬.Ñ%9Ô%9Ñ:Ô:ÐFÐFÐFÐFÐFÐFr0   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©r7   r�   s     r/   r9   zhparams.<locals>.<listcomp>ü   ó6   € ð ð ð àõ #Ô(°aÐ8Ñ8Ô8ðð ð r0   )ÚvaluesÚDATA_TYPE_FLOAT64)Únamerœ   Údomain_discretec                 ó8   — g | ]}t          j        |¬ ¦  «        ‘ŒS ))Ústring_valuer£   r¥   s     r/   r9   zhparams.<locals>.<listcomp>  r¦   r0   ÚDATA_TYPE_STRINGc                 ó8   — g | ]}t          j        |¬ ¦  «        ‘ŒS ))Ú
bool_valuer£   r¥   s     r/   r9   zhparams.<locals>.<listcomp>(  s6   € ð ð ð àõ #Ô(°AÐ6Ñ6Ô6ðð ð r0   Ú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©   r5   )r7   rŸ   r�   r‘   s     €€r/   r9   zhparams.<locals>.<listcomp>J  s3   ø€ Ð
CÐ
CÐ
C°!ˆ:ˆ:˜:˜:¨!Ð,Ñ,Ô,Ð-Ñ-Ô-Ð
CÐ
CÐ
Cr0   )Úhparam_infosÚmetric_infos)Ú
experimentr²   ÚSTATUS_SUCCESS)Ústatus)Úsession_end_infor²   )-rA   Ú#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   )rž   Úmetric_dictÚhparam_domain_discreterA   r�   rŽ   r�   r’   r“   r”   r•   r–   r—   r˜   r™   rš   ÚvÚhpsÚssirª   rµ   ÚsmdÚmtsÚexpÚseir�   r‘   rŸ   s   `                        @@@r/   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Ô'àÐ*Ð*Ð*Ý?IÔ?Sðð à!7¸Ô!:ðñ ô ð@ñ @ô @��ð #'�à�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à
CÐ
CÐ
CÐ
CÐ
C°{Ð
CÑ
CÔ
C€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ˆ=Ðr0   Fc                 óè  — t          |¦  «                             ¦   «         }|j        dk    r t          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   zNTensor should contain one element (0 dimensions).             Was given size: z and z dimensions.rI   )rJ   rb   rK   )rL   rb   Úscalars©r´   r¶   ©r¸   rd   r¹   rº   )r¸   Úsimple_value)r   ÚsqueezeÚndimÚAssertionErrorÚsizerÏ   r   r   rÖ   r   r¤   )	r©   rd   ÚcollectionsÚ	new_styleÚdouble_precisionr   r!   r·   rÝ   s	            r/   r   r   b  s3  € õ" �V‰_Œ_×$Ò$Ñ&Ô&€FØ„{�aÒÐÝð IØ#œ[ðIð IØ/5¬{ðIð Ið Iñ Jô Jð 	Jõ �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ÐLr0   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 sizerb   Útensor_shapec                 ó8   — g | ]}t          j        |¬ ¦  «        ‘ŒS )©ré   )r	   ÚDimr6   s     r/   r9   z tensor_proto.<locals>.<listcomp>¥  s'   € ÐLÐLÐL¸!Õ)Ô-°1Ð5Ñ5Ô5ÐLÐLÐLr0   ©Údimz has unsupported tensor dtype rd   rã   r¶   ©r¸   r¹   rd   rº   r5   )ÚnumelÚitemsizerÕ   rb   Ú_TENSOR_TYPE_MAPr   r	   Úshaper   rÖ   r   r¤   )r¸   rd   rb   Ú
field_nameÚconversion_fnr!   r·   rÝ   s           r/   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ÐUr0   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	            r/   r   r   ²  sR   € õ* ØØØØØØ"Øðñ ô €Dõ �'œ-¨D¸Ð=Ñ=Ô=Ð>Ð?Ñ?Ô?Ð?r0   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        r/   r   r   Ó  sO   € õ" �V‰_Œ_€FÝ˜&Ÿ-š-­Ñ.Ô.°°hÑ?Ô?€DÝ�'œ-¨D¸Ð=Ñ=Ô=Ð>Ð?Ñ?Ô?Ð?r0   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Õ   Úreshaper_   r   ÚlenÚpadr   Úemptyrb   Ú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                r/   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ØØ—]’]‘_”_Ø�}Š}‰Œðñ ô ð r0   Ú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   rf   r
  r_   Úfloat32Úcliprc   r   r   r¤   )r¸   rd   r*  ÚdataformatsÚscale_factorr   s         r/   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Ð=Ñ=Ô=Ð>Ð?Ñ?Ô?Ð?r0   Ú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
  r_   r,  rf   r   r-  rc   r   r¤   )r¸   Útensor_imageÚtensor_boxesr*  r.  r3  r   s          r/   r   r   F  sµ   € õ ˜<Ñ(Ô(€LÝ! ,°Ñ<Ô<€LÝ˜<Ñ(Ô(€LØ×&Ò&¥r¤zÑ2Ô2Õ5GÈÑ5UÔ5UÑU€LÝØ×Ò˜!˜SÑ!Ô!×(Ò(­¬Ñ2Ô2ØØØð	ñ ô €Eõ �'œ-¨C°uÐ=Ñ=Ô=Ð>Ð?Ñ?Ô?Ð?r0   c           
      óÈ   — |j         d         }t          |¦  «        }|D ]B}t          | ||df         ||df         ||df         ||df         |€d n||         d¬¦  «        } ŒC| S )Nr   r   rh   é   ÚRed)rz   r{   )rø   Úranger‹   )Ú
disp_imageÚboxesr3  Ú	num_boxesÚlist_gtr)   s         r/   r   r   W  sˆ   € à”˜A”€IÝ�IÑÔ€GØð 	
ð 	
ˆÝ%ØØ�!�Q�$ŒKØ�!�Q�$ŒKØ�!�Q�$ŒKØ�!�Q�$ŒKØ & ˜˜°F¸1´IØð
ñ 
ô 
ˆ
ˆ
ð Ðr0   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)r3  ÚPNG)Úformat©Úheightrl   Ú
colorspaceÚencoded_image_string)ro   r?  rø   rÎ   Ú	fromarrayr   Ú
ResamplingÚLANCZOSÚresizeÚioÚBytesIOÚsaveÚgetvalueÚcloser   )rd   r*  r2  r3  r?  rC  rl   ÚchannelÚscaled_heightÚscaled_widthr   Ú	ANTIALIASrJ  ÚoutputÚimage_strings                  r/   r   r   h  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ÝŒ=ØØØØ)ð	ñ ô ð r0   é   c                 óp  — t          |¦  «        }t          |¦  «        }t          |¦  «        }|                     t          j        ¦  «        }||z                       dd¦  «                             t          j        ¦  «        }t          ||¦  «        }t          t          j
        | |¬¦  «        g¬¦  «        S )Nr   r]   r+  rº   )r   r   rf   r
  r_   r,  r-  rc   r   r   r¤   )r¸   rd   Úfpsr/  r   s        r/   r   r   ‚  s–   € Ý�V‰_Œ_€FÝ˜FÑ#Ô#€Få% fÑ-Ô-€LØ�]Š]�2œ:Ñ&Ô&€FØ�|Ñ#×)Ò)¨!¨SÑ1Ô1×8Ò8½¼ÑBÔB€FÝ�v˜sÑ#Ô#€EÝ�'œ-¨C°uÐ=Ñ=Ô=Ð>Ð?Ñ?Ô?Ð?r0   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¬¦  «        5 }
|
j	        }	 |	 
                    |d	d ¬
¦  «         nQ# t          $ rD 	 |	 
                    |d	d	¬¦  «         n'# t          $ r |	 
                    |d	¬¦  «         Y nw xY wY nw xY w|
                     d¦  «         |
                     ¦   «         }t          j        ||||¬¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nr   zadd_video needs package moviepy)Úeditorz6moviepy is installed, but can't import moviepy.editor.z2Some packages could be missing [imageio, requests])rW  z.gif)ÚsuffixF)ÚverboserÈ   )r[  Úprogress_bar)r[  rB  )ÚmoviepyÚImportErrorÚprintrY  Útempfilerø   ÚImageSequenceCliprÌ   ÚNamedTemporaryFiler©   Ú	write_gifrÊ   ÚseekÚreadr   r?  )rd   rW  r]  Úmpyr`  Ú_tÚhÚwÚcr-  r&   ÚfilenameÚtensor_strings                r/   r   r   �  s!  € ðØˆˆˆˆøÝð ð ð ÝÐ/Ñ0Ô0Ð0ØˆˆðøøøðØ)Ð)Ð)Ð)Ð)Ð)Ð)øÝð ð ð ÝØDØ@ñ	
ô 	
ð 	
ð 	ˆˆðøøøð €O€O€Oà”,�K€Bˆˆ1ˆað × Ò ¥ f¡¤°3Ð Ñ7Ô7€Dà	×	$Ò	$¨FÐ	$Ñ	3Ô	3ð 
°qØ”6ˆð	8Ø�NŠN˜8¨U¸4ˆNÑ@Ô@Ð@Ð@øÝð 	8ð 	8ð 	8ð8Ø—’˜x°ÀU�ÑKÔKÐKÐKøÝð 8ð 8ð 8Ø—’˜x°�Ñ7Ô7Ð7Ð7Ð7ð8øøøøøð	8øøøð 	
�Šˆq‰	Œ	ˆ	ØŸš™œˆåŒ}Ø˜A¨!À-ð
ñ 
ô 
ð
ð 
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 
ð 
sv   ‚ ‡$£$¨/ ¯AÁAÂEÂ#B<Â;EÂ<
D
ÃC ÃD
Ã !DÄD
ÄDÄD
ÄEÄ	D
Ä
AEÅEÅ!EéD¬  c                 óª  — t          |¦  «        }|                     ¦   «         }t          |¦  «                             ¦   «         dk    r%t	          d¦  «         |                     dd¦  «        }|j        dk    rt          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   Úwbrh   z	audio/wav)Úsample_rateÚnum_channelsÚlength_framesÚencoded_audio_stringÚcontent_type)r¸   r   rº   )r   ræ   Úabsrþ   r_  r-  rç   rè   r_   ÚiinfoÚint16r
  rJ  ÚwaverK  ÚopenÚsetnchannelsÚsetsampwidthÚsetframerateÚwriteframesÚdatarM  rN  r   ÚAudiorø   r¤   )
r¸   rd   rp  ÚarrayrJ  rx  ÚfioÚ
wave_writeÚaudio_stringr   s
             r/   r   r   ´  sÛ  € Ý�F‰OŒO€EØ�MŠM‰OŒO€EÝ
ˆ5�z„z‡~‚~ÑÔ˜!ÒÐÝÐDÑEÔEÐEØ—
’
˜2˜qÑ!Ô!ˆØ„z�Q‚€ÝÐDÑEÔEÐEà•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   Ã3AEÅEÅ Ec           
      ó”  — g }|                       ¦   «         D �] \  }}g }|                      ¦   «         D ]Ú\  }}|d         }|d         dk    r�t          |¦  «        dk    rt          d¦  «        ‚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   ÚMarginr7  zlen(tags) != 3rh   )r»   ÚlowerÚupper)Úseries)ÚtitlerŠ   r½   )r‰  Ú	multiline)r‰  Úchart)Úcategoryr   rã   r¶   Ú	DT_STRING©rb   Ú
string_valrî   Úcustom_scalars__config__rä   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Ý   rd   s                 r/   r   r   Ô  sá  € Ø€JØ—’‘”ð Fñ F‰ˆˆ1ØˆØ*+¯'ª'©)¬)ð 	!ð 	!Ñ&ˆJ˜Ø! !Ô$ˆDØ˜aÔ  HÒ,Ð,Ý�t‘9”9 ’>�>Ý(Ð)9Ñ:Ô:Ð:Ý!Ô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ð
ðñ ô ð r0   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Ý   rd   s        r/   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ðñ ô ð r0   é   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¶   rI   r  rð   r   rò   ©rb   rJ   rî   rô   rº   )r_   Ú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Ý   rd   s                 r/   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ÐOr0   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¶   rI   r  rð   r   rò   r¨  rô   rº   )rý   r$   r   r×   r   rÖ   r   r  r<   r	   rñ   rø   r   r¤   )
r¸   r3  Úpredictionsr¦  r°  r~  r±  r·   rÝ   rd   s
             r/   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ÐOr0   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  r9  r°  r  )	r_   Úint32Úfloorr
  Úfloat64r   r  Úmaximumr©  )r3  r³  r¦  r°  Ú_MINIMUM_COUNTÚbucket_indicesÚfloat_labelsÚhistogram_rangeÚ
tp_bucketsÚ_Ú
fp_bucketsrª  r«  r¬  r­  r®  r¯  s                    r/   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Ð8r0   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_configrI   r  rð   r   rh   rò   r¨  rä   )rA   Útensorboard.plugins.meshr¹   Ú	as_tensorÚcreate_summary_metadatarø   r   r  r<   r	   rñ   r   r¤   Úget_instance_name)r©   Údisplay_nameÚdescriptionrd   rt  Ú
componentsrÂ  rA   r¹   Útensor_metadataÚtensor_summarys              r/   Ú_get_tensor_summaryrÌ  c  s*  € ð. €L€L€LØ1Ð1Ð1Ð1Ð1Ð1àˆUŒ_˜VÑ$Ô$€Fà×6Ò6ØØØØØŒØØð 7ñ ô €Oõ ØØ—.’. Ñ$Ô$×+Ò+Ñ-Ô-Ý%å Ô$¨&¬,°q¬/Ð:Ñ:Ô:Ý Ô$¨&¬,°q¬/Ð:Ñ:Ô:Ý Ô$¨&¬,°q¬/Ð:Ñ:Ô:ðð
ñ 
ô 
ð
ñ 
ô 
€Fõ ”]Ø×&Ò& t¨\Ñ:Ô:ØØ ðñ ô €Nð Ðr0   c                 ó:   — d}| �t          j        | d¬¦  «        }|S )z5Parse and returns JSON string from python dictionary.z{}NT)Ú	sort_keys)ÚjsonÚdumps)Úconfig_dictrÂ  s     r/   Ú_get_json_configrÒ  ž  s'   € à€KØÐÝ”j ¸Ð=Ñ=Ô=ˆØÐr0   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   r5   )r7   rd   s     r/   r9   zmesh.<locals>.<listcomp>È  s!   € ÐEÐEÐE˜&¨v°a¬yÐ/DˆvÐ/DÐ/DÐ/Dr0   c                 ó   — g | ]\  }}|‘ŒS r5   r5   )r7   rd   rt  s      r/   r9   zmesh.<locals>.<listcomp>Ê  s   € Ð<Ð<Ð<Ñ0˜6 <ˆÐ<Ð<Ð<r0   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É  rd   rt  s                  r/   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ð !(ð 
ð 
Ñˆ�Ø×ÒÝØØØØØØØñô ñ
	
ô 
	
ð 
	
ð 
	
õ ˜Ð#Ñ#Ô#Ð#r0   )rg   rg   rh   )NNN)NFFr@   )r   r(  )r   r0  N)r   NN)rU  )rm  )r£  N)NN)YrÏ  Úloggingr+   Útypingr   rA   ra   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>   rC   rE   ÚhalfÚfloat16Úbfloat16r,  r·  ÚdoubleÚint8rc   Úqint8rw  Úshortrµ  Úqint32Úint64Ú	complex32ÚchalfÚ	complex64ÚcfloatrÓ   Ú
complex128ÚcdoubleÚquint8Úquint4x2r÷   rf   r‹   r   r   r!   r   r   r   r   r   r   r   r   r   r   r   r    r"   r#   r$   rÌ  rÒ  r%   r5   r0   r/   ú<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ð 5ð 5ð ØØð(ð (ð (ð (ðVzð zð zð zðz(Mð (Mð (Mð (MðV"Vð "Vð "VðJ@ð @ð @ðB@ð @ð @ð @ð,5ð 5ð 5ð 5ðp"@ð "@ð "@ð "@ðL KOð@ð @ð @ð @ð"ð ð ð ð"ð ð ð ð4@ð @ð @ð @ð$
ð $
ð $
ðN@ð @ð @ð @ð@#ð #ð #ðLð ð ð  IMðPð Pð Pð Pð4Pð Pð Pð Pð6"9ð "9ð "9ð "9ðJ8ð 8ð 8ðvð ð ð OSð3$ð 3$ð 3$ð 3$ð 3$ð 3$r0   