o
    ÕjºH  ã                   @   sV  d Z ddlZddlZddlZddlZzddlZejdk r%edej› dƒ‚W n! eyG   zddl	ZW n eyD Z
 zedƒe
‚dZ
[
ww Y nw ddlmZmZmZ dd	lmZmZmZmZmZ dd
lmZ ddlmZ ddlmZ dd„ Zddd„Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ dƒZ G dd„ deƒZ!ej"G dd„ deƒƒZ#dS )z
A Cairo backend for Matplotlib
==============================
:Author: Steve Chaplin and others

This backend depends on cairocffi or pycairo.
é    N)é   é   r   z/Cairo backend requires cairo>=1.14.0, but only z is availablezEcairo backend requires that pycairo>=1.14.0 or cairocffi is installedé   )Ú_apiÚcbookÚfont_manager)Ú_BackendÚFigureCanvasBaseÚFigureManagerBaseÚGraphicsContextBaseÚRendererBase)ÚttfFontProperty)ÚPath)ÚAffine2Dc                 C   s>   t |ƒdks|r| jg |d d… ¢|‘R Ž  d S | j|Ž  d S ©Né   )ÚlenÚset_source_rgba)ÚctxÚcolorÚalphaZforced_alpha© r   úb/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/matplotlib/backends/backend_cairo.pyÚ	_set_rgba%   s    r   c           	      C   sÜ   |j |d|dD ]c\}}|tjkr| j|Ž  q|tjkr!|  ¡  q|tjkr,| j|Ž  q|tjkrat	 
|  ¡ ¡}|d d… }|dd … }| jg |d |d d  ¢|d d |d  ¢|¢R Ž  q|tjkrk| j|Ž  qd S )NT)Zremove_nansÚclipr   éþÿÿÿr   )Úiter_segmentsr   ZMOVETOÚmove_toZ	CLOSEPOLYZ
close_pathZLINETOZline_toZCURVE3ÚnpÚasarrayZget_current_pointZcurve_toZCURVE4)	r   ÚpathÚ	transformr   ÚpointsÚcodeÚcurÚaÚbr   r   r   Ú_append_path,   s$   ÿ




:

€òr'   c                    s\   ‡ fdd„}|dƒ}t td|dƒ ¡ › ƒ}|dƒ}tj ||¡dk r&tjntj}|||fS )z{
    Convert a `.FontProperties` or a `.FontEntry` to arguments that can be
    passed to `.Context.select_font_face`.
    c                    s2   z
t ˆ d| › ƒƒ W S  ty   t ˆ | ƒ Y S w )NÚget_)ÚgetattrÚAttributeError)Úfield©Úpropr   r   ÚattrC   s
   ÿz-_cairo_font_args_from_font_prop.<locals>.attrÚnameZFONT_SLANT_ÚstyleÚweighti&  )r)   ÚcairoÚupperr   Zweight_dictÚgetZFONT_WEIGHT_NORMALZFONT_WEIGHT_BOLD)r-   r.   r/   Zslantr1   r   r,   r   Ú_cairo_font_args_from_font_prop>   s   ÿþ
r5   c                       s„   e Zd Z‡ fdd„Zdd„ Zedd„ ƒZddd	„Z	dd
d„Zdd„ Z	ddd„Z
dd„ Zdd„ Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )ÚRendererCairoc                    sD   || _ t| d| _d | _d | _t t tjdd¡¡| _	t
ƒ  ¡  d S )N)Úrendererr   )ÚdpiÚGraphicsContextCairoÚgcÚwidthÚheightr2   ÚContextÚImageSurfaceÚFORMAT_ARGB32Útext_ctxÚsuperÚ__init__)Úselfr8   ©Ú	__class__r   r   rB   S   s   ÿzRendererCairo.__init__c                 C   s    |  ¡ }t|dƒrt|dƒr| ¡ | ¡ f}n-t|dƒr'| ¡ }|j|jf}n| ¡  | ¡  | 	¡ ^}}|r;t
dƒ‚|^}}}| ¡  || j_|\| _| _d S )NÚ	get_widthÚ
get_heightÚget_extentszCannot infer surface size)Ú
get_targetÚhasattrrF   rG   rH   r;   r<   ÚsaveZ
reset_clipZcopy_clip_rectangle_listÚ	TypeErrorÚrestorer:   r   )rC   r   ÚsurfaceÚsizeÚextÚrectÚrestÚ_r   r   r   Úset_context\   s   

