
    h                     :   S SK JrJrJrJrJrJr  SSKJr  SSK	J
r
  SSKJrJr  SSKJr  \" S\S9r\" S	\S9r\R$                  " S
5      S\
\\4   S\
\\4   S\
S\
\\4   4S j5       rS\
\\4   S\S\S\\\4   4S jr SS\
\\4   S\\   S\\   SS4S jjrg)    )AnyCallableDictOptionalTupleTypeVar   )registry)Model)ArrayXd
XY_XY_OutT)	get_widthInT)boundOutTzadd.v1layer1layer2layersreturnc                     X4U-   nUS   R                   S:X  a&  US   R                  R                  USS 5        US   $ SS0n[        S U 5       5      (       a  SSS.n[	        S[
        [        X2S9$ )	zyCompose 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              3   H   #    U  H  oR                  S 5      S;   v   M     g7f)nI)TNN)has_dim).0nodes     J/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/add.py	<genexpr>add.<locals>.<genexpr>   s     
A&$<<-&s    ")r   r   )initdimsr   )namer   extendallr   forwardr"   )r   r   r   r#   s       r   r   r      s     &Fay~~q	qr
+ay '+D\D

A&
AAA$'dEE    modelXis_trainc                    ^^	 U R                   (       d  US 4$ U R                   S   " XS9u  nm	/ mU R                   SS   H   nU" XS9u  pVX5-  nTR                  U5        M"     S[        S[        4UU	4S jjnX74$ )Nc                     U $ N )dYs    r   <lambda>forward.<locals>.<lambda>"   s    Rr(   r   )r+   r   r0   r   c                 >   > T" U 5      nT H  nX" U 5      -  nM     U$ r.   r/   )r0   dXcallback	callbacksfirst_callbacks      r   backpropforward.<locals>.backprop*   s*    B!H(2,B "	r(   )r   appendr   r   )
r)   r*   r+   Ylayerlayer_Ylayer_callbackr8   r6   r7   s
           @@r   r'   r'       s    <<-Q=A~Iab!"'"=	( "
S T   ;r(   Nr;   c                 |   Ubs  U R                  S5      SLa  U R                  S[        U5      5        U R                   H4  nUR                  S5      SLd  M  UR                  S[        U5      5        M6     Ubs  U R                  S5      SLa  U R                  S[        U5      5        U R                   H4  nUR                  S5      SLd  M  UR                  S[        U5      5        M6     U R                   H  nUR	                  XS9  M     U R                  SU R                  S   R                  S5      5        g )Nr   Fr   )r*   r;   r   )r   set_dimr   r   
initializeget_dim)r)   r*   r;   r<   s       r   r"   r"   3   s     	}==e+MM$	!-\\E}}T"%/dIaL1 " 	}==e+MM$	!-\\E}}T"%/dIaL1 " 1" 	MM$Q//56r(   )NN)typingr   r   r   r   r   r   configr
   r)   r   typesr   r   utilr   r   r   r   r   boolr'   r"   r/   r(   r   <module>rH      s    @ @   ' e3vW% 
F#t)F&+CI&6FAFF
3
?F F&5d#  t dHn@U ( KO7d7 (79A$7	7r(   