o
    iZ                     @   s<  d dl Z d dlZd dlZd dlmZ d dl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 d dlmZ d d	lmZmZmZ d d
lmZ ejdd Zeddd Zeddd Zejddd Zejddd Z ejddd Z!ejddd Z"ejddd Z#d d! Z$d"d# Z%d$d% Z&ej'd&d'gd(d) Z(ej'd*d+gd,d- Z)d.d/ Z*ej'd&d0gd1d0 Z+ej'd2d3dd4d5 fgd6d3 Z,d7d8 Z-d9d: Z.ej'd;d<gd=d> Z/ej'd&d?gd@dA Z0ej'd&d?gdBdC Z1ej'd&d?gdDdE Z2ej'd&d?gdFdG Z3ej'd&d?gdHdI Z4dJdK Z5dLdM Z6ej'dNdOgdPdQ Z7ej'dRdSd5 dTdUigdVdW Z8ej'dRg dXdYdZ Z9d[d\ Z:d]d^ Z;d_d` Z<dadb Z=ej'dcg dddedf Z>ej'dcdgdhgdidj Z?dkdl Z@dmdn ZAejdodpdq ZBdrds ZCdS )t    N)get_current_ops)English)noun_chunksLanguage)TrainablePipe)Doc)Example)SimpleFrozenListget_arg_namesmake_tempdir)Vocabc                   C   s   t  S Nr    r   r   Z/home/ubuntu/.local/lib/python3.10/site-packages/spacy/tests/pipeline/test_pipe_methods.pynlp   s   r   new_pipec                 C      | S r   r   docr   r   r   r         
other_pipec                 C   r   r   r   r   r   r   r   r      r   i  c                  C   s`   dd } t  }t||  D ]\}}|dks|dks|dkr#t  |D ]}t|j q%qd S )Nc                  s   sj    t dD ]} dV  qt dD ]} dV  qt dD ]} dV  qt dD ]} dV  q#t dD ]} dV  q-d S )Ni'  z#It's sentence produced by that bug.zI erase some hbdsaj lemmas.zI erase lemmas.)range)_r   r   r   string_generator#   s   z(test_issue1506.<locals>.string_generatori'  i N  i0u  )r   	enumeratepipegccollectstrlemma_)r   r   idtr   r   r   test_issue1506!   s   r$   iv  c                  C   s   t t } | jr
J t ddd }| jddd | jdddd | jdddd | jg d	ks3J t t }|jr=J |jddd |jdddd
 |jdddd
 |jg d	ks]J d S )N	componentc                 S   r   r   r   r   r   r   r   r%   >   r   z!test_issue1654.<locals>.component1name2)r(   after3)r&   r)   r+   )r(   before)r   r   pipeliner%   add_pipe
pipe_names)r   r%   nlp2r   r   r   test_issue16549   s   




r1   i(  c                  C   sZ   g d} t  }|dd |dd |dd |  || D ]}q(dS )	zeTest that `nlp.pipe()` works when an empty string ends the batch.

    Fixed in v7.0.5 of Thinc.
    )helloworld r4   parserdepnerPERSONtaggerNNN)r   r.   	add_label
initializer   )textsr   r   r   r   r   test_issue3880N   s   r>   i  c                  C   s  t  } | j}tjg dtjd}tjg dtjd}tjg dtjd}tjg dtjd}tjg dtjd}|d| |d| |d	| |d
| d}dddiddigdg}| d}	|	| dd | |D }
t|
dksyJ t	 }tj
||
d | tj
||
d | tj
||
d | tj
||
d | | d dd | |D }t|dksJ tj
||d | tj
||d | tj
||d | d S )N)g?      ?g?)dtype)gɿg333333g)333333?ggffffff?)r?   r   rA   )g?gr?   IlikeDavidBowiezI like David Bowier8   LOWERdavidbowie)labelpatternentity_rulerc                 S      g | ]}|j qS r   vector.0r#   r   r   r   
<listcomp>r       z"test_issue5082.<locals>.<listcomp>   r            merge_entitiesc                 S   rL   r   rM   rO   r   r   r   rQ   z   rR   )r   vocabnumpyasarrayfloat32
set_vectorr.   add_patternslenr   testingassert_array_equalto_numpy)r   rX   array1array2array3array4array34textpatternsrulerparsed_vectors_1opsparsed_vectors_2r   r   r   test_issue5082^   s:   


rm   iR  c                  C   s^   g d} t | d}g d}g d}g d}t|| |||d}t|_t }|d}|| d S )N)Inanerawheremarketshavebrought
prosperityandempowerment.)strings)ROOTdetpobjadvmodnsubjauxrelcldobjccconjpunct)ADPDETNOUNADVr   AUXVERBr   CCONJr   PUNCT)r   rU   r   	      r   rU   r      r   r   )wordsposheadsdepsmerge_noun_chunks)r   r   r   noun_chunks_iteratorr   create_pipe)r   rX   r   r   r   en_docr   	merge_npsr   r   r   test_issue5458   s   

r   c                  C   s2   G dd dt } t }|d}|  }|| d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z,test_multiple_predictions.<locals>.DummyPipec                 S   s
   d| _ d S )Ndummy_model)model)selfr   r   r   __init__   s   
z5test_multiple_predictions.<locals>.DummyPipe.__init__c                 S   s   g dg dfS )N)rT   rU   rV   )rS      r   r   )r   docsr   r   r   predict   s   z4test_multiple_predictions.<locals>.DummyPipe.predictc                 S   s   |S r   r   )r   r   scoresr   r   r   set_annotations   s   z<test_multiple_predictions.<locals>.DummyPipe.set_annotationsN)__name__
__module____qualname__r   r   r   r   r   r   r   	DummyPipe   s    r   foo)r   r   make_doc)r   r   r   
dummy_piper   r   r   test_multiple_predictions   s
   

r   c                 C   s   |  d d| jv sJ d S )Nr   )r.   r/   r   r   r   r   test_add_pipe_no_name   s   
r   c                 C   sL   | j ddd tt | j ddd W d    d S 1 sw   Y  d S )Nr   duplicate_namer'   )r.   pytestraises
ValueErrorr   r   r   r   test_add_pipe_duplicate_name   s   "r   r(   r5   c                 C   s*   | j d|dd | jd d |ksJ d S )Nr   T)r(   firstr   )r.   r-   r   r(   r   r   r   test_add_pipe_first   s   r   zname1,name2)r5   lambda_pipec                 C   s`   t jddd d | jd|d | jd|dd | jd	 d	 |ks#J | jd
 d	 |ks.J d S )N	new_pipe2c                 S   r   r   r   r   r   r   r   <lambda>       z$test_add_pipe_last.<locals>.<lambda>funcr'   r   T)r(   lastr   )r   r%   r.   r-   )r   name1name2r   r   r   test_add_pipe_last   s
   r   c                 C   s@   t t | jdddd W d    d S 1 sw   Y  d S )Nr   T)r   r   r   r   r   r.   r   r   r   r   !test_cant_add_pipe_first_and_last   s   "r   test_get_pipec                 C   sX   t t | | W d    n1 sw   Y  | jd|d | |tks*J d S Nr   r'   )r   r   KeyErrorget_piper.   r   r   r   r   r   r      s
   z$name,replacement,invalid_replacementtest_replace_pipec                 C   r   r   r   r   r   r   r   r      r   r   c                 C   s   t t | |t W d    n1 sw   Y  | jd|d t t | || W d    n1 s8w   Y  | || | || |ksOJ d S r   )r   r   r   replace_piper   r.   r   r   )r   r(   replacementinvalid_replacementr   r   r   r      s   c                 C   sH   |  d |  d | jddgksJ | dd | jddgks"J d S )Nsentencizerr7   )r.   r/   r   r   r   r   r   test_replace_last_pipe   s
   

r   c                 C   sT   |  d |  d | djdu sJ | jddddid | djdu s(J d S )Nentity_linkerr   T
incl_priorF)config)r.   r   r   r   r   r   r   r   test_replace_pipe_config   s
   

