o
    i                     @   s  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	m
Z
mZmZmZ d dlmZmZ ejg dddd Zejd	d
gddd Zejg dddd Zejg dddd Zejdd Zejdd Zejdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Z d)d* Z!d+d, Z"d-d. Z#d/d0 Z$d1d2 Z%d3d4 Z&d5d6 Z'ej()d7e ed8d9gd:d; Z*d<d= Z+d>d? Z,d@dA Z-dBdC Z.dDdE Z/dFdG Z0dHdI Z1dJdK Z2dLdM Z3dNdO Z4dPdQ Z5dRdS Z6dTdU Z7dVdW Z8dS )X    N)assert_allclose)	DropoutLinearModelNumpyOpsaddcloneconcatenatemap_listnoop)chaintuplify)      	   )paramsc                 C      | j S Nparamrequest r   W/home/ubuntu/.local/lib/python3.10/site-packages/thinc/tests/layers/test_combinators.pynB      r   r      c                 C   r   r   r   r   r   r   r   nI   r   r   )r         c                 C   r   r   r   r   r   r   r   nH   r   r    )r   r      r   c                 C   r   r   r   r   r   r   r   nO"   r   r"   c                 C   
   t | |S r   r   )r    r   r   r   r   model1'      
r%   c                 C   r#   r   r$   )r"   r    r   r   r   model2,   r&   r'   c                 C   s
   t | | S r   r$   r"   r   r   r   model31   r&   r)   c                   C   6   t t t  W d    d S 1 sw   Y  d S r   pytestraises	TypeErrorr   r   r   r   r   test_tuplify_zero6      "r/   c                 C   8   t t t|  W d    d S 1 sw   Y  d S r   r+   r%   r   r   r   test_tuplify_one;      
"r3   c                 C       t | |}t|jdksJ d S Nr   r   lenlayersr%   r'   modelr   r   r   test_tuplify_two@      
r<   c                 C   sN   t dti | |@ }t|jdksJ W d    d S 1 s w   Y  d S )N&r   r   define_operatorsr   r8   r9   r:   r   r   r   test_tuplify_operator_twoE      "rA   c                  C   s8   t t t } tdg}| |}|||fksJ d S )N
   )r   r   numpyonespredict)r;   rE   outr   r   r   test_tuplify_dulicates_inputK   s   
rH   c                 C   s4   t |}t||}tjd| fdd}|j|d d S )Nr   floatdtypeX)r   r   rD   rE   
initialize)r   r"   linearr;   rE   r   r   r   test_tuplify_initializeR   s   
rP   c                 C   "   t | ||}t|jdksJ d S Nr   r7   r%   r'   r)   r;   r   r   r   test_tuplify_threeY      rT   c                 C   sj   t dti$ | |@ |@ }t|jdksJ t|jd jdks#J W d    d S 1 s.w   Y  d S )Nr>   r   r   r?   rS   r   r   r   test_tuplify_operator_three^   
   "rV   c                   C   r*   r   r,   r-   r.   r   r   r   r   r   test_chain_zerog   r0   rY   c                 C   r1   r   rX   r2   r   r   r   test_chain_onel   r4   rZ   c                 C   r5   r6   r   r8   r9   r:   r   r   r   test_chain_twoq   r=   r\   c                 C   sN   t dti | |? }t|jdksJ W d    d S 1 s w   Y  d S )N>>r   r   r@   r   r8   r9   r:   r   r   r   test_chain_operator_twov   rB   r_   c                 C   rQ   rR   r[   rS   r   r   r   test_chain_three|   rU   r`   c                 C   sj   t dti$ | |? |? }t|jdksJ t|jd jdks#J W d    d S 1 s.w   Y  d S )Nr]   r   r   r^   rS   r   r   r   test_chain_operator_three   rW   ra   c                 C   s<   t | |}t ||}t|jdksJ t|jdksJ d S r6   r[   )r%   r'   r)   merge1merge2r   r   r   test_chain_right_branch   s   

rd   opsT)use_blisc                 C   sB  t jg dgdd}ttdt td}| |_||| ||dd\}}|| ttdt tdd}||| ttdt td}|dd ||d  ttddt tdd}|dd |d | t	t
 tt  W d    n1 sw   Y  t	t
 t  W d    d S 1 sw   Y  d S )	Nr   r   r      frJ   r   Tis_trainr"   r   )rD   asarrayr   r   r   re   rN   set_dimr,   r-   r.   )re   datar;   Ybackpropr   r   r   
