o
    iw%                  
   @   s  d dl mZ d dlZd dlZd dlmZmZ d dl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mZ d dlmZmZmZmZmZmZ d d	lm Z  d d
l!m"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*ej+,dd ee( fd ee# fd ee$ fgdd Z-ej+,dd ee( e&fd ee# e&fd ee$ e&fgdd  Z.ej+,d!d d"ee( e&fd d"ee# e&fd d"ee$ e&fgd#d$ Z/ej+,d%e d&d'd(fgd)d* Z0d+d, Z1d-d. Z2d/d0 Z3d1d2 Z4d8d4d5Z5d6d7 Z6dS )9    )ListN)assert_array_almost_equalassert_array_equal)AdamLogisticRaggedReluchainfix_random_seedreduce_meanset_dropout_rate)English)	sentences)_get_span_indicesextract_spans)MaxoutWindowEncoderMultiHashEmbedbuild_bow_text_classifier build_simple_cnn_text_classifierbuild_spancat_modelbuild_Tok2Vec_model)StaticVectors)registryc                   C   s   dddddS )NT   F"   )exclusive_classes
ngram_sizeno_output_layernO r   r   r   K/home/ubuntu/.local/lib/python3.10/site-packages/spacy/tests/test_models.pyget_textcat_bow_kwargs    s
   r!   c                   C   s   t  dddS )NF   )tok2vecr   r   )make_test_tok2vecr   r   r   r    get_textcat_cnn_kwargs)      r%   c                 C   s@   g }|   D ]}|jD ]}|||  qq|jj|S N)walkparam_namesappend	get_paramravelopsxpconcatenate)modelparamsnodenamer   r   r    get_all_params-   s   
r4   c                  C   s    t  } t| tdtg S )N )r   listpipeEN_SENTENCESjoinnlpr   r   r    get_docs5   s   r<   c                    sp   t | jjjr! jj|j|jd}| jjjdd|j7 }|S t |t	r/ fdd|D S t
dt| )Ndtypeg      g      ?c                    s   g | ]}t  |qS r   )get_gradient).0yr0   r   r    
<listcomp>@       z get_gradient.<locals>.<listcomp>z Could not get gradient for type )
isinstancer-   r.   ndarrayallocshaper>   randomuniformr   
ValueErrortype)r0   YdYr   rB   r    r?   :   s   
r?   c                   C   s*   t dg dg dddtdddddd	S )
N      rQ   rQ   NORMPREFIXSHAPEFwidthrowsattrsinclude_static_vectors   r   )rW   depthmaxout_pieceswindow_size)embedencode)r   r   r   r   r   r    get_tok2vec_kwargsE   s   ra   c                   C   s   t di t S Nr   )r   ra   r   r   r   r    r$   T   s   r$   c                  C   s   t dg dg ddd} dd |  D }t|dksJ ttd	d
 |D g dks.J ttdd
 |D dks=J dd |D g dksJJ t dg dg ddd} dd |  D }dd |D g dkslJ d S )NrO   rP   rR   FrV   c                 S      g | ]	}|j d kr|qS 	hashembedr3   r@   r2   r   r   r    rC   _       z)test_multi_hash_embed.<locals>.<listcomp>   c                 s       | ]}|j d  V  qdS )columnNrY   r@   her   r   r    	<genexpr>b       z(test_multi_hash_embed.<locals>.<genexpr>)r   r   r[   c                 s   rj   )seedNrl   rm   r   r   r    ro   d   rp   c                 S      g | ]}| d qS nVget_dimrm   r   r   r    rC   f   rD   )i  2      c                 S   rc   rd   rf   rg   r   r   r    rC   n   rh   c                 S   rr   rs   ru   rm   r   r   r    rC   o   rD   )r   r(   lenr6   sortedset)r_   hash_embedsr   r   r    test_multi_hash_embedX   s&   "r}   zseed,model_func,kwargsc                 C   sj   t |  |di |}|  t |  |di |}|  t|}t|}t|j||j| d S rb   )r
   
initializer4   r   r-   to_numpy)rq   
model_funckwargsmodel1model2params1params2r   r   r    #test_models_initialize_consistentlyr   s   	r   zseed,model_func,kwargs,get_Xc              
   C   s  t |  |di | }|| }t |  |di | }|| }|drl|d| }|d| }	tt|D ](}
tt||
 D ]}tt	|j
||
 | t	|j
|	|
 |  qMqCz|j
