U
    <cG                     @   sn   d dl Z d dlZddlmZ ddlmZ d dlmZ d dl	m
Z
 dddZd	d
 Zdd Zdd Zdd ZdS )    N   )make_np)	make_grid)tf)EmbeddingInfoc                 C   s   |sdd | D } n0t |t | d ks0tddd |g|  D } tjd| d }tjj|}|j	||d|dd	 d S )
Nc                 S   s   g | ]}t |qS  str).0xr   r   F/tmp/pip-unpacked-wheel-gikjz4vx/torch/utils/tensorboard/_embedding.py
<listcomp>   s     zmake_tsv.<locals>.<listcomp>r   z@len of header must be equal to the number of columns in metadatac                 S   s    g | ]}d  dd |D qS )	c                 s   s   | ]}t |V  qd S )Nr   )r
   er   r   r   	<genexpr>   s     z&make_tsv.<locals>.<listcomp>.<genexpr>)join)r
   lr   r   r   r      s     
metadata.tsvTZbinary_mode)
lenAssertionErrorr   compatas_bytesr   iogfileget_filesystemwrite)metadata	save_pathZmetadata_headerZmetadata_bytesfsr   r   r   make_tsv	   s    r!   c              	   C   s   ddl m} ddlm} tt| dd }tt	| |d}t
|jd |jd df}|ddd}||d |jd d d d d f< |t
|d	 dd	}| }	|j|	d
d |	 }
W 5 Q R X tjj|}|j||d|
dd d S )Nr   )Image)BytesIOg      ?)Zncols      r      ZPNG)format
sprite.pngTr   )ZPILr"   r   r#   intmathceilsizer   r   npzerosshapeZ	transposeZ	fromarrayZuint8Zclipsavegetvaluer   r   r   r   r   )	label_imgr   r"   r#   ZnrowZarranged_img_CHWZarranged_augment_square_HWCZarranged_img_HWCZimbufZim_bytesr    r   r   r   make_sprite   s     r4   c                 C   s|   t  }d|t|d|_||d|_| d k	rB||d|_|d k	rx||d|j_	|jj
|d|dg |S )Nz{}:{}   tensors.tsvr   r(   r%   r$   )r   r'   r	   zfillZtensor_namer   Ztensor_pathZmetadata_pathZspriteZ
image_pathZsingle_image_dimextendr,   )r   r2   ZfilesyssubdirZglobal_steptaginfor   r   r   get_embedding_info1   s    r<   c                 C   s6   t jj| }|| d}|j|t j|dd d S )Nzprojector_config.pbtxtTr   )r   r   r   r   r   r   r   r   )r   contentsr    Zconfig_pathr   r   r   write_pbtxt=   s    r>   c              	   C   sj   t jj|}t jj||dd:}| D ].}dd |D }|t jd|d  q,W 5 Q R X d S )Nr6   wbc                 S   s   g | ]}t | qS r   )r	   item)r
   ir   r   r   r   G   s     zmake_mat.<locals>.<listcomp>r   r   )	r   r   r   r   ZGFiler   r   r   r   )Zmatlistr   r    fr   r   r   r   make_matC   s
    rC   )N)r*   Znumpyr-   Z_convert_npr   _utilsr   Ztensorboard.compatr   Z2tensorboard.plugins.projector.projector_config_pb2r   r!   r4   r<   r>   rC   r   r   r   r   <module>   s   
