
    hLd                        S SK r S SKrS SKJr  S SKJr  S SKJrJr  S SK	J
r
  S SKJrJrJr  S SKJr  S SKJr  S	S
KJr  SSKJr  \R.                  S 5       r\R.                  S 5       r\R4                  R7                  S5      S 5       r\R4                  R7                  S5      S 5       r\R4                  R7                  S5      S 5       r\R4                  R7                  S5      S 5       r\R4                  R7                  S5      S 5       r \R4                  RC                  SS/5      \R4                  R7                  S5      S 5       5       r"\R4                  RC                  SS/5      \R4                  R7                  S5      S 5       5       r#\R4                  RC                  S S!S"S#\ RH                  " / S$Q5      4/5      \R4                  R7                  S5      S% 5       5       r%\R4                  RC                  S&S S \&" S'5      S'4SS \&" S(5      S(4S	\&" S)5      \&" S)5      \&" S*5      -   S*4S+/5      S, 5       r'S- r(S. r)S/ r*S0 r+S1 r,S2 r-\R4                  RC                  S3/ S4Q5      S5 5       r.S6 r/S7 r0S8 r1S9 r2S: r3S; r4S< r5S= r6\R4                  Ro                  S>5      S? 5       r8S@ r9SA r:SB r;SC r<SD r=SE r>SF r?SG r@SH rASI rBSJ rC\R4                  RC                  SK/ SLQ5      SM 5       rDSN rESO rFSP rGSQ rHSR rIg)S    N)assert_array_equal)get_current_ops)LENGTHORTH)English)DocSpanToken)filter_spans)Vocab   )add_vecs_to_vocab   )clean_underscorec           
      2   Sn/ SQn/ SQn/ SQnU " U5      nU Vs/ s H  ofR                   PM     nnU Vs/ s H  n[        UR                  5      PM     nn[        UR                  U Vs/ s H  ofR                   PM     snUUUUUS9$ s  snf s  snf s  snf )N:This is a sentence. This is another sentence. And a third.)r   r      r   r      r      r   r      r   r   r   )nsubjROOTdetattrpunctr   r   r   r   r   r   r   npadvmodr   )Or   zB-ENTI-ENTr   r   r   r   r   r   r   r   r   r   )wordsspacesheadsdepsentslemmas)textboolwhitespace_r   vocab)	en_tokenizerr%   r!   r"   r#   tokenstr$   r    s	            S/home/james-whalen/.local/lib/python3.13/site-packages/spacy/tests/doc/test_span.pydocr-      s     HD:EAD%D $F$%ffffF%+126ad1==!6F2%&v!vvv&  &2 's   B
