U
    ha                     @  s  d dl m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mZmZmZmZ d dlmZ erpd dlmZ ddd	d
ddZd'ddd	d
ddZd(dddd	dddZdddddZddddddZddddddZeeddd dd!d"d#Zejfddddd$d%d&ZdS ))    )annotationsN)TYPE_CHECKINGAnySequence)MONO_CHANNEL_DIMENSIONSNUM_MULTI_CHANNEL_DIMENSIONSNUM_RGB_CHANNELSpreserve_channel_dimuint8_io)PAIRImagez	list[str]intstr)words	num_wordsreturnc                   sD   |t | krdS ttt | |  fddt| D }d|S )N c                   s   g | ]\}}| kr|qS  r   ).0idxwordZindices_to_deleter   P/tmp/pip-unpacked-wheel-e8onvpoz/albumentations/augmentations/text/functional.py
<listcomp>   s      z'delete_random_words.<locals>.<listcomp> )lenrandomsamplerange	enumeratejoin)r   r   Z	new_wordsr   r   r   delete_random_words   s
    r"      c                 C  sp   |dkst | tk rd| S |  } t|D ]6}ttt | d\}}| | | |  | |< | |< q.d| S )Nr   r      )r   r   r!   copyr   r   r   )r   r   _Zidx1Zidx2r   r   r   swap_random_words    s    
r'   ztuple[str, ...] | None)r   num_insertions	stopwordsr   c                 C  sF   |d krd}t |D ]&}tdt| }| |t| qd| S )N)andZtheisinatZofr   r   )r   r   randintr   insertchoicer!   )r   r(   r)   r&   r   r   r   r   insert_random_stopwords,   s    r1   z
np.ndarrayr   )imager   c                 C  s   zddl m} W n tk
r.   tdtY nX t| jtkrH|| S t| jtkr| jd dkr|j| dddddf ddS t| jtkr| jd tkr|| S t	d	| j dS )
z+Convert a NumPy array image to a PIL image.r   r   Pillow is not installedr$   r#   NL)modezUnsupported image shape: )
PILr   ImportErrorr   shaper   	fromarrayr   r   	TypeError)r2   r   r   r   r   convert_image_to_pil6   s    
 
r;   zlist[dict[str, Any]])	pil_imagemetadata_listr   c           
      C  s   zddl m} W n tk
r.   tdtY nX || }|D ]v}|d }|d }|d }|d }t|ttfrtdd	 |D }nt|trt|}|d
d }	|j	|	|||d q>| S )z4Draw text on a PIL image using metadata information.r   	ImageDrawr3   bbox_coordstextfont
font_colorc                 s  s   | ]}t |V  qd S Nr   r   cr   r   r   	<genexpr>U   s     z)draw_text_on_pil_image.<locals>.<genexpr>Nr$   rB   fill)
r6   r?   r7   Draw
isinstancelisttuplefloatr   rA   )
r<   r=   r?   Zdrawmetadatar@   rA   rB   rC   positionr   r   r   draw_text_on_pil_imageG   s"    

rR   )r2   r=   r   c                   s~  zddl m m W n tk
r2   tdtY nX  fddtjd D }fdd|D }|D ]}|d }|d	 }|d
 }|d }t|tr|gjd  }nt|tt	frt|gjd  }nbt|t
rt|jd krtdt| djd  ddd |D }ntdt| |dd }	t|D ] \}
}|j|	||||
 d qBqhtjdd |D ddS )zADraw text on a multi-channel image with more than three channels.r   )r   r?   r3   c                   s(   g | ] }  d d d d |f qS rD   )r9   )r   i)r   r2   r   r   r   d   s     z4draw_text_on_multi_channel_image.<locals>.<listcomp>r$   c                   s   g | ]}  |qS r   )rK   r   Zchannelr>   r   r   r   e   s     r@   rA   rB   rC   zfont_color sequence length (z+) must match the number of image channels ()c                 S  s   g | ]}t |qS r   rE   rF   r   r   r   r   {   s     zUnsupported font_color type: NrI   c                 S  s   g | ]}t |qS r   )nparrayrT   r   r   r   r      s     )Zaxis)r6   r   r?   r7   r   r8   rL   r   r   rO   r   r   
ValueErrorr:   typer    rA   rV   stack)r2   r=   ZchannelsZ
pil_imagesrP   r@   rA   rB   rC   rQ   Z
channel_idr<   r   )r   r?   r2   r    draw_text_on_multi_channel_image]   s4    
r[   bool)r2   r=   clear_bgr   c                 C  sb   |rt | |} t| jtks<t| jtkrX| jd dthkrXt| }t||}t	|S t
| |S )Nr$   r#   )inpaint_text_backgroundr   r8   r   r   r   r;   rR   rV   rW   r[   )r2   r=   r]   r<   r   r   r   render_text   s    


r_   )r2   r=   methodr   c           
      C  s|   |   }tj| jd | jd ftjd}|D ]<}|d \}}}}	d|||	||f< d|||	||f< q,tj||d|dS )Nr   r#   )Zdtyper@         )ZinpaintRadiusflags)r%   rV   zerosr8   Zuint8cv2Zinpaint)
r2   r=   r`   Zresult_imagemaskrP   Zx_minZy_minZx_maxZy_maxr   r   r   r^      s     r^   )r#   )r#   N)
__future__r   r   typingr   r   r   re   ZnumpyrV   Zalbucorer   r   r   r	   r
   Zalbumentations.core.typesr   r6   r   r"   r'   r1   r;   rR   r[   r_   ZINPAINT_TELEAr^   r   r   r   r   <module>   s&   	
*