o
    Vh&/                     @   s  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y;   dZY nw ejjdedefddZejjdedee fdd	Zejjdedee fd
dZejjdedefddZejjdejdejfddZejjdejdejfddZejjdejdedejfddZejjdejdedejfddZejjdejdedejfddZ ejjdejdedejfddZ!ejj	dWdejded edejfd!d"Z"ejj	 	#dXdejd$e	eee eed%f f d&ee	eee eed%f f  d'ed( dejf
d)d*Z#ejjdejd+ed,ed-ed.edejfd/d0Z$ejjej%fdejd1e	ee ef d2edejfd3d4Z&ejj	5dYd&ee	eee eed%f f  dejd6e'dee'ee	eee eed%f f  f fd7d8Z(ejjej)dfdejd9ee d2ed&ee	eeee ee f  dejf
d:d;Z*ejjej)d<ddfdejd=ed2ed>ed?eeeef  d&ee	eeee ee f  dejfd@dAZ+ejjej,dfdejdBee d2ed&ee	eeee ee f  dejf
dCdDZ-ejjdejdEedejfdFdGZ.ejjdejdejfdHdIZ/ejjdejdJedejfdKdLZ0ejjdejdMedejfdNdOZ1ejjdejdPedejfdQdRZ2ejjdejdejfdSdTZ3ejjdejdejfdUdVZ4dS )Z    N)AnyDictListLiteralOptionalSequenceTupleUnion)ImageImageEnhanceImageOpsimgreturnc                 C   s&   t d urt| tjt jfS t| tjS N)accimage
isinstancer
   r    r   Z/var/www/vscode/kcb/lib/python3.10/site-packages/torchvision/transforms/_functional_pil.py_is_pil_image      r   c                 C   sL   t | rt| drt|  }n| j}| j\}}|||gS tdt|  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|  )Nr   )r   listr   r   r   r   r   r   r   get_image_size"   s   
r$   c                 C   s6   t | rt| drt|  S | jS tdt|  r   )r   r   r   r   r   r   r   r   r   r   r   get_image_num_channels)   s
   
r%   c                 C   &   t | stdt|  | tjS Nimg should be PIL Image. Got )r   r   r   	transposer
   FLIP_LEFT_RIGHTr   r   r   r   hflip3   r   r+   c                 C   r&   r'   )r   r   r   r)   r
   FLIP_TOP_BOTTOMr   r   r   r   vflip;   r   r-   brightness_factorc                 C   2   t | stdt|  t| }||} | S r'   )r   r   r   r   
Brightnessenhance)r   r.   enhancerr   r   r   adjust_brightnessC   
   

r3   contrast_factorc                 C   r/   r'   )r   r   r   r   Contrastr1   )r   r5   r2   r   r   r   adjust_contrastM   r4   r7   saturation_factorc                 C   r/   r'   )r   r   r   r   Colorr1   )r   r8   r2   r   r   r   adjust_saturationW   r4   r:   
hue_factorc                 C   s   d|  kr
dksn t d| dt| s tdt|  | j}|dv r)| 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(   >   1FILHSVdtype   r?   )
ValueErrorr   r   r   modeconvertsplitnparrayuint8int32astyper
   	fromarraymerge)r   r;   
input_modehsvnp_hr   r   r   
adjust_huea   s   rT         ?gammagainc                    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).0elerW   rV   r   r   
<listcomp>   s   & z adjust_gamma.<locals>.<listcomp>      )r   r   r   rD   rE   rF   rangepoint)r   rV   rW   rO   	gamma_mapr   r]   r   adjust_gammay   s   


