
    i{`                     V   d dl 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mZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  dZ!d	Z"d
Z#i 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"d!d#d$d%d$d&d$d'd$d(d$iZ$ G d) d*      Z% G d+ d,      Z& G d- d.      Z'y)/    N)AnyDictListOptionalTupleUnion   )Errors)escape_htmlminify_htmlregistry   )TPL_DEP_ARCSTPL_DEP_SVGTPL_DEP_WORDSTPL_DEP_WORDS_LEMMATPL_ENTTPL_ENT_RTLTPL_ENTS
TPL_FIGURETPL_KB_LINKTPL_PAGETPL_SPANTPL_SPAN_RTLTPL_SPAN_SLICETPL_SPAN_SLICE_RTLTPL_SPAN_STARTTPL_SPAN_START_RTL	TPL_SPANS	TPL_TITLEenltrz#dddORGz#7aececPRODUCTz#bfeeb7GPEz#feca74LOCz#ff9561PERSONz#aa9cfcNORPz#c887fbFACz#9cc9ccEVENTz#ffeb80LAWz#ff8197LANGUAGEWORK_OF_ARTz#f0d0ffDATEz#bfe1d9TIMEMONEYz#e4e7d2QUANTITYORDINALCARDINALPERCENTc                   2   e Zd ZdZdZi fdeeef   ddfdZ	 dde	eeef      de
d	e
defd
Zde	e   de	eeef      dee   defdZede	e   de	eeef      de	eee	eeef      f      fd       Zde	eeef      defdZde	e   defdZde	e   defdZy)SpanRendererzRender Spans as SVGs.spanoptionsreturnNc                    t        t              }t        j                  j	                         }|j                         D ]g  }t        |      r |       }t        |t               s2t        t        j                  j                  t        |                  |j                  |       i |j                  |j                  di              t        | _        |j#                         D ci c]  \  }}|j%                         | c}}| _        t(        | _        t,        | _        |j                  dd      | _        |j                  dd      | _        |j                  dd      | _        |j                  d	      }|r|d
   | _        |d   | _        |d   | _        y| j*                  dk(  r"t<        | _        t>        | _        t@        | _        ytB        | _        tD        | _        tF        | _        yc c}}w )zfInitialise span renderer

        options (dict): Visualiser-specific options (colors, spans)
        objcolors
top_offset(   span_label_offset   top_offset_step   templater7   slicestartrtlN)$dictDEFAULT_LABEL_COLORSr   displacy_colorsget_allvaluescallable
isinstance
ValueErrorr
   E925formattypeupdategetDEFAULT_ENTITY_COLORdefault_coloritemsupperr=   DEFAULT_DIR	directionDEFAULT_LANGlangr>   r@   offset_stepspan_templatespan_slice_templatespan_start_templater   r   r   r   r   r   )selfr8   r=   user_colors
user_colorlabelcolorrD   s           f/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/spacy/displacy/render.py__init__zSpanRenderer.__init__9   s    *+..668%,,. 	&J
# (\
j$/ !3!3Z8H!3!IJJMM*%	& 	gkk(B/01@FOuu{{}e+O % 	!++lB7!(-@"!E";;'8"= ;;z*!)&!1D'/'8D$'/'8D$~~&%1"+=(+=(%-"+9(+9(3 Ps   'G+parsedpageminifyc           
      B   g }t        |      D ]  \  }}|dk(  rH|j                  di       }|j                  dt              | _        |j                  dt              | _        |j                  | j                  |d   |d   |j                  d                    |r`dj                  |D cg c]  }t        j                  |	       c}      }	t        j                  |	| j
                  | j                  
      }
ndj                  |      }
|rt        |
      S |
