CoolFace
Apppublic

declare-lab/tango2

sourceHugging Faceupdated 2y agoView on Hugging Face
92likes
unet_2d_blocks.cpython-39.pyc454 linesDownload Raw Back to __pycache__
1a

2�0d���@s�ddlmZmZmZmZddlZddlZddlmZddl	m3Z4mZddlm
Z
mZddlmZddlmZmZmZmZmZmZmZdd	lmZmZdDdd
�ZdEdd�ZGdd�dej�ZGdd�dej�Z Gdd�dej�Z!Gdd�dej�Z"Gdd�dej�Z#Gdd�dej�Z$Gdd�dej�Z%Gdd�dej�Z&Gd d!�d!ej�Z'Gd"d#�d#ej�Z(Gd$d%�d%ej�Z)Gd&d'�d'ej�Z*Gd(d)�d)ej�Z+Gd*d+�d+ej�Z,Gd,d-�d-ej�Z-Gd.d/�d/ej�Z.Gd0d1�d1ej�Z/Gd2d3�d3ej�Z0Gd4d5�d5ej�Z1Gd6d7�d7ej�Z2Gd8d9�d9ej�Z3Gd:d;�d;ej�Z4Gd<d=�d=ej�Z5Gd>d?�d?ej�Z6Gd@dA�dAej�Z7GdBdC�dCej�Z8dS)F�)�Any�Dict�Optional�TupleN)�nn�)�AdaGroupNorm�AttentionBlock)�	Attention�AttnAddedKVProcessor)�DualTransformer2DModel)�Downsample2D�FirDownsample2D�
FirUpsample2D�
KDownsample2D�KUpsample2D�
ResnetBlock2D�5Upsample2D)�Transformer2DModel�Transformer2DModelOutputF�defaultcCs�|�d�r|dd�n|}|dkr>t||||||||	||d�6S|dkr`t||||||||	|d�	S|dkr�t||||||||	|||d�S|d	kr�|7dur�td8��t||||||||	||9|||
|||d�S|dk�r�|10dur�td
��t||||||||	|11||d�S|dk�r"t|||||||||d�	S|dk�rHt||||||||||d�12S|dk�rlt	|||||||	||d�	S|dk�r�t13|||||||	|||d�14S|dk�r�t|||||||d�S|dk�r�t||||||||15||�s�dndd�16St|�d���dS)N�UNetRes��DownBlock2D)1718num_layers�in_channels�out_channels�
temb_channels�add_downsample�19resnet_eps�
resnet_act_fn�
resnet_groups�downsample_padding�resnet_time_scale_shift�ResnetDownsampleBlock2D)	rrrrrrr r!r#�AttnDownBlock2D)rrrrrrr r!r"�attn_num_head_channelsr#�CrossAttnDownBlock2Dz>cross_attention_dim must be specified for CrossAttnDownBlock2D)rrrrrrr r!r"�cross_attention_dimr&�dual_cross_attention�use_linear_projection�only_cross_attention�upcast_attentionr#�SimpleCrossAttnDownBlock2DzDcross_attention_dim must be specified for SimpleCrossAttnDownBlock2D)rrrrrrr r!r(r&r#�SkipDownBlock2D)	rrrrrrr r"r#�AttnSkipDownBlock2D)20rrrrrrr r"r&r#�DownEncoderBlock2D)	rrrrrr r!r"r#�AttnDownEncoderBlock2D)21rrrrrr r!r"r&r#�KDownBlock2D)rrrrrrr �KCrossAttnDownBlock2DTF)22rrrrrrr r(r&�add_self_attention� does not exist.)
�23startswithrr$r%�24ValueErrorr'r-r.r/r0r1r2r3)�down_block_typerrrrrrr r&r!r(r"r)r*r+r,r#�r9�T/home/deep/Projects/audio_diffusion/diffusers/src/diffusers/models/unet_2d_blocks.py�get_down_blocks.���
�25�
26�27�28�29�30�	31�r;cCs�|�d�r|dd�n|}|dkr>t|||||||||32|d�33S|dkrbt|||||||||34|d�35S|dkr�|durztd��t|||||||||36||	||
|||d�S|d	kr�|dur�td37��t|||||||||38||	|d�S|dk�rt|||||||||39|	|d
�S|dk�r&t|||||||||d�	S|dk�rLt|||||||||	|d�40S|dk�rnt	|||||||41|d�S|dk�r�t42|||||||43|	|d�	S|dk�r�t|||||||d�S|dk�r�t|||||||||	d�	St|�d���dS)Nrr�	UpBlock2D)44rrr�prev_output_channelr�add_upsamplerr r!r#�ResnetUpsampleBlock2D�CrossAttnUpBlock2Dz<cross_attention_dim must be specified for CrossAttnUpBlock2D)rrrr=rr>rr r!r(r&r)r*r+r,r#�SimpleCrossAttnUpBlock2DzBcross_attention_dim must be specified for SimpleCrossAttnUpBlock2D)rrrr=rr>rr r!r(r&r#�
AttnUpBlock2D)rrrr=rr>rr r!r&r#�
SkipUpBlock2D)	rrrr=rr>rr r#�AttnSkipUpBlock2D)45rrrr=rr>rr r&r#�UpDecoderBlock2D)rrrr>rr r!r#�AttnUpDecoderBlock2D)	rrrr>rr r!r&r#�46KUpBlock2D)rrrrr>rr �KCrossAttnUpBlock2D)	rrrrr>rr r(r&r5)
r6r<r?r7r@rArBrCrDrErFrGrH)�
up_block_typerrrr=rr>rr r&r!r(r)r*r+r,r#r9r9r:�get_up_block�s,����47�
48�49�50�51 52�53�	54�rJcs@eZdZdeeeeeeeeeed	�55�fd56d�
Zdd
d�Z�Z	S)�UNetMidBlock2D�r�����ư>r�swish� T��?)57rr�dropoutrrr#r r!�resnet_pre_norm�
add_attentionc
s�t���|dur|nt|dd�}|58|_t||||||||||	d�59g}
g}t|�D]P}|jrx|�t|||||d��n60|�d�|
�t||||||||||	d�61�qTt�	|�|_62t�	|
�|_dS)N�rO�63rrr�eps�groupsrQ�time_embedding_norm�
non_linearity�output_scale_factor�pre_norm��num_head_channels�rescale_output_factorrV�norm_num_groups)�super�__init__�minrSr�range�appendr	r�64ModuleList�65attentions�resnets)�selfrrrQrrr#r r!rRrSr&rZrgrf�_��	__class__r9r:ratsZ66����67 68��zUNetMidBlock2D.__init__NcCsN|jd||�}t|j|jdd��D]"\}}|dur>||�}|||�}q&|S)Nrr�rg�ziprf)rh�
hidden_states�temb�attn�resnetr9r9r:�forward�szUNetMidBlock2D.forward)69rLrrMrrNrOTTrrP)N�70�__name__�71__module__�__qualname__�int�float�str�boolrarr�
__classcell__r9r9rjr:rKss.��DrKc
sxeZdZdeeeeeeeeed�	�fdd
�
Zdej	e72ej	e73ej	e74ej	e75eeefe76ej	ej	d�dd�Z
�ZS)�UNetMidBlock2DCrossAttnrLrrMrrNrOTrP�F�	rrrQrrr#r r!rRcs�t���d|_|77|_|dur"|nt|dd�}t||||||||||	d�78g}g}t|�D]l}|
s�|�t|79||80|d||||d��n|�t	|81||82|d||d��|�t||||||||||	d�83�qZt84�|�|_t85�|�|_
dS)NTrTrOrUr)rrr(r_r*r,�rrr(r_)r`ra�has_cross_attentionr&rbrrcrdrrrrerfrg)rhrrrQrrr#r r!rRr&rZr(r)r*r,rgrfrirjr9r:ra�st86����
��87��z UNetMidBlock2DCrossAttn.__init__N)rnro�encoder_hidden_states�attention_mask�cross_attention_kwargs�encoder_attention_mask�returnc88CsV|jd||�}t|j|jdd��D]*\}}||||||d�}	|	j}|||�}q&|S)Nrr�r�r�r�r�)rgrmrf�sample)89rhrnror�r�r�r�rprq�outputr9r9r:rrs	�zUNetMidBlock2DCrossAttn.forward)
rLrrMrrNrOTrrPr}FFF)NNNNN�rtrurvrwrxryrzra�torch�FloatTensorrrrrrr{r9r9rjr:r|�sL��W��r|cs>eZdZdeeeeeeeeed90�	�fdd�
Zddd�Z�Z	S)�UNetMidBlock2DSimpleCrossAttnrLrrMrrNrOTrPr}r~c
s�t���d|_|91|_|dur"|nt|dd�}||j|_t||||||||||	d�92g}
g}t|�D]J}|�t	|||j|93||ddt94�d�	�|
�t||||||||||	d�95�qft�|�|_
t�|
�|_dS)NTrTrOrU�	�	query_dimr(�heads�dim_headZadded_kv_proj_dimr_�biasZupcast_softmax�	processor)r`rar�r&rb�	num_headsrrcrdr96rrrerfrg)rhrrrQrrr#r r!rRr&rZr(rgrfrirjr9r:ra0sb97����
��z&UNetMidBlock2DSimpleCrossAttn.__init__NcCsd|dur|ni}|jd||�}t|j|jdd��D](\}}||f||d�|��}|||�}q6|S)Nrr�r�r�rl)rhrnror�r�r�rprqr9r9r:rrys���z%UNetMidBlock2DSimpleCrossAttn.forward)98rLrrMrrNrOTrrPr})NNNNrsr9r9rjr:r�/s.��J�r�cs@eZdZdeeeeeeeeeed	�99�fd100d�
Zdd
d�Z�Z	S)r%rLrrMrrNrOTrP�101rrrrQrrr#r r!rRcs�t���g}g}t|�D]N}|dkr*|n|}|�t|||||	|||||102d�103�|�t|||||	d��qt�|�|_t�|�|_	|r�t�t104|d||
dd�g�|_nd|_dS�NrrUr\T�op��use_convr�padding�name�r`rarcrdrr	rrerfrgr
�downsamplers)rhrrrrQrrr#r r!rRr&rZr"rrgrf�irjr9r:ra�sL105����106107���zAttnDownBlock2D.__init__NcCshd}t|j|j�D]$\}}|||�}||�}||f7}q|jdur`|jD]}||�}qH||f7}||fS�Nr9�rmrgrfr�)rhrnro�
output_statesrqrp�downsamplerr9r9r:rr�s108109110111112zAttnDownBlock2D.forward)rLrrMrrNrOTrrPrT)Nrsr9r9rjr:r%�s0��=r%csveZdZdeeeeeeeeeed�113�fdd
�
Zdej	e114ej	e115ej	e116ej	e117eeefe118ej	d�dd�Z
�ZS)r'rLrrMrrNrOTr}rPFr�cs�t���g}g}d|_||_t|�D]~}|dkr6|n|}|�t|||||	||||
|119d�120�|s�|�t||||d||	|||d�	�q&|�t||||d||	d��q&t	�121|�|_t	�122|�|_|r�t	�123t
|d||dd�g�|_nd|_d	|_dS)124NTrrUr�rrr(r_r*r+r,rr�r�F)r`rar�r&rcrdrrrrrerfrgr
r��gradient_checkpointing)rhrrrrQrrr#r r!rRr&r(rZr"rr)r*r+r,rgrfr�rjr9r:ra�sp125������126127���zCrossAttnDownBlock2D.__init__N)rnror�r�r�r�cCs�d}t|j|j�D]�\}}	|jrp|jrpddd�}128tjj�|129|�||�}tjj�|130|	dd�||dd|||�d}n|||�}|	|||||d�j}||f7}q|j	dur�|j	D]}||�}q�||f7}||fS)	Nr9cs��fdd�}|S)Ncs"�dur�|d�i�S�|�SdS�N�return_dictr9��inputs��moduler�r9r:�custom_forwardBszSCrossAttnDownBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9�r�r�r�r9r�r:�create_custom_forwardAsz;CrossAttnDownBlock2D.forward.<locals>.create_custom_forwardF�r�rr�)N)131rmrgrf�trainingr�r��utils�132checkpointr�r�)rhrnror�r�r�r�r�rqrpr�r�r9r9r:rr3s>	133	134�	�135�136137138139zCrossAttnDownBlock2D.forward)rLrrMrrNrOTrr}rPrTFFFF)NNNNNr�r9r9rjr:r'�sR��Y��r'cs@eZdZdeeeeeeeeeed	�140�fd141d�
Zdd
d�Z�Z	S)rrLrrMrrNrOTrPr�cs�t���g}t|�D]6}|dkr&|n|}|�t|||||	|||||142d�143�qt�|�|_|r|t�t|d||
dd�g�|_	nd|_	d|_144dS)NrrUTr�r�F)r`rarcrdrrrergr
r�r�)rhrrrrQrrr#r r!rRrZrr"rgr�rjr9r:raks8145��146���zDownBlock2D.__init__NcCs�d}|jD]D}|jr:|jr:dd�}tjj�||�||�}n147|||�}||f7}q148|jdurx|jD]}||�}q`||f7}||fS)Nr9cs�fdd�}|S)Ncs�|�S�Nr9r��r�r9r:r��szJDownBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9�r�r�r9r�r:r��sz2DownBlock2D.forward.<locals>.create_custom_forward�rgr�r�r�r�r�r��rhrnror�rqr�r�r9r9r:rr�s149150151152153154zDownBlock2D.forward)155rLrrMrrNrOTrPTr)Nrsr9r9rjr:rjs.��3rcs<eZdZdeeeeeeeeed	�	�fd156d�
Zdd
�Z�Z	S)r0rLrrMrrNrOTrP�	rrrQrrr#r r!rRc
s�t���g}
t|�D]6}|dkr&|n|}|
�t||d||||||157|	d�158�qt�|
�|_|r|t�t|d||dd�g�|_	nd|_	dS)NrrUTr�r�)159r`rarcrdrrrergr
r�)rhrrrQrrr#r r!rRrZrr"rgr�rjr9r:ra�s6160��161���zDownEncoderBlock2D.__init__cCs:|jD]}||dd�}q|jdur6|jD]}||�}q(|S�N)ro)rgr�)rhrnrqr�r9r9r:rr�s162163164165zDownEncoderBlock2D.forward)166rLrrMrrNrOTrPTrrsr9r9rjr:r0�s,��0r0cs<eZdZdeeeeeeeeed	�	�fd167d�
Zdd
�Z�Z	S)r1rLrrMrrNrOTrPr�cs�t���g}g}t|�D]N}|dkr*|n|}|�t||d|||||||	d�168�|�t||169|||d��qt�|�|_t�|�|_	|r�t�t170|d||
dd�g�|_nd|_dSr�r�)rhrrrQrrr#r r!rRr&rZrr"rgrfr�rjr9r:ra�sL171����172173���zAttnDownEncoderBlock2D.__init__cCsNt|j|j�D]\}}||dd�}||�}q|jdurJ|jD]}||�}q<|Sr�r�)rhrnrqrpr�r9r9r:rr2s174175176177zAttnDownEncoderBlock2D.forward)rLrrMrrNrOTrrPTrrsr9r9rjr:r1�s.��<r1csXeZdZddddddde�d�ddf178eeeeeeeeed�	�fd	d179�
Z	ddd
�Z180�ZS)r/rLrrMrrNT�@�	rrrrQrrr#r rRcst���t�g�|_t�g�|_t|�D]f}|dkr:|n|}|j�t||||t	|dd�t	|dd�|||||	d��|j�t181||182||d��q*|
r�t||||t	|dd�|||||	dddd�
|_t�t||d	�g�|_
tjd183|ddd�|_nd|_d|_
d|_dS)
NrrTrO�rrrrVrW�184groups_outrQrXrYrZr[�r]r^rVT�fir�
rrrrVrWrQrXrYrZr[�use_in_shortcut�down�kernel�r��rr��kernel_size�stride)r`rarrerfrgrcrdrrbr	�resnet_downrr��Conv2d�	skip_conv)rhrrrrQrrr#r rRr&rZr"rr�rjr9r:ra?sb185����	�zAttnSkipDownBlock2D.__init__NcCs�d}t|j|j�D]$\}}|||�}||�}||f7}q|jdurz|�||�}|jD]}||�}qT|�|�|}||f7}|||fSr�)rmrgrfr�r�r�)rhrnro�skip_sampler�rqrpr�r9r9r:rr�s186187188189190zAttnSkipDownBlock2D.forward)NN�rtrurv�np�sqrtrwrxryrzrarrr{r9r9rjr:r/>s,��Er/csVeZdZdddddde�d�ddf	eeeeeeeeed�	�fd	d191�
Z	ddd
�Z192�ZS)r.rLrrMrrNTr�r�c
s�t���t�g�|_t|�D]N}
|
dkr.|n|}|j�t||||t|dd�t|dd�||||193|	d��q|r�t||||t|dd�||||194|	dddd�
|_	t�t195||d�g�|_tjd	|d196d197d�|_
nd|_	d|_d|_
dS)NrrTrOr�Tr�r�r�r�r�r�)r`rarrergrcrdrrbr�rr�r�r�)rhrrrrQrrr#r rRrZrr"r�rjr9r:ra�sP198���zSkipDownBlock2D.__init__NcCspd}|jD]}|||�}||f7}q199|jdurf|�||�}|jD]}||�}q@|�|�|}||f7}|||fSr�)rgr�r�r�)rhrnror�r�rqr�r9r9r:rr�s200201202203204205zSkipDownBlock2D.forward)NNr�r9r9rjr:r.�s*��;r.cs@eZdZdeeeeeeeeeed	�206�fd207d�
Zdd
d�Z�Z	S)r$rLrrMrrNrOTrPr�c
s�t���g}
t|�D]6}|dkr&|n|}|
�t|||||	|||||208d�209�qt�|
�|_|r�t�t|||||	|||||210dd�g�|_nd|_d|_	dS)NrrUT�rrrrVrWrQrXrYrZr[r�F)211r`rarcrdrrrergr�r�)rhrrrrQrrr#r r!rRrZrrgr�rjr9r:ra�sL212�����z ResnetDownsampleBlock2D.__init__NcCs�d}|jD]D}|jr:|jr:dd�}tjj�||�||�}n213|||�}||f7}q214|jdurz|jD]}|||�}q`||f7}||fS)Nr9cs�fdd�}|S)Ncs�|�Sr�r9r�r�r9r:r�+szVResnetDownsampleBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9r�r9r�r:r�*sz>ResnetDownsampleBlock2D.forward.<locals>.create_custom_forwardr�r�r9r9r:rr$s215216217218219zResnetDownsampleBlock2D.forward)	rLrrMrrNrOTrPT)Nrsr9r9rjr:r$�s,��<r$cs@eZdZdeeeeeeeeeed220221�fdd�
Zddd�Z�Z	S)r-rLrrMrrNrOTr}rPr�cs�t���d|_g}g}||_||j|_t|�D]Z}|dkrB|n|}|�t|||||	||||
|222d�223�|�t|||j|||	ddt	�d�	�q2t224�|�|_t225�|�|_
|r�t226�t|||||	||||
|227dd�g�|_nd|_d|_dS)NTrrUr�r�F)r`rar�r&r�rcrdrr228rrrerfrgr�r�)rhrrrrQrrr#r r!rRr&r(rZrrgrfr�rjr9r:ra@sp229����
���z#SimpleCrossAttnDownBlock2D.__init__Nc230Cs�d}|dur|ni}t|j|j�D]2\}}|||�}||f||d�|��}||f7}q"|jdur�|jD]}	|	||�}qf||f7}||fS)Nr9r�r�)231rhrnror�r�r�r�rqrpr�r9r9r:rr�s$232���233234235z"SimpleCrossAttnDownBlock2D.forward)rLrrMrrNrOTrr}rPT)NNNNrsr9r9rjr:r-?s2��S�r-c236s<eZdZd
eeeeeeeed��fdd	�
Zddd�Z�ZS)r2rLrT��h㈵��>�gelurOF�rrrrQrrr �resnet_group_sizec237s�t���g}238t|�D]F}|dkr&|n|}||}||}
|239�t||||||
||ddd�240�qt�|241�|_|	r�t�t�g�|_	nd|_	d|_242dS)Nr�	ada_groupF�243rrrQrrWr�rVrYrX�conv_shortcut_bias)r`rarcrdrrrergrr�r�)rhrrrrQrrr r�rrgr�rWr�rjr9r:ra�s2244��zKDownBlock2D.__init__NcCsvd}|jD]D}|jr:|jr:dd�}tjj�||�||�}n245|||�}||f7}q246|jdurn|jD]}||�}q`||fS)Nr9cs�fdd�}|S)Ncs�|�Sr�r9r�r�r9r:r��szKKDownBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9r�r9r�r:r��sz3KDownBlock2D.forward.<locals>.create_custom_forwardr�r�r9r9r:rr�s247248249250251zKDownBlock2D.forward)rLrTr�r�rOF)N)	rtrurvrwrxryrarrr{r9r9rjr:r2�s"��-r2c
sBeZdZdeeeeeeeeeeed	��fd252d�
Zdd
d�Z�Z	S)r3rLrTrOT�@Fr�r�)rrrr(rQrr�r&r4rr c
s�t���g}
g}d|_t|�D]j}|dkr0|n|}||}||}|
�t||||||||ddd�253�|�t|||	|	||d|254d|d�	�q t�|
�|_	t�|�|_255|r�t�t�g�|_nd|_d|_
dS)NTrr�Fr�)r(r�attention_biasr4�cross_attention_norm�256group_size)r`rar�rcrdr�KAttentionBlockrrergrfrr�r�)rhrrrr(rQrr�rr&r4rr rgrfr�rWr�rjr9r:ra�sR257����zKCrossAttnDownBlock2D.__init__NcCs�d}t|j|j�D]�\}}|jrf|jrfddd�}	tjj�|	|�||�}tjj�|	|dd�||||�}n|||�}||||||d�}|jdur�|d7}q||f7}q|jdur�|jD]}258|259|�}q�||fS)	Nr9cs��fdd�}|S)Ncs"�dur�|d�i�S�|�SdSr�r9r�r�r9r:r�@szTKCrossAttnDownBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9r�r9r�r:r�?sz<KCrossAttnDownBlock2D.forward.<locals>.create_custom_forwardFr��r��embr�r�r�)N)	rmrgrfr�r�r�r�r�r�)rhrnror�r�r�r�rqrpr�r�r9r9r:rr7s6260	261�262�263264265266267zKCrossAttnDownBlock2D.forward)rLrTrOTr�Fr�r�)NNNN)268rtrurvrwrxrzryrarrr{r9r9rjr:r3�s.��A�r3c
sBeZdZdeeeeeeeeeeed	��fd269d�
Zdd
d�Z�Z	S)rBrLrrMrrNrOTrP�rr=rrrQrrr#r r!rRcs�t���g}g}t|�D]f}||dkr.|n|}|dkr>|n|}|�t||||||270|||	|
|d�271�|�t|||
||272d��qt�|�|_t�|�|_	|r�t�t273|d|d�g�|_nd|_dS)NrrrUr\T�r�r�r`rarcrdrr	rrerfrgr�274upsamplers)rhrr=rrrQrrr#r r!rRr&rZr>rgrfr��res_skip_channels�resnet_in_channelsrjr9r:ragsD275����276zAttnUpBlock2D.__init__NcCsrt|j|j�D]@\}}|d}|dd�}tj||gdd�}|||�}||�}q|jdurn|jD]}||�}q`|S)N�����r��dim�rmrgrfr��catr�)rhrn�res_hidden_states_tuplerorqrp�res_hidden_states�	upsamplerr9r9r:rr�s277278279280281zAttnUpBlock2D.forward)282rLrrMrrNrOTrrPT)Nrsr9r9rjr:rBfs0��9rBcs�eZdZdeeeeeeeeeeed��fdd
�
Zdej	e283ej	dfeej	eej	eeee
feeeej	eej	d�dd�Z�ZS)r@rLrrMrrNrOTr}rPF�rrr=rrQrrr#r r!rRcst���g}g}d|_||_t|�D]�}||dkr:|n|}|dkrJ|n|}|�t||||||284|||	||d�285�|s�|�t||||d|
|286|||d�	�q&|�t||||d|
|287d��q&t	�288|�|_t	�289|�|_|r�t	�290t
|d|d�g�|_nd|_d|_dS)	NTrrrUr�rr�F)r`rar�r&rcrdrrrrrerfrgrr�r�)rhrrr=rrQrrr#r r!rRr&r(rZr>r)r*r+r,rgrfr�r�r�rjr9r:ra�sh291������292zCrossAttnUpBlock2D.__init__N.)rnr�ror�r��
upsample_sizer�r�c	Cs�t|j|j�D]�\}	}293|d}|dd�}tj||gdd�}|jr�|jr�d294dd�}tjj�||	�||�}tjj�||295dd�||dd|||�d}q|	||�}|296|||||d	�j	}q|j297dur�|j298D]}
|
||�}q�|S)Nr�rr�cs��fdd�}|S)Ncs"�dur�|d�i�S�|�SdSr�r9r�r�r9r:r�szQCrossAttnUpBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9r�r9r�r:r�sz9CrossAttnUpBlock2D.forward.<locals>.create_custom_forwardFr�rr�)N)rmrgrfr�r�r�r�r�r�r�r�)rhrnr�ror�r�r�r�r�rqrpr�r�r�r9r9r:rrs>299	300�	�301�302303304zCrossAttnUpBlock2D.forward)rLrrMrrNrOTrr}rPTFFFF)NNNNNN)rtrurvrwrxryrzrar�r�rrrrrrr{r9r9rjr:r@�sX��V��r@c
sBeZdZdeeeeeeeeeeed	��fd305d�
Zdd
d�Z�Z	S)r<rLrrMrrNrOTrPr�cs�t���g}t|�D]N}||dkr*|n|}|dkr:|n|}|�t||||||306|||	||d�307�qt�|�|_|
r�t�t|d|d�g�|_	nd|_	d|_308dS)NrrrUTr�F)r`rarcrdrrrergrr�r��rhrr=rrrQrrr#r r!rRrZr>rgr�r�r�rjr9r:ra=s0309��zUpBlock2D.__init__Nc	Cs�|jD]`}|d}|dd�}tj||gdd�}|jr\|jr\dd�}tjj�||�||�}q|||�}q|jdur�|jD]}|||�}qx|S)Nr�rr�cs�fdd�}|S)Ncs�|�Sr�r9r�r�r9r:r�vszHUpBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9r�r9r�r:r�usz0UpBlock2D.forward.<locals>.create_custom_forward�rgr�r�r�r�r�r�r��	rhrnr�ror�rqr�r�r�r9r9r:rrls310311312zUpBlock2D.forward)	rLrrMrrNrOTrPT)NNrsr9r9rjr:r<<s.��/r<cs<eZdZdeeeeeeeeed	�	�fd313d�
Zdd
�Z�Z	S)rErLrrMrrNrOTrPr�cs�t���g}t|�D]6}
|
dkr&|n|}|�t||d||||||314|	d�315�qt�|�|_|rxt�t|d|d�g�|_	nd|_	dS)NrrUTr�)316r`rarcrdrrrergrr�)rhrrrQrrr#r r!rRrZr>rgr��input_channelsrjr9r:ra�s,317��zUpDecoderBlock2D.__init__cCs:|jD]}||dd�}q|jdur6|jD]}||�}q(|Sr�)rgr�)rhrnrqr�r9r9r:rr�s318319320321zUpDecoderBlock2D.forward)	rLrrMrrNrOTrPTrsr9r9rjr:rE�s*��*rEcs<eZdZdeeeeeeeeed	�	�fd322d�
Zdd
�Z�Z	S)rFrLrrMrrNrOTrPr�c
s�t���g}
g}t|�D]N}|dkr*|n|}|
�t||d|||||||	d�323�|�t||324|||d��qt�|�|_t�|
�|_	|r�t�t325|d|d�g�|_nd|_dS)NrrUr\Tr�r�)rhrrrQrrr#r r!rRr&rZr>rgrfr�r�rjr9r:ra�sB326����327zAttnUpDecoderBlock2D.__init__cCsNt|j|j�D]\}}||dd�}||�}q|jdurJ|jD]}||�}q<|Sr�)rmrgrfr�)rhrnrqrpr�r9r9r:rr�s328329330331zAttnUpDecoderBlock2D.forward)332rLrrMrrNrOTrrPTrsr9r9rjr:rF�s,��6rFcsZeZdZddddddde�d�ddf333eeeeeeeeeed�334�fd	d335�
Z	ddd
�Z336�ZS)rDrLrrMrrNTr��337rr=rrrQrrr#r rRcsZt���t�g�|_t�g�|_t|�D]j}||dkr>|n|}|dkrN|n|}|j�t|||||t	||dd�t	|dd�|||	||338d��q*|j�t339||||d��t||d�|_|�r>t||||t	|dd�t	|dd�|||	||340ddd	d341�|_
tj|ddd
d
d�|_tjjt	|dd�||dd�|_t��|_nd|_
d|_d|_d|_dS)NrrrTrOr�r�r�Tr��rrrrVrWr�rQrXrYrZr[r��upr�r��r�r�r��r�r�r���342num_groups�num_channelsrV�affine)r`rarrerfrgrcrdrrbr	rr��	resnet_upr�r�r��	GroupNorm�	skip_norm�SiLU�act)rhrr=rrrQrrr#r rRr&rZ�upsample_paddingr>r�r�r�rjr9r:rasp343����	��zAttnSkipUpBlock2D.__init__NcCs�|jD]4}|d}|dd�}tj||gdd�}|||�}q|jd|�}|dur^|�|�}nd}|jdur�|�|�}|�|�}|�|�}||}|�||�}||fS�Nr�rr�r)	rgr�r�rfr�r�r�rr��rhrnr�ror�rqr�Zskip_sample_statesr9r9r:rrOs 344345346347348zAttnSkipUpBlock2D.forward)NNr�r9r9rjr:rD�s.��OrDcsXeZdZdddddde�d�ddf	eeeeeeeeeed�349�fd	d350�
Z	ddd
�Z351�ZS)rCrLrrMrrNTr�r�cs6t���t�g�|_t|�D]j}||dkr2|n|}|dkrB|n|}|j�t|||||t||dd�t|dd�|||	||352d��qt	||d�|_353|�rt||||t|dd�t|dd�|||	||354dddd	�|_tj|d355dddd
�|_
tjjt|dd�||dd�|_t��|_nd|_d|_
d|_d|_dS)NrrrTrOr�r�Tr�r�r�r�r�r�r�)r`rarrergrcrdrrbrr�r�r�r�r�r�r�r�r)rhrr=rrrQrrr#r rRrZr>rr�r�r�rjr9r:rals^356����zSkipUpBlock2D.__init__NcCs�|jD]4}|d}|dd�}tj||gdd�}|||�}q|durP|�|�}nd}|jdur�|�|�}|�|�}|�|�}||}|�||�}||fSr)rgr�r�r�r�r�rr�rr9r9r:rr�s357358359360361zSkipUpBlock2D.forward)NNr�r9r9rjr:rCks,��DrCc
sBeZdZdeeeeeeeeeeed	��fd362d�
Zdd
d�Z�Z	S)r?rLrrMrrNrOTrPr�cs�t���g}t|�D]N}||dkr*|n|}|dkr:|n|}|�t||||||363|||	||d�364�qt�|�|_|
r�t�t|||||365|||	||dd�g�|_nd|_d|_	dS)NrrrUT�rrrrVrWrQrXrYrZr[r�F)366r`rarcrdrrrergr�r�r�rjr9r:ra�sN367�����zResnetUpsampleBlock2D.__init__Nc	Cs�|jD]`}|d}|dd�}tj||gdd�}|jr\|jr\dd�}tjj�||�||�}q|||�}q|jdur�|jD]}|||�}qx|S)Nr�rr�cs�fdd�}|S)Ncs�|�Sr�r9r�r�r9r:r�	szTResnetUpsampleBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9r�r9r�r:r�	sz<ResnetUpsampleBlock2D.forward.<locals>.create_custom_forwardr�r�r9r9r:rr368	s369370371zResnetUpsampleBlock2D.forward)	rLrrMrrNrOTrPT)NNrsr9r9rjr:r?�s.��?r?c
sBeZdZdeeeeeeeeeeed372��fdd�
Zddd�Z�Z	S)rArLrrMrrNrOTr}rPr�cs�t���g}g}d|_||_||j|_t|�D]r}||dkrF|n|}|dkrV|n|}|�t||||||373|||	||d�374�|�t|||j||
|375ddt	�d�	�q2t376�|�|_t377�|�|_
|r�t378�t|||||379|||	||dd�g�|_nd|_d|_dS)NTrrrUr�rF)r`rar�r&r�rcrdrr380rrrerfrgr�r�)rhrrr=rrQrrr#r r!rRr&r(rZr>rgrfr�r�r�rjr9r:ra%	sr381����
���z!SimpleCrossAttnUpBlock2D.__init__NcCs�|dur|ni}t|j|j�D]N\}}	|d}382|dd�}tj||383gdd�}|||�}|	|f||d�|��}q|jdur�|jD]}|||�}q~|S)Nr�rr�r�r�)rhrnr�ror�r�r�r�rqrpr�r�r9r9r:rry	s$384385���386387z SimpleCrossAttnUpBlock2D.forward)rLrrMrrNrOTrr}rPT)NNNNNrsr9r9rjr:rA$	s<��X�rAc388s@eZdZd
eeeeeeeeed��fdd	�
Zddd�Z�Z	S)rGrL�r�r�rOTr�c389s�t���g}390d|}|}|d}t|�D]V}
|
dkr:|n|}||}||}|391�t||
|dkrf|n|||||||ddd�392�q*t�|393�|_|	r�t�t�g�|_	nd|_	d|_394dS)N�rrr�F)395rrrrVrWr�rQrYrXr�)r`rarcrdrrrergrr�r�)rhrrrrQrrr r�r>rg�
k_in_channels�k_out_channelsr�rWr�rjr9r:ra�	s8396��zKUpBlock2D.__init__NcCs�|d}|dur"tj||gdd�}|jD]:}|jrX|jrXdd�}tjj�||�||�}q(|||�}q(|jdur�|jD]}||�}qt|S)Nr�rr�cs�fdd�}|S)Ncs�|�Sr�r9r�r�r9r:r��	szIKUpBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9r�r9r�r:r��	sz1KUpBlock2D.forward.<locals>.create_custom_forward)r�r�rgr�r�r�r�r�)rhrnr�ror�rqr�r�r9r9r:rr�	s397398399400zKUpBlock2D.forward)rLrr�r�rOT)NN)401rtrurvrwrxryrrarrr{r9r9rjr:rG�	s"��/rGc
sBeZdZdeeeeeeeeeeed402��fdd�
Zddd�Z�Z	S)rHrLrTr�r�rOr�TF)rrrrQrrr r�r(r>r,c
sZt���g}
g}||ko$|kn}||k}|r:dnd}d|_|	|_|rR|nd|}|}|d}t|�D]�}|dkr~|n|}||}||}|r�||dkr�|}nd}|
�t|||||||||ddd��|�t||dkr�|n|||dkr�||	n||	|	|403|d|d|d�	�qnt�	|
�|_404t�	|�|_|�rJt�	t�g�|_
nd|_
d|_dS)	NTFrrrr�)rr�conv_2d_out_channelsrrVrWr�rQrYrXr�)r(rr�r4r�r,)r`rar�r&rcrdrr�rrergrfrr�r�)rhrrrrQrrr r�r&r(r>r,rgrfZis_first_blockZis_middle_blockr4rrr�rWr�r405rjr9r:ra�	sl406��407408��zKCrossAttnUpBlock2D.__init__NcCs�|d}|dur"tj||gdd�}t|j|j�D]t\}}	|jr�|jr�d409dd�}410tjj�|411|�||�}tjj�|412|	dd�||||�d}q0|||�}|	|||||d	�}q0|j	dur�|j	D]}||�}q�|S)Nr�rr�cs��fdd�}|S)Ncs"�dur�|d�i�S�|�SdSr�r9r�r�r9r:r�K413szRKCrossAttnUpBlock2D.forward.<locals>.create_custom_forward.<locals>.custom_forwardr9r�r9r�r:r�J414sz:KCrossAttnUpBlock2D.forward.<locals>.create_custom_forwardFr�rr�)N)415r�r�rmrgrfr�r�r�r�r�)rhrnr�ror�r�r�r�rqrpr�r�r9r9r:rr9416s8417418	419��420�421422423zKCrossAttnUpBlock2D.forward)	rLrTr�r�rOrr	TF)NNNNNrsr9r9rjr:rH�	s8��W�rHc
sZeZdZdZdeeeeeeeeeeeed��fdd	�
Zd424d�Z	dd
�Z425ddd�Z�ZS)r�a~426    A basic Transformer block.427 428    Parameters:429        dim (`int`): The number of channels in the input and output.430        num_attention_heads (`int`): The number of heads to use for multi-head attention.431        attention_head_dim (`int`): The number of channels in each head.432        dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use.433        cross_attention_dim (`int`, *optional*): The size of the encoder_hidden_states vector for cross attention.434        activation_fn (`str`, *optional*, defaults to `"geglu"`): Activation function to be used in feed-forward.435        num_embeds_ada_norm (:436            obj: `int`, *optional*): The number of diffusion steps used during training. See `Transformer2DModel`.437        attention_bias (:438            obj: `bool`, *optional*, defaults to `False`): Configure if the attentions should contain a bias parameter.439    rLNFr	rO)r��num_attention_heads�attention_head_dimrQr(r�r,rr4r�r�c440szt���|	|_|	rDt||td||��|_t|||||ddd�|_t||td||��|_t||||||||441d�|_	dS)NrF)r�r�r�rQr�r(r�)r�r(r�r�rQr�r,r�)442r`rar4r�max�norm1r443�attn1�norm2�attn2)rhr�rrrQr(r�r,rr4r�r�rjr9r:ra~444s0445��zKAttentionBlock.__init__cCs$|�dddd��|jd||d�S)Nrrr�rr���permute�reshape�shape�rhrn�height�weightr9r9r:�_to_3d�446szKAttentionBlock._to_3dcCs |�ddd��|jdd||�S)Nrrrr�rrr9r9r:�_to_4d�447szKAttentionBlock._to_4dc448Cs�|dur|ni}|jrn|�||�}|jdd�\}}|�|||�}|j|fddi|��}	|�|	||�}	|	|}|�||�}|jdd�\}}|�|||�}|j|fd|i|��}	|�|	||�}	|	|}|S)Nrr�)r4rrrrrrr)449rhrnr�r�r�r�Znorm_hidden_statesrr�attn_outputr9r9r:rr�450s6������zKAttentionBlock.forward)rLNFFr	FFrO)NNNN)
rtrurv�__doc__rwrxrrzrarrrrr{r9r9rjr:r�m451s:��+�r�)NNNFFFFr)NNFFFFr)9�typingrrrr�numpyr�r�rZ	attentionrr	Zattention_processorr452r�dual_transformer_2drrqr
rrrrrr�transformer_2drrr;rJ�ModulerKr|r�r%r'rr0r1r/r.r$r-r2r3rBr@r<rErFrDrCr?rArGrHr�r9r9r9r:�<module>sp$
�4538�454-Om^OO<IZOXpGpKJ6Cl_ZxI