
    h                        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  SS	KJr  SS
KJr  SSKJr  \R.                  " S5        SSSS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)he_normal_init	zero_init)Model)Floats1dFloats2d)	get_widthpartial   )chain)Dropout)	LayerNormzHardSwishMobilenet.v1NF)init_Winit_bdropout	normalizenOnIr   r   r   r   returnc          	         Uc  [         nUc  [        n[        S[        [	        [
        X#5      XS.S S S.S9nU(       a  [        U[        U S95      nUb0  [        U[        [        [        [        4   [        U5      5      5      nU$ )Nhardswishmobilenet)r   r   )Wb)initdimsparams)r   )r	   r
   r   forwardr   r   r   r   r   r   r   )r   r   r   r   r   r   models          [/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/hard_swish_mobilenet.pyHardSwishMobilenetr%      s     ~~',T6*!%(E eY"-.eT%((:";WW=MNOL    r#   Xis_trainc                 *  ^ ^^^ [        [        T R                  S5      5      m[        [        T R                  S5      5      nT R                  R                  TTU5      mT R                  R                  T5      nS[        S[        4UUUU 4S jjnXE4$ )Nr   r   dYr   c           	        > TR                   R                  U TSS9n 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      $ )	NF)inplacer   r   )axisr   T)trans1)opsbackprop_hard_swish_mobilenetinc_gradsumgemm)r*   r   r'   Y_preactr#   s    r$   backpropforward.<locals>.backprop1   sl    YY44R54QsBFFFN+sEIINN2qN>?yy~~b!$$r&   )r   r   	get_paramr   r/   affinehard_swish_mobilenet)r#   r'   r(   r   Yr5   r   r4   s   ``    @@r$   r"   r"   )   s}     	Xus+,AXus+,Ayy1a(H		&&x0A%X %( % % ;r&   r:   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'   r:   s        r$   r   r   :   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   r   r   r   	layernormr   layersintfloatboolr%   r"   r    r&   r$   <module>rJ      sU   2 2  4  & %     
() "&!%# X	
 X e_  8X *68#$)1=A
8X* ! DDD 8#$D 	D
 D 
Dr&   