S c c}w )Render complete markup.

        parsed (list): Dependency parses to render.
        page (bool): Render parses wrapped as full HTML page.
        minify (bool): Minify HTML markup.
        RETURNS (str): Rendered SVG or HTML markup.
        r   settingsrZ   r\   tokensspanstitle contentrs   r\   dir)	enumeraterT   rY   rZ   r[   r\   appendrender_spansjoinr   rQ   r   r   ra   rh   ri   rj   renderediprm   docdocsmarkups              rf   renderzSpanRenderer.renderf   s     f% 	XDAqAv55R0!)k;!G$LL>	OOD--ak1W:quuW~VW	X 77hOsJ--c:OPD__T		t~~VFWWX&Fv&& P   +Drn   ro   rp   c                     | j                  ||      }| j                  |      }t        j                  || j                        }|rt        j                  |      |z   }|S )a  Render span types in text.

        Spans are rendered per-token, this means that for each token, we check if it's part
        of a span slice (a member of a span type) or a span start (the starting token of a
        given span type).

        tokens (list): Individual tokens in the text
        spans (list): Individual entity spans and their start, end, label, kb_id and kb_url.
        title (str / None): Document title set in Doc.user_data['title'].
        rs   ru   rp   )_assemble_per_token_info_render_markupr   rQ   rZ   r    )ra   rn   ro   rp   per_token_infor   s         rf   rx   zSpanRenderer.render_spans   sY      66vuE$$^4!!&dnnE%%E2V;F    c                 (   g }t        |d       }|D ]  }d|d<   	 t        |       D ]  \  }}i }||d<   g }g }|D ]  }	i }
|	d   |cxk  r|	d   k  rn n||	d   k(  }|	d   |
d<   ||
d	<   |rt        |      r|d
   d   nddz   |	d<   |j                  |	       |	d   |
d<   |	j	                  dd      }|	j	                  dd      }|rt        j                  ||      nd|
d<   |j                  |
       d|	d<    ||d<   |j                  |        |S )a6  Assembles token info used to generate markup in render_spans().
        tokens (List[str]): Tokens in text.
        spans (List[Dict[str, Any]]): Spans in text.
        RETURNS (List[Dict[str, List[Dict, str, Any]]]): Per token info needed to render HTML markup for given tokens
            and spans.
        c                 ,    | d   | d   | d   z
   | d   fS )Nstart_token	end_tokenrd    )ss    rf   <lambda>z7SpanRenderer._assemble_per_token_info.<locals>.<lambda>   s,    - K.1]#334'
 r   keyr   render_slottextr   r   rd   is_startr   kb_idrq   kb_url#r   r   kb_linkentities)sortedrv   lenrw   rT   r   rQ   )rn   ro   r   r   idxtokentoken_markupintersecting_spansr   r7   ent
span_startr   r   s                 rf   r   z%SpanRenderer._assemble_per_token_info   s    AC
 
  	!A  !Am	!
 $F+ &	0JC ,.L#(L 79H ,&#A[0AA!$](;!;J#'=CL&0C
O!  ##56 /r2=A!"	/]+
 '--d3)-m)<C& HHWb1E!XXh4FJO**vFUW 	N OOC( +,D';,< (0L$!!,/M&	0P r   r   c                    d}|D ]  }t        |d   d       }|d   j                         dk(  }|r|s| j                  |d         }| j                  |d         }| j                  | j
                  z   | j                  t        |      dz
  z  z   }|| j                  j                  t        |d         |||      z  }|t        |d   dz         z  } |S )	z,Render the markup from per-token informationrq   r   c                     | d   S )Nr   r   )ds    rf   r   z-SpanRenderer._render_markup.<locals>.<lambda>   s    q?O r   r   r   r   )r   span_slicesspan_startstotal_height )r   strip_get_span_slices_get_span_startsr>   r@   r]   r   r^   rQ   r   )	ra   r   r   r   r   is_whitespaceslicesstartsr   s	            rf   r   zSpanRenderer._render_markup   s    # 	;EeJ/5OPH "&M//1R7M..uZ/@A..uZ/@AOO,,-''3x=1+<=? 
 $,,33$U6]3 & &!-	 4   +eFmc&9::+	;, r   r   c                 D   g }|D ]  }| j                   j                  |d   j                         | j                        }| j                  | j
                  |d   dz
  z  z   }| j                  j                  ||      }|j                  |        dj                  |      S )z*Get the rendered markup of all Span slicesrd   r   r   )bgr>   rq   )
