
    h              
          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  \r\r\R                   " S5      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g)    )CallableOptionalTuplecast   )registry)Model)Floats1dFloats2d)	get_widthzMultiSoftmax.v1NnOs.nIreturnc           
      P    [        S[        [        [        U 5      US.SU 0SSS.S9$ )a2  Neural network layer that predicts several multi-class attributes at once.
For instance, we might predict one class with 6 variables, and another with 5.
We predict the 11 neurons required for this, and then softmax them such
that columns 0-6 make a probability distribution and columns 6-11 make another.
multisoftmax)nOr   r   N)Wb)initdimsattrsparams)r	   forwardr   sum)r   r   s     S/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/multisoftmax.pyMultiSoftmaxr      s5     HB'cl%     modelXis_trainc                 z  ^ ^^	 T R                   S   n[        [        T R                  S5      5      m	[        [        T R                  S5      5      nS[
        S[        4U	UU 4S jjnT R                  R                  TT	SS9nXd-  nS	nU H,  nT R                  R                  US S 2XwU-   24   SS
9  Xx-  nM.     Xe4$ )Nr   r   r   dYr   c           	         > TR                  STR                  R                  U TSS95        TR                  SU R                  SS95        TR                  R                  U T5      $ )Nr   T)trans1r   r   )axis)inc_gradopsgemmr   )r"   r   r   r   s    r   backpropforward.<locals>.backprop"   sQ    sEIINN2qN>?sBFFFN+yy~~b!$$r   T)trans2r   )inplace)
r   r   r   	get_paramr
   OutTInTr'   r(   softmax)
r   r   r    r   r   r)   Yiout_sizer   s
   ``       @r   r   r      s    
++e
CXus+,AXus+,A%T %c % %
 			q!D)AFA	A		!Aqx<//0$?	  ;r   r1   c                 0   Ub  U R                  S[        U5      5        U R                  S5      nU R                  S5      nU R                  SU R                  R                  X45      5        U R                  SU R                  R                  U5      5        g )Nr   r   r   r   )set_dimr   get_dim	set_paramr'   alloc2falloc1f)r   r   r1   r   r   s        r   r   r   0   sq     	}dIaL)	t	B	t	B	OOC**223	OOC**2./r   )N)NN)typingr   r   r   r   configr   r   r	   typesr
   r   utilr   r/   r.   layersintr   boolr   r    r   r   <module>rB      s    2 2   &  
"#eCHo 8C= E#t)DT  $ 5d#  t dHn@U ( KO0d0 (09A$0	0r   