|}|j
|}W n	 ty   Y nw t|tjrt|| d S t|trt|t|ksJ t||D ]!\}}z|j
|}|j
|}W n	 ty   Y nw t|| qd S tdt| )Nr#   zCould not compare type r   )r
   r~   predicthas_refget_refrangery   r   numpyasarrayr-   r   	ExceptionrE   rF   r   ziprK   rL   )rq   r   r   get_Xr   Y1r   Y2tok2vec1tok2vec2ijy1y2r   r   r     test_models_predict_consistently   sH   	

r   z$seed,dropout,model_func,kwargs,get_Xg?c                    sJ    fdd}| }| }t |jt||jt|dd d S )Nc                     s   t  td} di  }t|}t|  tdD ]}| \}}t||}|| ||  qt|}t	
t t|j||j| W d    |S 1 sYw   Y  |S )NgMbP?   r   )r
   r   r~   r4   r   r   begin_updater?   finish_updatepytestraisesAssertionErrorr   r-   r   )	optimizerr0   initial_params_rM   get_dXrN   updated_paramsdropoutr   r   r   rq   r   r    get_updated_model   s&   


z:test_models_update_consistently.<locals>.get_updated_modelr   )decimal)r   r-   r   r4   )rq   r   r   r   r   r   r   r   r   r   r    test_models_update_consistently   s   	
r   zmodel_func,kwargs   i,  )r   nMc                    s`   t   | di | }tdD ]} fddt|D }|| ||\}}|| qd S )Nri   c                    s   g | ]} d qS ) r   )r@   r   r:   r   r    rC      s    z#test_empty_docs.<locals>.<listcomp>r   )r   r~   r   r   r   )r   r   r0   n_docsdocsoutputbackpropr   r:   r    test_empty_docs   s   

r   c                   C   s   t    d S r'   )r   r~   r   r   r   r    test_init_extract_spans   r&   r   c                  C   s|   t   } t| jjddgddgddggdd| jjddgdd}| jjdd	gdd}t| j||}t|g d
ks<J d S )Nr   ri   r[   r      r   r=   r   
   )r   r   r[   r[   r      )r   r~   r   r-   r   r   r6   )r0   spans	x_lengthsindicesr   r   r    test_extract_spans_span_indices   s   
 r   c                  C   s   t   } t| jdd| jjddgdd}t| jjddgd	dgdd
ggdd| jjd	dgdd}| ||f\}}t|jg dksGJ |j	j
dksOJ ||\}}||u s[J |j	j
|j	j
kseJ t|jt|jksqJ d S )N      r   r   r   r=   r   ri   r[   r   r   )ri   r   r[   )   r   )r   r~   r   r-   alloc2fr   r   r6   lengthsdataXdrH   )r0   Xr   rM   r   dXspans2r   r   r    #test_extract_spans_forward_backward   s   
$ r   c                  C   s(   t tdi t t t } |   d S rb   )r   r   ra   r   r   r~   rB   r   r   r    test_spancat_model_init  s   r   r   c           
      C   s   t di t }t }g }g }|D ]}||d d  ||dd  |d qt|jjdd |D dd|jj|dd}t|t t	t
| dt j||fd	}|||fd
d\}}	|j|jjd | fkslJ |	| d S )Nr[   r   r   c                 S   s   g | ]}|j |jgqS r   )startend)r@   sr   r   r    rC     s    z7test_spancat_model_forward_backward.<locals>.<listcomp>r   r=   )r   )r   T)is_trainr   r   )r   ra   r<   r*   r   r-   r   r   r   r	   r   r   r~   rH   r   )
r   r#   r   
spans_listr   docr   r0   rM   r   r   r   r    #test_spancat_model_forward_backward  s(   r   c               	   C   sZ   t jd} t }tjtdd | |dddddd W d    d S 1 s&w   Y  d S )Nzspacy.TextCatReduce.v1z(must be used with at least one reduction)matchF)r#   r   use_reduce_firstuse_reduce_lastuse_reduce_maxuse_reduce_mean)r   architecturesgetr$   r   r   rK   )textcat_reducer#   r   r   r     test_textcat_reduce_invalid_args"  s   "r   )r   )7typingr   r   r   numpy.testingr   r   	thinc.apir   r   r   r   r	   r
   r   r   spacy.lang.enr   spacy.lang.en.examplesr   r8   spacy.ml.extract_spansr   r   spacy.ml.modelsr   r   r   r   r   r   spacy.ml.staticvectorsr   
spacy.utilr   r!   r%   r4   r<   r?   ra   r$   r}   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r    <module>   sf    ( 	




&