r=   rT   rX   rV   r>   r]   r_   rQ   rw   ry   )ra   r   r   entityre   r>   
span_slices          rf   r   zSpanRenderer._get_span_slices   s     	+F
 KKOOF7O$9$9$;T=O=OPE  F=$9A$=>J 1188% 9 J z*	+ ww{##r   c                 b   g }|D ]  }| j                   j                  |d   j                         | j                        }| j                  | j
                  |d   dz
  z  z   }|d   r%| j                  j                  |||d   |d         nd}|j                  |        dj                  |      S )z0Get the rendered markup of all Span start tokensrd   r   r   r   r   )r   r>   rd   r   rq   )
r=   rT   rX   rV   r>   r]   r`   rQ   rw   ry   )ra   r   r   r   re   r>   r   s          rf   r   zSpanRenderer._get_span_starts  s     	+FKKOOF7O$9$9$;T=O=OPE  F=$9A$=>J *% ((//) /"9-	 0    z*	+  ww{##r   FF)__name__
__module____qualname____doc__styler   strr   rg   r   boolr   r   rx   staticmethodr   r   r   r   r   r   rf   r6   r6   4   sO   E13 +:S#X +: +:\ PU4S>*26HL	6S	 DcN# }	
 
. DS	D"&tCH~"6D	d3T#s(^,,-	.D DLT$sCx.-A c 6$d $ $&$d $ $r   r6   c                   J   e Zd ZdZdZi fdeeef   ddfdZ	 d!de	eeef      de
d	e
defd
Zdeeef   de	eeef      de	eeef      defdZdededededef
dZdedededededefdZdededededef
dZdededededef
dZde	eeef      deeeeef   ef   fd Zy)"DependencyRendererz!Render dependency parses as SVGs.depr8   r9   Nc                 P   |j                  dd      | _        |j                  dd      | _        |j                  d| j                  rdnd      | _        |j                  d| j                  rd	nd
      | _        |j                  dd      | _        |j                  d| j                  rdnd      | _        |j                  dd      | _        |j                  dd      | _        |j                  dd      | _	        |j                  dd      | _
        t        | _        t        | _        y)zInitialise dependency renderer.

        options (dict): Visualiser-specific options (compact, word_spacing,
            arrow_spacing, arrow_width, arrow_stroke, distance, offset_x,
            color, bg, font)
        compactFword_spacing-   arrow_spacing   rA   arrow_width   
   arrow_stroker	   distance      offset_x2   re   z#000000r   z#fffffffontArialN)rT   r   r   r   r   r   r   r   re   r   r   rY   rZ   r[   r\   )ra   r8   s     rf   rg   zDependencyRenderer.__init__(  s     {{9e4#KK;$[["RTU";;}4<<aRP#KK:Jt||MJ3[[)4
++dI.KK0	$ 	r   rh   ri   rj   c                    t        j                         j                  }g }t        |      D ]  \  }}|dk(  rH|j	                  di       }|j	                  dt
              | _        |j	                  dt              | _        | d| }	| j                  |	|d   |d         }
|j	                  d      r(t        j                  |j	                  d      	      |
z   }
|j                  |
        |r`d
j                  |D 
cg c]  }
t        j                  |
       c}
      }t        j                  || j                  | j                        }nd