rd   constantpadding.fillpadding_modere   edgereflect	symmetricc                 C   s  t | stdt|  t|tjttfstd|d ur+t|tjttfs+tdt|ts4tdt|tr=t|}t|trRt	|dvrRt
dt	| dt|trat	|dkra|d	 }|d
vrit
d|dkrt|| dd}| jdkr|  }tj| fd|i|}|| |S tj| fd|i|S t|tr| } } }	}
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r2|  }t| } tj| |	|
f||ff|d} t| } | | | S t| } t	| jdkrMt| |	|
f||fdf|} t	| jdkrbt| |	|
f||ff|} t| 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 tuplerm   r   ri   zBPadding mode should be either constant, edge, reflect or symmetricre   rg   )namePborderrn   ro   r`   )rE   )r   r   )r   r   r   r   numbersNumbertupler#   strr   rD   _parse_fillrE   
getpaletter   expand
putpaletterY   rH   minimumanycropr    r!   maximumasarraypadr
   rM   shape)r   rf   rg   rh   optspaletteimagepad_left	pad_rightpad_top
pad_bottompcropping	crop_leftcrop_top
crop_rightcrop_bottomr   r   r   r      sj   









r   topleftr!   r    c                 C   s4   t | stdt|  | |||| || fS r'   )r   r   r   r}   )r   r   r   r!   r    r   r   r   r}      s   	r}   r   interpolationc                 C   sX   t | stdt|  t|trt|dkstd| | t|d d d |S )Nr(   rn   zGot inappropriate size arg: )r   r   r   r   r#   r   resizeru   )r   r   r   r   r   r   r      s
   r   	fillcolorrp   c                 C   s   t |}| d u r
d} t| ttfr|dkrt| g| } t| ttfrDt| dkr.| | } nt| |kr@d}t|t| |t| } |j	dkrat| ttfr]tdd | D } || iS t| } || iS )Nr   rm   z^The number of elements in 'fill' does not match the number of channels of the image ({} != {})r=   c                 s   s    | ]}t |V  qd S r   )rY   )r[   xr   r   r   	<genexpr>  s    z_parse_fill.<locals>.<genexpr>)
r%   r   rY   floatru   r#   r   rD   formatrE   )rg   r   rp   num_channelsmsgr   r   r   rw      s$   

rw   matrixc                 C   sD   t | stdt|  | j}t|| }| j|tj||fi |S r'   )r   r   r   r   rw   	transformr
   AFFINE)r   r   r   rg   output_sizer   r   r   r   affine  s
   
r   Fanglery   centerc                 C   s<   t | stdt|  t|| }| j||||fi |S r'   )r   r   r   rw   rotate)r   r   r   ry   r   rg   r   r   r   r   r   ,  s   

r   perspective_coeffsc                 C   s@   t | stdt|  t|| }| j| jtj||fi |S r'   )r   r   r   rw   r   r   r
   PERSPECTIVE)r   r   r   rg   r   r   r   r   perspective=  s   
r   num_output_channelsc                 C   sz   t | stdt|  |dkr| d} | S |dkr9| d} tj| tjd}t|||g}t	|d} | S t
d)Nr(   rm   r?   r`   rA   rX   z+num_output_channels should be either 1 or 3)r   r   r   rF   rH   rI   rJ   dstackr
   rM   rD   )r   r   np_imgr   r   r   to_grayscaleM  s   
	
r   c                 C   $   t | stdt|  t| S r'   )r   r   r   r   invertr   r   r   r   r   _     
r   bitsc                 C   &   t | stdt|  t| |S r'   )r   r   r   r   	posterize)r   r   r   r   r   r   f     r   	thresholdc                 C   r   r'   )r   r   r   r   solarize)r   r   r   r   r   r   m  r   r   sharpness_factorc                 C   r/   r'   )r   r   r   r   	Sharpnessr1   )r   r   r2   r   r   r   adjust_sharpnesst  r4   r   c                 C   r   r'   )r   r   r   r   autocontrastr   r   r   r   r   ~  r   r   c                 C   r   r'   )r   r   r   r   equalizer   r   r   r   r     r   r   )rU   )r   re   )r   )5rs   typingr   r   r   r   r   r   r   r	   numpyrH   torchPILr
   r   r   r   ImportErrorjitunusedboolr   rY   r"   r$   r%   r+   r-   r   r3   r7   r:   rT   rd   r   r}   BILINEARr   rv   rw   NEARESTr   r   BICUBICr   r   r   r   r   r   r   r   r   r   r   r   <module>   s2   (				O$	