zRendererCairo.set_contextc                 C   s:   |d ur|   ¡  t| |||ƒ |  ¡  |  ¡  |  ¡  d S ©N)rK   r   Úfill_preserverM   Ústroke)r   Zfill_cr   Zalpha_overridesr   r   r   Ú_fill_and_stroken   s   zRendererCairo._fill_and_strokeNc                 C   s^  |j }|d u r| ¡ d u r| ¡ nd }|tƒ  dd¡ d| j¡ }| ¡  t||||ƒ |d urG| 	¡  t
||| ¡ | ¡ ƒ | ¡  | ¡  | ¡ }|r©t| jƒ}| ¡  tjj||¡}	t |	¡}
t|
|tƒ  || ¡ d|¡d ƒ |
 |  | ¡ ¡¡ |
j| ¡ Ž  |
 ¡  |
 ¡  t |	¡}| tj j!¡ | 	¡  | "|¡ | ¡  | ¡  | ¡  d S ©Nr   éÿÿÿÿr   )#r   Z	get_hatchZclip_extentsr   ÚscaleÚ	translater<   Únew_pathr'   rK   r   Ú	get_alphaÚget_forced_alpharV   rM   Zget_hatch_pathÚintr8   rI   Zcreate_similarr2   ZContentZCOLOR_ALPHAr=   Úset_line_widthÚpoints_to_pixelsZget_hatch_linewidthr   Zget_hatch_colorrW   ZSurfacePatternZ
set_extendZExtendÚREPEATZ
set_source)rC   r:   r    r!   ÚrgbFacer   r   Z
hatch_pathr8   Zhatch_surfaceZ	hatch_ctxZhatch_patternr   r   r   Ú	draw_pathw   sJ   ÿþÿ

ÿ
þ

zRendererCairo.draw_pathc                 C   s<  |j }| ¡  t|||tƒ  dd¡ ƒ | ¡ }| ¡ \}}	}
}|dkr5|	dkr5|
dkr5|dkr5d}d }nd}|tƒ  dd¡ d| j¡ }| ¡  t	|j
|ddƒD ]9\}\}}t|ƒr‹|dd … \}}| ¡  | ||¡ | |¡ | ¡  |s|d dkr‹|  ||| ¡ | ¡ ¡ qR|sœ|  ||| ¡ | ¡ ¡ d S d S )	Nr   rZ   r   FT)Úsimplifyr   iè  )r   r]   r'   r   r[   Zcopy_path_flatZfill_extentsr\   r<   Ú	enumerater   r   rK   Zappend_pathrM   rX   r^   r_   )rC   r:   Zmarker_pathZmarker_transr    r!   rd   r   Úx1Úy1Zx2Úy2ZfilledÚiZverticesÚcodesÚxÚyr   r   r   Údraw_markersœ   s@    ÿÿ
ÿ€ÿÿzRendererCairo.draw_markersc                 C   s’   t  |d d d… ¡}tj | ¡ jtj|jd |jd |jd d ¡}|j	}| j
| |jd  }| ¡  | |t|ƒt|ƒ¡ | ¡  | ¡  d S )NrZ   r   r   é   )r   Z._unmultiplied_rgba8888_to_premultiplied_argb32r2   r>   Zcreate_for_dataZravelÚdatar?   Úshaper   r<   rK   Zset_source_surfaceÚfloatZpaintrM   )rC   r:   rm   rn   ZimrN   r   r   r   r   Ú
draw_imageÌ   s   þzRendererCairo.draw_imageFc	                 C   s¬   |r|   ||||||¡ d S |j}	|	 ¡  |	 ||¡ |	 ¡  |	jt|ƒŽ  |	 |  | 	¡ ¡¡ t
 ¡ }
|
 | ¡ ¡ |	 |
¡ |rK|	 t | ¡¡ |	 |¡ |	 ¡  d S rU   )Ú_draw_mathtextr   r]   r   rK   Úselect_font_facer5   Úset_font_sizerb   Úget_size_in_pointsr2   ZFontOptionsÚset_antialiasÚget_antialiasedZset_font_optionsÚrotater   Údeg2radÚ	show_textrM   )rC   r:   rm   rn   Úsr-   ÚangleÚismathZmtextr   Úoptsr   r   r   Ú	draw_textÙ   s   