j                  |      }|rt!        |      S |S c c}
w )rl   r   rm   rZ   r\   -wordsarcsrp   r   rq   rr   rt   )uuiduuid4hexrv   rT   rY   rZ   r[   r\   
render_svgr    rQ   rw   ry   r   r   r   )ra   rh   ri   rj   	id_prefixr{   r|   r}   rm   	render_idsvgrs   r   s                rf   r   zDependencyRenderer.render<  s:    JJL$$	f% 		!DAqAv55R0!)k;!G$LL>	$+Qqc*I//)QwZ6CCuuW~&&QUU7^<sBOOC 		! ggR#z00=RSG__diiT^^F WWX&Fv&& Ss   <E-r   r   r   c                    | j                  |      | _        t        | j                  j                         d      | _        | j
                  dz  | j                  z  | j                  z   | _        | j                  t        |      | j
                  z  z   | _
        | j                  d| j                  z  z   | _        || _        t        |      D cg c]/  \  }}| j                  |d   |d   |j!                  dd      |      1 }}}t        |      D cg c]&  \  }}| j#                  |d	   |d
   |d   |d   |      ( }}}dj%                  |      dj%                  |      z   }	t'        j(                  | j                  | j                  | j                  | j*                  | j,                  | j.                  |	| j0                  | j2                  	      S c c}}w c c}}w )a  Render SVG.

        render_id (Union[int, str]): Unique ID, typically index of document.
        words (list): Individual words and their tags.
        arcs (list): Individual arcs and their start, end, direction and label.
        RETURNS (str): Rendered SVG markup.
        r   defaultr	      r   taglemmaNrd   rF   endru   rq   )	idwidthheightre   r   r   rs   ru   r\   )
get_levelslevelsmaxrL   highest_levelr   r   offset_yr   r   r   r   r   r   rv   render_wordrT   render_arrowry   r   rQ   re   r   r   rZ   r\   )
ra   r   r   r   r|   w	words_svgaarcs_svgrs   s
             rf   r   zDependencyRenderer.render_svg_  s    ood+ !3!3!5qA)D,>,>>ARARR]]SZ$--%??
mma$*;*;&;; "%(
1 QvY%!%%2FJ
	 
 "$
1 aj!G*ah%!L
 
 '')$rwwx'88!!ww**;;**ww

 
	


s   4G+Gr   r   r   r|   c                 (   | j                   | j                  z   }| j                  || j                  z  z   }| j                  dk(  r| j
                  |z
  }t        |      }|t        j                  |||||      S t        j                  ||||      S )zRender individual word.

        text (str): Word text.
        tag (str): Part-of-speech tag.
        i (int): Unique ID, typically word index.
        RETURNS (str): Rendered SVG markup.
        rG   )r   r   r   xy)r   r   r   r   )
r   r   r   r   rZ   r   r   r   rQ   r   )ra   r   r   r   r|   r   r   	html_texts           rf   r   zDependencyRenderer.render_word  s     MMD---MMA-->>U"

QA%	&--CuQ  ##qAFFr   rd   rF   r   rZ   c           	         |dk  s|dk  r7t        ||||      }t        t        j                  j                  di |      | j
                  |||f   }| j                  || j                  z  z   | j                  z   }| j                  dk(  r| j                  |z
  }| j                  }	| j                  ||z
  | j                  z  z   || j                  z  z   | j                  | j                  |z
  z  dz  z
  }
| j                  dk(  r| j                  |
z
  }
| j                  || j                  z  dz  z
  }| j                  r| j                  || j                  z  dz  z
  }|dk(  r5t        | j
                  j                         d      dkD  r| j                   }| j!                  |||	|
      }| j#                  ||	||
      }| j                  dk(  rd	nd
}t%        j                  | j&                  || j(                  ||||      S )a5  Render individual arrow.

        label (str): Dependency label.
        start (int): Index of start word.
        end (int): Index of end word.
        direction (str): Arrow direction, 'left' or 'right'.
        i (int): Unique ID, typically arrow index.
        RETURNS (str): Rendered SVG markup.
        r   )rF   r   rd   ru   rG      r	   r   r      rightleft)r   r|   strokeheadrd   
label_sidearcr   )rH   rO   r
   E157rQ   r   r   r   r   rZ   r   r   r   r   r   rL   get_arrowheadget_arcr   r   r   )ra   rd   rF   r   rZ   r|   
