
    inE                     R   d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZmZ ej                  j!                  d      d        Zej                  j!                  d	      d
        Zej                  j!                  d      d        Zej                  j!                  d      d        Zej                  j!                  d      d        Zej                  j!                  d      d        Zej                  j!                  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'ej                  j!                  d%      d&        Z(ej                  j!                  d'      d+d(       Z)ej                  j!                  d)      d*        Z*y),    N)displacy)DependencyRendererEntityRendererSpanRenderer)English)Persian)DocSpani9	  c                     d}g d}t        | |dgt        |      z        }t        j                  |      }|D ]  }||v rJ  y)z#Test if < is escaped when rendering)z&lt;z&gt;z&amp;z&quot;)<>&"depwordsdepsN)r	   lenr   render)de_vocabcharsr   dochtmlchars         j/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/spacy/tests/test_displacy.pytest_issue2361r      sP     0E E
he5'CJ*>
?C??3D t||    i
  c                     t        | g d      }t        |ddd      g|_        t        j                  |d      }d	|v sJ t        |dd
d      g|_        t        j                  |d      }d	|v sJ y)z9Test that displaCy ENT visualizer escapes HTML correctly.)testz	<RELEASE>r   r   r      TESTlabelentstylez&lt;RELEASE&gt;   N)r	   r
   entsr   r   en_vocabr   r   s      r   test_issue2728r,      sw     h;
<CS!Qf-.CH??3e,D$$$S!Qf-.CH??3e,D$$$r   i  c                     g d}g d}g d}t        | |||      }t        j                  t        |      dfd      |_        t        j                  |       y)	zTest that retokenization works correctly via displaCy when punctuation
    is merged onto the preceeding token and tensor is resized.)HelloWorld!Whenisthisbreaking?)r!   r!   r!      r6      r6   r6   )intjROOTpunctadvmodr9   detnsubjr:   )r   headsr   `   float32)dtypeN)r	   numpyzerosr   tensorr   r   )r+   r   r>   r   r   s        r   test_issue3288rE   "   sK     KE$EOD
he5t
<Cc%j"-Y?CJOOCr   i  c            
          ddddddddddddd	d
ddddgdddddddddddddddddddddddddgd} dddddgd }t        j                  | d!d"#      }|sJ t        j                  |d$d"#      }|sJ y%)&z;Test that displaCy renderer doesn't require "settings" key.ButCCONJtexttagGooglePROPNr2   VERBstartingfromADPzbehind.ADVr      ccleftstartendr$   dirr!   r=   r(   auxr6   prepright   pcompr   arcs#But Google is starting from behind.
   ORGrW   rX   r$   rJ   r)   r   Tr'   manualr%   Nr   r   )example_depexample_entdep_htmlent_htmls       r   test_issue3531rm   .   s    
 7+g.&)/E*u-
 D@GFCE&AF7CGGD
K$ 6R%89K {%EHO8{%EHO8r   i*  c                     t        | ddgddg      }t               |j                  d<   t        j                  |       y)z^Test that displaCy doesn't serialize the doc.user_data when making a
    copy of the Doc.
    r.   worldr   r   r   N)r	   set	user_datar   
parse_deps)r+   r   s     r   test_issue3882rs   L   s9    
 hw0u~
FCECMM&r   iG  c            	          t               } ddddddddddddg}d	d
ddddddddddddddddddd
ddddg}| j                  ||dg       | j                  dk(  sJ y)zITest that overlapping arcs get separate levels, unless they're identical.ThisDTrI   r2   VBZaz	sentence.NNr   r!   r=   rU   rV   r(   rS   r<   overlap)rX   r$   rW   rY   attrr_   N)r   r   highest_levelrendererr   r`   s      r   test_issue5447r   V   s     "#H%e$T"T*	E A?Af=A	&AI&AAv>D OOud345!!Q&&&r   i  c                      d} t               } ||       }t        |ddd      g|_        t        j                  |d      }|j                  d      }|d	k(  sJ y )
Nz8First line
Second line, with ent
Third line
Fourth line
      r   r#   r%   r&   z<br>r6   )r   r
   r)   r   r   count)sample_textnlpr   r   founds        r   test_issue5838r   k   sZ     QK
)C
k
CS!Qf-.CH??3e,DJJvEA::r   c           
         t        | g d      }t        |ddd      t        |ddd      g|j                  d<   t        j                  |      }t        |t              sJ |d	   d
