
    wiu                         d dl Z d dlmZ d dlmZ 	 	 	 	 	 ddej        dede	d	e	d
e	de
de	dej        fdZ G d dej                  Z G d dej                  ZdS )    N        @F      ?	timestepsembedding_dim
freq_shiftmin_timescalemax_timescaleflip_sin_to_cosscalereturnc                    | j         dk    s
J d            |dz  dk    sJ d| d            t          |dz            }t          j        ||z            ||z
  z  }|t	          j        t	          j        |t          j                  | z            z  }	t	          j        | d          t	          j        |	d          z  }
||
z  }|r=t	          j	        t	          j
        |          t	          j        |          gd          }n<t	          j	        t	          j        |          t	          j
        |          gd          }t	          j        |t	          j        |           d         |g          }|S )	a  Returns the positional encoding (same as Tensor2Tensor).

    Args:
        timesteps: a 1-D Tensor of N indices, one per batch element.
        These may be fractional.
        embedding_dim: The number of output channels.
        min_timescale: The smallest time unit (should probably be 0.0).
        max_timescale: The largest time unit.
    Returns:
        a Tensor of timing signals [N, num_channels]
    r   zTimesteps should be a 1d-array   r   zEmbedding dimension z should be even)dtype)axis)ndimfloatmathlogjnpexparangefloat32expand_dimsconcatenatecossinreshapeshape)r   r   r   r	   r
   r   r   num_timescaleslog_timescale_incrementinv_timescalesembscaled_timesignals                p/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/diffusers/models/embeddings_flax.pyget_sinusoidal_embeddingsr'      sh   ( >Q @1!!!#X-#X#X#X!!!=A-..N"h}}'DEEZdIde"SWSZck-Z-Z-Z^u]u-u%v%vvN
/)Q
'
'#/.!*L*L
LC #+K W#'+"6"68L8L!MTUVVV#'+"6"68L8L!MTUVVV[#)I"6"6q"9=!IJJFM    c                   d    e Zd ZU dZdZeed<   ej        Z	ej	        ed<   e
j        d             ZdS )FlaxTimestepEmbeddinga.  
    Time step Embedding Module. Learns embeddings for input time steps.

    Args:
        time_embed_dim (`int`, *optional*, defaults to `32`):
                Time step embedding dimension
        dtype (:obj:`jnp.dtype`, *optional*, defaults to jnp.float32):
                Parameters `dtype`
        time_embed_dimr   c                      t          j        | j        | j        d          |          }t          j        |          } t          j        | j        | j        d          |          }|S )Nlinear_1)r   namelinear_2)nnDenser,   r   silu)selftembs     r&   __call__zFlaxTimestepEmbedding.__call__H   s`    Orx+4:JOOOPTUUwt}}Orx+4:JOOOPTUUr(   N)__name__
__module____qualname____doc__r,   int__annotations__r   r   r   r1   compactr6    r(   r&   r*   r*   :   sa           NC{E39"""Z  Z  r(   r*   c                   ^    e Zd ZU dZdZeed<   dZeed<   dZ	e
ed<   ej        d             Zd	S )
FlaxTimestepsz
    Wrapper Module for sinusoidal Time step Embeddings as described in https://arxiv.org/abs/2006.11239

    Args:
        dim (`int`, *optional*, defaults to `32`):
                Time step embedding dimension
    r+   dimFr   r   r   c                 F    t          || j        | j        | j                  S )N)r   r   r   )r'   rA   r   r   )r4   r   s     r&   r6   zFlaxTimesteps.__call__]   s+    (TXt?S`d`o
 
 
 	
r(   N)r7   r8   r9   r:   rA   r;   r<   r   boolr   r   r1   r=   r6   r>   r(   r&   r@   r@   P   sj           CMMM!OT!!!JZ
 
 Z
 
 
r(   r@   )r   r   r   Fr   )r   
flax.linenlinenr1   	jax.numpynumpyr   ndarrayr;   r   rC   r'   Moduler*   r@   r>   r(   r&   <module>rJ      s                 !# #{## # 	#
 # # # 	[# # # #L    BI   ,
 
 
 
 
BI 
 
 
 
 
r(   