o
    i_                     @   s  d dl mZmZmZmZ ddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ed		d4ddddddddddee dee dee dee dee dedededededeeef fddZdeeef d ed!edeeef fd"d#Z		d4dededeeef d ee d$ee ddfd%d&Zed'		d4ddddd(dee dee dee dee dee dedeeef fd)d*Zed+		d4ddddd(dee dee dee dee dee dedeeef fd,d-Zed.		d4ddddd/d0dee dee dee dee dee ded1edeeef fd2d3Z dS )5    )CallableOptionalTuplecast   )registry)glorot_uniform_init	zero_init)Model)Floats1dFloats2d)	get_widthpartial   )chain)Dropout)	LayerNormzClippedLinear.v1NF      ?        )init_Winit_bdropout	normalizeslopeoffsetmin_valmax_valnOnIr   r   r   r   r   r   r   r   returnc                C   s   |d u rt }|d u rt}||||	d}
tdttt||| |dd d d|
d}|r1t|t| d}|d urCt|ttt	t	f t
|}|S )N)r   r   r   r   clipped_linear)r   r   )Wb)forwardinitdimsparamsattrs)r   )r   r	   r
   r#   r   r$   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   model_attrsmodel r*   O/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/clipped_linear.pyClippedLinear   s,   
r,   r)   Xis_trainc              	      s   j d j d j d j d ttd ttd}j |j}dtdtf fd	d
}||fS )Nr   r   r   r   r!   r"   dYr   c              	      sV   j j| dd} d| jdd dj j| dd j |  S )	NF)inplacer"   r   )axisr!   T)trans1)opsbackprop_clipped_linearinc_gradsumgemm)r/   r!   r-   Y_preactr   r   r)   r   r   r*   r+   backpropB   s   zforward.<locals>.backprop)r'   r   r   	get_paramr   r3   affiner    )r)   r-   r.   r"   Yr:   r*   r8   r+   r#   4   s   



$r#   r=   c              	   C   st   |d ur| dt| |d ur| dt| |d| |j|d|df |d||j|df d S )Nr   r   r!   r"   )set_dimr   	set_paramr3   get_dim)r   r   r)   r-   r=   r*   r*   r+   r$   M   s   $ r$   zHardSigmoid.v1)r   r   r   r   c             	   C   .   |d u rt }|d u rt}t| ||||dddS )Ng?g      ?)r   r   r   r   r   r   r   r   r	   r,   r   r   r   r   r   r   r*   r*   r+   HardSigmoid\      
rD   zHardTanh.v1c             	   C   rA   )Ng      r   r   r   r   r   r   r   r   rB   rC   r*   r*   r+   HardTanhu   rE   rG   zReluK.v1g      @)r   r   r   r   krH   c             	   C   s.   |d u rt }|d u rt}t| ||||d|dS )Nr   rF   rB   )r   r   r   r   r   r   rH   r*   r*   r+   ReluK   s   rI   )NN)!typingr   r   r   r   configr   initializersr   r	   r)   r
   typesr   r   utilr   r   r   r   r   	layernormr   layersintfloatboolr,   r#   r$   rD   rG   rI   r*   r*   r*   r+   <module>   s   	

&







	