o
    i&                  
   @   s  d dl mZmZ d dlZd dlZd dl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 d dlmZmZmZmZmZmZ d dlmZmZ e ZG d	d
 d
eZejjg dddZejjg dddZ ejjg dg dg dgddZ!ejjg dg dgddZ"ejj#dddZ$ee!ejjddgddZ%ee$ee&g de&g dZ'e!j(d Z)ej#e"* dfddZ+dd Z,g di e!e!fdddde!e!fdi e!e!fdi e!e!fdi e!e!fdi e!e!fd i e!e!fd d!d"d#e!e!fd ddde!e!fd$i e!e!fd$ddde!e!fd$d!d"d#e!e!fd%i e!e!fd%d!d"d#e!e!fd&i e!e!fd&ddde!e!fd'i e!e!fd'ddde!e!fd(i e!e!fd(ddde!e!fd)i e!e!fd)ddde!e!fd*i e!e!fd*ddde!e!fd+i e!e!fd+ddde!e!fd,i e!e!fd,ddde!e!fd-i e!e!fd-ddde!e!fd.i e!e!fd.ddde!e!fd/i e!e!fd0i e!e!fd1i e!e!fd1ddde!e!fd2i e!e!fd2ddde!e!fd3d4d5ie!e!ge!e!gfej-d6d5e)e)d7e!e!ge!e!gej.j/e d8d9d:Z0g e0ej-d6d!e)d e)d7e!e!ge!e!gej.j/e d8d9d:d3d4d!ie!e!ge!e!gfd;i e%e!fd<i e%e!fd=i e%e!fd>i e!e!fd>i e%e%fd?de1e"* d d d"d@e"e!fd?de1e * d dAe e!fdBde1e"* d d"d@e"e!fdBdddAe e!fdCdDdEie!e!fdFi e%e%fdGi e%e%fdGdHdId.iie%e%fdJi ejg ddKdeejddgddfe!fdLi ejg ddKdeejddgddfe!fdMdNdig dOe"fdPi ddQe2g dg dgj3e"fdRi ddQe2g dg dgj3e"fZ4ej.5dSe4dTdU Z6ej.5dSe0dVdW Z7ej.5dXe!e%e'e!e!ggdYdZ Z8ej.5dSe4d[d\ Z9d]e
eef d^ed_efd`daZ:d]e
ee ee f d^ee d_ee fdbdcZ;d]e
eef d^ed_efdddeZ<dS )f    )ListOptionalN)assert_almost_equal)DropoutModelNumpyOpsregistrywith_padded)r   )	has_torch)Array2dFloats2dFloatsXdPaddedRaggedShape)data_validation	get_widthc                   @   s&   e Zd Zdedee defddZdS )NoDropoutOpsshapedropreturnc                 C   s(   |d u s|dkr| j j|ddS td)Nr   fdtypez0During prediction, dropout should not be applied)xpones
ValueError)selfr   r    r   V/home/ubuntu/.local/lib/python3.10/site-packages/thinc/tests/layers/test_layers_api.pyget_dropout_mask   s   zNoDropoutOps.get_dropout_maskN)__name__
__module____qualname__r   r   floatr   r    r   r   r   r   r      s    r   )         r   r   i)   r&   r'   r)   )r%      r'   r%   )	      r*      )r)   r*      )r'   r'   r'   r&   r%   )r%   r&   r'   r)   c                 C   sX  t | t |ks
J t|tjjr$t| tjjsJ |j| jks"J d S t|trFt| ts0J |jj| jjks:J |jj| jjksDJ d S t|t	rt| t	sRJ |jj| jjks\J |j
j| j
jksfJ t|jt| jksrJ t|jt| jks~J d S t|ttfrt| ttfsJ tdd | D sJ d S tdt |  d|   d S )Nc                 s   s    | ]	}t |tjV  qd S )N)
isinstancenumpyndarray).0xr   r   r   	<genexpr>7   s    z$assert_data_match.<locals>.<genexpr>zwrong output of z: )typer/   OPSr   r1   ndimr   datalengthsr   	size_at_tlenindiceslisttupleallpytestfail)Yout_datar   r   r   assert_data_match&   s$   

rD   zDish.v1r)   )nOnIz
Dropout.v1zLayerNorm.v1z	Linear.v1zLogistic.v1z	Maxout.v1T皙?)	normalizedropoutzMish.v1zRelu.v1z
Sigmoid.v1zClippedLinear.v1zReluK.v1zHardSigmoid.v1zHardTanh.v1zHardSwish.v1zHardSwishMobilenet.v1zSwish.v1zGelu.v1zsigmoid_activation.v1zsoftmax_activation.v1z
Softmax.v1z
Softmax.v2zLSTM.v1biFzPyTorchLSTM.v1)rJ   rE   rF   zneeds PyTorch)reason)markszreduce_max.v1zreduce_mean.v1zreduce_sum.v1zexpand_window.v1zEmbed.v1)rE   nVcolumnrI   )rE   rM   zHashEmbed.v1zMultiSoftmax.v1nOs)r%   r'   zParametricAttention.v1zParametricAttention.v2key_transform@layerszSparseLinear.v1uint64zSparseLinear.v2zremap_ids.v1r   )ar%   g      @zremap_ids.v2)mapping_tablerN   zpremap_ids.v1zname,kwargs,in_data,out_datac                 C   s   d| i|}t d|i}t|sJ t d|id }d| v r%t|}d}t|@ ||| ||dd\}}	|drJt	||
dksJJ t|| |	|}
t|
| |t  || W d    d S 1 snw   Y  d S )NrQ   configLSTMTis_trainrE   )r   fillsrslyis_json_serializableresolver	   r   
initializehas_dimr   get_dimrD   _to_opsr   predict)namekwargsin_datarC   cfg
filled_cfgmodelvalidrB   backpropdXr   r   r   test_layers_from_config   s$   



"rk   c           	      C   sp   dd| i|d}t d|id }d| v rt|}||| ||dd\}}t|| ||}t|| d S )Nzresidual.v1rQ   )rQ   layerrU   rV   TrW   )r   r\   r	   r]   rD   )	rb   rc   rd   rC   re   rg   rB   ri   rj   r   r   r   test_layers_with_residual   s   
rm   r8   c                 C   sD   t d}|| |  || dd\}}t||  ||}t||  d S )NrG   FrW   )r   r]   rD   )r8   rg   rB   ri   rj   r   r   r   test_dropout   s   
rn   c                 C   s   d| i|}t d|id }d| v rd S d| v r%t|}t||| d S t|tjjrC|jdkrCt|tjjrC|jdkrCt	||| t|t
r\t|tjjr^|jdkr`t||| d S d S d S d S )NrQ   rU   expand_windowrV   r&   )r   r\   r	   util_batch_unbatch_listr/   r6   r   r1   r7   util_batch_unbatch_arrayr   util_batch_unbatch_ragged)rb   rc   rd   rC   re   rg   r   r   r   test_layers_batching_all   s   
rs   rg   rd   rC   c                    sz    fdd|D }t d&  ||  | } fdd|D }t||dd W d    d S 1 s6w   Y  d S )Nc                    s   g | ]
} j |d dqS )r%   )ops	reshape2f)r2   rS   rg   r   r   
<listcomp>       z,util_batch_unbatch_array.<locals>.<listcomp>Tc                    s   g | ]}  |d   qS r   )ra   tolistr2   urw   r   r   rx          r)   decimal)r   r]   ra   r{   r   )rg   rd   rC   	unbatched	Y_batchedY_not_batchedr   rw   r   rq      s   
"rq   c                    sd   t d$  ||  |} fdd|D }t||dd W d    d S 1 s+w   Y  d S )NTc                    s   g | ]
}  |gd  qS rz   ra   r|   rw   r   r   rx      ry   z+util_batch_unbatch_list.<locals>.<listcomp>r)   r   )r   r]   ra   r   rg   rd   rC   r   r   r   rw   r   rp      s   

"rp   c                    sn   t d)  |  } fddtt D }t||dd W d    d S 1 s0w   Y  d S )NTc                    s   g | ]}  | d  qS rz   r   )r2   r(   rd   rg   r   r   rx      r~   z-util_batch_unbatch_ragged.<locals>.<listcomp>r)   r   )r   r]   ra   ranger;   r   r   r   r   r   rr      s   

"rr   )=typingr   r   r0   r@   rZ   numpy.testingr   	thinc.apir   r   r   r   r	   thinc.backendsthinc.compatr
   thinc.typesr   r   r   r   r   r   
thinc.utilr   r   r6   r   r   asarrayarray1d
array1dintarray2d
array2dintzerosarray3dragged	asarray1ipaddedr   widthmaxvectorsrD   parammarkskipifTEST_CASES_SUMMABLEintarrayT
TEST_CASESparametrizerk   rm   rn   rs   rq   rp   rr   r   r   r   r   <module>   sn    "






	











 !
"
#
$%
&'*0+/	




 

,,$$$


	




