
    bi                         d dl mZ d dlZd dlmZ  G d dej                        Z G d dej                        Z	 G d dej                        Z
y)    Nc                   Z    e Zd ZU eed<   ej                  Zej                  ed<   d Zd Z	y)FlaxUpsample2Dout_channelsdtypec                 j    t        j                  | j                  ddd| j                        | _        y )N   r	      r   r
   r
   kernel_sizestridespaddingr   nnConvr   r   convselfs    W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/diffusers/models/resnet_flax.pysetupzFlaxUpsample2D.setup   +    GG$**
	    c                     |j                   \  }}}}t        j                  j                  |||dz  |dz  |fd      }| j	                  |      }|S )N   nearest)shapemethod)r   jaximageresizer   )r   hidden_statesbatchheightwidthchannelss         r   __call__zFlaxUpsample2D.__call__    s_    )6)<)<&vuh		((&1*eai: ) 

 		-0r   N
__name__
__module____qualname__int__annotations__jnpfloat32r   r   r(    r   r   r   r      s$    {{E399"
r   r   c                   Z    e Zd ZU eed<   ej                  Zej                  ed<   d Zd Z	y)FlaxDownsample2Dr   r   c                 j    t        j                  | j                  ddd| j                        | _        y )Nr   )r   r   r   r   r   r   s    r   r   zFlaxDownsample2D.setup/   r   r   c                 (    | j                  |      }|S )N)r   )r   r#   s     r   r(   zFlaxDownsample2D.__call__8   s     		-0r   Nr)   r1   r   r   r3   r3   +   s$    {{E399"
r   r3   c                       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 Zd
d	Zy)FlaxResnetBlock2Din_channelsNr   g        dropout_probuse_nin_shortcutr   c                    | j                   | j                  n| j                   }t        j                  dd      | _        t        j
                  |ddd| j                        | _        t        j                  || j                        | _	        t        j                  dd      | _
        t        j                  | j                        | _        t        j
                  |ddd| j                        | _        | j                  | j                  |k7  n| j                  }d | _        |r*t        j
                  |ddd	| j                        | _        y y )
N    gh㈵>)
num_groupsepsilonr   r
   r   r   )r   VALID)r   r8   r   	GroupNormnorm1r   r   conv1Densetime_emb_projnorm2Dropoutr9   dropoutconv2r:   conv_shortcut)r   r   r:   s      r   r   zFlaxResnetBlock2D.setupF   s   +/+<+<+Dt''$J[J[\\R>
WW$**

  XXl$**E\\R>
zz$"3"34WW$**

 @D?T?T?\4++|;bfbwbw!!#"jj"D r   c                    |}| j                  |      }t        j                  |      }| j                  |      }| j	                  t        j                  |            }t        j                  t        j                  |d      d      }||z   }| j                  |      }t        j                  |      }| j                  ||      }| j                  |      }| j                  | j                  |      }||z   S )Nr   )rA   r   swishrB   rD   r/   expand_dimsrE   rG   rH   rI   )r   r#   tembdeterministicresiduals        r   r(   zFlaxResnetBlock2D.__call__j   s     

=1/

=1!!"((4.1stQ7;%,

=1/]MB

=1)))(3Hx''r   )T)r*   r+   r,   r-   r.   r   r9   floatr:   boolr/   r0   r   r   r(   r1   r   r   r7   r7   ?   sD    L#L%!d!{{E399""H(r   r7   )
flax.linenlinenr   r    	jax.numpynumpyr/   Moduler   r3   r7   r1   r   r   <module>rW      s@     
 RYY 0ryy (=(		 =(r   