
    hD              
          S SK JrJrJrJr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  SSKJrJrJr  SSKJr  SS	KJr  \" 5       r\" S
\S9r\" S\	\\\   \4   S9r\R6                  " S5      S\S\\\4   4S j5       rS\\\4   S\S\S\\\4   4S jrS\\\4   S\S\S\\\4   4S jrS\\\4   S\S\S\\\4   4S j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ListOptionalSequenceTupleTypeVarUnioncast   )NumpyOps)registry)Model)Array2dRagged
XY_XY_OutT)	get_width   )noopInT)boundOutTzconcatenate.v1layersreturnc                     U (       d%  [        [        [        [        4   [	        5       5      $ [        U 5      S:X  a  U S   $ U S   R                  [        L 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R                  S U  5       5      [        [        UU S	9$ )
zCompose two or more models `f`, `g`, etc, such that their outputs are
concatenated, i.e. `concatenate(f, g)(x)` computes `hstack(f(x), g(x))`.
Also supports chaining more than 2 layers.
r   r   NnOc              3   H   #    U  H  oR                  S 5      S;   v   M     g7f)nI)TNN)has_dim).0nodes     R/home/james-whalen/.local/lib/python3.13/site-packages/thinc/layers/concatenate.py	<genexpr>concatenate.<locals>.<genexpr>,   s     
A&$<<-&s    ")r   r   |c              3   8   #    U  H  oR                   v   M     g 7f)N)namer!   layers     r#   r$   r%   0   s     0s   )initdimsr   )r   r   r   r   r   len_funcforwardr   extendalljoinr+   )r   r,   s     r#   concatenater3      s     E#z/*DF33	V	ay	G	#q	qr
+ay '+D\D

A&
AAA$'000     modelXis_trainc           
         [        U R                   Vs/ s H  o3" XS9PM
     sn6 u  pE[        US   [        5      (       a!  [	        XXEU5      u  pg[        [        U5      U4$ [        US   [        5      (       a!  [        XXEU5      u  p[        [        U5      U4$ [        XXEU5      u  p[        [        U	5      U4$ s  snf )N)r7   r   )
zipr   
isinstancelist_list_forwardr   r   r   _ragged_forward_array_forward)
r5   r6   r7   r*   Ys	callbacksdata_lbackpropdata_rdata_as
             r#   r/   r/   8   s    5<<P<%%5<PQMB"Q%(2(KD&!8++	BqE6	"	"*5RHMD&!8++)%B8LD&!8++ Qs   B<r?   c                    ^ ^^ U Vs/ s H  oUR                   S   PM     snmT R                  R                  R                  U5      nS[        S[
        4UU U4S jjnXg4$ s  snf )Nr   d_outputr   c                 >  > T
R                   R                  U S S 2S TS   24   5      nT	S   " U5      nTS   n[        US5      =(       d    [        US5      n[        US5      =(       a3    [        UR                  S5      =(       d    [        UR                  S5      n[	        T	SS  TSS  5       Hi  u  pgT
R                   R                  U S S 2X3U-   24   5      nU" U5      nU(       a  X(-  nO&U(       a  U=R                  UR                  -  sl        X7-  nMk     U$ )Nr   __add____iadd__datar   )ops	as_contighasattrrJ   r9   )rF   dYdXstartadd_gradientsadd_gradients_databwdwidthgradientr@   r5   widthss            r#   rB    _array_forward.<locals>.backpropK   s   YY  ![vay[.!9:q\"q	I.I'"j2I$R0 
BGGY'G7277J+G 	 imVABZ8JC$$Xa1F.F%GHB2wH#8==(NE 9 	r4   )shaperK   xphstackr   r   )	r5   r6   r?   r@   r7   YoutputrB   rV   s	   `  `    @r#   r>   r>   E   s_     #%%"Qggaj"%FYY\\  $F7 s  $ + &s   A!c                 L  ^ ^^	 U Vs/ s H  oUR                   R                  S   PM     snm	[        T R                  R                  R                  U Vs/ s H  ofR                  PM     sn5      US   R                  5      nS[        S[        4UU U	4S jjnXx4$ s  snf s  snf )Nr   r   rF   r   c           
      |  > U R                   n[        TR                  R                  US S 2S T	S   24   5      U R                  5      nTS   " U5      nT	S   n[        TSS  T	SS  5       HM  u  pV[        TR                  R                  US S 2XDU-   24   5      U R                  5      nX5" U5      -  nXF-  nMO     U$ )Nr   r   )rJ   r   rK   rL   lengthsr9   )
rF   d_arrayrN   rO   rP   rS   rT   r@   r5   rV   s
          r#   rB   !_ragged_forward.<locals>.backpropg   s    --EII'';VAY;(?@(BRBRSq\"q	imVABZ8JC		##GAuu}/D,D$EFHXHXB #b'MBNE 9 	r4   )	dataXdrX   r   rK   rY   rZ   rJ   r_   r   )
r5   r6   r?   r@   r7   r[   yr\   rB   rV   s
   `  `     @r#   r=   r=   `   s     *,,AhhnnQ,FEIILL''(<A(<=r!u}}MF6 c   ! -(<s   "BB!c                   ^ ^^	^
 S[         [           S[        4UU	U U
4S jjn[        R	                  U Vs/ s H  n[        U5      PM     sn5      m	U Vs/ s H'  nT R                  R                  R                  USS9PM)     nnU Vs/ s H  owR                  S   PM     snm
T R                  R                  R                  U5      nT R                  R                  UT	5      U4$ s  snf s  snf s  snf )NrF   r   c                   > T	R                   R                  R                  U SS9nT	R                   R                  US S 2S T
S   24   5      nT	R                   R	                  UT5      nTS   " U5      nT
S   n[        TSS  T
SS  5       HU  u  pVT	R                   R                  US S 2XDU-   24   5      nT	R                   R	                  UT5      nX5" U5      -  nXF-  nMW     U$ )Nr   axisr   )rK   rY   r3   rL   	unflattenr9   )rF   d_out_arrayrN   rO   rP   rS   rT   r@   r_   r5   rV   s          r#   rB   _list_forward.<locals>.backpropz   s    iill..xa.@YY  Q&)^!<=YY  W-q\"q	imVABZ8JC$$[EEM4I1I%JKB$$R1B#b'MBNE	 9
 	r4   r   rf   r   )r   r   r   	NUMPY_OPS	asarray1ir-   rK   rY   r3   rX   rZ   rh   )r5   r6   r?   r@   r7   rB   xr[   	out_arrayr_   rV   s   `  `     @@r#   r<   r<   w   s    8G,    !!1"51a3q61"56G79	:r!%)),,
"
"11
"
-rB	:"$%"Qggaj"%F		##B'I99y'2H<<	 #6	:%s   C(.C-
C2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 R                   H  nUR	                  XS9  M     [        U R                   Vs/ s H  o3R                  S5      PM     sn5      (       a-  U R                  S[        S U R                   5       5      5        g g s  snf )Nr   F)r6   r[   r   c              3   B   #    U  H  oR                  S 5      v   M     g7f)r   N)get_dimr)   s     r#   r$   init.<locals>.<genexpr>   s     Nd 3 3s   )r    set_dimr   r   
initializer1   sum)r5   r6   r[   r*   s       r#   r+   r+      s     	}==e+MM$	!-\\E}}T"%/dIaL1 " 1" 
U\\:\EMM$\:;;dCNNNO <:s   ,D )NN)#typingr   r   r   r   r   r   r	   r
   r   r   backendsr   configr   r5   r   typesr   r   r   utilr   r   rk   r   r   r   r3   boolr/   r>   r=   r<   r+    r4   r#   <module>r}      s         / /  J	 e3vU7HW,=v#EFG 
!" 5j#9  #6
,5d# 
, 
,t 
,dHn@U 
,d$(?C
7H6d$(?C
68.=d=$(=?C=
8Gh&'=2 KOPdP (P9A$P	Pr4   