r   zold_name,new_name)old_piper   c                 C   sj   t t | || W d    n1 sw   Y  | jd|d | || | jd d |ks3J d S )Nr   r'   r   )r   r   r   rename_piper.   r-   )r   old_namenew_namer   r   r   test_rename_pipe   s   r   my_componentc                 C   s   t t | | W d    n1 sw   Y  | jd|d t| jdks*J | |\}}t| jr8J ||ks>J |tksDJ d S )Nr   r'   rT   )r   r   r   remove_piper.   r^   r-   r   )r   r(   removed_nameremoved_componentr   r   r   test_remove_pipe   s   r   c                 C   sB   | j d|d | |sJ | j|d}| |rJ |  d S )Nr   r'   disabler.   has_pipeselect_pipesrestorer   r(   disabledr   r   r   test_disable_pipes_method   
   r   c                 C   sB   | j d|d | |sJ | jg d}| |rJ |  d S )Nr   r'   enabler   r   r   r   r   test_enable_pipes_method  r   r   c                 C   sh   | j d|d | |sJ | j|d | |rJ W d   n1 s&w   Y  | |s2J dS )zOTest that an enabled component stays enabled after running the context manager.r   r'   r   Nr.   r   r   r   r   r   r   test_disable_pipes_context  s   r   c                 C   s   | j d|d | |sJ | | | |rJ | j|d | |r(J W d   n1 s2w   Y  | |r>J dS )zPTest that a disabled component stays disabled after running the context manager.r   r'   r   N)r.   r   disable_piper   r   r   r   r   "test_disable_pipes_context_restore  s   
