o
    pi                     @   sZ   d dl mZ d dlZd dlmZ G dd dejZG dd dejZ	G dd dejZ
dS )    Nc                   @   6   e Zd ZU eed< ejZejed< dd Zdd Z	dS )FlaxUpsample2Dout_channelsdtypec                 C      t j| jddd| jd| _d S )N   r      r
   r	   r	   kernel_sizestridespaddingr   nnConvr   r   convself r   Z/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/diffusers/models/resnet_flax.pysetup      zFlaxUpsample2D.setupc                 C   s>   |j \}}}}tjj|||d |d |fdd}| |}|S )N   nearest)shapemethod)r   jaximageresizer   )r   hidden_statesbatchheightwidthchannelsr   r   r   __call__    s   
zFlaxUpsample2D.__call__N
__name__
__module____qualname__int__annotations__jnpfloat32r   r   r&   r   r   r   r   r      
   
 	r   c                   @   r   )FlaxDownsample2Dr   r   c                 C   r   )Nr   )r   r   r   r   r   r   r   r   r   r   /   r   zFlaxDownsample2D.setupc                 C   s   |  |}|S )N)r   )r   r!   r   r   r   r&   8   s   
zFlaxDownsample2D.__call__Nr'   r   r   r   r   r0   +   r/   r0   c                   @   s\   e Zd ZU eed< dZeed< dZeed< dZe	ed< e
jZe
jed< dd	 ZdddZdS )FlaxResnetBlock2Din_channelsNr   g        dropout_probuse_nin_shortcutr   c                 C   s   | j d u r| jn| j }tjddd| _tj|ddd| jd| _tj|| jd| _	tjddd| _
t| j| _tj|ddd| jd| _| jd u rM| j|kn| j}d | _|rctj|ddd	| jd| _d S d S )
N    gh㈵>)
num_groupsepsilonr   r	   r   r   )r   VALID)r   r2   r   	GroupNormnorm1r   r   conv1Densetime_emb_projnorm2Dropoutr3   dropoutconv2r4   conv_shortcut)r   r   r4   r   r   r   r   F   s<   zFlaxResnetBlock2D.setupTc                 C   s   |}|  |}t|}| |}| t|}tt|dd}|| }| |}t|}| ||}| 	|}| j
d urF| 
|}|| S )Nr
   )r:   r   swishr;   r=   r-   expand_dimsr>   r@   rA   rB   )r   r!   tembdeterministicresidualr   r   r   r&   j   s   







zFlaxResnetBlock2D.__call__)T)r(   r)   r*   r+   r,   r   r3   floatr4   boolr-   r.   r   r   r&   r   r   r   r   r1   ?   s   
 $r1   )
flax.linenlinenr   r   	jax.numpynumpyr-   Moduler   r0   r1   r   r   r   r   <module>   s   