o
     ¢i{  ã                   @   s<   d dl Z d dlZd dlmZ d dlmZ G dd„ deƒZdS )é    N)ÚTensor)ÚModulec                       s>   e Zd Zddœdedef‡ fdd„Zdedefd	d
„Z‡  ZS )ÚSinusoidalPositionalEmbeddingT)Ú	normalizeÚdimÚmax_lenc                   sÀ   t ƒ  ¡  t |¡ d¡}t t d|d¡t d¡ |  ¡}t ||¡}t 	|| ¡|d d …dd d…f< t 
|| ¡|d d …dd d…f< |dkrWtj|dd}|| d¡ }|| _d| j_d S )	Né   r   é   g     ˆÃ@Téÿÿÿÿ)r   F)ÚsuperÚ__init__ÚtorchÚarangeÚ	unsqueezeÚexpÚmathÚlogÚzerosÚsinÚcosÚnormÚpeÚrequires_grad)Úselfr   r   r   ÚpositionÚdiv_termr   Úl2©Ú	__class__© úZ/home/ubuntu/.local/lib/python3.10/site-packages/curated_transformers/models/embeddings.pyr   	   s   
$  z&SinusoidalPositionalEmbedding.__init__ÚxÚreturnc                 C   s   | j | d¡dd…f S )z:
        Shapes:
            x - (batch, seq_len)
        r   N)r   Úsize)r   r!   r   r   r    Úforward   s   z%SinusoidalPositionalEmbedding.forward)Ú__name__Ú
__module__Ú__qualname__Úintr   r   r$   Ú__classcell__r   r   r   r    r      s    r   )r   r   r   Útorch.nnr   r   r   r   r   r    Ú<module>   s
    