
    i                     V   d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	 d dl
mZ  ej                  ddg      d        Z ej                  g d      d	        Zd
 Zej                   j#                  d e        e       g      ej                   j#                  dg d      d               Zej                   j#                  d e        e       g      d        Zej                   j#                  d e        e       g      ej                   j#                  ddddddgfddddddgfddddg dfddddg dfdddddgfddddg dfddddg dfddddg dfg      d               Zd Zej                   j,                  d        Zd  Zej                   j3                  e d!"      d#        Zy)$    N)LSTMNumpyOpsOpsPyTorchLSTMfix_random_seedwith_padded)	has_torch      )paramsc                     | j                   S Nparamrequests    m/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/thinc/tests/layers/test_lstm.pynIr   
       ==    )r
         	   c                     | j                   S r   r   r   s    r   nOr      r   r   c                  B   t               } t        j                  d      t        j                  d      t        j                  d      g}| j                  |      }|j                  }|j
                  }|j                  dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d   dk(  sJ |d	   dk(  sJ |d
   dk(  sJ |d   dk(  sJ |d   dk(  sJ | j                  |      }|d   j                  dk(  sJ |d   j                  dk(  sJ |d   j                  dk(  sJ y )N)      )   r   )r   r   )r      r   r   r    r
   r   r   r   r   r   )r   numpyzeroslist2paddeddata	size_at_tshapepadded2list)opsseqspaddedarrr%   unpaddeds         r   test_list2paddedr-      sJ   
*CKKV!4ekk&6IJD__T"F
++C  I99	!!!Q<1Q<1Q<1Q<1Q<1Q<1Q<1Q<1v&HA;&&&A;&&&A;&&&r   r(   znO,nI))r
   r   )r   r   )d      )r   r   c                 
   t        t        ||d            j                         }|j                         D ]/  }| |_        |j                  d      J |j                  d      /J  |j                         D ]  }|j                  d      r>|j                  d      }|j                  |dz  |z  |dz  z   |dz  |z  |dz  z   z   fk(  sJ |j                  d      sd|j                  d      }|j                  ddd|fk(  rJ  y )Nr
   depthr   HC0r   r   )r   r   
initializewalkr(   	has_param	get_paramr&   )r(   r   r   modelnoder   s         r   test_LSTM_init_with_sizesr:   )   s    R1-.99;E

 1	~~f%111~~e$000	1
 

 	1>>&!^^F+F<<q&2+26*b1frkBF.BC$    >>% ^^E*F<<Aq!R=000	1r   c                    d}d}t        j                  ddgddgddggd      }t        t        ||            j	                  |g      }|j                         D ]	  }| |_          ||gd	
      \  }} ||      }t        j                  |      j                  t        j                  |g      j                  k(  sJ y )Nr
   r   皙?g      ?fdtypeXTis_train)	r!   asarrayr   r   r4   r5   r(   vstackr&   )	r(   r   r   rB   r8   r9   ysbackprop_ysdXss	            r   test_LSTM_fwd_bwd_shapes_simplerJ   >   s    	
B	
BSzD$<#s<CHAR%00A307E

 QC$/OB
b/C<<""ellA3&7&=&====r   znO,nI,depth,bi,lengthsF       r    r   T)r   r   r   )r   r   r      )r   r
   
   r   )r    r    r   )r   r   r   c                    |D cg c]  }t        j                  ||fd       }}t        t        ||||            j	                  |      }|j                         D ]	  }	| |	_          ||d      \  }
} ||
      }t        j                  |      j                  t        j                  |      j                  k(  sJ y c c}w )Nr>   r?   )r2   birA   TrC   )	r!   onesr   r   r4   r5   r(   rF   r&   )r(   r   r   r2   rP   lengthslengthXsr8   r9   rG   rH   rI   s                r   test_BiLSTM_fwd_bwd_shapesrU   K   s     =D	D&%**fb\
-	DB	DR5R89DDrDJE

 B.OB
b/C<<""ell2&6&<&<<<< 
Es    Cc                     t        d       d} d}d }t        t        | |            }ddgddgddgg}ddgddgddgg}|D cg c].  }|j                  j	                  |d	      j                  d
      0 }}|D cg c].  }|j                  j	                  |d	      j                  d
      0 }}|j                  ||      }|j                  |      \  }}	t        t        ||      D 
