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 eZeZed				dd	d	d
dee dee dee de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)Floats1dFloats2d)	get_widthpartialz	Linear.v1N)init_Winit_bnOnIr   r   returnc                C   s>   |du rt }|du rt}tdttt||| |dddddS )z;Multiply inputs by a weights matrix and adds a bias vector.Nlinear)r   r   )Wb)initdimsparams)r   r	   r
   forwardr   r   )r   r   r   r    r   G/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/linear.pyLinear   s   	
r   modelXis_trainc                    s\   t td t td}jj dd}||7 }dtdtf fdd}||fS )	Nr   r   T)trans2dYr   c                    s<    d| jdd  djj| dd j|  S )Nr   r   )axisr   T)trans1)inc_gradsumopsgemm)r"   r   r   r   r   r   backprop)   s   zforward.<locals>.backprop)r   r   	get_paramr   r'   r(   OutTInT)r   r   r    r   Yr*   r   r)   r   r   #   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_paramr'   get_dim)r   r   r   r   r.   r   r   r   r   1   s   $ r   )NN)typingr   r   r   r   configr   initializersr   r	   r   r
   typesr   r   utilr   r   r-   r,   layersintr   boolr   r   r   r   r   r   <module>   sR    
*