zRendererCairo.draw_textc                 C   sø   |j }| jj || j|¡\}}	}
}}| ¡  | ||¡ |r'| t 	| ¡¡ |D ]*\}}}}}| 
¡  | || ¡ |jtt|ƒƒŽ  | |  |¡¡ | t|ƒ¡ q)|D ]\}}}}| 
¡  | || || ¡ | ddd¡ | ¡  qV| ¡  d S ©Nr   )r   Ú
_text2pathÚmathtext_parserÚparser8   rK   r\   r{   r   r|   r]   r   rv   r5   r   rw   rb   r}   ÚchrÚ	rectangleÚset_source_rgbrV   rM   )rC   r:   rm   rn   r~   r-   r   r   r;   r<   ÚdescentZglyphsZrectsZfontZfontsizeÚidxÚoxZoyÚwÚhr   r   r   ru   ñ   s*   ÿ
ÿ
zRendererCairo._draw_mathtextc                 C   s   | j | jfS rU   )r;   r<   ©rC   r   r   r   Úget_canvas_width_height  s   z%RendererCairo.get_canvas_width_heightc                    s    |dkrt ƒ  |||¡S |r!| jj || j|¡^}}}}|||fS | j}| ¡  |jt	|ƒŽ  | 
|  | ¡ ¡¡ | |¡dd… \}	}
}| ¡  |
|||	 fS )NÚTeXr   rp   )rA   Úget_text_width_height_descentr„   r…   r†   r8   r@   rK   rv   r5   rw   rb   rx   Ztext_extentsrM   )rC   r~   r-   r€   r;   r<   rŠ   rS   r   Z	y_bearingr   rŽ   rD   r   r   r’     s   
ÿ
z+RendererCairo.get_text_width_height_descentc                 C   s*   | j j ¡  d| j _d| j _d | j _| j S )Nr   F)r:   r   rK   Z_alphaZ_forced_alphaZ_hatchr   r   r   r   Únew_gc'  s
   zRendererCairo.new_gcc                 C   s   |d | j  S )NéH   )r8   )rC   r"   r   r   r   rb   3  s   zRendererCairo.points_to_pixelsrU   )FN)Ú__name__Ú
__module__Ú__qualname__rB   rT   ÚstaticmethodrX   re   ro   rt   r‚   ru   r   r’   r“   rb   Ú__classcell__r   r   rD   r   r6   R   s    	

&
ÿ0
r6   c                       sª   e Zd ZejejejdœZejej	ej
dœZ‡ fdd„Zdd„ Z‡ fdd„Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd‡ fdd„	Zdd„ Zdd„ Zdd„ Z‡  ZS )r9   )ZbevelZmiterÚround)ZbuttZ
projectingrš   c                    s   t ƒ  ¡  || _d S rU   )rA   rB   r7   )rC   r7   rD   r   r   rB   E  s   

zGraphicsContextCairo.__init__c                 C   s   | j  ¡  d S rU   )r   rM   r   r   r   r   rM   I  s   zGraphicsContextCairo.restorec                    s*   t ƒ  |¡ t| j| j|  ¡ |  ¡ ƒ d S rU   )rA   Ú	set_alphar   r   Ú_rgbr^   r_   )rC   r   rD   r   r   r›   L  s   ÿzGraphicsContextCairo.set_alphac                 C   s"   | j  |rtj¡ d S tj¡ d S rU   )r   ry   r2   ZANTIALIAS_DEFAULTZANTIALIAS_NONE)rC   r&   r   r   r   Úset_antialiasedQ  s
   ÿÿz$GraphicsContextCairo.set_antialiasedc                 C   s
   | j  ¡ S rU   )r   Zget_antialiasr   r   r   r   rz   U  s   
