a
    d                     @   s
  d dl Z d dlmZmZ d dlmZmZmZmZm	Z	m
Z
 d dlZd dlmZ d dlm  mZ d dlmZmZmZmZmZmZmZ ddlmZmZ eG dd dZG d	d
 d
ejZdd Z de!e"ee	e#df  ee	e#df  e"e!ee
ee$ef ef  dddZ%dS )    N)	dataclassasdict)AnyDictOptionalSequenceTupleUnion)	NormalizeComposeRandomResizedCropInterpolationModeToTensorResize
CenterCrop   )OPENAI_DATASET_MEANOPENAI_DATASET_STDc                   @   s   e Zd ZU dZeeef ed< dZeeeef  ed< dZ	ee
eeeeef f  ed< dZee ed< dZee ed< dZee ed< d	Zeed
< dS )AugmentationCfg)g?      ?scaleNratiocolor_jitterinterpolationre_probre_countFuse_timm)__name__
__module____qualname__r   r   float__annotations__r   r   r   r	   r   strr   r   intr   bool r%   r%   \/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/open_clip/transform.pyr      s   
"r   c                       s.   e Zd Zejddf fdd	Zdd Z  ZS )ResizeMaxSizemaxr   c                    sN   t    t|ts&tdt| || _|| _|dkr>tnt| _	|| _
d S )NzSize should be int. Got min)super__init__
isinstancer#   	TypeErrortypemax_sizer   r)   fnfill)selfr/   r   r0   r1   	__class__r%   r&   r+      s    

zResizeMaxSize.__init__c                    s   t |tjr |jd d \}}n
|j\}}| jtt||   dkrt fdd||fD }t	
||| j}| j|d  }| j|d  }t	j||d |d ||d  ||d  g| jd}|S )N   r   c                 3   s   | ]}t |  V  qd S N)round).0Zdimr   r%   r&   	<genexpr>,       z(ResizeMaxSize.forward.<locals>.<genexpr>r   r   )paddingr1   )r,   torchZTensorshapesizer/   r    r(   tupleFresizer   padr1   )r2   imgheightwidthZnew_sizeZpad_hZpad_wr%   r9   r&   forward%   s    
2zResizeMaxSize.forward)r   r   r   r   BICUBICr+   rG   __classcell__r%   r%   r3   r&   r'      s   	r'   c                 C   s
   |  dS )NZRGB)convert)imager%   r%   r&   _convert_to_rgb4   s    rL   F.)
image_sizeis_trainmeanstdresize_longest_max
fill_coloraug_cfgc              	   C   s  |pt }t|ttfs |fd }|p&t}t|ttfs@|fd }t| ttfrf| d | d krf| d } t|trtf i |}n
|pt }t||d}|rdd t|	 D }|
dd}	|	rBdd	lm}
 t| ttfrt| d
ksJ d| dd   }n
d| | f}|dd |dd  |
f |dd||dd|}nDtt| |
dtjdtt |g}|rtdt|  d |S |rt| |dg}nt| tjdt| g}|tt |g t|S d S )N   r   r   )rO   rP   c                 S   s   i | ]\}}|d ur||qS r6   r%   )r8   kvr%   r%   r&   
<dictcomp>S   r;   z#image_transform.<locals>.<dictcomp>r   F)create_transformr5   )rT   r   randomr   Tg        Zpixel)
input_sizeZis_trainingZhfliprO   rP   Zre_moder   )r   r   z:Unused augmentation cfg items, specify `use_timm` to use (z).)r1   )r   )r   r,   listr@   r   dictr   r
   r   itemspopZ	timm.datarX   len
setdefaultr   r   r   rH   rL   r   warningswarnkeysr'   r   r   extend)rM   rN   rO   rP   rQ   rR   rS   	normalizeZaug_cfg_dictr   rX   r[   Ztrain_transform
transformsr%   r%   r&   image_transform8   st    	







rh   )NNFr   N)&rb   Zdataclassesr   r   typingr   r   r   r   r   r	   r=   Ztorch.nnnnZ!torchvision.transforms.functionalrg   Z
functionalrA   Ztorchvision.transformsr
   r   r   r   r   r   r   	constantsr   r   r   Moduler'   rL   r#   r$   r    r"   rh   r%   r%   r%   r&   <module>   s2    $
     