
    h                     V   S SK JrJrJrJr  SSKJr  SSKJrJ	r	  SSK
Jr  SSKJrJr  SSKJrJr  \r\r\R(                  " S5        SS	S	S
.S\\   S\\   S\\   S\\   S\\\4   4
S jjj5       rS\\\4   S\S\S\\\4   4S jr  SS\S\S\\\4   S\\   S\\   SS	4S jjrg	)    )CallableOptionalTuplecast   )registry)glorot_uniform_init	zero_init)Model)Floats1dFloats2d)	get_widthpartialz	Linear.v1N)init_Winit_bnOnIr   r   returnc          	      n    Uc  [         nUc  [        n[        S[        [	        [
        X#5      XS.SSS.S9$ )z;Multiply inputs by a weights matrix and adds a bias vector.Nlinear)r   r   )Wb)initdimsparams)r	   r
   r   forwardr   r   )r   r   r   r   s       M/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/linear.pyLinearr      sC     ~$~T6*!%     modelXis_trainc                    ^ ^^ [        [        T R                  S5      5      m[        [        T R                  S5      5      nT R                  R                  TTSS9nXC-  nS[        S[        4UUU 4S jjnXE4$ )Nr   r   T)trans2dYr   c           	         > TR                  SU R                  SS95        TR                  STR                  R                  U TSS95        TR                  R                  U T5      $ )Nr   r   )axisr   T)trans1)inc_gradsumopsgemm)r%   r   r!   r    s    r   backpropforward.<locals>.backprop)   sQ    sBFFFN+sEIINN2qN>?yy~~b!$$r   )r   r   	get_paramr   r+   r,   OutTInT)r    r!   r"   r   Yr-   r   s   ``    @r   r   r   #   sn    Xus+,AXus+,A		q!D)AFA%T %c % %
 ;r   r2   c           
      h   Ub  UR                  S[        U5      5        Ub  UR                  S[        U5      5        UR                  SU " UR                  UR	                  S5      UR	                  S5      45      5        UR                  SU" UR                  UR	                  S5      45      5        g )Nr   r   r   r   )set_dimr   	set_paramr+   get_dim)r   r   r    r!   r2   s        r   r   r   1   s     	}dIaL)}dIaL)	OOC		EMM$,?tAT+UVW	OOC		EMM$,?+ABCr   )NN)typingr   r   r   r   configr   initializersr	   r
   r    r   typesr   r   utilr   r   r1   r0   layersintr   boolr   r    r   r   <module>r@      s-   2 2  9  & % 
 "&!% X	
 X 39 *5d#  t dHn@U $ DDD dD }	D
 ~D 
Dr   