
    iD              
          d dl mZmZmZmZ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 ddlmZmZmZ ddlmZ dd	lmZ  e       Z ed
e      Z ede	eee   ef         Z ej6                  d      dedeeef   fd       Zdeeef   dededeeef   fdZdeeef   dededeeef   fdZdeeef   dededeeef   fdZ deeef   dededeee   ef   fdZ!	 ddeeef   dee   dee   ddfdZ"y)    )
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                  ~   | s%t        t        t        t        f   t	                     S t        |       dk(  r| d   S | d   j                  t        u r&| d   j                  j                  | dd        | d   S ddi}t        d | D              rddd}t        dj                  d | D              t        t        || 	      S )
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   B   K   | ]  }|j                  d       dv   yw)nI)TNN)has_dim).0nodes     i/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/layers/concatenate.py	<genexpr>zconcatenate.<locals>.<genexpr>,   s     
A$4<<-
As   )r   r   |c              3   4   K   | ]  }|j                     y w)N)namer!   layers     r#   r$   zconcatenate.<locals>.<genexpr>0   s     00s   )initdimsr   )r   r   r   r   r   len_funcforwardr   extendalljoinr*   )r   r+   s     r#   concatenater2      s     E#z/*DF33	V	ay	G	#q	qr
+ay '+D\D

A&
AA$'000     modelXis_trainc           	         t        | j                  D cg c]  } |||       c} \  }}t        |d   t              r$t	        | ||||      \  }}t        t        |      |fS t        |d   t              r$t        | ||||      \  }}t        t        |      |fS t        | ||||      \  }	}t        t        |	      |fS c c}w )N)r6   r   )
zipr   
isinstancelist_list_forwardr   r   r   _ragged_forward_array_forward)
r4   r5   r6   r)   Ys	callbacksdata_lbackpropdata_rdata_as
             r#   r.   r.   8   s    5<<P%%H5PQMB	"Q%(2y(KD&!8++	BqE6	"*5!RHMD&!8++)%B	8LD&!8++ Qs   B>r>   c                      |D cg c]  }|j                   d    c} j                  j                  j                  |      }dt        dt
        f fd}||fS c c}w )Nr   d_outputr   c                    
j                   j                  | d d d d   f         } 	d   |      }d   }t        |d      xs t        |d      }t        |d      xr. t        |j                  d      xs t        |j                  d      }t	        	dd  dd        D ]b  \  }}
j                   j                  | d d |||z   f         } ||      }|r||z  }n!|r|xj                  |j                  z  c_        ||z  }d |S )Nr   __add____iadd__datar   )ops	as_contighasattrrI   r8   )rE   dYdXstartadd_gradientsadd_gradients_databwdwidthgradientr?   r4   widthss            r#   rA   z _array_forward.<locals>.backpropK   s   YY  ![vay[.!9:Yq\"q	I.I'"j2I$R0 
BGGY'G7277J+G 	 imVABZ8 	JC$$Xa1F.F%GHB2wHh#8==(UNE	 	r3   )shaperJ   xphstackr   r   )	r4   r5   r>   r?   r6   YoutputrA   rU   s	   `  `    @r#   r=   r=   E   sZ     #%%Qaggaj%FYY\\  $F7 s $ 8+ &s   Ac                 B   	 |D cg c]  }|j                   j                  d    c}	t         j                  j                  j                  |D cg c]  }|j                   c}      |d   j                        }dt        dt        f 	fd}||fS c c}w c c}w )Nr   r   rE   r   c           
         | j                   }t        j                  j                  |d d d 	d   f         | j                        } d   |      }	d   }t        dd  	dd        D ]P  \  }}t        j                  j                  |d d |||z   f         | j                        }| ||      z  }||z  }R |S )Nr   r   )rI   r   rJ   rK   lengthsr8   )
rE   d_arrayrM   rN   rO   rR   rS   r?   r4   rU   s
          r#   rA   z!_ragged_forward.<locals>.backpropg   s    --EII'';VAY;(?@(BRBRSYq\"q	imVABZ8 	JC		##GAuuu}/D,D$EFHXHXB #b'MBUNE	 	r3   )	dataXdrV   r   rJ   rW   rX   rI   r]   r   )
r4   r5   r>   r?   r6   rY   yrZ   rA   rU   s
   `  `     @r#   r<   r<   `   s     *,,AahhnnQ,FEIILL''(<A(<=r!u}}MF6 c  8! -(<s    BBc                    	
 dt         t           dt        f	 
fd}t        j	                  |D cg c]  }t        |       c}      	|D cg c])  } j                  j                  j                  |d      + }}|D cg c]  }|j                  d    c}
 j                  j                  j                  |      } j                  j                  |	      |fS c c}w c c}w c c}w )NrE   r   c                    	j                   j                  j                  | d      }	j                   j                  |d d d 
d   f         }	j                   j	                  |      } d   |      }
d   }t        dd  
dd        D ]X  \  }}	j                   j                  |d d |||z   f         }	j                   j	                  |      }| ||      z  }||z  }Z |S )Nr   axisr   )rJ   rW   r2   rK   	unflattenr8   )rE   d_out_arrayrM   rN   rO   rR   rS   r?   r]   r4   rU   s          r#   rA   z_list_forward.<locals>.backpropz   s    iill..xa.@YY  Q&)^!<=YY  W-Yq\"q	imVABZ8 	JC$$[EEEM4I1I%JKB$$R1B#b'MBUNE		
 	r3   r   rc   r   )r   r   r   	NUMPY_OPS	asarray1ir,   rJ   rW   r2   rV   rX   re   )r4   r5   r>   r?   r6   rA   xrY   	out_arrayr]   rU   s   `  `     @@r#   r;   r;   w   s    8G,    !!1"5a3q6"56G79	:!%)),,
"
"11
"
-	:B	:"$%Qaggaj%F		##B'I99y'2H<<	 #6	:%s   C!.C&C+NrY   c                    |n| j                  d      dur| j                  dt        |             | j                  D ]1  }|j                  d      dus|j                  dt        |             3 | j                  D ]  }|j	                  ||        t        | j                  D cg c]  }|j                  d       c}      r-| j                  dt        d | j                  D                     y y c c}w )Nr   F)r5   rY   r   c              3   >   K   | ]  }|j                  d         yw)r   N)get_dimr(   s     r#   r$   zinit.<locals>.<genexpr>   s     Nd 3Ns   )r    set_dimr   r   
initializer0   sum)r4   r5   rY   r)   s       r#   r*   r*      s     	}==e+MM$	!-\\ 	2E}}T"%/dIaL1	2  #1"#
U\\:EEMM$:;dCNNNO <:s   (C5)NN)#typingr   r   r   r   r   r   r	   r
   r   r   backendsr   configr   r4   r   typesr   r   r   utilr   r   rg   r   r   r   r2   boolr.   r=   r<   r;   r*    r3   r#   <module>rx      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r3   