
    h              
       N   % S SK JrJrJrJr  SSKJr  SSKJr  SSK	J
r
Jr  SSKJr  SSKJr  \r\rS	r\\S
'   \R(                  " S5      SSS.S	\\\
\
4      S\\   S\\\4   4S jj5       rS\\\4   S\S\S\\\4   4S jr SS\\\4   S\\   S\\   SS4S jjrS rS rg)    )CallableOptionalTuplecast   )registry)Model)Floats2dRagged)	get_width   )noopkey_transformKEY_TRANSFORM_REFzParametricAttention.v2Nr   nOr   returnc           
      b    U c
  [        5       n  [        S[        [        SS 0SU0[        U 0U /S9$ )Nz	para-attnQr   )initparamsdimsrefslayers)r   r	   forwardr   r   r   s     ]/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/parametricattention_v2.pyParametricAttention_v2r      sE     9T{BZ/     modelXris_trainc                 j  ^ ^^	 T R                  S5      nT R                  [        5      n[        T R                  X4UR
                  UR                  U5      u  nm[        T R                  XQR
                  UR                  5      u  nm	S[        S[        4UU	U 4S jjn[        XaR                  5      U4$ )Nr   dYrr   c                    > T" U R                   5      u  pT" U5      u  p4TR                  SUR                  5       5        X-  n[        XR                  5      $ )Nr   )dataXdinc_gradravelr   lengths)r#   dXd_attentiondQdX2bp_attention	bp_outputr   s        r   backpropforward.<locals>.backprop-   sI    #CJJ/{+sBHHJ'
	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,		1RYY

HI| )Iyy"**UFI'd 's ' ' &**%x//r   XYc                 (   U R                  [        5      nUb  [        U5      OS nU(       a:  U R                  SU5        UR	                  S5      (       a  UR                  SU5        U R
                  R                  U R                  S5      5      nXPR
                  R                  R                  R                  SSUR                  5      -  nU R                  SU5        Ub  UR                  OS nUb  UR                  OS nUR                  Xg5        g )Nr   gg?r   )r2   r   r   set_dimhas_dimr4   alloc1fget_dimxprandomuniformshape	set_paramr%   
initialize)r   r:   r;   r   widthr   X_arrayY_arrays           r   r   r   7   s     MM"34MMIaLtEdE"  &&!!$. 			%---.A			$	$T3	88A	OOC-ahhTG-ahhTGW.r   c                    ^ ^^^^^	 U" X5S9u  mmT R                  TT R                  TSS5      5      m	T R                  T	T5      m	UUUU	UU 4S jnT	U4$ )N)r!   r   c                    > T	R                  U TT5      n T	R                  TU SS9nT	R                  R                  U T5      nT" U5      nX4$ )NT)trans1)backprop_softmax_sequencesgemmrA   outer)
r*   r+   dYr)   KK_bpr   r8   r(   r4   s
       r   get_attention_bwd)_get_attention.<locals>.get_attention_bwdR   sO    44[)WUXXaTX2VV\\+q)"Xvr   )rO   	reshape2fsoftmax_sequences)
r4   r   r   r:   r(   r!   rT   rR   rS   r8   s
   ``  `  @@@r   r3   r3   L   sX    A1GAtCMM!R34I%%i9I  '''r   c                 $   ^^ TT-  nUU4S jnXE4$ )Nc                 :   > TU -  R                  SSS9nU T-  nX!4$ )Nr   T)axiskeepdims)sum)d_outputr*   r)   r:   r8   s      r   apply_attention_bwd-_apply_attention.<locals>.apply_attention_bwd_   s.    8|((a$(?	!r    )r4   r8   r:   r(   r9   r^   s    ``   r   r5   r5   \   s    ]F
 &&r   )NN)typingr   r   r   r   configr   r   r	   typesr
   r   utilr   r   r7   r6   r   str__annotations__r   intr   boolr   r   r3   r5   r`   r   r   <module>ri      s   2 2   $  ( 3 ( 
)* :>E(H"456 	 39	 +(05d# 0 0 0tX~AV 0( KO/d/ (/9A$/	/*( 'r   