o
    wiG                     @   sB   d dl Z d dlZdZdd ZdddZdd Zd	d
 Zdd ZdS )    Ni    c                 C   s   |  drj| dd }| tdd }|d}|d }|dt| d }|d | } |d	krIddl}|jd	tjd
d}|| || dS |dkrlddl	m
} | }	||	|}
|||
}||  dS dS dS )zUUpload a file to remote cloud storage
    if the path starts with gs:// or s3://
    )s3://zgs://:r   r   N/   z:/s3S3_ENDPOINT)endpoint_urlgs)storage)
startswithsplitlenboto3clientosenvirongetupload_filegoogle.cloudr
   ClientBucketBlobupload_from_filename)
local_pathprefixremote_bucket_pathbpbucketpathr   r   r
   r   Hbucketblob r!   S/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/tensorboardX/embedding.pymaybe_upload_file	   s&   

r#   c                 C   s   |s
dd | D } nt |t | d ksJ ddd |g|  D } tj|d}t|ddd	}| D ]	}||d
  q3W d    n1 sGw   Y  t| 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 Nr$   )r&   er!   r!   r"   	<genexpr>*   s    z&make_tsv.<locals>.<listcomp>.<genexpr>join)r&   lr!   r!   r"   r(   *   s    metadata.tsvwutf8)encoding
)r   r   r   r.   openwriter#   )metadata	save_pathmetadata_header
named_pathfr'   r!   r!   r"   make_tsv$   s   r<   c                 C   s6  dd l }dd l}ddlm} ddlm} ddlm} | jd | jd ks(J d| jd | jd  | jd  }|d	 }t	|
|| jd  }	||| |	d
}
|
ddd}|
jd }|tkscJ d|||df}||d |jd d d d d f< |||d dd}tj|d}|| t| d S )Nr   )Imager   )	make_grid)make_np      z6Image should be square, see tensorflow/tensorboard#670g      ?)ncolsz,Sprite too large, see label_img shape limits   
sprite.png)mathnumpyPILr=   utilsr>   x2numr?   shapeintceil	transposeTB_MAX_SPRITE_SIZEndarray	fromarrayuint8clipr   r   r.   saver#   )	label_imgr8   rE   npr=   r>   r?   total_pixelspixels_one_sidenumber_of_images_per_rowarranged_img_CHWarranged_img_HWCsprite_sizearranged_augment_square_HWCimr:   r!   r!   r"   make_sprite6   s&   
 
r^   c           	   	   C   s  ddl m} tj|d}t|dn}|d |d| dt|d d	 |d
||d | d urC|d||d |d urt|d |d||d |d|j	d  d |d|j	d  d |d |d W d    n1 sw   Y  t
| d S )Nr   r-   zprojector_config.pbtxtazembeddings {
ztensor_name: "r      z"
ztensor_path: "{}"
tensors.tsvzmetadata_path: "{}"
r0   z	sprite {
zimage_path: "{}"
rD   zsingle_image_dim: rA   r4   r@   z}
)	posixpathr.   r   r   r5   r6   r%   zfillformatrJ   r#   )	r7   rT   r8   subdirglobal_steptagr.   r:   r;   r!   r!   r"   append_pbtxtY   s&   
"

rh   c                 C   sp   t j|d}t|d}| D ]}dd |D }|d|d  qW d    n1 s-w   Y  t| d S )Nra   r1   c                 S   s   g | ]}t | qS r!   )r%   item)r&   ir!   r!   r"   r(   r   s    zmake_mat.<locals>.<listcomp>r)   r4   )r   r   r.   r5   r6   r#   )matlistr8   r:   r;   r'   r!   r!   r"   make_matn   s   rl   r*   )r   sysrN   r#   r<   r^   rh   rl   r!   r!   r!   r"   <module>   s    
#