k(  sJ |d   ddddddddddddddddgk(  sJ y)z>Test that spans on a Doc are converted into displaCy's format.WelcometotheBankofChinar    rS   r7   rc   r]   GPEscrJ   Welcome to the Bank of China spans       #rW   rX   start_token	end_tokenr$   kb_idkb_url   Nr	   r
   r   r   parse_spans
isinstancedictr+   r   r   s      r   test_displacy_parse_spansr   x   s    
hM
NCCAu-tCAu/EFCIIdO  %EeT"""=;;;;>	
 	
   r   c           
         t        | g d      }t        |dddd      t        |ddd	d
      g|j                  d<   t        j                  |ddi      }t        |t              sJ |d   dk(  sJ |d   ddddddddddddd	d
ddgk(  sJ y)zHTest that spans with kb_id on a Doc are converted into displaCy's formatr   r    rS   r7   rc   Q790068)r   r]   r   Q148r   kb_url_templatezhttps://wikidata.org/wiki/{}rJ   r   r   r   r   z!https://wikidata.org/wiki/Q790068r   r   zhttps://wikidata.org/wiki/Q148Nr   r   s      r   ,test_displacy_parse_spans_with_kb_id_optionsr      s    
hM
NCS!QY/S!QV,CIIdO
   !?@E eT"""=;;;;>9	
 6	
   r   c           	      <   t        | g d      }t        |ddd      t        |ddd      g|j                  d<   t        |ddd	      g|j                  d
<   t        j                  |dd
i      }t        |t              sJ |d   dk(  sJ |d   ddddd	dddgk(  sJ y)z7Test that spans in a different spans key will be parsedr   r    rS   r7   rc   r]   r   r   BANKcustom	spans_key)optionsrJ   r   r   r   r   r   r   r   Nr   r   s      r   -test_displacy_parse_spans_different_spans_keyr      s    
hM
NCCAu-tCAu/EFCIIdOQ623CIIh  {H.EFEeT"""=;;;;>	

 
 
 
r   c                    t        | g d      }t        |ddd      g|j                  d<   t        j                  t
        d      5  t        j                  |      }d	d	d	       t        t              sJ y	# 1 sw Y   xY w)
z:Test that having an unset spans key doesn't raise an errorr   r    rS   r7   r   r   W117)matchN)
r	   r
   r   pytestwarnsUserWarningr   r   r   r   r   s      r   #test_displacy_parse_empty_spans_keyr      sp    
hM
NCQ623CIIh	k	0 *$$S)* eT"""* *s   A88Bc                    t        | g d      }t        |dd|j                  j                  d         g|_        t        j                  |      }t        |t              sJ |d   dk(  sJ |d	   d
dddddgk(  sJ t        |dd|j                  j                  d   d      g|_        t        j                  |      }t        |t              sJ |d   dk(  sJ |d	   d
dddddgk(  sJ y)zGTest that named entities on a Doc are converted into displaCy's format.rG   rL   r2   rO   rP   behindr    r!   r(   rc   r#   rJ   #But Google is starting from behind r)   r6   rb   r   r   rW   rX   r$   r   r   Q95r$   r   N	r	   r
   vocabstringsr)   r   
parse_entsr   r   r+   r   r)   s      r   test_displacy_parse_entsr      s   
hS
TCS!Qcii&7&7&>?@CHs#DdD!!!<@@@@<BsK    S!Qcii&7&7&>eLMCHs#DdD!!!<@@@@<B#N   r   c                    t        | g d      }t        |dd|j                  j                  d   d      g|_        t        j                  |dd	i      }t        |t              sJ |d
   dk(  sJ |d   ddddddgk(  sJ y)zRTest that named entities with kb_id on a Doc are converted into displaCy's format.r   r    r!   r(   rc   r   r   r   z https://www.wikidata.org/wiki/{}rJ   r   r)   r6   rb   z!https://www.wikidata.org/wiki/Q95r   Nr   r   s      r   +test_displacy_parse_ents_with_kb_id_optionsr      s    
hS
TCS!Qcii&7&7&>eLMCH!CDD dD!!!<@@@@<9	
   r   c                 8   g d}g d}g d}g d}g d}t        | |||||      }t        j                  |      }t        |t              sJ |d   d|d	   |d	   d