r   c                 C   sN  dD ]}| j d|d | |sJ q| jddgd | dr#J | dr*J | ds1J W d    n1 s;w   Y  | jdd | drNJ | drUJ | ds\J W d    n1 sfw   Y  | jddgdd	 | ds|J | dsJ | drJ W d    n1 sw   Y  | jg d | drJ | drJ | drJ W d    n1 sw   Y  | jg dg d	 | dsJ | dsJ | dsJ W d    n1 sw   Y  | jg dg d
! | drJ | drJ | drJ W d    d S 1 s w   Y  d S )Nc1c2c3r   r'   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   test_select_pipes_list_arg'  sB   $r   c                 C   s\  dD ]}| j d|d | |sJ qtt |   W d    n1 s'w   Y  tt | jddgdgd W d    n1 sFw   Y  tt | jddgg d W d    n1 sdw   Y  tt | jg dgd W d    n1 sw   Y  | jdgd}| d tt |  W d    d S 1 sw   Y  d S )	Nr   r   r'   r   r   r   r   r   )r.   r   r   r   r   r   r   r   r   r   r   r   test_select_pipes_errorsE  s(   


"r   n_pipesd   c                 C   sJ   t jddd d t|D ]}| jdd| d qt| j|ks#J d S )Nr   c                 S   r   r   r   r   r   r   r   r   ^  r   z(test_add_lots_of_pipes.<locals>.<lambda>r   pipe_r'   )r   r%   r   r.   r^   r/   )r   r   r!   r   r   r   test_add_lots_of_pipes\  s   r   r%   c                 C   r   r   r   r   r   r   r   r   d  r   r2   r3   c                 C   s:   t t | | W d    d S 1 sw   Y  d S r   r   )r   r%   r   r   r   !test_raise_for_invalid_componentsd  s   "r   )r7   r9   r5   textcatc                 C   sF   d}|  |}|| |dkr||jv sJ d S |j|fks!J d S )NTESTr9   )r   r;   labels)r   r%   rI   r   r   r   r   test_pipe_base_class_add_labelj  s   