error_argslevelx_startr   x_endy_curve	arrowheadr   r   s                  rf   r   zDependencyRenderer.render_arrow  s    19aEs%YOJV[[//=*=>>UC/0--%$--"77$:L:LL>>U"jj7*GMMMMU{dmm+,dmm#$   D$6$6$>?!CD 	 >>U"JJ&E--%$--"7!";;<<mmedmm&;a&??Ga<C 2 2 4a@1D}}nG&&y'1eD	ll7Aw6 $% 7WV
""ww$$!
 	
r   r  r   r  r  c                 L    d}| j                   rd}|j                  ||||      S )uS  Render individual arc.

        x_start (int): X-coordinate of arrow start point.
        y (int): Y-coordinate of arrow start and end point.
        y_curve (int): Y-corrdinate of Cubic Bézier y_curve point.
        x_end (int): X-coordinate of arrow end point.
        RETURNS (str): Definition of the arc path ('d' attribute).
        z!M{x},{y} C{x},{c} {e},{c} {e},{y}z M{x},{y} {x},{c} {e},{c} {e},{y})r   r   ce)r   rQ   )ra   r  r   r  r  rD   s         rf   r  zDependencyRenderer.get_arc  s,     7<<9HAEBBr   r   c                    |dk(  r'||| j                   z
  dz   || j                   z   dz
  }}}n&||| j                   z   dz
  || j                   z
  dz   }}}d| d|dz    d| d|| j                   z
   d| d|| j                   z
   S )aR  Render individual arrow head.

        direction (str): Arrow direction, 'left' or 'right'.
        x (int): X-coordinate of arrow start point.
        y (int): Y-coordinate of arrow start and end point.
        end (int): X-coordinate of arrow end point.
        RETURNS (str): Definition of the arrow head path ('d' attribute).
        r   r	   M,z Lr   )r   )ra   rZ   r   r   r   p1p2p3s           rf   r  z DependencyRenderer.get_arrowhead  s     Q!1!11A5q4;K;K7Ka7OBBsT%5%5593AQAQ;QTU;UBB2$aAwbAa$*:*:&:%;1RD!dFVFVBVAWXXr   c           	         |D ch c]$  }t        t        |j                                     & c}D cg c]  }t        |       }}t	        |D cg c]  }|d   	 c}d      }dg|z  }i }t        |d       D ]F  }t	        ||d   |d          dz   }t        |d   |d         D ]  }|||<   	 |||d   |d   |d   f<   H |S c c}w c c}w c c}w )	a  Calculate available arc height "levels".
        Used to calculate arrow heights dynamically and without wasting space.

        args (list): Individual arcs and their start, end, direction and label.
        RETURNS (dict): Arc levels keyed by (start, end, label).
        r   r   r   c                     | d   | d   z
  S )Nr   rF   r   )r   s    rf   r   z/DependencyRenderer.get_levels.<locals>.<lambda>  s    E
S\0I r   r   rF   r   rd   )tupler   rW   rH   r   range)	ra   r   r   tlength	max_levelr   r  r|   s	            rf   r   zDependencyRenderer.get_levels  s     IM!M%syy{(;"<!MNAQNND1Sc%j11=C&L	$$IJ 	EC	#g,U<=AE3w<U4 %$	!%?DFCL#e*c'l;<		E
  "NN1s   )CCCr   )r   r   r   r   r   r   r   r   rg   r   r   r   r   intr   r   r   r  r  r   r   r   r   rf   r   r   #  s   +E13 !S#X ! !* PU!4S>*!26!HL!	!F&
c?&
 DcN#&
 4S>"	&

 
&
PG G# Gc Gc Gc G&,
,
!$,
+.,
;>,
CF,
	,
\Cs Cs CS C C CYs Ys Ys Y Y YtDcN3 U3S==QSV=V8W r   r   c            	           e Zd ZdZdZi fdeeef   ddfdZ	 dde	eeef      de
d	e
defd
Zdede	eeef      dee   defdZy)EntityRendererzRender named entities as HTML.r   r8   r9   Nc                 |   t        t              }t        j                  j	                         }|j                         D ]g  }t        |      r |       }t        |t               s2t        t        j                  j                  t        |                  |j                  |       i |j                  |j                  di              t        | _        |j#                         D ci c]  \  }}|j%                         | c}}| _        |j                  dd      | _        | j(                  -| j(                  D cg c]  }|j%                          c}| _        t*        | _        t.        | _        |j                  d      }|r|| _        y| j,                  dk(  rt4        | _        yt6        | _        yc c}}w c c}w )zhInitialise entity renderer.

        options (dict): Visualiser-specific options (colors, ents)
        r;   r=   entsNrD   rG   )rH   rI   r   rJ   rK   rL   rM   rN   rO   r
   rP   rQ   rR   rS   rT   rU   rV   rW   rX   r=   r  rY   rZ   r[   r\   ent_templater   r   )	ra   r8   r=   rb   rc   rd   re   r   rD   s	            rf   rg   zEntityRenderer.__init__  sR   
 *+..668%,,. 	&J