d|d   |d   d
d|d   |d   d
d|d   |d   d
gk(  sJ |d   d	ddddddddddddddgk(  sJ t        j                  |dd       }t        |t              sJ |d   d|d	   |d	   d
d|d   |d   d
d|d   |d   d
d|d   |d   d
gk(  sJ |d   d	ddddddddddddddgk(  sJ y)zFTest that deps and tags on a Doc are converted into displaCy's format.)ru   r2   rx   sentence)r!   r!   rS   r!   )DETrN   r   NOUN)rv   rw   rv   ry   )r=   r9   r<   r{   )r   r>   postagsr   r   Nr   )lemmarJ   rK   r!   r(   rS   r`   r=   rU   rV   r<   r{   r\   )r	   r   rr   r   r   )r+   r   r>   r   r   r   r   s          r   test_displacy_parse_depsr     s   +EE
(C$D+D
he5c4
PCs#DdD!!!=aQ8aQ8aQ8aQ8	    <A?Af=Aw?    s1v&DdD!!!=aQ8aQ8aQ8aQ8	    <A?Af=Aw?   r   c                      t               } ddddddg}dddd	d
dddd	d
g}t        j                  t              5  | j	                  ||dg       d d d        y # 1 sw Y   y xY w)Nru   r   rI   r2   rN   r   r!   r=   rU   rV   r(   r<   r_   )r   r   raises
ValueErrorr   r}   s      r   test_displacy_invalid_arcsr   &  st    !#HU+d6-JKEA?Qv>D 
z	" :5$789: : :s   AA$c                     t        | g d      }t        |dd|j                  j                  d         g|_        t        j                  |dd d	      }|j                  d
      sJ y)z$Test that displaCy can render Spans.r   r    r!   r(   rc   r#   r6   r%   r&   z<divN)r	   r
   r   r   r)   r   r   
startswithr*   s      r   test_displacy_spansr   1  s[    
hS
TCS!Qcii&7&7&>?@CH??3q851D??6"""r   c                     t        j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nzhello world)r   r   r   r   r   )r+   s    r   #test_displacy_raises_for_wrong_typer   9  s/    	z	" '&' ' 's	   9Ac                  j   g d} g d}g d}g d}t               }t        |j                  | |||      }t        |ddd	      g|_        t        j                  |d
d      }d|v sJ d|v sJ d|j                   d|v sJ t        j                  |d
d      }d|v sJ d|j                   d|v sJ y )N)u   ماu
   بسیارu   کتابu   می‌خوانیم)PROrR   N_PLV_SUB)foobarr   baz)r!   r   rS   r!   )r   r   r>   r   r!   rS   r"   r#   Tr   )pager'   zdirection: rtlzdirection="rtl"zlang="r   r%   )r   r	   r   r
   r)   r   r   lang)r   r   r   r>   r   r   r   s          r   test_displacy_rtlr   >  s    HE
)C'DE
)C
ciiu3e$
GCS!Qf-.CH??3T7Dt###$$$CHH:Q4'''??3T7Dt###CHH:Q4'''r   c                 P   d }t        j                  |       t        | g d      }t        |dd|j                  j
                  d         g|_        t        j                  |d	      }|j                  d
      sJ |j                  d      sJ t        j                  d        y)z4Test that displaCy accepts custom rendering wrapper.c                     d| z   dz   S )Nr"    r   s    r   wrapperz-test_displacy_render_wrapper.<locals>.wrapperT  s    }v%%r   r   r    r!   r(   rc   r#   r%   r&   zTEST<divz	/div>TESTc                     | S )Nr   r   s    r   <lambda>z.test_displacy_render_wrapper.<locals>.<lambda>^  s    T r   N)
r   set_render_wrapperr	   r
   r   r   r)   r   r   endswith)r+   r   r   r   s       r   test_displacy_render_wrapperr   Q  s    & (
hS
TCS!Qcii&7&7&>?@CH??3e,D??:&&&==%%% 12r   c                      ddddddddddddgd	d
ddddddddd
ddddgdd} t        j                  | gdd      }| d   D ]  }|d   |v sJ |d   |v rJ  y)z3Test displacy.render with manual data for dep styleru   rv   rI   r2   rw   rx   r   ry   r   r!   r=   rU   rV   r(   rS   r<   r{   r\   Title)r   r`   titler   Trf   r   rJ   rK   Nrh   )
parsed_depr   words      r   test_displacy_render_manual_depr   a  s     D)%(&-	
 GFCE&AF7C

 J ??J<uTBD7# #F|t###E{d"""#r   c                      dddddgddddd	dgd
dg} t        j                  | dd      }| D ]  }|d   d   d   |v sJ d|v s|d   |v rJ  y)z3Test displacy.render with manual data for ent stylera   r6   rb   rc   rd   re   id   COMPANYr   rJ   r)   r   r%   Trf   r)   r   r$   r   Nrh   )parsed_entsr   
parsed_ents      r   test_displacy_render_manual_entr   w  s     : e<=	

 :#C)DE	