B+B
c                     SnU " U5      n[        UR                  U Vs/ s H  o3R                  PM     snS9nU$ s  snf )Nr   r   )r   r(   r%   r)   r%   r*   r+   r-   s        r,   doc_not_parsedr1   (   s<    GD$F
fll6":6a666":
;CJ #;s   ;
i  c                     Sn [        [        5       U R                  5       S9nSUS   l        USS  H2  nUR	                  S5      R
                  S:X  a	  SUl        M+  S	Ul        M4     [        UR                  5      nUS   R                  5       nUS   R                  5       n[        U[         5      (       d   e[        U[         5      (       d   eg)
z)Test that Span.as_doc() doesn't segfault.z7The sky is blue . The man is pink . The dog is purple .r/   Tr   r   N.F)
r   r   split
sent_startnborr%   listsentsas_doc
isinstance)stringr-   wordr9   sent0sent1s         r,   test_issue1537r@   0   s     GF
egV\\^
,CCFAB99R=$"DO#DO	 
 OE!HOOE!HOOEeS!!!!eS!!!!    iL  c                 V    U " S5      nUSS nUR                   UR                  :X  d   eg)z.Test that span.orth_ is identical to span.textzThe black cat purrs.r   r   N)orth_r%   r)   r-   spans      r,   test_issue1612rF   B   s0     -
.Cq8D::"""rA   i  c            	          / SQn [        [        5       U S/[        U 5      -  S/[        U 5      -  S9n[        R                  " [
        5         [        USS R                  5        SSS5        g! , (       d  f       g= f)zTest that Span.noun_chunks works correctly if no noun chunks iterator
is available. To make this test future-proof, we're constructing a Doc
with a new Vocab here and a parse tree to make sure the noun chunks run.
)Thisisasentencer   depr   r!   r"   r   N)r   r   lenpytestraisesNotImplementedErrorr8   noun_chunks)r   r-   s     r,   test_issue3199rS   J   s^     ,E
egU1#E
*:%3u:AU
VC	*	+S1X!!" 
,	+	+s   A//
A=i   c                     [        5       n U " S5      nU " S5      nU " S5      nUSS nUSS nUSS nUS   n[        R                  " [        5         UR	                  U5      S:X  d   e S S S 5        UR	                  U5      S:X  d   e[        R                  " [        5         UR	                  U5      S:  d   e S S S 5        g ! , (       d  f       Na= f! , (       d  f       g = f)NzTalk about being boring!zTalk of being boring!Letr   r                 ?)r   rO   warnsUserWarning
similarity)nlpr%   text_varyrE   span_2span_3tokens           r,   test_issue5152ra   V   s     )C)*D*+HE
A!9D!AYFa]FaDE	k	"u%,,, 
#??6"c)))	k	"  (3... 
#	" 
#	" 
#	"s   C#C
C
C$ic  c                 f    U " S5      nUS S nUR                   S:X  d   eUR                  S:X  d   eg )NzThis is a magnificent sentence.r    )text_with_wsr%   rD   s      r,   test_issue6755re   i   s<    
8
9Cr7D"""99??rA   z!sentence, start_idx,end_idx,label)Welcome to Mumbai, my friend      GPEi  c                 r    [        5       nU" U 5      nUS S  R                  XUS9nUR                  U:X  d   eg )Nlabel)r   	char_spanlabel_)rK   	start_idxend_idxrl   r[   r-   rE   s          r,   test_issue6815_1rq   q   s?     )C
h-Cq6Ie<D;;%rA   z!sentence, start_idx,end_idx,kb_id)rf   rg   rh      c                 r    [        5       nU" U 5      nUS S  R                  XUS9nUR                  U:X  d   eg )Nkb_id)r   rm   ru   )rK   ro   rp   ru   r[   r-   rE   s          r,   test_issue6815_2rv   }   s?    
 )C
h-Cq6Ie<D::rA   z"sentence, start_idx,end_idx,vectorrf   rg   rh   )g?g?g333333?c                     [        5       nU" U 5      nUS S  R                  XUS9nUR                  U:H  R                  5       (       d   eg )N)vector)r   rm   rx   all)rK   ro   rp   rx   r[   r-   rE   s          r,   test_issue6815_3rz      sK     )C
h-Cq6Iv>DKK6!&&((((rA   zi_sent,i,j,textz	This is azThis is anotherzAnd za third)r   r   r   Nc                     [        U R                  5      nXQ   R                  X#5      nU(       d
  U(       a   eg UR                  U:X  d   eg N)r8   r9   rm   r%   )r-   i_sentijr%   r9   rE   s          r,   test_char_spanr      sA     OE=""1(Dx4yyD   rA   c                 z   SnSnSnU R                  SSXUS9nU SS  R                  SS	XUS9nUR                  UR                  :X  d   eUR                  UR                  s=:X  a  U:X  d   e   eUR                  UR                  s=:X  a  U:X  d   e   eUR                  UR                  s=:X  a  U:X  d   e   eg )
NLABELKB_IDSPAN_ID   -   )rl   ru   span_idr      (   )rm   r%   rn   kb_id_id_)r-   rl   ru   r   span1span2s         r,   test_char_span_attributesr      s    EEGMM"bGMLEGb"EPE::###<<5<<0500000<<5<<050000099		,W,,,,,rA   c                     [        U R                  5      nUS   R                  S:X  d   eUS   R                  S:X  d   e[	        U5      S:X  d   e[        S U 5       5      [	        U 5      :X  d   eg )Nr   rr   r   c              3   8   #    U  H  n[        U5      v   M     g 7fr|   )rN   ).0sents     r,   	<genexpr>(test_spans_sent_spans.<locals>.<genexpr>   s     +UTs4yyUs   )r8   r9   startendrN   sumr-   r9   s     r,   test_spans_sent_spansr      sh    OE8>>Q8<<1u:??+U++s3x777rA   c                     U SS n[        U5      S:X  d   eUR                  S:X  d   eUR                  R                  S:X  d   eUR                  R                  R                  S:X  d   eg )Nr      z
a sentencerK   rI   )rN   r%   rootheadr-   rE   s     r,   test_spans_rootr      sa    q8Dt9>>99$$$99>>Z'''99>>$&&&rA   c                 T    U SS n[        U5      S:X  d   eUR                  S:X  d   eg )Nr   r   zThis is a sentence)rN   r%   r   s     r,   test_spans_string_fnr      s0    q8Dt9>>99,,,,rA   c                     Sn/ SQnS/[        U5      -  nU " U5      n[        UR                  U Vs/ s H  oUR                  PM     snX#S9nUSS  R                  R                  S:X  d   eg s  snf )Nz through North and South Carolina)r   r   r   r   r   rL   rM   Carolina)rN   r   r(   r%   r   )r)   r%   r!   r"   r*   r+   r-   s          r,   test_spans_root2r      sl    -DE7SZD$F
fll6":6a666":%
SCrs8==+++ #;s   A-
c                 .   [        [        U R                  5      5      (       d   eU SS R                  R                  R
                  S:X  d   eU SS R                  R
                  S:X  d   eU SS R                  R                  R                  R
                  S:X  d   eU S[        U 5       R                  [        U R                  5      S   :X  d   e[        U S[        U 5       R                  5      [        U R                  5      :X  d   e[        R                  " [        5         USS R                    SSS5        S	US   l
        S	US
   l
        USS R                  USS
 :X  d   eUSS R                  US
S :X  d   eg! , (       d  f       NS= f)zTest span.sent propertyNr   rI   zThis is a sentence.r      rH   r   Trr   r   r   
      )rN   r8   r9   r   r   r%   	left_edgerO   rP   
ValueErroris_sent_startr-   r1   s     r,   test_spans_span_sentr      sj   tCIIr7<<!!T)))r7<< 5555q8=='',,666q3s8!!T#))_Q%7777AC!''(DO;;;	z	"r 
# '+N1#&*N1#!A##~a'::::"R %%);;;; 
#	"s   )F
Fzstart,end,expected_sentence))r   r   This is)r   r   r   )r   r   r   )r   r   r   )r   r   zAnd a)r   r   zthird.)r   r   r   c                     S nX@R                   S'   XU R                  R                  U:X  d   eS U R                  S'   XU R                  XU :X  d   eg )Nc                 b    [        S[        U 5      S5       Vs/ s H	  oXS-    PM     sn$ s  snf Nr   r   rangerN   r-   iis     r,   	user_hook2test_spans_span_sent_user_hooks.<locals>.user_hook   0    +0CHa+@A+@RBa +@AAA   ,r9   c                     U $ r|    xs    r,   <lambda>1test_spans_span_sent_user_hooks.<locals>.<lambda>   s    ArA   r   )
user_hooksr   r%   user_span_hooks)r-   r   r   expected_sentencer   s        r,   test_spans_span_sent_user_hooksr      se    B (NN7 S>##'8888 #.CS>#C.000rA   c           	      j   U " S5      n[        UR                  U Vs/ s H  o"R                  PM     sn/ SQS/S-  S9nUSS R                  5       nUR                  S:X  d   eUS	   S
:X  d   eUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eUSS R                  5       nUR                  S:X  d   eUS	   S
:X  d   eUS   S:X  d   eUS   S:X  d   eUSS R                  5       nUR                  S:X  d   eUS	   S
:X  d   eUS   S:X  d   eUS   S:X  d   eUS   S:X  d   eU " S5      n[        UR                  U Vs/ s H  o"R                  PM     sn/ SQS/[        U5      -  S9nUSS R                  5       n[        U[        R                  " / SQ/ SQ/ SQ/5      5        gs  snf s  snf )z!Test span's lca matrix generationzthe lazy dog slept)r   r   r   r   rL   r   rM   Nr   )r   r   r   r   r   r   r   r3   )r   r   )r   r   r   )r   r   )r   r   zI like New York in Autumn)r   r   r   r   r   r   )r   r   r   )r   r   r   )r   r   r   )	r   r(   r%   get_lca_matrixshaperN   r   numpyasarray)r)   r*   r+   r-   lcas        r,   test_spans_lca_matrixr     s   ./F
%&v!vvv&Wq[	C bq'
 
 
"C99t9>>t9??t9??t9>>
ab'
 
 
"C99t9>>t9>>t9>>
ab'
 
 
"C99t9>>t9>>t9>>t9>> 56F
%&v!vvv& Ws6{"	C a(
!
!
#CsEMM9i*KLMC '8 's   F+
F0
c                  T   [        [        5       / SQS9n U S S nU SS  n[        R                  " [        5         UR                  U5      S:X  d   eUR                  U 5      S:X  d   eUS S R                  U R                  S   5      S:X  d   e S S S 5        g ! , (       d  f       g = f)N)rJ   brJ   r   r/   r   rW   rV   r   rJ   )r   r   rO   rX   rY   rZ   r(   r-   r   r   s      r,   test_span_similarity_matchr   *  s    
eg1
2CGEGE	k	"&#---$+++Ray##CIIcN3s::: 
#	"	"s   AB
B'c                    SnU " U5      nSUR                   US   R                     l        SUR                   US   R                     l        [        UR                   U Vs/ s H  o3R                  PM     snS9nUSS R                  S:X  d   eUS	S R                  S
:X  d   eUSS R                  S:X  d   egs  snf ):Test span.sentiment property's default averaging behaviourgood stuff bad stuff      @r          r   r/   Ng      ?r   g      r3   gUUUUUU?)r(   r%   	sentimentr   r0   s        r,   test_spans_default_sentimentr   4  s    !D$F-0FLL *-1FLL *
fll6":6a666":
;Cr7'''rs8)))s8!1111 #;s   !B;
c                    SnU " U5      nSUR                   US   R                     l        SUR                   US   R                     l        [        UR                   U Vs/ s H  o3R                  PM     snS9nS UR                  S'   US	S R                  S
:X  d   eUSS	 R                  S
:X  d   eUS	S R                  S
:X  d   eg	s  snf )r   r   r   r   r   r   r/   c                     g)N      $@r   )rE   s    r,   r   /test_spans_override_sentiment.<locals>.<lambda>G  s    DrA   r   Nr   r   r3   )r(   r%   r   r   r   r0   s        r,   test_spans_override_sentimentr   @  s    !D$F-0FLL *-1FLL *
fll6":6a666":
;C'8C$r7$$$rs8%%%s8%%%	 #;s   !C
c                     SnU " U5      nUSS nUSS n[        U5      [        U5      :w  d   eUSS n[        U5      [        U5      :X  d   eg)zTest spans can be hashed.r   Nr   r   r   )hash)r)   r%   r*   r   r   span3s         r,   test_spans_are_hashabler   M  s^    !D$F2AJE1QKE;$u+%%%1QKE;$u+%%%rA   c                 >   U SS nU R                  UR                  UR                  SS9nUR                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  S:X  d   eU R                  UR                  UR                  SSS9nUR                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  S:X  d   eU R                  UR                  S-
  UR                  SSS9nUR                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  S:X  d   eU R                  UR                  S-   UR                  SS	S9nUR                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  S:X  d   e[        R
                  " [        5         U R                  UR                  S-   UR                  SS
S9nS S S 5        U SS R                  UR                  S-
  UR                  SSS9nUR                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  S:X  d   eg ! , (       d  f       N= f)Nr   r   ri   rk   strict)rl   alignment_moder   contractexpandunkr   r   )rm   
