o
    i"
                     @   sV  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 ddlmZmZ dd	lmZ dd
lmZ ddlmZ eZeZed			d#ddddddee 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deeef dededeeef fddZ		d$dededeeef dee d ee ddfd!d"ZdS )%    )CallableOptionalTuplecast   )registry)glorot_uniform_init	zero_init)Model)Floats2d)	get_widthpartial   )chain)Dropout)	LayerNormz	Maxout.v1N   F)init_Winit_bdropout	normalizenOnInPr   r   r   r   returnc                C   s|   |d u rt }|d u rt}tdttt||| ||dd d dd}|r*t|t| d}|d ur<t|ttt	t
f t|}|S )Nmaxout)r   r   r   )Wb)initdimsparams)r   )r   r	   r
   forwardr   r   r   r   r   InTOutTr   )r   r   r   r   r   r   r   model r%   G/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/maxout.pyMaxout   s    

r'   r$   Xis_trainc                    s    d d dd}d j   jj dd}|j| 7 }j||jd }j|\}d	t	d
t
f fdd}||fS )Nr   r   r   r   r   T)trans2r   d_bestr   c                    s   j | }d|jdd j ||jd  }j j j|dd}d| j |j   S )Nr   r   )axisT)trans1r   )opsbackprop_maxoutinc_gradsum	reshape2fshape	reshape3fgemm)r+   dZdYdWr   r(   r$   r   r   r   whichr%   r&   backprop9   s    zforward.<locals>.backprop)get_dim	get_paramr.   r2   r5   	reshape1fr4   r3   r   r#   r"   )r$   r(   r)   r   YZbestr;   r%   r9   r&   r!   -   s   




"	r!   r?   c              	   C   s   |d ur| dt| |d ur| dt| |d|d|df}|d| |j| |d||j|d|df d S )Nr   r   r   r   r   )set_dimr   r<   	set_paramr.   )r   r   r$   r(   r?   W_shaper%   r%   r&   r   E   s   (r   )NNr   )NN)typingr   r   r   r   configr   initializersr   r	   r$   r
   typesr   utilr   r   r   r   r   	layernormr   r"   r#   layersintfloatboolr'   r!   r   r%   r%   r%   r&   <module>   sj    
	*
