o
    ih                  
   @   s   d dl mZmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZmZ edeeZedd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e	eef ded
eeef fddZde	eef ded
eeef fddZdS )    )CallableTupleTypeVarUnioncast   )registry)Model)Floats2dRaggedInTzexpand_window.v1   window_sizereturnc                 C   s   t dtd| idS )zFor each vector in an input, construct an output vector that contains the
    input and a window of surrounding vectors. This is one step in a convolution.
    expand_windowr   )attrs)r	   forward)r    r   N/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/expand_window.pyr   
   s   r   modelXis_trainc                 C   s   t |tr
t| |S t| |S N)
isinstancer   _expand_window_ragged_expand_window_floats)r   r   r   r   r   r   r      s   


r   c                    sl    j d t|dkr j|}nt|dksJ  j|d d }dtdtf fdd}||fS )	Nr   r   r   r   dYr   c                    s    j | S r   )opsbackprop_seq2col)r   r   nWr   r   backprop#   s   z'_expand_window_floats.<locals>.backprop)r   lenr   seq2coltiler
   )r   r   Yr!   r   r   r   r      s   
r   Xrc                    sP   j d tjjtt j jd j}dtdtf fdd}||fS )Nr   lengthsdYrr   c                    s$   t jjtt| j jd jS )Nr'   )r   r   r   r   r
   datar(   )r)   r&   r   r    r   r   r!   1   s   z'_expand_window_ragged.<locals>.backprop)r   r   r   r#   r   r
   r*   r(   )r   r&   r%   r!   r   r+   r   r   )   s   
r   N)r   )typingr   r   r   r   r   configr   r   r	   typesr
   r   r   layersintr   boolr   r   r   r   r   r   r   <module>   s,    *




