o
    Giy                     @   sp   d dl mZ d dlZd dlmZ ddlmZ e	e
ZG dd dejZG dd dejZG dd	 d	ejZdS )
    N   )loggingc                   @   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 d tj| jddd| jd| _d S )NFlax classes are deprecated and will be removed in Diffusers v1.0.0. We recommend migrating to PyTorch classes or pinning your version of Diffusers.   r      r   r   r   kernel_sizestridespaddingr   loggerwarningnnConvr   r   convself r   P/home/ubuntu/.local/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 )Nr   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   9   r   zFlaxDownsample2D.setupc                 C   s   |  |}|S )N)r   )r   r%   r   r   r   r*   G   s   
zFlaxDownsample2D.__call__Nr+   r   r   r   r   r4   5   r3   r4   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   t d | 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 rR| j|kn| j}d | _|rhtj|ddd
| jd| _d S d S )Nr	       gh㈵>)
num_groupsepsilonr
   r   r   r   )r   VALID)r   r   r   r6   r   	GroupNormnorm1r   r   conv1Densetime_emb_projnorm2Dropoutr7   dropoutconv2r8   conv_shortcut)r   r   r8   r   r   r   r   U   sB   zFlaxResnetBlock2D.setupTc                 C   s   |}|  |}t|}| |}| t|}tt|dd}|| }| |}t|}| ||}| 	|}| j
d urF| 
|}|| S )Nr   )r>   r   swishr?   rA   r1   expand_dimsrB   rD   rE   rF   )r   r%   tembdeterministicresidualr   r   r   r*   ~   s   







zFlaxResnetBlock2D.__call__)T)r,   r-   r.   r/   r0   r   r7   floatr8   boolr1   r2   r   r   r*   r   r   r   r   r5   N   s   
 )r5   )
flax.linenlinenr   r"   	jax.numpynumpyr1   utilsr   
get_loggerr,   r   Moduler   r4   r5   r   r   r   r   <module>   s   
