
    i              
       D   U d dl mZmZmZmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ eZeZd	Zeed
<    ej(                  d      dddd	eee
e
f      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cast   )registry)Model)Floats2dRagged)	get_width   )noopkey_transformKEY_TRANSFORM_REFzParametricAttention.v2Nr   nOr   returnc           	      f    | 
t               } 	 t        dt        t        dd id|it        | i| g      S )Nz	para-attnQr   )initparamsdimsrefslayers)r   r	   forwardr   r   r   s     t/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/layers/parametricattention_v2.pyParametricAttention_v2r      sE     9T{BZ/     modelXris_trainc                 l   	  j                  d      } j                  t              }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_refr   _get_attentionopsr%   r(   _apply_attentionOutTInTr   )
r   r    r!   r   r   	attentionoutputr/   r-   r.   s
   `       @@r   r   r   $   s    AMM"34M,		1mRYY

HI| )Iryy"**UFI'd 's ' &"**%x//r   XYc                    | j                  t              }|t        |      nd }|r5| j                  d|       |j	                  d      r|j                  d|       | j
                  j                  | j                  d            }|| j
                  j                  j                  j                  dd|j                        z  }| j                  d|       ||j                  nd }||j                  nd }|j                  ||       y )Nr   gg?r   )r1   r   r   set_dimhas_dimr3   alloc1fget_dimxprandomuniformshape	set_paramr%   
initialize)r   r9   r:   r   widthr   X_arrayY_arrays           r   r   r   7   s     MM"34MMIaLtEdE"  &!!$. 			%---.A			$	$T3	88A	OOC-ahhTG-ahhTGWg.r   c                     	  |||      \   j                   j                  dd            	 j                  	      		 fd}	|fS )N)r!   r   c                     	j                  |       } 	j                  | d      }	j                  j                  |       } |      }||fS )NT)trans1)backprop_softmax_sequencesgemmr@   outer)
r*   r+   dYr)   KK_bpr   r7   r(   r3   s
       r   get_attention_bwdz)_get_attention.<locals>.get_attention_bwdR   sQ    44[)WUXXaTX2VV\\+q)"X2vr   )rN   	reshape2fsoftmax_sequences)
r3   r   r   r9   r(   r!   rS   rQ   rR   r7   s
   ``  `  @@@r   r2   r2   L   sZ    A1GAt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)   r9   r7   s      r   apply_attention_bwdz-_apply_attention.<locals>.apply_attention_bwd_   s0    8|((a$(?	!;r    )r3   r7   r9   r(   r8   r\   s    ``   r   r4   r4   \   s    ]F
 &&&r   )NN)typingr   r   r   r   configr   r   r	   typesr
   r   utilr   r   r6   r5   r   str__annotations__r   intr   boolr   r   r2   r4   r]   r   r   <module>rf      s	   2 2   $  ( 3 ( )* :>E(H"456 	 39	 +(05d# 0 0 0tX~AV 0( KO/d/ (/9A$/	/*( 'r   