a
    
dm                     @   s   d dl mZ d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 dd Z
dd Zd	d
 ZG dd dZG dd de	jZdS )    )reduceN)	transform)nnc                 C   s*   dd| gdd|gg dg}t j|t jdS )N   r   r   r   r   dtypetorchtensorfloat32)txtymat r   Y/var/www/html/stable-diffusion-webui/repositories/k-diffusion/k_diffusion/augmentation.pytranslate2d   s
    r   c                 C   s*   | ddgd|dgg dg}t j|t jdS Nr   r   r   r	   )sxsyr   r   r   r   scale2d   s
    r   c                 C   sD   t | t |  dgt | t | dgg dg}t j|t jdS r   )r
   cossinr   r   )thetar   r   r   r   rotate2d   s
    r   c                   @   s   e Zd Zd	ddZdd ZdS )
KarrasAugmentationPipelineQ?u溆a?      ?c                 C   s   || _ || _|| _|| _d S N)a_proba_scalea_anisoa_trans)selfr    r!   r"   r#   r   r   r   __init__!   s    z#KarrasAugmentationPipeline.__init__c                 C   s  |j \}}t|d d |d d g}tdg  }|tdd|  d tg | jk  }tdg  | }|tddd|   tg | jk  }t	g | }|t| j
| | j
|  tg | jk  }tg d tj tj | }	|t|	  tg | jk  }tg d tj tj | }
t	g | }|t|
 |t| j| | j|   |t|
  tg | jk  }t	g | }t	g | }|t| j| | | j| |  |t| d d | d d  ttj|}t||||	 d |	 ||
  ||
  ||g	}tj|tjdd }|jdkrn|d }t| }tj||jdddd	d
d}t| ddd d }t| ddd d }|||fS )N   g      ?r   r      ).N   reflectFT)ordermodecvalclippreserve_ranger   )!sizer   r
   randintfloatappendr   randr    randnr!   mathpir   r"   r#   r   operatormatmulstackr   r   nparrayr   ndimr   AffineTransformnumpywarpinverse	as_tensormovedim)r$   imagehwmatsa0doa1a2a3a4a5Za6Za7r   condZ
image_origtfr   r   r   __call__'   sD    
$$8z#KarrasAugmentationPipeline.__call__N)r   r   r   r   )__name__
__module____qualname__r%   rP   r   r   r   r   r       s   
r   c                       s6   e Zd Z fddZd
ddZdd Zdd	 Z  ZS )KarrasAugmentWrapperc                    s   t    || _d S r   )superr%   inner_model)r$   model	__class__r   r   r%   X   s    
zKarrasAugmentWrapper.__init__Nc                 K   sT   |d u r| |jd dg}|d u r*|}ntj||gdd}| j||fd|i|S )Nr   	   r   )dimmapping_cond)	new_zerosshaper
   catrV   )r$   inputsigmaZaug_condr\   kwargsr   r   r   forward\   s    zKarrasAugmentWrapper.forwardc                 C   s   | j |S r   )rV   set_skip_stages)r$   Zskip_stagesr   r   r   rd   e   s    z$KarrasAugmentWrapper.set_skip_stagesc                 C   s   | j |S r   )rV   set_patch_size)r$   
patch_sizer   r   r   re   h   s    z#KarrasAugmentWrapper.set_patch_size)NN)rQ   rR   rS   r%   rc   rd   re   __classcell__r   r   rX   r   rT   W   s   
	rT   )	functoolsr   r5   r7   r>   r:   skimager   r
   r   r   r   r   r   ModulerT   r   r   r   r   <module>   s   7