z$GraphicsContextCairo.get_antialiasedc                 C   ó"   | j  tj| j|d¡ || _d S )N)Zcapstyle)r   Zset_line_capr   Úcheck_getitemÚ_capdZ	_capstyle)rC   Úcsr   r   r   Úset_capstyleX  ó   
z!GraphicsContextCairo.set_capstylec                 C   sR   |sd S t  |j¡\}}}}| j}| ¡  | || jj| | ||¡ | ¡  d S rU   )	r   rš   Zboundsr   r]   rˆ   r7   r<   r   )rC   rˆ   rm   rn   r   rŽ   r   r   r   r   Úset_clip_rectangle\  s   z'GraphicsContextCairo.set_clip_rectanglec                 C   sX   |sd S |  ¡ \}}| j}| ¡  |tƒ  dd¡ d| jj¡ }t|||ƒ | 	¡  d S rY   )
Zget_transformed_path_and_affiner   r]   r   r[   r\   r7   r<   r'   r   )rC   r    ZtpathZaffiner   r   r   r   Úset_clip_pathe  s   ÿz"GraphicsContextCairo.set_clip_pathc                 C   sH   ||f| _ |d u r| j g d¡ d S | j t| j t |¡¡ƒ|¡ d S rƒ   )Z_dashesr   Zset_dashÚlistr7   rb   r   r   )rC   ÚoffsetÚdashesr   r   r   Ú
set_dashesp  s   
þzGraphicsContextCairo.set_dashesNc                    s@   t ƒ  ||¡ t| jƒdkr| jj| jŽ  d S | jj| jŽ  d S r   )rA   Úset_foregroundr   rœ   r   r‰   r   )rC   ZfgZisRGBArD   r   r   rª   y  s   z#GraphicsContextCairo.set_foregroundc                 C   s   | j  ¡  ¡ d d… S r   )r   Ú
get_sourceZget_rgbar   r   r   r   Úget_rgb€  s   zGraphicsContextCairo.get_rgbc                 C   rž   )N)Z	joinstyle)r   Zset_line_joinr   rŸ   Ú_joindZ
_joinstyle)rC   Újsr   r   r   Úset_joinstyleƒ  r£   z"GraphicsContextCairo.set_joinstylec                 C   s"   t |ƒ| _| j | j |¡¡ d S rU   )rs   Z
_linewidthr   ra   r7   rb   )rC   r   r   r   r   Úset_linewidth‡  s   
z"GraphicsContextCairo.set_linewidthrU   )r•   r–   r—   r2   ZLINE_JOIN_BEVELZLINE_JOIN_MITERZLINE_JOIN_ROUNDr­   ZLINE_CAP_BUTTZLINE_CAP_SQUAREZLINE_CAP_ROUNDr    rB   rM   r›   r   rz   r¢   r¤   r¥   r©   rª   r¬   r¯   r°   r™   r   r   rD   r   r9   8  s,    ýý		r9   c                   @   s   e Zd Zdd„ ZdS )Ú_CairoRegionc                 C   s   || _ || _d S rU   )Ú_slicesÚ_data)rC   Zslicesrq   r   r   r   rB     s   
z_CairoRegion.__init__N)r•   r–   r—   rB   r   r   r   r   r±   Œ  s    r±   c                   @   sŠ   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	e	Z
dd„ Zddœdd„Ze ed¡Ze ed¡Ze ed¡Ze ed¡ZdS )ÚFigureCanvasCairoc                 C   s   t | dƒst| jjƒ| _| jS )NÚ_cached_renderer)rJ   r6   Úfigurer8   rµ   r   r   r   r   Ú	_renderer“  s   
zFigureCanvasCairo._rendererc                 C   s   | j S rU   )r·   r   r   r   r   Úget_renderer  s   zFigureCanvasCairo.get_rendererc                 C   s  | j jj ¡ }t|tjƒstdƒ‚| ¡ }| 	¡ }t
 |j¡}t
 |j¡}t
 ||j ¡}t
 ||j ¡}d|krQ||krQ|j|jkrQd|krQ||krQ|j|jksUtdƒ‚t||t|| dƒ ƒt||t|| dƒ ƒf}	t | ¡ tj¡ ||f¡|	  ¡ }
