U
    h&/                     @   sp  d dl Z d dlmZmZmZmZmZmZmZm	Z	 d dl
Zd dlZd dlmZmZmZ zd dlZW n ek
rx   dZY nX ejjeedddZejjeee dddZejjeee dd	d
ZejjeedddZejjejejdddZejjejejdddZejjejeejdddZejjejeejdddZejjejeejdddZ ejjejeejdddZ!ejjdMejeeejddd Z"ejjdNeje	eee eed"f f ee	eee eed"f f  ed# ejd$d%d&Z#ejjejeeeeejd'd(d)Z$ejjej%feje	ee ef eejd*d+d,Z&ejjdOee	eee eed"f f  eje'ee'ee	eee eed"f f  f d.d/d0Z(ejjej)dfejee eee	eeee ee f  ejd1d2d3Z*ejjej)d4ddfejeeeeeeef  ee	eeee ee f  ejd5d6d7Z+ejjej,dfejee eee	eeee ee f  ejd8d9d:Z-ejjejeejd;d<d=Z.ejjejejdd>d?Z/ejjejeejd@dAdBZ0ejjejeejdCdDdEZ1ejjejeejdFdGdHZ2ejjejejddIdJZ3ejjejejddKdLZ4dS )P    N)AnyDictListLiteralOptionalSequenceTupleUnion)ImageImageEnhanceImageOps)imgreturnc                 C   s*   t d k	rt| tjt jfS t| tjS d S N)accimage
isinstancer
   r    r   X/var/www/html/venv/lib/python3.8/site-packages/torchvision/transforms/_functional_pil.py_is_pil_image   s    r   c                 C   sP   t | r:t| dr t|  }n| j}| j\}}|||gS tdt|  d S NgetbandsUnexpected type )r   hasattrlenr   channelssize	TypeErrortype)r   r   widthheightr   r   r   get_dimensions   s    


r!   c                 C   s(   t | rt| jS tdt|  d S )Nr   )r   listr   r   r   r   r   r   r   get_image_size"   s    
r#   c                 C   s:   t | r$t| drt|  S | jS tdt|  d S r   )r   r   r   r   r   r   r   r   r   r   r   get_image_num_channels)   s
    
r$   c                 C   s&   t | stdt|  | tjS Nimg should be PIL Image. Got )r   r   r   	transposer
   ZFLIP_LEFT_RIGHTr   r   r   r   hflip3   s    r(   c                 C   s&   t | stdt|  | tjS r%   )r   r   r   r'   r
   ZFLIP_TOP_BOTTOMr   r   r   r   vflip;   s    r)   )r   brightness_factorr   c                 C   s2   t | stdt|  t| }||} | S r%   )r   r   r   r   Z
Brightnessenhance)r   r*   enhancerr   r   r   adjust_brightnessC   s
    

r-   )r   contrast_factorr   c                 C   s2   t | stdt|  t| }||} | S r%   )r   r   r   r   ZContrastr+   )r   r.   r,   r   r   r   adjust_contrastM   s
    

r/   )r   saturation_factorr   c                 C   s2   t | stdt|  t| }||} | S r%   )r   r   r   r   Colorr+   )r   r0   r,   r   r   r   adjust_saturationW   s
    

r2   )r   
hue_factorr   c                 C   s   d|  krdks&n t d| dt| s@tdt|  | j}|dkrR| S | d \}}}tj|tj	d}|t|d	 
tj	7 }t|d
}td|||f|} | S )Ng      g      ?zhue_factor (z) is not in [-0.5, 0.5].r&   >   FIL1ZHSVZdtype   r6   )
ValueErrorr   r   r   modeconvertsplitnparrayuint8Zastyper
   	fromarraymerge)r   r3   
input_modehsvZnp_hr   r   r   
adjust_huea   s    rG         ?)r   gammagainr   c                    sn   t | stdt|  dk r*td| j}| d}  fddtdD d }| |} | |} | S )	Nr&   r   z*Gamma should be a non-negative real numberRGBc                    s&   g | ]}t d   t|d  qS )go@g     o@)intpow).0ZelerJ   rI   r   r   
<listcomp>   s     z adjust_gamma.<locals>.<listcomp>      )r   r   r   r:   r;   r<   rangepoint)r   rI   rJ   rC   Z	gamma_mapr   rO   r   adjust_gammay   s    