test_chain   s(   "rq   c                 C   s   t | }t|tsJ d S r   )r	   
isinstancer   )r%   r;   r   r   r   test_concatenate_one   s   rs   c                 C   r5   r6   r	   r8   r9   r:   r   r   r   test_concatenate_two   r=   ru   c                 C   sN   t dti | |B }t|jdksJ W d    d S 1 s w   Y  d S )N|r   r   r@   r	   r8   r9   r:   r   r   r   test_concatenate_operator_two   rB   rx   c                 C   rQ   rR   rt   rS   r   r   r   test_concatenate_three   rU   ry   c                 C   sR   t dti | |B |B }t|jdksJ W d    d S 1 s"w   Y  d S )Nrv   r   rw   rS   r   r   r   test_concatenate_operator_three   s   "rz   c                 C   s\   t | }t|d}tjd|fdd}|j|d ||}||}| | ks,J d S )NrC   ri   rJ   rL   )r   r   rD   rE   rN   rF   sum)r    r   r%   r;   rE   output_from_clonedoutput_from_origr   r   r   test_clone_changes_predictions   s   


r~   c                 C   sb   t t| d}t|jdksJ t }| D ]}|j|vs J ||j qt|dks/J d S )Nr   r   )r   r   r8   r9   setwalkidr   )r    r   r;   seen_idsnoder   r   r   test_clone_gives_distinct_ids   s   r   c                  C   s0   t t d} t| jdksJ | jdksJ d S Nr   r   )r   r   r8   r9   namer;   r   r   r   test_clone_noop   s   r   c                  C   s*   t  } t| jdksJ | jdksJ d S r   )r	   r8   r9   r   r   r   r   r   test_concatenate_noop   s   r   c                  C   sh   t jg ddd} tt t }|| |  || dd\}}t || s&J ||}t || s2J d S )Nr   r   r   ri   rJ   Trj   )rD   rl   r   r   rN   array_equalrn   r;   ro   rp   dXr   r   r   	test_noop   s   r   c                     s   t jg dgdd tt t } |    |  dd\}}t fdd| jD }t ||s3J ||}|j jks?J t| t }t	|jdksNJ |    |
 }t fd	d|jD }t ||smJ d S )
Nrg   ri   rJ   Trj   c                 3       | ]}|  V  qd S r   rF   .0layerrn   r   r   	<genexpr>       ztest_add.<locals>.<genexpr>r   c                 3   r   r   r   r   r   r   r   r      r   )rD   rl   r   r   rN   r{   r9   r   shaper8   rF   )r;   ro   rp   Y2r   r'   r   r   r   test_add   s   
r   c                  C   s   t jg dgdd} tt t  W d    n1 sw   Y  tt t }g |_|| dd\}}t | |s<J ||}t || sHJ d S )Nrg   ri   rJ   Trj   )	rD   rl   r,   r-   r.   r   r   _layersr   r   r   r   r   test_add_edge_cases  s   r   c                     s   t jg dg dgdd tt t } |    |  dd\}}|jd t fdd	| jD ks5J ||}|j jksAJ d S )
Nr   )rh   r   r   ri   rJ   Trj   r   c                    s   g | ]
}|  jd  qS )r   )rF   r   r   r   r   r   
<listcomp>  s    z$test_concatenate.<locals>.<listcomp>)rD   rl   r	   r   rN   r   r{   r9   )r;   ro   rp   r   r   r   r   test_concatenate  s   &r   c            
         s  d} d t jd| fddt jd| fddg} fdd|D }tt }|j|d	d |D d
 ||dd\}}t|ts?J t|t|ksIJ |j	d }t
||D ]\}}t||| qS||}	t|	tskJ t|	t|ksuJ |	d j|d jksJ |	d j|d jksJ d S )Nrh   r   r   ri   rJ   r   c                    s   g | ]	}|j d   fqS )r   )r   )r   xr(   r   r   r         z!test_map_list.<locals>.<listcomp>c                 S   s   g | ]	}t j|d dqS )ri   rJ   )rD   zeros)r   r   r   r   r   r     r   )rM   ro   Trj   r   r   )rD   r   rE   r
   r   rN   rr   listr8   r9   zipr   rF   r   )
r   XsY_shapesr;   Ysrp   r   rM   ro   dXsr   r(   r   test_map_list  s"   $

r   )9rD   r,   numpy.testingr   	thinc.apir   r   r   r   r   r   r	   r
   r   thinc.layersr   r   fixturer   r   r    r"   r%   r'   r)   r/   r3   r<   rA   rH   rP   rT   rV   rY   rZ   r\   r_   r`   ra   rd   markparametrizerq   rs   ru   rx   ry   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sd    ,






			