r   c                 C   s   g dddgd}|  D ]#\}}| | | |}|D ]}|| qt|jt|ks0J qt| jt|ks<J | j  D ]\}}t|| t|ksQJ qAd S )N)r8   ORGGPEPOSITIVENEGATIVE)r7   r   )itemsr.   r   r;   r^   r   pipe_labelssorted)r   input_labelsr(   r   r   rI   r   r   r   test_pipe_labelsv  s   

r  c                  C   s  t  } | d tt | jddd W d   n1 sw   Y  | jddd | jddgks4J tt | jddd W d   n1 sKw   Y  tt | jddd W d   n1 sgw   Y  | jddd | jg d	ks|J | jd
dd | jg dksJ tt | jdddd W d   n1 sw   Y  tt | jdddd W d   n1 sw   Y  tt | jddd W d   n1 sw   Y  tt | jddd W d   dS 1 sw   Y  dS )z3Test that before/after works with strings and ints.r7   r   r5   )r,   NrV   )r*   r   )r   r5   r7   r9   rU   )r   r5   r9   r7   rK   rT   T)r*   r   )r,   r*   F)r   )r   r.   r   r   r   r/   r   r   r   r   test_add_pipe_before_after  s:   
"r  c                     s  d} i   fdd}t j|  d||  dd}t j|  d||  dd}t  }||  d ||  d  |  d dksFJ  |  d dksQJ |j|  d|f|  d|fgksdJ |j|  d|  dgkssJ ||  d |j|  dgksJ |j|  d|  dgksJ |j|  dgksJ |jd d	 |  dgksJ |d
  |  d dksJ  |  d d
ksJ |	|  d |jg ksJ |j|  d|  dgksJ |jd d	 g ksJ |d  |  d dksJ  |  d dksJ ||  d |
|  d |j|  d|fgks,J |j|  d|fgks:J |j|  dgksFJ |j|  dgksRJ |jg ksZJ |jd d	 g ksfJ ||  d|  |j| |fgkszJ |j| gksJ |d  |  d dksJ  |  d dksJ tt ||  d W d    n	1 sw   Y  ||  |j| gksJ |jg ksJ |jd d	 | gksJ |d  |  d dksJ d S )Ntest_disable_enable_pipesc                       d <  fdd}|S )Nr4   c                    s   | j  < | S r   rg   r   r(   resultsr   r   r%     s   
zDtest_disable_enable_pipes.<locals>.make_component.<locals>.componentr   r(   r%   r	  r'   r   make_component     z1test_disable_enable_pipes.<locals>.make_componentr&   r   r)   r4   r   r   r2   r3   !?)r   r%   r.   r-   r/   r   r   component_namesr   enable_piper   
componentsr   r   r   r   )r(   r  r   r   r   r   r  r   r    sd   
&
r  c                  C   s:  t  } | d}| jdgksJ | j| j| j| j| j| jfD ]}t|t	s'J t|t
s.J qtt | jd|f W d   n1 sGw   Y  tt | j  W d   n1 saw   Y  tt | j  W d   n1 s{w   Y  tt | j  W d   dS 1 sw   Y  dS )zTest that spaCy raises custom error messages if "frozen" properties are
    accessed. We still want to use a list here to not break backwards
    compatibility, but users should see an error if they're trying to append
    to nlp.pipeline etc.r7   ner2N)r   r.   r/   r-   r  r  r   factory_names
isinstancelistr
   r   r   NotImplementedErrorappendpopsortclear)r   r7   propr   r   r   test_pipe_methods_frozen  s0   
"r  r   )r9   r5   r7   r   morphologizerc                 C   sP   t  }|| } t| dd d usJ t| dd }|d usJ dt|v s&J d S N
label_datar<   r   r   r.   getattrr   r   r   r<   r   r   r   #test_pipe_label_data_exports_labels  s   
r$  senterr   c                 C   sP   t  }|| } t| dd d u sJ t| dd }|d ur$dt|vs&J d S d S r  r!  r#  r   r   r   test_pipe_label_data_no_labels
  s   
