
    h8              
          S SK JrJrJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  \	r\	r\R                  " S5      S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   )registry)Model)Ragged)	get_widthzParametricAttention.v1NnOreturnc                 4    [        S[        [        SS0SU 0S9$ )z/Weight inputs by similarity to a learned vectorz	para-attnQNr   )initparamsdims)r   forwardr   )r   s    Z/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/parametricattention.pyParametricAttentionr      s      gD#tDRT:VV    modelXris_trainc                 <  ^ ^^ T R                  S5      n[        T R                  X1R                  UR                  5      u  nm[        T R                  XAR                  UR                  5      u  nmS[        S[        4UUU 4S jjn[        XQR                  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_attentionopsr   r   _apply_attentionOutTInTr	   )	r   r   r   r   	attentionoutputr&   r$   r%   s	   `      @@r   r   r      s}    A,UYY99bjjQI|(Iyy"**UFI'd 's ' ' &**%x//r   XYc                 2   Ub  U R                  S[        U5      5        U R                  R                  U R	                  S5      5      nX0R                  R
                  R                  R                  SSUR                  5      -  nU R                  SU5        g )Nr   gg?r   )
set_dimr
   r*   alloc1fget_dimxprandomuniformshape	set_param)r   r0   r1   r   s       r   r   r   !   so     	}dIaL)		%---.A			$	$T3	88A	OOCr   c                    ^ ^^^^ T R                  TT R                  TSS5      5      mT R                  TT5      mUUUUU 4S jnTU4$ )N   c                    > TR                  U TT5      n TR                  TU SS9nTR                  R                  U T5      nX4$ )NT)trans1)backprop_softmax_sequencesgemmr6   outer)r!   r"   r    r   r0   r.   r   r*   s      r   get_attention_bwd)_get_attention.<locals>.get_attention_bwd0   sF    44[)WUXXaTX2VV\\+q)vr   )rA   	reshape2fsoftmax_sequences)r*   r   r0   r   rC   r.   s   ```` @r   r)   r)   ,   sJ    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    r0   r.   s      r   apply_attention_bwd-_apply_attention.<locals>.apply_attention_bwd<   s.    8|((a$(?	!r    )r*   r.   r0   r   r/   rM   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+   rO   r   r   <module>rW      s    , ,     
)*WHSM WU395E W +W
05d# 0 0 0tX~AV 0  KOd (9A$	
('r   