ó
    Këgjw  ã                   óÆ   • S SK r S SKrS SKJr  S SKJs  Jr  S SKJr  S
S jr	 " S S\R                  5      r " S S\R                  5      r " S S	\R                  5      rg)é    N)Ú	rearrangec                 ó¨  • U R                   S   nSU-  n[        R                  R                  XS9U-  nUb2  [        R                  R                  XFS9U-  nXxR	                  5       -   n[        R                  R                  U R                  UR                  S9US9n	[        U R                   5      S:”  a  UR                  S5      n[        R                  R                  X—-  USS9S	S U24   n
X -   nU(       a  [        R                  " U5      nUb&  U[        US
5      -  R                  U R                  S9$ UR                  U R                  S9$ )Néÿÿÿÿé   )Ún©Údtypeé   é   Úforward)r   Únorm.zb H -> b H 1)ÚshapeÚtorchÚfftÚrfftÚconjÚtor	   ÚlenÚ	unsqueezeÚirfftÚFÚgelur   )ÚuÚkÚdropout_maskr   Úk_revÚseqlenÚfft_sizeÚk_fÚk_rev_fÚu_fÚyÚouts               Ú¨C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\fla/modules/conv/long_conv.pyÚfft_convr%      s  € Ø�W‰W�R‰[€FØ�6‰z€HÜ
�)‰)�.‰.˜ˆ.Ð
'¨(Ñ
2€CØÑÜ—)‘)—.‘. �.Ð3°hÑ>ˆØ—L‘L“NÑ"ˆÜ
�)‰)�.‰.˜Ÿ™ A§G¡G˜Ð,°ˆ.Ð
9€Cä
ˆ1�7‰7ƒ|�aÓØ�m‰m˜AÓˆÜ�	‰	�‰˜™	 X°IˆÐ>¸sÀGÀVÀG¸|ÑL€Aà
‰%€CÞÜ�fŠf�S‹kˆØÑØ”i ¨nÓ=Ñ=×AÑAÈÏÉÐAÐPÐPà�v‰v˜AŸG™GˆvÐ$Ð$ó    c                   óZ   ^ • \ rS rSrSrS\S\4U 4S jjrS\R                  4S jr	Sr
U =r$ )	ÚLongConvolutioné&   a{  
LongConvolution applies a convolution operation on the input tensor using a fixed
filter of length max_len.
The filter is learned during training and is applied using FFT convolution.

Args:
    hidden_size (int): The number of expected features in the input and output.
    max_len (int): The maximum sequence length.

Returns:
    y: [batch_size, seq_len, hidden_size] tensor
Úhidden_sizeÚmax_lenc                 ó    >• [         TU ]  5         Xl        [        R                  " [
        R                  " U R                  U5      SS9U l        g)z¯
Initializes the LongConvolution module.
Args:
    hidden_size (int): The number of expected features in the input and output.
    max_len (int): The maximum sequence length.
T©Úrequires_gradN)ÚsuperÚ__init__r*   ÚnnÚ	Parameterr   ÚrandnÚfilter)Úselfr*   r+   ÚkwargsÚ	__class__s       €r$   r0   ÚLongConvolution.__init__4   s:   ø€ ô 	‰ÑÔØ&ÔÜ—l’l¤5§;¢;¨t×/?Ñ/?ÀÓ#IÐY]Ñ^ˆ�r&   Úxc                 ó¦   • UR                  SS5      n[        XR                  SSS9nUR                  SS5      nUR                  UR                  S9$ )z­
Applies the LongConvolution operation on the input tensor.
Args:
    x: [batch_size, seq_len, hidden_size] tensor
Returns:
    y: [batch_size, seq_len, hidden_size] tensor
