o
    i                     @   s6   d Z ddlZddlmZ ddlZG dd dejZdS )z7Class Declaration of Transformer's Positional Encoding.    Nc                       s*   e Zd ZdZd fdd	Zdd Z  ZS )	PositionalEncodingzPositional encoding module.

    :param int n_units: embedding dim
    :param float dropout: dropout rate
    :param int length: maximum input length

    皙?  c                    s   t t|   || _tjd|tjddddf }ttjd|dtjdtd|   }tj	||ftjd| _
t|| | j
dddddf< t|| | j
dddddf< t|| _dS )zInitialize Positional Encoding.r   )dtypeN   g     @   )superr   __init__dropoutnparangefloat32explogzerospesincossqrtscale)selfn_unitsr
   length
posi_block
unit_block	__class__ e/home/ubuntu/.local/lib/python3.10/site-packages/espnet/nets/chainer_backend/transformer/embedding.pyr	      s   """zPositionalEncoding.__init__c                 C   s8   |j d }|| j | j| jd|  }t|| jS )zForward Positional Encoding.r   N)shaper   xparrayr   Fr
   )r   er   r   r   r   forward    s   
 zPositionalEncoding.forward)r   r   )__name__
__module____qualname____doc__r	   r$   __classcell__r   r   r   r   r   	   s    r   )	r(   chainerchainer.functions	functionsr"   numpyr   Chainr   r   r   r   r   <module>   s
   