o
    i8                     @   s  d dl Z d dlmZmZ d dl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 d d	lmZ d d
lmZ d dlm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e j !dedefedefgdd  Z"d!d" Z#d#d$ Z$d%d& Z%d'd( Z&dS ))    N)Adamfix_random_seed)registry)NORM)Language)DependencyParserEntityRecognizer)DEFAULT_PARSER_MODEL)DEFAULT_NER_MODEL)Doc)Example)Vocabc                   C   s   t tdd idS )Nc                 S   s   | S N )sr   r   U/home/ubuntu/.local/lib/python3.10/site-packages/spacy/tests/parser/test_add_label.py<lambda>   s    zvocab.<locals>.<lambda>)lex_attr_getters)r   r   r   r   r   r   vocab   s   r   c                 C   s(   dt i}tj|ddd }t| |}|S )NmodelTvalidate)r	   r   resolver   )r   cfgr   parserr   r   r   r      s   
r   c                 C   s   d S r   r   r   r   r   r   test_init_parser   s   r   c                    s   t d  d   fdd td}tdD ]%}i }t jg dd}g d	g d
d}t||} j	|g||d q S )N   leftc                      
   t  gS r   )_parser_exampler   r   r   r   r   #      
 z_train_parser.<locals>.<lambda>MbP?   abcdwordsr   r      r,   )r   ROOTr   r-   headsdepssgdlosses)
r   	add_label
initializer   ranger   r   r   	from_dictupdate)r   r2   ir3   docgoldexampler   r   r   _train_parser    s   
r=   c                 C   s0   t | jg dd}g dg dd}t||S )Nr$   r)   r+   )rightr-   r   r-   r.   r   r   r   r7   )r   r:   r;   r   r   r   r    /   s   r    c                 C   s*   t | jg dd}dddgi}t||S )N)JoelovesvisitingLondonduringtheweekendr)   entities)r   r,   PERSON)      LOCr?   )nerr:   r;   r   r   r   _ner_example5   s   rM   c                 C   s   t | } | d td}tdD ]}i }| jt| g||d qt| jg dd}| |}|d jdks7J |d jd	ks@J d S )
Nr>   r"   d   r1   r$   r)   r      r   )	r=   r4   r   r6   r8   r    r   r   dep_)r   r2   r9   r3   r:   r   r   r   test_add_label>   s   
rQ   c                     s   dt i} tj| ddd }tt |  d  d  d   fdd tt |}|jjd	 |j j	j
 |    j	j
|j	j
ksNJ t j	j
D ]} j	||j	|ksdJ qTd S )
Nr   Tr   CBAc                      r   r   )rM   r   ner1r   r   r   R   r!   z7test_add_label_deserializes_correctly.<locals>.<lambda>resize_output)r
   r   r   r   r   r4   r5   r   attrsmovesn_moves
from_bytesto_bytesr6   get_class_name)r   r   ner2r9   r   rU   r   %test_add_label_deserializes_correctlyK   s   


r_   zpipe_cls,n_moves,model_configr#      c                 C   sv   g d}t jd|iddd }| t |}|D ]}|| qt|jt|| ks,J tt|j}||ks9J dS )zTest that added labels are returned correctly. This test was added to
    test for a bug in DependencyParser.labels that'd cause it to fail when
    splitting the move names.
    rT   rS   rR   r   Tr   N)	r   r   r   r4   len
move_namessortedlistlabels)pipe_clsrZ   model_configrf   r   pipelabelpipe_labelsr   r   r   test_add_label_get_label]   s   rl   c                  C   sx   t  } | d}dD ]}|| q
|   t| jddgddgd}|| dd	 |D d
dgks3J d
|jv s:J d S )NrL   ra   helloworldB-DOr*   entsc                 S   s   g | ]}|j qS r   )	ent_type_).0tr   r   r   
<listcomp>{   s    z?test_ner_labels_added_implicitly_on_predict.<locals>.<listcomp>D )r   add_piper4   r5   r   r   rf   nlprL   rj   r:   r   r   r   +test_ner_labels_added_implicitly_on_predicts   s   
r|   c                  C   sf   t  } | d}dD ]}|| q
|   t| jddgddgd}|j|gdd	 d
|jv s1J d S )Nbeam_nerra   rm   rn   ro   rp   rq       )
beam_widthrw   )r   ry   r4   r5   r   r   
beam_parserf   rz   r   r   r   .test_ner_labels_added_implicitly_on_beam_parse   s   
r   c                  C   sb   t  } | d}dD ]}|| q
|   t| jddgddgd}||g d|jv s/J d S )	Nr}   ra   rm   rn   ro   rp   rq   rw   )r   ry   r4   r5   r   r   greedy_parserf   rz   r   r   r   0test_ner_labels_added_implicitly_on_greedy_parse   s   
r   c                  C   s   t  } | d}dD ]}|| q
|   t| jddgddgd}t| |j|}d|j	vs2J | 
|g d|j	v s?J d S )	NrL   ra   rm   rn   ro   rp   rq   rw   )r   ry   r4   r5   r   r   r   make_doctextrf   r8   )r{   rL   rj   r:   r<   r   r   r   *test_ner_labels_added_implicitly_on_update   s   
r   )'pytest	thinc.apir   r   spacyr   spacy.attrsr   spacy.languager   spacy.pipeliner   r   spacy.pipeline.dep_parserr	   spacy.pipeline.nerr
   spacy.tokensr   spacy.trainingr   spacy.vocabr   fixturer   r   r   r=   r    rM   rQ   r_   markparametrizerl   r|   r   r   r   r   r   r   r   <module>   s@    

	