r   r   NF©r   r   r   )Ú	transposer%   r4   r   r	   )r5   r9   Úargsr6   r"   s        r$   r   ÚLongConvolution.forwardD   sK   € ð �K‰K˜˜1ÓˆÜ�QŸ™°$¸UÑCˆØ�K‰K˜˜1ÓˆØ�t‰t˜!Ÿ'™'ˆtÐ"Ð"r&   )r4   r*   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úintr0   r   ÚTensorr   Ú__static_attributes__Ú__classcell__©r7   s   @r$   r(   r(   &   s7   ø† ñð_àð_ð ÷_ð #˜Ÿ™÷ #ò #r&   r(   c                   ó:   ^ • \ rS rSrS\S\4U 4S jjrS rSrU =r$ )ÚPositionalEmbeddingéR   Úemb_dimÚseq_lenc                 ó  >• [         T
U ]  5         X l        [        R                  " SSU R                  5      SSS2S4   nUS:”  a  US-
  S-  n[        R                  " SUS-
  U5      SSS2S4   nS[
        R                  -  U-  U-  n[        R                  " SWS-
  U5      S   n[        R                  " SU-  U-  5      n	[        R                  " XIR                  U	R                  /SS	9n	[        R                  " U	S
S9U l        g)zPComplex exponential positional embeddings for implicit long convolution filters.r   r   Nr   g-Cëâ6?)NNy       €      ð¿r   )ÚdimFr-   )r/   r0   rM   r   ÚlinspaceÚmathÚpiÚexpÚcatÚrealÚimagr1   r2   Úz)r5   rL   rM   r6   ÚtÚbandsÚ
t_rescaledÚwÚfrW   r7   s             €r$   r0   ÚPositionalEmbedding.__init__S   sá   ø€ ä‰ÑÔàŒä�NŠN˜1˜a §¡Ó.¨t²Q¸¨}Ñ=ˆà�Q‹;Ø˜q‘[ QÑ&ˆEä—^’^ A w°¡{°GÓ<¸TÂ1Àd¸]ÑKˆ
Ø”—‘‰K˜*Ñ$ wÑ.ˆä�NŠN˜4 ¨¡¨EÓ2°:Ñ>ˆÜ�IŠI�c˜A‘g ‘kÓ"ˆÜ�IŠI�qŸ&™& !§&¡&Ð)¨rÑ2ˆÜ—’˜a¨uÑ5ˆ�r&   c                 ó,   • U R                   S S 2S U24   $ )N)rW   )r5   ÚLs     r$   r   ÚPositionalEmbedding.forwardf   s   € Ø�v‰v’a˜˜!˜�e‰}Ðr&   )rM   rW   )	r?   r@   rA   rB   rD   r0   r   rF   rG   rH   s   @r$   rJ   rJ   R   s    ø† ð6 ð 6¨c÷ 6÷&ð r&   rJ   c            	       óx   ^ • \ rS rSrSr  SS\S\S\S\4U 4S jjjrS\4S	 jrS
\R                  4S jr
SrU =r$ )ÚImplicitLongConvolutionéj   a‡  
Long convolution with implicit filter parameterized by an MLP.

Args:
    hidden_size (int):
        The number of expected features in the input and output.
    max_len (int):
        The maximum sequence length.
    d_emb (Optional[int]):
        The dimension of the positional embeddings. Must be odd and greater or equal to 3 (time, sine and cosine).
        Defaults to 3.
    d_hidden (Optional[int]):
        The number of features in the hidden layer of the MLP. Defaults to 16.

Attributes:
    pos_emb (`PositionalEmbedding`): The positional embedding layer.
    mlp (`nn.Sequential`): The MLP that parameterizes the implicit filter.

r*   r+   Úd_embÚd_hiddenc                 óH  >• [         TU ]  5         Xl        X0l        US-  S:w  a  US:¼  d   S5       e[	        X25      U l        [        R                  " [        R                  " X45      [        R                  R                  5       [        R                  " XA5      5      U l        g)zB
Long convolution with implicit filter parameterized by an MLP.


r   r   r
   zCd_emb must be odd and greater or equal to 3 (time, sine and cosine)N)r/   r0   r*   rd   rJ   Úpos_embr1   Ú
SequentialÚLinearr   ÚReLUÚmlp)r5   r*   r+   rd   re   r6   r7   s         €r$   r0   Ú ImplicitLongConvolution.__init__   sƒ   ø€ ô 	‰ÑÔØ&ÔØŒ
ð �A‰I˜‹N˜u¨›zð	QàPó	QØ)ä*¨5Ó:ˆŒô —=’=Ü�IŠI�eÓ&Ü�H‰H�M‰M‹OÜ�IŠI�hÓ,ó
ˆ�r&   rM   c                 ób   • U R                  U R                  U5      5      R                  SS5      $ )Nr   r   )rk   rg   r<   )r5   rM   r=   r6   s       r$   r4   ÚImplicitLongConvolution.filterœ   s'   € Ø�x‰x˜Ÿ™ WÓ-Ó.×8Ñ8¸¸AÓ>Ð>r&   r9   c                 óÎ   • UR                  SS5      nU R                  UR                  S   5      n[        XSSS9nUR                  SS5      nUR	                  UR
                  S9$ )zs
Args:
    x: [batch_size, seq_len, hidden_size] tensor

Returns:
    y: [batch_size, seq_len, hidden_size] tensor
r   r   r   NFr;   r   )r<   r4   r   r%   r   r	   )r5   r9   r=   r6   r   r"   s         r$   r   ÚImplicitLongConvolution.forwardŸ   s]   € ð �K‰K˜˜1ÓˆØ�K‰K˜Ÿ™ ™Ó$ˆÜ�Q¨°5Ñ9ˆà�K‰K˜˜1ÓˆØ�t‰t˜!Ÿ'™'ˆtÐ"Ð"r&   )rd   r*   rk   rg   )r
   é   )r?   r@   rA   rB   rC   rD   r0   r4   r   rE   r   rF   rG   rH   s   @r$   rb   rb   j   sa   ø† ñð0 Øñ
àð
ð ð
ð ð	
ð
 ÷
ð 
ð:?˜cô ?ð#˜Ÿ™÷ #ò #r&   rb   )TN)rQ   r   Útorch.nnr1   Útorch.nn.functionalÚ
functionalr   Úeinopsr   r%   ÚModuler(   rJ   rb   © r&   r$   Ú<module>rx      sQ   ðó ã Ý ß Ð Ý ô%ô,)#�b—i‘iô )#ôX˜"Ÿ)™)ô ô0B#˜bŸi™iõ B#r&   