rU   constant.rV   edgeZreflectZ	symmetric)r   paddingfillpadding_moder   c                 C   s  t | stdt|  t|tjttfs4td|d k	rVt|tjttfsVtdt|tshtdt|trzt|}t|trt	|dkrt
dt	| dt|trt	|dkr|d	 }|d
krt
d|dkr8t|| dd}| jdkr"|  }tj| fd|i|}|| |S tj| fd|i|S t|trT| } } }	}
t|trt	|dkr|d	  }}|d  }	}
t|trt	|dkr|d	 }|d }	|d }|d }
||	||
g}t|d	 }| r|\}}}}| ||| j| | j| f} t|d	\}}	}}
| jdkrt|  }t| } tj| |	|
f||ff|d} t| } | | | S t| } t	| jdkrt| |	|
f||fdf|} t	| jdkrt| |	|
f||ff|} t| S d S )Nr&   zGot inappropriate padding argzGot inappropriate fill argz"Got inappropriate padding_mode arg)         z<Padding must be an int or a 1, 2, or 4 element tuple, not a z element tupler\   r   rW   zBPadding mode should be either constant, edge, reflect or symmetricrV   rZ   )namePborderr]   r^   rR   )r;   )r   r   )r   r   r   r   numbersNumbertupler"   strr   r:   _parse_fillr;   Z
getpaletter   expandZ
putpaletterL   r>   minimumanycropr   r    maximumZasarraypadr
   rA   shape)r   rY   rZ   r[   optspaletteimagepad_left	pad_rightpad_topZ
pad_bottompZcroppingZ	crop_leftZcrop_topZ
crop_rightZcrop_bottomr   r   r   rl      sj    








rl   )r   topleftr    r   r   c                 C   s4   t | stdt|  | |||| || fS r%   )r   r   r   rj   )r   ru   rv   r    r   r   r   r   rj      s    	rj   )r   r   interpolationr   c                 C   sX   t | stdt|  t|tr0t|dks>td| | t|d d d |S )Nr&   r]   zGot inappropriate size arg: )r   r   r   r   r"   r   resizerd   )r   r   rw   r   r   r   ry      s
    ry   	fillcolor)rZ   r   r_   r   c                 C   s   t |}| d krd} t| ttfr8|dkr8t| g| } t| ttfrt| dkr\| | } n$t| |krd}t|t| |t| } |j	dkrt| ttfrtdd | D } nt| } || iS )Nr   r\   z^The number of elements in 'fill' does not match the number of channels of the image ({} != {})r4   c                 s   s   | ]}t |V  qd S r   )rL   )rN   xr   r   r   	<genexpr>  s     z_parse_fill.<locals>.<genexpr>)
r$   r   rL   floatrd   r"   r   r:   formatr;   )rZ   r   r_   Znum_channelsmsgr   r   r   rf      s"    

rf   )r   matrixrw   rZ   r   c                 C   s@   t | stdt|  | j}t|| }| j|tj||f|S r%   )r   r   r   r   rf   	transformr
   ZAFFINE)r   r   rw   rZ   Zoutput_sizern   r   r   r   affine  s
    
r   F)r   anglerw   rg   centerrZ   r   c                 C   s8   t | stdt|  t|| }| j||||f|S r%   )r   r   r   rf   rotate)r   r   rw   rg   r   rZ   rn   r   r   r   r   ,  s    

r   )r   perspective_coeffsrw   rZ   r   c                 C   s<   t | stdt|  t|| }| j| jtj||f|S r%   )r   r   r   rf   r   r   r
   ZPERSPECTIVE)r   r   rw   rZ   rn   r   r   r   perspective=  s    
r   )r   num_output_channelsr   c                 C   sz   t | stdt|  |dkr.| d} nH|dkrn| d} tj| tjd}t|||g}t	|d} nt
d| S )Nr&   r\   r6   rR   r8   rK   z+num_output_channels should be either 1 or 3)r   r   r   r<   r>   r?   r@   Zdstackr
   rA   r:   )r   r   Znp_imgr   r   r   to_grayscaleM  s    
r   c                 C   s$   t | stdt|  t| S r%   )r   r   r   r   invertr   r   r   r   r   _  s    r   )r   bitsr   c                 C   s&   t | stdt|  t| |S r%   )r   r   r   r   	posterize)r   r   r   r   r   r   f  s    r   )r   	thresholdr   c                 C   s&   t | stdt|  t| |S r%   )r   r   r   r   solarize)r   r   r   r   r   r   m  s    r   )r   sharpness_factorr   c                 C   s2   t | stdt|  t| }||} | S r%   )r   r   r   r   Z	Sharpnessr+   )r   r   r,   r   r   r   adjust_sharpnesst  s
    

r   c                 C   s$   t | stdt|  t| S r%   )r   r   r   r   autocontrastr   r   r   r   r   ~  s    r   c                 C   s$   t | stdt|  t| S r%   )r   r   r   r   equalizer   r   r   r   r     s    r   )rH   )r   rV   )rz   )5rb   typingr   r   r   r   r   r   r   r	   numpyr>   ZtorchZPILr
   r   r   r   ImportErrorZjitZunusedboolr   rL   r!   r#   r$   r(   r)   r}   r-   r/   r2   rG   rU   rl   rj   ZBILINEARry   re   rf   ZNEARESTr   r   ZBICUBICr   r   r   r   r   r   r   r   r   r   r   r   <module>   s   (
				   O $	