r&  c                  C   sV  t  } | d d| jd d vsJ ddgi| jd d d< | jd d d ddgiks/J | d d| jd d vs?J | d d| jd d vsOJ ddgi| jd d d< | dd d| jd d vslJ | jd d d ddgiks|J ddi| jd d d	< | jd
d	d d	| jd d v sJ | d	 d	| jd d vsJ dS )zDTest that the [initialize] config reflects the components correctly.r9   r<   r  r   r2   	my_taggerr   bartestr7   r'   N)r   r.   r   r   r   r   r   r   r   test_pipe_methods_initialize  s$   
 

 
r*  c            
         sv  d} i   fdd}t j|  d||  dd t j|  d||  dd t|  d|  dg}t }g d}g }|D ]}|t|||| q?g |  dg|  d|  dg|  d|  dgfD ]N} D ]}d |< qnt|jd	}||  d ||  d |j	||d
 |D ]}	 |	 d
dd |D ksJ q|t| D ]
}	 |	 dksJ qqjd S )Ntest_with_annotatesc                    r  )Nr4   c                    s      | j 7  < | S r   r  r   r  r   r   r%   1  s   zEtest_update_with_annotates.<locals>.make_component.<locals>.componentr   r
  r  r'   r   r  .  r  z2test_update_with_annotates.<locals>.make_componentr&   r   r)   )abbcccr4   )rX   )	annotatesc                 s   s    | ]}|j jV  qd S r   )	predictedrg   )rP   egr   r   r   	<genexpr>P  s    z-test_update_with_annotates.<locals>.<genexpr>)r   r%   setr   r  r	   r   rX   r.   updatejoin)
r(   r  r  r   r=   examplesrg   components_to_annotatekeyr%   r   r  r   test_update_with_annotates*  s8   


"r9  i,  c               	   C   s   t  } | d | d | d t W}| | tj|dgdddgiidjddgks0J tj|dgd tt	 tj|dgddddgiid W d   n1 sWw   Y  W d   dS W d   dS 1 sow   Y  dS )	zMTest conflict between enable/disable w.r.t. `nlp.disabled` set in the config.r9   r%  r   r   r   )r   r   r   N)
r   r.   r   to_diskspacyloadr   r   r   r   )r   tmp_dirr   r   r   (test_enable_disable_conflict_with_configU  s,   



	"r>  c               	      s  t  } dD ]}| | qt }| | ddg}ddgd}tj||d t fdd|D s4J tj|d t fdd jD sJJ tj||d	 | jvsXJ tj||d | jv sfJ | jvsmJ  j	|hksuJ  j
|gks}J tj|fd
d jD d t fdd jD sJ tt tj|dgd W d   n1 sw   Y  W d   dS W d   dS 1 sw   Y  dS )z1Tests spacy.load() with dis-/enabling components.)r   r9   r5   r5   r9   r   c                    s   g | ]}| j v qS r   r   rP   	comp_namer   r   r   rQ   }  s    z,test_load_disable_enable.<locals>.<listcomp>r   c                       g | ]}| j v |vu qS r   r?  r@  r   	to_enabler   r   rQ         )excludec                    s   g | ]}| vr|qS r   r   r@  )rD  r   r   rQ     s
    r   c                    rB  r   r?  r@  rC  r   r   rQ     rE  N)r   r.   r   r:  r;  r<  allr  r/   	_disabledr   r   r   r   )base_nlpr   r=  
to_disable
single_strr   rC  r   test_load_disable_enablen  sR   

	/"rL  )Dr   rY   r   	thinc.apir   r;  spacy.lang.enr   spacy.lang.en.syntax_iteratorsr   spacy.languager   spacy.pipeliner   spacy.tokensr   spacy.trainingr	   
spacy.utilr
   r   r   spacy.vocabr   fixturer   r%   r   r   markissuer$   r1   r>   rm   r   r   r   r   parametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r$  r&  r*  r9  r>  rL  r   r   r   r   <module>   s    











"










	



?

	
+