cg c]  \  }
}|
|z
  dz  j                          c}}
      }|j                  |      \  }}	t        ||      D 
cg c]
  \  }
}|
|z
   }}
} |	|      }|j                  |       |j                  |      \  }}	t        ||      D 
cg c]
  \  }
}|
|z
   }}
} |	|      }t        t        ||      D 
cg c]  \  }
}|
|z
  dz  j                          c}}
      }||kD  s	J ||f       y c c}w c c}w c c}}
w c c}}
w c c}}
w c c}}
w )Nr   r   c                      |d|z  z  }||dz  fS )NgMbP?r    )keyweightsgradients      r   sgdztest_LSTM_learns.<locals>.sgdi   s     58##1$$r   r<   g?g333333?g?r>   r?   )r
   )r   r   r   r(   rE   reshaper4   begin_updatesumzipfinish_update)r   r   r\   r8   rB   YxyYhsbp_Yhsyhloss1dYhsrI   loss2s                  r   test_LSTM_learnsrl   c   s   A	
B	
B% R%E
sc3Z#s,A
sc3Z#s,ACDEa		1C		(	0	0	9EAECDEa		1C		(	0	0	9EAEQ"E$$Q'KCCQK@52q26a-$$&@AE$$Q'KC #C,ur1BF,D,
,C	$$Q'KC #C,ur1BF,D,
,CCQK@52q26a-$$&@AE5=(5%.(= 	FE A, -@s$   3G(;3G-* G2
5G8G>1 H
c                     d} d}d}d}d}t         j                  j                  dd||z        }t        j                  |d      }g }d}t	        t        | |            j                         }|j                  j                  ||      D ]  }	t        |	      }	|rZt        |	      }|	D 
cg c]C  }
t        j                  t         j                  j                  dd	t        |      |f      d
      E }}
nN|	D cg c]C  }t        j                  t         j                  j                  dd	t        |      |f      d
      E }}|j                  |        t        j                          }|D ]  }|j#                  t        |            \  }}! t        j                          }||z  }t%        d|||z
  |||z
  z  ||z
  |z  fz         y c c}
w c c}w )N   i     rN   )scalelocsizer
   Fg        r=   r>   r?   z>--- %i samples in %s seconds (%f samples/s, %.7f s/sample) ---)r!   randomnormalmaximumr   r   r4   r(   	minibatchlistmaxrE   uniformintappendtimeitdefault_timerr_   print)r   r   n_batch
batch_sizeseq_lenrR   batchesuniform_lengthsr8   batch_lengths_batchstartrT   rG   bp_ysend	n_sampless                     r   test_benchmark_LSTM_fwdr      s   	B	BGJGll!!:9M!NGmmGQ'GGOR%002E,,ZA ]+-(G
 '	  LL((cCL"3EFcE   -	  LL((cCL"3EFcE  	u#$   "E 1&&tBx0	E1 


 C*$I	HcEk9e#<sU{i>W
X	Y)s   (AG7AGc                  n    t        t        ddd            j                         } | j                          y )Nr   T)rP   )r   r   r4   r8   s    r   test_lstm_initr      s*    Qd+,779E	r   zneeds PyTorch)reasonc                  p    t        t        ddd            j                         } | j                  dk(  sJ y )Nr   r   r1   zwith_padded(noop))r   r   r4   namer   s    r   test_pytorch_lstm_initr      s1    Aq23>>@E::,,,,r   )r|   r!   pytest	thinc.apir   r   r   r   r   r   thinc.compatr	   fixturer   r   r-   markparametrizer:   rJ   rU   rl   skipr   r   skipifr   rX   r   r   <module>r      s      T T " 1v  |$ %'* 
 34"FG1 H 51& 
 34	> 5	> 
 34	
Aq%!	REAq6"	
Aq$	"	
Aq%#	
Aq$	RD-(	RD)$	RD)$	= 5=): & &R
 	M/:- ;-r   