t|	|
ƒS )Nz;copy_from_bbox only works when rendering to an ImageSurfacer   zInvalid bbox)r·   r:   r   rI   Ú
isinstancer2   r>   ÚRuntimeErrorrF   rG   ÚmathÚceilÚx0Úfloorrh   ri   Úy0Ú
ValueErrorÚsliceÚmaxr   Ú
frombufferÚget_dataÚuint32ÚreshapeÚcopyr±   )rC   ZbboxrN   ÚswÚshr½   rh   r¿   ri   Úslsrq   r   r   r   Úcopy_from_bbox   s*   ÿ0ÿÿ
z FigureCanvasCairo.copy_from_bboxc                 C   s’   | j jj ¡ }t|tjƒstdƒ‚| ¡  | 	¡ }| 
¡ }|j\}}|jt | ¡ tj¡ ||f¡||f< | |j|j|j|j |j|j ¡ d S )Nz;restore_region only works when rendering to an ImageSurface)r·   r:   r   rI   r¹   r2   r>   rº   ÚflushrF   rG   r²   r³   r   rÃ   rÄ   rÅ   rÆ   Zmark_dirty_rectangleÚstartÚstop)rC   ÚregionrN   rÈ   rÉ   ZslyZslxr   r   r   Úrestore_region³  s    ÿ
ÿÿÿz FigureCanvasCairo.restore_regionc                 C   s   |   ¡  |¡ d S rU   )Ú_get_printed_image_surfaceZwrite_to_png)rC   Úfobjr   r   r   Ú	print_pngÁ  s   zFigureCanvasCairo.print_pngc              	   C   s>   |   ¡ \}}|  ¡  ¡ }| t t |¡ ||df¡¡¡ d S )Nrp   )	Úget_width_heightrÑ   rÄ   Úwriter   Z._premultiplied_argb32_to_unmultiplied_rgba8888r   r   rÆ   )rC   rÒ   r;   r<   Úbufr   r   r   Ú
print_rgbaÄ  s
   
ÿzFigureCanvasCairo.print_rgbac                 C   sL   | j j| j_|  ¡ \}}t tj||¡}| j t |¡¡ | j  	| j¡ |S rU   )
r¶   r8   r·   rÔ   r2   r>   r?   rT   r=   Údraw)rC   r;   r<   rN   r   r   r   rÑ   Ì  s   z,FigureCanvasCairo._get_printed_image_surfaceZportrait)Úorientationc                C   s~  d}|| j _| j  ¡ \}}|| || }}|dkr||}}|dkr4ttdƒs,tdƒ‚t |||¡}	nI|dkrIttdƒsAtdƒ‚t |||¡}	n4|d	v rvttd
ƒsVtdƒ‚|dkrnt|t	ƒrft
 |d¡}nt
jd d|d}t |||¡}	ntd|›ƒ‚| j j| j_| j t |	¡¡ | jjj}
|dkr¤|
 tjd ¡ |
 d| ¡ | j  | j¡ |
 ¡  |	 ¡  |dkr½| ¡  d S d S )Nr”   Z	landscapeÚpsÚ	PSSurfacez3cairo has not been compiled with PS support enabledÚpdfÚ
PDFSurfacez4cairo has not been compiled with PDF support enabled)ÚsvgÚsvgzÚ
SVGSurfacez4cairo has not been compiled with SVG support enabledrß   Úwb)ÚfileobjzUnknown format: r   r   )r¶   r8   Zget_size_inchesrJ   r2   rº   rÛ   rÝ   r¹   ÚstrÚgzipÚGzipFilerà   rÀ   r·   rT   r=   r:   r   r{   r   Úpir\   rØ   Z	show_pageÚfinishÚclose)rC   ÚfmtrÒ   rÙ   r8   Zw_inZh_inZwidth_in_pointsZheight_in_pointsrN   r   r   r   r   Ú_saveÔ  sH   ÿ




ÿzFigureCanvasCairo._saverÜ   rÚ   rÞ   rß   N)r•   r–   r—   Úpropertyr·   r¸   rË   rÐ   rÓ   r×   Z	print_rawrÑ   rê   Ú	functoolsÚpartialmethodZ	print_pdfZprint_psZ	print_svgZ
print_svgzr   r   r   r   r´   ’  s    
	3r´   c                   @   s   e Zd ZejZeZeZ	dS )Ú_BackendCairoN)
r•   r–   r—   r2   ÚversionZbackend_versionr´   ZFigureCanvasr
   ZFigureManagerr   r   r   r   rî     s    rî   rU   )$Ú__doc__rì   rä   r»   Únumpyr   r2   Úversion_infoÚImportErrorZ	cairocffiÚerrÚ r   r   r   Zmatplotlib.backend_basesr   r	   r
   r   r   Zmatplotlib.font_managerr   Zmatplotlib.pathr   Zmatplotlib.transformsr   r   r'   r5   r6   r9   r±   r´   Zexportrî   r   r   r   r   Ú<module>   sP    

ÿÿÿþ€ÿÿþ
 gT{