Ë
    ›¾j8  ã            
       ó  — d dl mZmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ e	Ze	Z ej                  d«      dd	ee   d
eeef   fd„«       Zdeeef   deded
eeef   fd„Z	 ddeeef   dee   dee   d
dfd„Zd„ Zd„ Zy)é    )ÚCallableÚOptionalÚTupleé   )Úregistry)ÚModel)ÚRagged)Ú	get_widthzParametricAttention.v1NÚnOÚreturnc                 ó:   — t        dt        t        ddid| i¬«      S )z/Weight inputs by similarity to a learned vectorz	para-attnÚQNr   )ÚinitÚparamsÚdims)r   Úforwardr   )r   s    új/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/thinc/layers/parametricattention.pyÚParametricAttentionr      s    € ô �œg¬D¸#¸t¸ÈDÐRTÈ:ÔVÐVó    ÚmodelÚXrÚis_trainc                 ó>  ‡ ‡‡— ‰ j                  d«      }t        ‰ j                  ||j                  |j                  «      \  }Št        ‰ j                  ||j                  |j                  «      \  }Šdt        dt        fˆˆˆ fd„}t        ||j                  «      |fS )Nr   ÚdYrr   c                 óº   •—  ‰| j                   «      \  }} ‰|«      \  }}‰j                  d|j                  «       «       ||z  }t        || j                  «      S )Nr   )ÚdataXdÚinc_gradÚravelr	   Úlengths)r   ÚdXÚd_attentionÚdQÚdX2Úbp_attentionÚ	bp_outputr   s        €€€r   Úbackpropzforward.<locals>.backprop   sQ   ø€ Ù# C§J¡JÓ/‰ˆˆKÙ˜{Ó+‰ˆˆCØ�‰�s˜BŸH™H›JÔ'Ø
ˆc‰	ˆÜ�b˜#Ÿ+™+Ó&Ð&r   )	Ú	get_paramÚ_get_attentionÚopsr   r   Ú_apply_attentionÚOutTÚInTr	   )	r   r   r   r   Ú	attentionÚoutputr&   r$   r%   s	   `      @@r   r   r      s~   ú€ Ø�‰˜Ó€AÜ,¨U¯Y©Y¸¸2¿9¹9ÀbÇjÁjÓQÑ€Iˆ|Ü(¨¯©°I¸r¿y¹yÈ"Ï*É*ÓUÑ€FˆIð'”dð 'œs÷ 'ô �&˜"Ÿ*™*Ó% xÐ/Ð/r   ÚXÚYc                 ó2  — |�| j                  dt        |«      «       | j                  j                  | j	                  d«      «      }|| j                  j
                  j                  j                  dd|j                  «      z  }| j                  d|«       y )Nr   gš™™™™™¹¿gš™™™™™¹?r   )
Úset_dimr
   r)   Úalloc1fÚget_dimÚxpÚrandomÚuniformÚshapeÚ	set_param)r   r/   r0   r   s       r   r   r   !   sq   € ð 	€}Ø�‰�dœI a›LÔ)à�	‰	×Ñ˜%Ÿ-™-¨Ó-Ó.€AØˆ�‰�‰×	Ñ	×	$Ñ	$ T¨3°·±Ó	8Ñ8€AØ	‡O�O�C˜Õr   c                 ó�   ‡ ‡‡‡‡— ‰ j                  ‰‰ j                  ‰dd«      «      Š‰ j                  ‰‰«      Šˆˆˆˆˆ fd„}‰|fS )Néÿÿÿÿé   c                 ó’   •— ‰j                  | ‰‰«      } ‰j                  ‰| d¬«      }‰j                  j                  | ‰«      }||fS )NT)Útrans1)Úbackprop_softmax_sequencesÚgemmr5   Úouter)r!   r"   r    r   r/   r-   r   r)   s      €€€€€r   Úget_attention_bwdz)_get_attention.<locals>.get_attention_bwd0   sH   ø€ Ø×4Ñ4°[À)ÈWÓUˆØ�X‰X�a˜¨TˆXÓ2ˆØ�V‰V�\‰\˜+ qÓ)ˆØ�2ˆvˆr   )r@   Ú	reshape2fÚsoftmax_sequences)r)   r   r/   r   rB   r-   s   ```` @r   r(   r(   ,   sJ   ü€ Ø—‘˜˜CŸM™M¨!¨R°Ó3Ó4€IØ×%Ñ% i°Ó9€I÷ð ð Ð'Ð'Ð'r   c                 ó$   ‡‡— ‰‰z  }ˆˆfd„}||fS )Nc                 óB   •— ‰| z  j                  dd¬«      }| ‰z  }||fS )Nr<   T)ÚaxisÚkeepdims)Úsum)Úd_outputr!   r    r/   r-   s      €€r   Úapply_attention_bwdz-_apply_attention.<locals>.apply_attention_bwd<   s0   ø€ Ø˜8‘|×(Ñ(¨a¸$Ð(Ó?ˆØ˜	Ñ!ˆØ�;ˆÐr   © )r)   r-   r/   r   r.   rK   s    ``   r   r*   r*   9   s   ù€ Ø�‰]€Fõð
 Ð&Ð&Ð&r   )N)NN)Útypingr   r   r   Úconfigr   r   r   Útypesr	   Úutilr
   r,   r+   ÚlayersÚintr   Úboolr   r   r(   r*   rL   r   r   ú<module>rT      sÚ   ðß ,Ñ ,å Ý Ý Ý à€Ø€ð €‡�Ð)Ó*ñW˜H S™Mð W°U¸3À¸9Ñ5Eò Wó +ðWð
0�5˜˜d˜Ñ#ð 0¨ð 0¸ð 0ÀÀtÈXÀ~ÑAVó 0ð  KOñØ��d�ÑðØ (¨¡ðØ9AÀ$¹ðà	óò
(ó'r   