
    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
  SSKJr  SSKJ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\
\\4   S\S\\\4   4S jrS\S\S\\\\4   4S jrS\S\S\S\S\\\\4   4
S jrg	)    )CallableOptionalTuplecast   )Ops)registry)Model)Floats2d)	get_widthzLayerNorm.v1NnIreturnc           	      6    [        S[        [        X S.S S S.S9$ )N	layernorm)r   nO)Gb)initdimsparams)r
   forwardr   )r   s    P/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/layernorm.py	LayerNormr      s&    !%     modelXis_trainc                    ^ ^^^^^	 [        T R                  T5      u  mmm	TT-
  T	S-  -  n[        T U5      u  nmS[        S[        4UUUU UU	4S jjnXE4$ )N      dYr   c                    > T" U 5      n [        TR                  U TT	5      u  pnTU -  U-
  UT
S-  -  U-  -
  nUT
S-  -  nUT-  nU$ )Ng      r   )_get_d_momentsops)r    distsum_dysum_dy_distd_xhatNr   backprop_rescaler   muvars        r   backpropforward.<locals>.backprop   sc    b!$2599b!R$H!kR&4#$-#7+#EE#(##!r   )_get_momentsr#   _begin_update_scale_shiftInT)
r   r   r   XhatYr,   r(   r)   r*   r+   s
   ``    @@@@r   r   r      s`    eii+JAr3Fcj))D3E4@AS S   ;r   r2   c                    Ub0  [        U5      nU R                  SU5        U R                  SU5        O2Ub/  [        U5      nU R                  SU5        U R                  SU5        U R                  S5      nU R                  S5      (       d  U R                  SU5        U R	                  SU R
                  R                  U5      S-   5        U R	                  SU R
                  R                  U5      5        U R                  S5      c   eg )Nr   r   r      r   )r   set_dimget_dimhas_dim	set_paramr#   alloc1f)r   r   r2   X_widthY_widthr   s         r   r   r   '   s     	}A,dG$dG$	
A,dG$dG$	t	B==dB	OOC**2.23	OOC**2./==***r   c                    ^ ^^ T R                  S5      mT R                  S5      nTT-  nX2-  nS[        S[        4UUU 4S jjnX44$ )Nr   r   r    r   c                    > TR                  SU R                  SS95        TR                  SU T-  R                  SS95        U T-  $ )Nr   r   )axisr   )inc_gradsum)r    r   r   r   s    r   finish_update_scale_shift<_begin_update_scale_shift.<locals>.finish_update_scale_shift@   sA    sBFFFN+sR!VLLaL01Avr   )	get_paramr0   )r   r   r   r2   rA   r   s   ``   @r   r/   r/   :   sR    AA	AAFAc c  
 ''r   r#   c                     UR                  SSS9nUR                  SSS9S-   n[        [        U R	                  UR
                  S   /5      5      X#4$ )Nr4   Tr>   keepdimsg:0yE>)meanr+   r   r   	asarray_fshape)r#   r   r*   r+   s       r   r.   r.   H   sP    66q460BEEq4E058C#--56??r   dyr*   c                 |    X#-
  nUU R                   R                  USSS9U R                   R                  X-  SSS94$ )Nr4   TrE   )xpr@   )r#   rJ   r   r*   r$   s        r   r"   r"   O   sF     6D

2A
-

291t
4 r   )N)NN)typingr   r   r   r   backendsr   configr	   r   r
   typesr   utilr   r0   layersintr   boolr   r   r/   r.   r"    r   r   <module>rV      sR   2 2      
 (3- 5c?  !5c? s d uS(]?S " IM+c?+'}+8@+	+&(U38_ ( (sH}AU (@c @h @58X1M+N @	'-5
8Xx'(r   