U
    Mh                     @   s   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
 eejjdZdd	 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)EmbeddingInfojoinc                 C   s2   t rtjj| |S tjj| }|| |S d S N)_HAS_GFILE_JOINr   iogfiler   Zget_filesystem)abfs r   T/var/www/html/venv/lib/python3.8/site-packages/torch/utils/tensorboard/_embedding.py_gfile_join   s    r   c              	   C   s   |sdd | D } n0t |t | d ks0tddd |g|  D } tjd| d }tjjt	|dd}|
| W 5 Q R X d S )	Nc                 S   s   g | ]}t |qS r   str).0xr   r   r   
<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 r   r   )r   er   r   r   	<genexpr>   s     z&make_tsv.<locals>.<listcomp>.<genexpr>)r   )r   lr   r   r   r      s     
metadata.tsvwb)lenAssertionErrorr   compatas_bytesr   r
   r   GFiler   write)metadata	save_pathZmetadata_headerZmetadata_bytesfr   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t|dd}||
 W 5 Q R X d S )Nr   )Image)BytesIOg      ?)Zncols      r      ZPNG)format
sprite.pngr   )ZPILr(   r
   r)   intmathceilsizer   r   npZ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     r9   c                 C   sx   t  }| dt|d |_t|d|_| d k	r@t|d|_|d k	rtt|d|j_|jj	
|d|dg |S )N:   tensors.tsvr   r.   r+   r*   )r   r   zfillZtensor_namer   Ztensor_pathmetadata_pathZspriteZ
image_pathZsingle_image_dimextendr2   )r$   r7   subdirZglobal_steptaginfor   r   r   get_embedding_info@   s    rC   c              	   C   s<   t | d}tjj|d}|tj| W 5 Q R X d S )Nzprojector_config.pbtxtr   )r   r   r
   r   r"   r#   r    r!   )r%   contentsZconfig_pathr&   r   r   r   write_pbtxtL   s    
rE   c              	   C   sZ   t jjt|dd:}| D ].}dd |D }|t jd|d  qW 5 Q R X d S )Nr<   r   c                 S   s   g | ]}t | qS r   )r   item)r   ir   r   r   r   U   s     zmake_mat.<locals>.<listcomp>r   r   )	r   r
   r   r"   r   r#   r    r!   r   )Zmatlistr%   r&   r   r   r   r   make_matR   s    rH   )N)r0   numpyr3   Z_convert_npr   Z_utilsr   Ztensorboard.compatr   Z2tensorboard.plugins.projector.projector_config_pb2r   hasattrr
   r   r	   r   r'   r9   rC   rE   rH   r   r   r   r   <module>   s   
