
    i3                         d dl mZ d dl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 ddlmZmZmZmZmZ dd	lmZ d
dlmZ  e
j2                  d      	 	 d(dd
dddddee   dee   dedededee   dee   deeef   fd       Z e
j2                  d      dd
dddedededededeeef   fd       Z	 	 d(dedededee   dee   ddfd Zdeeef   d!ed"edeeef   fd#Z d$ed!edefd%Z!d$ed&ed!edefd'Z"y))    )partial)CallableOptionalTuplecast   )Ops)registry)glorot_uniform_init	zero_init)Model)Floats1dFloats2dFloats4dPaddedRagged)	get_width   )noopLSTM.v1NFg        )bidepthdropoutinit_Winit_bnOnIr   r   r   r   r   returnc                    |dk(  rd}t        |      |t        }|t        }t        dt        | ||dt        |      z   dd|dd d dt        t        ||      	      }|S )
Nr   z@LSTM depth must be at least 1. Maybe we should make this a noop?lstmr   )r   r   r   dirsr   )registry_namedropout_rate)LSTMHC0)dimsattrsparamsinit)
ValueErrorr   r   r   forwardintr   r)   )	r   r   r   r   r   r   r   msgmodels	            b/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/layers/lstm.pyr$   r$      su     zPo~$~#(b5!c"g+F )7CT*T66*$E L    zPyTorchLSTM.v1)r   r   r   c          	          dd l }ddlm} ddlm} |dk(  r
t	               S | }|r| dz  } ||j
                  j                  |||||            }	|	j                  d|        |	j                  d|        ||	      S )	Nr   r   )PyTorchRNNWrapper)with_paddedr   )bidirectionalr   r   r   )torch.nnpytorchwrapperr2   r3   r   nnr$   set_dim)
r   r   r   r   r   torchr2   r3   nHpytorch_rnns
             r/   PyTorchLSTMr<   +   s}     1(zv	B	1W#b"e2wGK b!b!{##r0   r.   XYc           
         ||j                  dt        |             ||j                  dt        |             t        |j                  d      |j                  d      z        }|j                  d      }|j                  d      }|j                  d      }g }	t	        | |j
                        } t	        ||j
                        }|}
t        |      D ]  }t        |      D ]  }|	j                   | ||
f             |	j                   | ||
f             |	j                   | ||
f             |	j                   | ||
f             |	j                   ||f             |	j                   ||f             |	j                   ||f             |	j                   ||f             |	j                   | ||f             |	j                   | ||f             |	j                   | ||f             |	j                   | ||f             |	j                   ||f             |	j                   ||f             |	j                   ||f             |	j                   ||f              ||z  }
 |j                  d|j
                  j                  j                  |	D cg c]  }|j                          c}             |j                  dt        |j
                  d|||f             |j                  d      j                  }d|z  |z  ||z   z  |d	|z  z  z   }t        d
|      D ]  }|d|z  |||z  z   z  |z  |d	|z  z  z   z  }! ||k(  s	J ||f       y c c}w )Nr   r   r!   r   r$   r%   r         r   )r8   r   r,   get_dimr   opsrangeappend	set_paramxpconcatenateravelr   	get_paramsize)r   r   r.   r=   r>   r:   r   r   r!   r(   layer_nIijprK   expected_s                    r/   r)   r)   A   s    	}dIaL)}dIaL)	U]]4 5==#88	9B	t	BMM'"E== D FVUYY'FVUYY'FH5\ t 	)AMM&"h01MM&"h01MM&"h01MM&"h01MM&"-(MM&"-(MM&"-(MM&"-(MM&"b*+MM&"b*+MM&"b*+MM&"b*+MM&"-(MM&"-(MM&"-(MM&"-(%	)& 9)* 
OOFEIILL445PAaggi5PQR	OOE9UYYE40DEF??6"''D4x"}R(41r6?:H1e_ GAHR$Y/"4tq2vFFG8-dH-- 6Qs   *M%Xpis_trainc           	           j                   d   }t         j                  |      }t        t         j                  d            t        t         j                  d            }|d   }|d   }|r~t        t         j                  j                  j                  |            z   j                  j                  ||t        t        |j                        |j                        \  }nK j                  j                  ||t        t        |j                        |j                        }t               |j                  |j                  j                  d   |j                  d   fk(  s'J |j                  j                  |j                  f       t         j                  t!        ||j                        |      }	dt"        dt"        f fd}
|	|
fS )	Nr#   r$   r%   r   r   dYpr   c                 B   sJ t        j                  |       }j                  j                  t        t        |j
                        |j                        \  }}|z  }j                  d|       t        j                  t        ||j                        |       S )Nr$   )
_padded_to_packedrC   backprop_lstmr   r   datalengthsinc_grad_packed_to_paddedr   )rU   dYrdXdLSTMr$   	fwd_statemaskr.   s       r/   backpropzforward.<locals>.backprop   s    y		3/II++388$ckk4
	E 	vu% F2s{{,CSIIr0   )r'   rW   rC   r   r   rJ   r   get_dropout_maskshapelstm_forward_trainingr   rY   rZ   lstm_forward_inferencetupler\   r   r   )r.   rR   rS   r   Xrr%   H0C0r>   Yprb   r$   r`   ra   s   `          @@@r/   r+   r+   v   s    kk.)G	599b	)B%//&12D
x/
0C	QB	QB Heii88WMNd{yy66"b$x12::
9 II,,"b$x12::
 G	77rww}}Q'44Nrww}}agg6NN4	599fQ

&;R	@BJf J J J x<r0   rC   c                 8   |j                   j                         |j                  j                         k(  s9J |j                   j                         |j                  j                         f       | j                  |j                   j                         |j                  j
                  d         }d}t        |j                  j
                  d         D ]/  }|j                  |   }|j                  |d|f   ||||z    ||z  }1 t        ||j                        S )z%Strip padding from a padded sequence.r   r   N)rZ   sum	size_at_talloc2frY   rd   rD   r   )rC   rR   r>   startt
batch_sizes         r/   rW   rW      s    ::>>r||//11 



4 1 	BJJNN$bggmmA&67AE2<<%%a() \\!_
(*;J;(?%%*$% !R\\""r0   rh   c                    | j                  |j                  j                  d   |j                  j                  d   |j                  j                  d         }t        t        |j                        }d}t        |j                  j                  d         D ]%  }|j                  |   }||||z    ||d |f<   ||z  }' t        ||j                  |j                  |j                        S )Nr   r   )rn   rZ   indices)
alloc3frY   rd   r   r   rD   rn   r   rZ   rt   )rC   rh   rR   r>   r=   rp   rq   rr   s           r/   r\   r\      s    BGGMM!$bggmmA&6a8HIAXrwwAE2<<%%a() \\!_
eej&89![j[. !r||RZZTTr0   )NN)#	functoolsr   typingr   r   r   r   backendsr	   configr
   initializersr   r   r.   r   typesr   r   r   r   r   utilr   r   layersr,   boolfloatr$   r<   r)   r+   rW   r\    r0   r/   <module>r      s    2 2   9  @ @    !%!% 		
   X X 66> : !"$)C$$$!$25$DI$
66>$ #$2 2.2.2. 2. 	2.
 2. 
2.j& &&,&8<&
68&R#3 #F #v #U3 UF U U6 Ur0   