K ??;eDAD! /
&!!$W-555j g&$.../r   c                      dddddddddgg dd	dddddddddgg dd
dg} t        j                  | dd      }| D ]  }|d   d   d   |v sJ d|v s|d   |v rJ  y)z4Test displacy.render with manual data for span stylezWelcome to the Bank of China.rS   r7   rc   r   r   r$   r]   r   r   r   r   r   r   r   .)rJ   r   tokensr   )rJ   r   r   r   spanTrf   r   r   r$   r   Nrh   )parsed_spansr   parsed_spans      r    test_displacy_render_manual_spanr     s     4 !EB !EB K	
 4 !EB !EB K	
L( ??<vdCD# 07#A&w/4777k!w'4///0r   c                  b   ddg} ddd}t        | |d      }d}g d}t        t        |            D cg c]  }||d	z   ||   d
 }}|j                  d|d       j	                  d      }d|d   v rd|d   v sJ d|d	   v rd|d	   v sJ d|d   v rd|d   v sJ d|d   v rd|d   v sJ y c c}w )Nr   BARredgreen)FOOr   )r)   colorsabcd)r   r   r  r  r!   rd   abcdez

r   r   r(   r  rS   )r   ranger   render_entssplit)r)   r  r~   rJ   labelsir   results           r   test_displacy_options_caser    s    5>D7+Ftv>?HD)FEJ3t9EUVqQ;VEV!!'5$7==fEFF1I%6!9"444fQiEVAY$666F1I%6!9"444fQiEVAY$666$6 Ws   B,i)  c                      dddddddddgd d	} t        j                  | d
d      }|j                  d      |j                  d      k  sJ y )Nra         SECONDrd   r6   rb   FIRSTr   r%   Trf   )r   r   find)r   r   s     r   $test_displacy_manual_sorted_entitiesr    s`     6h7W5
 C ??3eD9D99W		( 3333r   i2  c                 &   t        | ddg      }t        |ddd      g|j                  d<   t        j                  |d	      }d
|v sJ |j                  d   j                  t        |ddd             t        j                  |d	      }d
|v sJ y)zKTest that displaCy's span visualizer escapes annotated HTML tags correctly.r   z<TEST>r    r   r!   r#   r   r   r&   z&lt;TEST&gt;r(   N)r	   r
   r   r   r   appendr*   s      r   test_issue12816r    s     hvx0
1CCAV45CIIdO ??3f-DT!!! IIdO4Q89 ??3f-DT!!!r   i 3  c            	         ddddddddddddg} g d	}t        j                  | |
      }t        |      t        |      k(  sJ t        dD cg c]  }t        ||   d         dk(   c}      sJ t        dD cg c]  }t        ||   d         dk(   c}      sJ |d   d   d   d   dk(  sJ |d   d   d   d   dk(  sJ |d   d   d   d   dk(  sJ |d   d   d   d   dk(  sJ yc c}w c c}w )zITest whether span stacking works properly for multiple overlapping spans.r(   r]   SkillNCr   r   Skillr!   rS   r   )r   r   )r   rS   r6   entities)r!   r(   render_slotN)r   _assemble_per_token_infor   all)r   r   per_token_infor  s       r   test_displacy_span_stackingr"    sE    I>G<G<E
 BF!::vVN~#f+---KAN1%j12a7KLLLHAN1%j12a7HIII!Z(+M:a???!Z(+M:a???!Z(+M:a???!Z(+M:a??? LHs   C-<C2)returnN)+rB   r   spacyr   spacy.displacy.renderr   r   r   spacy.lang.enr   spacy.lang.far   spacy.tokensr	   r
   markissuer   r,   rE   rm   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r   r   r   <module>r+     s      R R ! ! " 4  4% % 4  4 : 4  4' '( 4	 	: F,#(*"J:#'
(&3 #,/*0:7 54 4 5" "$ 5@ @r   