# (\
j$/ !3!3Z8H!3!IJJMM*%	& 	gkk(B/01@FOuu{{}e+OKK-	99 04		::DI$ 	;;z* (D~~&$/!$+! P ;s   'F3<F9rh   ri   rj   c           
      B   g }t        |      D ]  \  }}|dk(  rH|j                  di       }|j                  dt              | _        |j                  dt              | _        |j                  | j                  |d   |d   |j                  d                    |r`dj                  |D cg c]  }t        j                  |	       c}      }	t        j                  |	| j
                  | j                  
      }
ndj                  |      }
|rt        |
      S |
S c c}w )rl   r   rm   rZ   r\   r   r  rp   rq   rr   rt   )rv   rT   rY   rZ   r[   r\   rw   render_entsry   r   rQ   r   r   rz   s              rf   r   zEntityRenderer.render  s     f% 	TDAqAv55R0!)k;!G$LL>	OOD,,QvY&	155>RS	T 77hOsJ--c:OPD__T		t~~VFWWX&Fv&& Pr   r   ro   rp   c                    d}d}|D ]g  }|d   }|d   }|d   }	|j                  dd      }
|j                  dd      }|
rt        j                  |
|	      nd}|j                  d
i       }t        |||	       }||| j	                  d      }t        |      D ]9  \  }}|t        |      z  }t        |      dkD  s#|t        |      dz
  k7  s5|dz  }; | j                  |j                         | j                  v rl| j                  j                  |j                         | j                        }||||d}|j                  |       | | j                  j                  di |z  }n||z  }|	}j ||d j	                  d      }t        |      D ]9  \  }}|t        |      z  }t        |      dkD  s#|t        |      dz
  k7  s5|dz  }; t        j                  || j                        }|rt        j                  |      |z   }|S )zRender entities in text.

        text (str): Original text.
        spans (list): Individual entity spans and their start, end, label, kb_id and kb_url.
        title (str / None): Document title set in Doc.user_data['title'].
        rq   r   rd   rF   r   r   r   r   r   params
r   z<br>N)rd   r   r   r   r   r   r   )rT   r   rQ   r   splitrv   r   r  rX   r=   rV   rS   r  r   rZ   r    )ra   r   ro   rp   r   offsetr7   rd   rF   r   r   r   r   additional_paramsr   	fragmentsr|   fragmentre   ent_settingss                       rf   r!  zEntityRenderer.render_ents7  s     	DMEMEu+CHHWb)EXXh,FHMk((uVDSUG $2 6 eC1FVE*006I(3 %8+h//y>A%!s9~/A*Af$F% yy EKKMTYY$>t7I7IJ""&	  ##$562$++22B\BB& F5	6 M''-	$Y/ 	!KAxk(++F9~!a3y>A+=&=& 	! T^^D%%E2V;Fr   r   )r   r   r   r   r   r   r   r   rg   r   r   r   r   r!  r   r   rf   r  r    s    (E13 ,S#X , ,B PU4S>*26HL	4.. $T#s(^ 4.=Ec].	.r   r  )(r   typingr   r   r   r   r   r   errorsr
   utilr   r   r   	templatesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r[   rY   rU   rI   r6   r   r  r   r   rf   <module>r/     sD    : :  5 5    *  	9y 
9 
9	
 i I 
9 Y 
9 	 9 I I Y 	  y!" 	#$ y% ,l$ l$^R Rjm mr   