start_charend_charrn   rO   rP   r   r   s      r,   test_spans_by_characterr   X  s{   "IE MM%**ENN%MHEu/////>>U^^+++<<5   MM%..h  E u/////>>U^^+++<<5    MM1ennE*  E u/////>>U^^+++<<5    MM1ennE(  E u/////>>U^^+++<<5    
z	"q %..e  
 
# !H1ennE*  E u/////>>U^^+++<<5    
#	"s   %*J
Jc                     U SS nUR                  [        [        /5      nUR                  [	        U5      S4:X  d   eUS   US   R
                  :X  d   eUS   [	        US   5      :X  d   eg )Nr   r   r   r   r   r   )to_arrayr   r   r   rN   orth)r-   rE   arrs      r,   test_span_to_arrayr     sm    q9D
--v
'C99TA&&&t9Q$$$t9DG$$$rA   c                    U SS nUR                  5       nUR                  UR                  R                  5       :X  d   e[        X R                  5      (       d   eX Ld   eUS   R
                  S:X  d   e[        UR                  5      S:X  d   eU SS R                  5       n[        UR                  5      S:X  d   eU SS R                  5       n[        UR                  5      S:X  d   eg )Nr   r   r   r   r   rr   )r:   r%   stripr;   	__class__idxrN   r#   )r-   rE   span_docs      r,   test_span_as_docr     s    q9D{{}H99++----h....A;??a x}}""" 1Ry!Hx}}""" 1Qx Hx}}"""rA   r   c                    SnSnX R                   U'   [        R                  " SSS9  SU S   R                  l        U SS	 nUR                  SS
9nUR                  5       nU R                   R                  US5      UL d   eUR                   R                  US5      UL d   eUR                   R                  US5      b   e[        [        U5      5       HE  nUS:w  a  XF   R                  R                  SL d   eM(  XF   R                  R                  SL a  ME   e   [        U Vs/ s H  owR                  R                  PM     sn5      (       a   egs  snf )z>Test that the user_data can be preserved (but not by default).my_infoiV  is_xF)defaultTr   r   r   )copy_user_dataNr   )
	user_datar
   set_extension_r   r:   getr   rN   any)r-   my_keymy_valuerE   span_doc_withspan_doc_withoutr~   r+   s           r,   test_span_as_doc_user_datar    sE    FH$MM&	.CFHHMq9DKKtK4M{{}==VT*h666""&&vt4@@@%%))&$7???3}%&6 #%%**e333 #%%**d222	 '
 &67&6CCHH&67888887s   'Ec                 
   [        U SSSSS9nUR                  S:X  d   eUR                  U R                  R                  S   :X  d   eUR
                  S:X  d   eUR                  U R                  R                  S   :X  d   eg )Nr   r   helloQ342)rl   ru   )r	   rn   rl   r(   stringsr   ru   r   s     r,   test_span_string_label_kb_idr	    sz    Q7D;;'!!!::**73333;;&   ::**62222rA   c                 
   [        U SSSSS9nUR                  S:X  d   eUR                  U R                  R                  S   :X  d   eUR
                  S:X  d   eUR                  U R                  R                  S   :X  d   eg )Nr   r   r  r  )rl   r   )r	   rn   rl   r(   r  r   idr   s     r,   test_span_string_label_idr    sz    Q&9D;;'!!!::**7333388v77cii''////rA   c                 H    [        U SS5      nSUl        SUl        SUl        g )Nr   r   rl   ru   r  )r	   rn   r   r   r   s     r,   test_span_attrs_writabler    s$    Q?DDKDKDHrA   c                    U R                   R                  S   SS4U R                   R                  S   SS4U R                   R                  S   SS4/U l        [        [	        U R                  5      5      S:X  d   e[	        U R
                  5      n[        U5      S:X  d   e[        US   R                  5      S:X  d   eUS   R                  S   R                  S	:X  d   eUS   R                  S   R                  S:X  d   eUS   R                  S   R                  S:X  d   eUS   R                  S   R                  S:X  d   e[        US   R                  5      S:X  d   eUS   R                  S   R                  S
:X  d   eUS   R                  S   R                  S:X  d   eUS   R                  S   R                  S:X  d   eUS   R                  S   R                  S:X  d   eUS   R                  S   R                  S:X  d   eUS   R                  S   R                  S:X  d   eUS   R                  S   R                  S:X  d   eUS   R                  S   R                  S:X  d   eg )NPRODUCTr   r   r   r   rg   r   r   rH   anotherr   za third.)
r(   r  r#   rN   r8   r9   r%   rn   r   r   )r-   	sentencess     r,   test_span_ents_propertyr    sp   			9	%q!,			9	%q!,			9	%r2.CH
 tCHH~!###SYYIy>Qy|  !Q&&&Q<Q$$...Q<Q&&)333Q<Q%%***Q<Q##q(((y|  !Q&&&Q<Q$$	111Q<Q&&)333Q<Q%%***Q<Q##q(((Q<Q$$
222Q<Q&&)333Q<Q%%+++Q<Q##r)))rA   c                    U SS U SS U SS U SS /n[        U5      n[        U5      S:X  d   eUS   R                  S:X  a  US   R                  S:X  d   eUS   R                  S:X  a  US   R                  S:X  d   eUS	   R                  S:X  a  US	   R                  S:X  d   eU SS U SS U S
S U SS U SS /n[        U5      n[        U5      S	:X  d   e[        US   5      S:X  d   e[        US   5      S
:X  d   eUS   R                  S:X  a  US   R                  S:X  d   eUS   R                  S
:X  a  US   R                  S:X  d   eU SS U S	S
 U S
S U SS U SS /n[        U5      n[        U5      S	:X  d   e[        US   5      S:X  d   e[        US   5      S
:X  d   eUS   R                  S:X  a  US   R                  S:X  d   eUS   R                  S
:X  a  US   R                  S:X  d   eg )Nr   r   r   r   r   r   r   r   r   rr   r   	   )r   rN   r   r   )r-   spansfiltereds      r,   test_filter_spansr    sH   1Xs1QxQq3r":6EE"Hx=AA;!hqkoo&:::A;!hqkoo&:::A;"x{"'<<<1Xs1QxQrC!Hc!Ah?EE"Hx=Ax{q   x{q   A;!hqkoo&:::A;!hqkoo&;;;1Xs1QxQrC!Hc!Ah?EE"Hx=Ax{q   x{q   A;!hqkoo&:::A;!hqkoo&;;;&;rA   c                 p   U SS U SS :X  d   eU SS U SS :w  d   eU SS USS :w  d   e[        U SS 5      [        U SS 5      :X  d   e[        U SS 5      [        U SS 5      :w  d   e[        U SS 5      [        USS 5      :w  d   eU S[        U 5       U [        U 5      [        U 5      S-    :w  d   eg )Nr   r   r   r   )r   rN   r   s     r,   test_span_eq_hashr    s    q8s1Qxq8s1Qxq8~a****Aa>T#a(^+++Aa>T#a(^+++Aa>T.1"56666 q3s8CHs3x!| <<<<rA   c                    SnSnXU n[        X5       H  nX4U-
     X   :X  a  M   e   [        R                  " [        5         US     S S S 5        [        R                  " [        5         US     S S S 5        U SS nUR                  S:X  d   eUR
                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eU SS nUR                  S:X  d   eUR
                  S:X  d   eUR                  S:X  d   eUR                  UR                  :X  d   eU [        U 5      * S-
  [        U 5      * S-
   nUR                  S:X  d   eUR
                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eU [        U 5      S-   [        U 5      S-    nUR                  S:X  d   eUR
                  [        U 5      :X  d   eUR                  [        U 5      :X  d   eUR                  [        U R                  5      :X  d   eUR                  [        U R                  5      :X  d   eg ! , (       d  f       GN= f! , (       d  f       GN = f)Nr   rr   r   rc   r   )
r   rO   rP   
IndexErrorr%   r   r   r   r   rN   )	r-   r   r   rE   r~   empty_span_0empty_span_1oob_span_startoob_span_ends	            r,   test_span_boundariesr"    sh   E
CS>D5I#&((( 	z	"R 
#	z	"Q 
# q8L""""""q   ""a'''  A%%%q8L""""""q   ""l&;&;;;;#c(Q#c(R8N"$$$1$$$"""$$)))""a'''s3x!|c#hm4L"""S)))s3x'''""c#((m333  CM111= 
#	"	"	"s   I,I+
I(+
I:c                     U SS n[        UR                  R                  S5      5      [        UR                  R                  S5      5      :X  d   eg )Nr   rr    )rN   r%   r5   lemma_)r-   sps     r,   test_span_lemmar'  ;  s?    	QqBrww}}S!"c"))//#*>&????rA   c                     U " S5      nUSS nUR                   R                  S5      (       a   e[        R                  " [        5         UR
                    S S S 5        g ! , (       d  f       g = f)Nz7Check span.sent raises error if doc is not sentencized.r   r   
SENT_START)r-   has_annotationrO   rP   r   r   rD   s      r,   	test_sentr+  A  sR    
P
QCq8Dxx&&|4444	z	"		 
#	"	"s   
A  
A.c           	         [        5       nU R                  R                  nSUR                  / SQ5      4SUR                  / SQ5      4SUR                  / SQ5      4SUR                  / SQ5      4S	UR                  / S
Q5      4/n[	        U R                  U5        [        UR                  U SS R                  5      [        R                  " S5      5        [        UR                  U SS R                  5      [        R                  " S5      5        [        UR                  U SS R                  5      / SQ5        X R                  l        g )Napple)r   r   r   orange)r3   r   And)r3   r3   r3   juice)rr   rr   r   pie)r   g333333@g!@r   )r   r   r   rg   )
r   r(   vectorsr   r   r   to_numpyrx   r   zeros)r-   opsprev_vectorsr3  s       r,   test_span_with_vectorsr8  I  s    

C99$$L	#++i()	3;;|,-	L)*	#++j)*	M*+G cii)s||C!HOO4ekk$6GHs||C!HOO4ekk$6GHs||C2J$5$56E$IIrA   c           	         [        U SS5      [        U SS5      :X  d   e[        U SSS5      [        U SSS5      :X  d   e[        U SSSSS9[        U SSSSS9:X  d   e[        U SS5      [        U SSS5      :w  d   e[        U SS5      [        U SSSSS9:w  d   e[        U SSS5      [        U SSSSS9:w  d   e[        U SS5      [        U SS5      ::  a  [        U SS5      [        U SS5      :  d   e[        U SSS5      [        U SSS5      ::  a  [        U SSS5      [        U SSS5      :  d   e[        U SSSSS9[        U SSSSS9::  d   e[        U SSSSS9[        U SSSSS9:  d   e[        U SS5      [        U SSSSS9s=:  a%  [        U SSS5      s=:  a  [        U SSSSS9:  d   e   e[        U SS5      [        U SSSSS9s=::  a%  [        U SSS5      s=::  a  [        U SSSSS9::  d   e   e[        U SSSSS9[        U SSS5      s=:  a$  [        U SSSSS9s=:  a  [        U SS5      :  d   e   e[        U SSSSS9[        U SSS5      s=:  a$  [        U SSSSS9s=:  a  [        U SS5      :  d   e   e[        U SSSSS9[        U SSSSS9:  d   e[        U SSSSS9[        U SS5      :  d   e[        U SSSSS9[        U SS5      ::  d   e[        U SS5      [        U SSSSS9:  d   e[        U SS5      [        U SSSSS9:  d   e[        U SSSSS9[        U SSSSS9:w  d   e[        U SSSSS9[        U SS5      :  d   e[        U SSSSS9[        U SS5      ::  d   e[        U SS5      [        U SSSSS9:  d   e[        U SS5      [        U SSSSS9:  d   e[        U SSSSS9[        U SSSSS9:w  d   e[        U SSSSS9[        U SS5      :  d   e[        U SSSSS9[        U SS5      ::  d   e[        U SS5      [        U SSSSS9:  d   e[        U SS5      [        U SSSSS9:  d   e[        U SSS	S
9[        U SSSS
9:  d   eg )Nr   r   r   r   rt   rc   r   r   AAA)r   BBB)r	   )r-   s    r,   test_span_comparisonr<  ^  s    Q?d31o---Q7#tCAw'????Q7'2d31gU\6]]]]Q?d31g6666Q?d31gWEEEEQ7#tCAwg'NNNNQ?d31o-$sAq/T#qRS_2TTTQ7#tCAw'??DaQRT[D\`dehjkmnpw`xDxxxQ7'2d31gU\6]]]]Q7'2d31gU\6]]]]aOd31b@  F4QPQSZC[  F^bcfhiklnu  ~E  _F  F  G  F  G  FaOtCArA  IT#qRSU\E]  Iaefiklnoqx  AH  bI  I  J  I  J  IaG73d31g6N  FQUVY[\^_ackrQs  Fvz{~  AB  DE  wF  F  G  F  G  FaG73tCAw7O  ISWX[]^`acemtSu  Iy}  B  DE  GH  zI  I  J  I  J  I Q7'2T#q!WT[5\\\\Q7'2T#q!_DDDQ7'2d31oEEEQ?T#q!WGDDDDQ?d31gWEEEE Q7'2d31gU\6]]]]Q7'2T#q!_DDDQ7'2d31oEEEQ?T#q!WGDDDDQ?d31gWEEEE Q7'2d31gU\6]]]]Q7'2T#q!_DDDQ7'2d31oEEEQ?T#q!WGDDDDQ?d31gWEEEE Q5)DaE,JJJJrA   z9start,end,expected_sentences,expected_sentences_with_hook))r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r  r   r   r   )r   r   r   r   )rg   r   r   r   )r   r   r   r   c                 n   [        [        XU R                  5      5      U:X  d   eS nXPR                  S'   [        [        XU R                  5      5      U:X  d   eS U R                  S'   [        XU R                  5      S   XU :X  d   e[        [        XU R                  5      5      S:X  d   eg )Nc                 b    [        S[        U 5      S5       Vs/ s H	  oXS-    PM     sn$ s  snf r   r   r   s     r,   r   "test_span_sents.<locals>.user_hook  r   r   r9   c                     U /$ r|   r   r   s    r,   r   !test_span_sents.<locals>.<lambda>  s    aSrA   r   r   )rN   r8   r9   r   r   )r-   r   r   expected_sentencesexpected_sentences_with_hookr   s         r,   test_span_sentsrD    s     tCcN(()*.@@@@B (NN7tCcN(()*.JJJJ#0C #$$%a(CcN:::tCcN(()*a///rA   c                     [         R                  " [        5         [        [	        U SS5      R
                  5        S S S 5        g ! , (       d  f       g = f)Nr   r   )rO   rP   r   r8   r	   r9   )r1   s    r,   test_span_sents_not_parsedrF    s1    	z	"T.!Q'--. 
#	"	"s   !A
Ac                    U SS U SS /U R                   S'   [        U R                   S   5      S:X  d   eU R                  5       n[        UR                   S   5      S:X  d   eU R                   S   R                  U SS 5        [        U R                   S   5      S:X  d   e[        UR                   S   5      S:X  d   eg )Nr   r   r   r   testr   )r  rN   copyappend)r-   doc_copys     r,   test_span_group_copyrL    s    Qq3q8,CIIfsyy !Q&&&xxzHx~~f%&!+++IIfS1X&syy !Q&&&x~~f%&!+++rA   c                      [        [        5       R                  / SQ/ SQS9n U R                  [	        U SSS5      /5        [        U R                  U R                  S   R                  5       H  u  pX:X  a  M   e   g)	zSpans may be associated with multiple sentences. These .sents should always be complete, not partial, sentences,
which this tests for.
)zMahler'sSymphonyzNo.8wasz
beautiful.)r   r   r   r   r   r   r   sent_startsr   r   WORKr   N)r   r   r(   set_entsr	   zipr9   r#   )r-   doc_sentent_sents      r,   test_for_partial_ent_sentsrX    sn     	G&C
 LL$sAq&)*+ "#))SXXa[->->?### @rA   c                  d   [        [        5       R                  / SQ/ SQS9n U R                  [	        U SSS5      /5        [        U R                  S   R                  5      n[        U5      S:X  d   e[        US   5      [        U R                  S   R                  5      s=:X  a  S	:X  d   e   eg
)zqSpan.sents() should set .sents correctly, even if Span in question is trailing and doesn't form a full
sentence.
)rH   rI   rJ   ztest.ENTITY)r   r   r   r   r   rQ  r   rr   rS  r   r   rZ  N)r   r   r(   rT  r	   r8   r#   r9   rN   strr   r   s     r,   test_for_no_ent_sentsr\    s     	4#C
 LL$sAq&)*+!""#Eu:??uQx=C 0 01=X=====rA   c                     U " S5      nU " S5      nUSS US   :X  a   eUSS US   :X  a   eUSS USS :X  a   eUSS U:X  a   eg )Nza bzb cr   r   r   r   )r)   doc1doc2s      r,   test_span_api_richcmp_otherr`    sw    DDAayDG###AayDG###AayD1I%%%AayD    rA   )Jr   rO   numpy.testingr   	thinc.apir   spacy.attrsr   r   spacy.lang.enr   spacy.tokensr   r	   r
   
spacy.utilr   spacy.vocabr   utilr   test_underscorer   fixturer-   r1   markissuer@   rF   rS   ra   re   parametrizerq   rv   arrayrz   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   usefixturesr  r	  r  r  r  r  r  r"  r'  r+  r8  r<  rD  rF  rL  rX  r\  r`  r   rA   r,   <module>rp     so     , % $ ! ) ) #  $ -  .   4" "" 4# # 4# # 4/ /$ 4  '45 4  	
  '*U)V 4  ($b"ekk/.JKL 4) 	
) 	
As;-	
As$%'89	
CKVs9~5yA	!!	-8'-,<& !11"&NR;	2
&&,!^%#( +,9 -9.30*8<4	=$2N@%*/Kf ?	00"/

,$ >!rA   