
    i8              
          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    q/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/layers/parametricattention.pyParametricAttentionr      s      gD#tDRT: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    #CJJ/K{+CsBHHJ'
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,UYY299bjjQI|(Iryy"**UFI'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   gg?r   )
set_dimr
   r)   alloc1fget_dimxprandomuniformshape	set_param)r   r/   r0   r   s       r   r   r   !   sq     	}dIaL)		%---.A			$	$T3	88A	OOC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XXaTX2VV\\+q)2vr   )r@   	reshape2fsoftmax_sequences)r)   r   r/   r   rB   r-   s   ```` @r   r(   r(   ,   sJ    CMM!R34I%%i9I  '''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HSM WU395E W +W
05d# 0 0 0tX~AV 0  KOd (9A$	
('r   