o
    i                     @   s  d dl mZ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 ddlmZ ededZed	edZed
de
eef 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deeef fddZ	dde
eef dee dee ddfddZdS )    )AnyCallableDictOptionalTupleTypeVar   )registry)Model)ArrayXd
XY_XY_OutT)	get_widthInT)boundOutTzadd.v1layer1layer2layersreturnc                 G   sp   | |f| }|d j dkr|d j|dd  |d S ddi}tdd |D r/ddd}tdtt||d	S )
zCompose two or more models `f`, `g`, etc, such that their outputs are
    added, i.e. `add(f, g)(x)` computes `f(x) + g(x)`.
    r   add   NnOc                 s   s    | ]
}| d dv V  qdS )nI)TNN)has_dim).0node r   D/home/ubuntu/.local/lib/python3.10/site-packages/thinc/layers/add.py	<genexpr>   s    zadd.<locals>.<genexpr>)r   r   )initdimsr   )namer   extendallr
   forwardr   )r   r   r   r    r   r   r   r      s   
r   modelXis_trainc                    s   | j s	|dd fS | j d ||d\}g  | j dd  D ]}|||d\}}||7 } | qdtdtf fdd	}||fS )
Nc                 S   s   | S Nr   )dYr   r   r   <lambda>"   s    zforward.<locals>.<lambda>r   )r'   r   r)   r   c                    s"   | } D ]}||| 7 }q|S r(   r   )r)   dXcallback	callbacksfirst_callbackr   r   backprop*   s   zforward.<locals>.backprop)r   appendr   r   )r%   r&   r'   Ylayerlayer_Ylayer_callbackr0   r   r-   r   r$       s   r$   Nr2   c                 C   s   |d ur(|  ddur| dt| | jD ]}| ddur'|dt| q|d urP|  ddur;| dt| | jD ]}| ddurO|dt| q>| jD ]	}|j||d qS| d| jd d d S )Nr   Fr   )r&   r2   r   )r   set_dimr   r   
initializeget_dim)r%   r&   r2   r3   r   r   r   r   3   s"   


r   )NN)typingr   r   r   r   r   r   configr	   r%   r
   typesr   r   utilr   r   r   r   r   boolr$   r   r   r   r   r   <module>   s8     


*
