a
    s=icJ                     @   s  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W nN ey   zddl	ZW n. ey Z
 zede
W Y dZ
[
n
dZ
[
0 0 Y n0 ddlZ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 ejZdddZdd Z ej!ej!ej!ej!ej!ej"ej"ej"ej"ej!ej!ej!ej!ej!ej"ej"ej"ej"ej"dZ#ej$ej%ej&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,d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   zEcairo 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   |j |d|dD ]\}}|tjkr.| j|  q|tjkrB|   q|tjkrX| j|  q|tjkrt	
|  }|d d }|dd  }| jg |d |d d  |d d |d  |R   q|tjkr| j|  qd S )NT)Zremove_nansclipr      )iter_segmentsr   ZMOVETOmove_toZ	CLOSEPOLYZ
close_pathZLINETOZline_toZCURVE3npasarrayZget_current_pointZcurve_toZCURVE4)	ctxpath	transformr   pointscodecurab r   r/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/matplotlib/backends/backend_cairo.py_append_path(   s     




:
r!   c                    s\    fdd}|d}t td|d  }|d}tj||dk rLt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                    s6   zt  d|   W S  ty0   t  |  Y S 0 d S )Nget_)getattrAttributeError)fieldpropr   r    attr?   s    z-_cairo_font_args_from_font_prop.<locals>.attrnameZFONT_SLANT_styleweighti&  )r#   cairoupperr   Zweight_dictgetFONT_WEIGHT_NORMALFONT_WEIGHT_BOLD)r'   r(   r)   Zslantr+   r   r&   r    _cairo_font_args_from_font_prop:   s    r1   )d      i,  i  i  iX  i  i   i  Z
ultralightlightnormalZmediumZregularZsemiboldboldZheavyZ	ultraboldblack)italicr5   Zobliquec                       s   e Zd Z fddZdd Zejddddd	 Zedd
d Z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heightr,   ContextImageSurfaceFORMAT_ARGB32text_ctxsuper__init__)selfr;   	__class__r   r    rE   l   s    zRendererCairo.__init__c                 C   s   |  }t|dr.t|dr.| | f}n\t|drN| }|j|jf}n<|  |  |	 ^}}|rvt
d|j|jf}|  || j_|\| _| _d S )N	get_width
get_heightget_extentszCannot infer surface size)
get_targethasattrrI   rJ   rK   r>   r?   saveZ
reset_clipZcopy_clip_rectangle_list	TypeErrorrestorer=   r   )rF   r   surfacesizeextrectrestr   r   r    set_contextu   s    
zRendererCairo.set_context3.6rV   )alternativec                 C   s   t || j_d S N)r,   r@   r=   r   )rF   rQ   r   r   r    set_ctx_from_surface   s    z"RendererCairo.set_ctx_from_surfacec                 C   s   || _ || _d S rY   r>   r?   )rF   r>   r?   r   r   r    set_width_height   s    zRendererCairo.set_width_heightc                 C   sz   |d urn|   t|dks |r>||d |d |d | n ||d |d |d |d  |  |  |  d S )Nr   r   r   r   )rN   lenset_source_rgbafill_preserverP   stroke)rF   r   Zfill_calphaZalpha_overridesr   r   r    _fill_and_stroke   s     zRendererCairo._fill_and_strokeNc                 C   st   |j }|d u r"| d u r"| nd }|t ddd| j }|  t|||| | 	|||
 |  d S Nr   r   )r   Z	get_hatchZclip_extentsr   scale	translater?   new_pathr!   rb   	get_alphaget_forced_alpha)rF   r=   r   r   rgbFacer   r   r   r   r    	draw_path   s    

zRendererCairo.draw_pathc                 C   s<  |j }|  t|||t dd  | }| \}}	}
}|dkrj|	dkrj|
dkrj|dkrjd}d }nd}|t ddd| j }|  t	|j
|ddD ]t\}\}}t|r|dd  \}}|  ||| || |  |s |d dkr| ||| |  q|s8| ||| |  d S )	Nr   rd   r   FT)simplifyr   i  )r   rg   r!   r   re   Zcopy_path_flatZfill_extentsrf   r?   	enumerater   r]   rN   Zappend_pathrP   rb   rh   ri   )rF   r=   Zmarker_pathZmarker_transr   r   rj   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 )Nrd   r   r      )r   Z._unmultiplied_rgba8888_to_premultiplied_argb32r,   rA   Zcreate_for_dataZraveldatarB   shaper   r?   rN   Zset_source_surfacefloatZpaintrP   )rF   r=   rs   rt   ZimrQ   r   r   r   r    
draw_image   s    zRendererCairo.draw_imageFc	                 C   s   |r|  |||||| n|j}	|	  |	|| |	  |	jt|  |	| |	  t
 }
|
tjd rzt
jnt
j |	|
 |r|	t|  |	| |	  d S )Nztext.antialiased)_draw_mathtextr   rg   r   rN   select_font_facer1   set_font_sizepoints_to_pixelsget_size_in_pointsr,   ZFontOptionsset_antialiasmplZrcParamsANTIALIAS_DEFAULTANTIALIAS_NONEZset_font_optionsrotater   deg2rad	show_textrP   )rF   r=   rs   rt   sr'   angleismathZmtextr   optsr   r   r    	draw_text   s$    

zRendererCairo.draw_textc                 C   s   |j }| jj|| j|\}}	}
}}|  ||| |rN|t	|  |D ]T\}}}}}|
  |||  |jtt|  || | |t| qR|D ]>\}}}}|
  ||| ||  |ddd |  q|  d S Nr   )r   
_text2pathmathtext_parserparser;   rN   rf   r   r   r   rg   r   r|   r1   r   r}   r~   r   chr	rectangleset_source_rgbr_   rP   )rF   r=   rs   rt   r   r'   r   r   r>   r?   descentZglyphsZrectsZfontZfontsizeidxoxZoywhr   r   r    r{      s*    

zRendererCairo._draw_mathtextc                 C   s   | j | jfS rY   r[   rF   r   r   r    get_canvas_width_height  s    z%RendererCairo.get_canvas_width_heightc                    s   |dkrt  |||S |rB| jj|| j|^}}}}|||fS | j}|  |jt	|  |
| |  ||dd \}	}
}|  |
|||	 fS )NTeXr   rv   )rD   get_text_width_height_descentr   r   r   r;   rC   rN   r|   r1   r}   r~   r   Ztext_extentsrP   )rF   r   r'   r   r>   r?   r   _r   Z	y_bearingr   r   rG   r   r    r     s    

z+RendererCairo.get_text_width_height_descentc                 C   s"   | j j  d| j _d| j _| j S )Nr   F)r=   r   rN   _alphaZ_forced_alphar   r   r   r    new_gc6  s    zRendererCairo.new_gcc                 C   s   |d | j  S )NH   )r;   )rF   r   r   r   r    r~   =  s    zRendererCairo.points_to_pixels)N)N)FN)__name__
__module____qualname__rE   rV   r   
deprecatedrZ   r\   rb   rk   ru   rz   r   r{   r   r   r   r~   __classcell__r   r   rG   r    r9   k   s"   	


 
0
r9   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 fdd	Zdd Zdd Zdd Z  ZS )r<   )ZbevelZmiterround)ZbuttZ
projectingr   c                    s   t    || _d S rY   )rD   rE   r:   )rF   r:   rG   r   r    rE   O  s    
zGraphicsContextCairo.__init__c                 C   s   | j   d S rY   )r   rP   r   r   r   r    rP   S  s    zGraphicsContextCairo.restorec                    sh   t  | |  }| j}|  rB| j|d |d |d | n"| j|d |d |d |d  d S )Nr   r   r   r   )rD   	set_alpharh   _rgbri   r   r^   )rF   ra   r   rgbrG   r   r    r   V  s     zGraphicsContextCairo.set_alphac                 C   s   | j |rtjntj d S rY   )r   r   r,   r   r   )rF   r   r   r   r    set_antialiased_  s    z$GraphicsContextCairo.set_antialiasedc                 C   s"   | j tj| j|d || _d S )N)Zcapstyle)r   Zset_line_capr   check_getitem_capdZ	_capstyle)rF   csr   r   r    set_capstylec  s    z!GraphicsContextCairo.set_capstylec                 C   sR   |sd S t |j\}}}}| j}|  ||| jj| | || |  d S rY   )	r   r   Zboundsr   rg   r   r:   r?   r   )rF   r   rs   rt   r   r   r   r   r   r    set_clip_rectangleg  s    z'GraphicsContextCairo.set_clip_rectanglec                 C   sX   |sd S |  \}}| j}|  |t ddd| jj }t||| |	  d S rc   )
Zget_transformed_path_and_affiner   rg   r   re   rf   r:   r?   r!   r   )rF   r   ZtpathZaffiner   r   r   r    set_clip_pathp  s    z"GraphicsContextCairo.set_clip_pathc                 C   sF   ||f| _ |d u r"| jg d n | jt| jt|| d S r   )Z_dashesr   Zset_dashlistr:   r~   r   r   )rF   offsetdashesr   r   r    
set_dashes{  s    
zGraphicsContextCairo.set_dashesNc                    s>   t  || t| jdkr,| jj| j  n| jj| j  d S Nr   )rD   set_foregroundr]   r   r   r   r^   )rF   fgZisRGBArG   r   r    r     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   s"   | j tj| j|d || _d S )N)Z	joinstyle)r   Zset_line_joinr   r   _joindZ
_joinstyle)rF   jsr   r   r    set_joinstyle  s    z"GraphicsContextCairo.set_joinstylec                 C   s"   t || _| j| j| d S rY   )ry   Z
_linewidthr   Zset_line_widthr:   r~   )rF   r   r   r   r    set_linewidth  s    
z"GraphicsContextCairo.set_linewidth)N)r   r   r   r,   ZLINE_JOIN_BEVELZLINE_JOIN_MITERZLINE_JOIN_ROUNDr   ZLINE_CAP_BUTTZLINE_CAP_SQUAREZLINE_CAP_ROUNDr   rE   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   r    r<   B  s(   			r<   c                   @   s   e Zd Zdd ZdS )_CairoRegionc                 C   s   || _ || _d S rY   )_slices_data)rF   Zslicesrw   r   r   r    rE     s    z_CairoRegion.__init__N)r   r   r   rE   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)rM   r9   figurer;   r   r   r   r   r    	_renderer  s    
zFigureCanvasCairo._rendererc                 C   s   | j S rY   )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r||kr|j|jkrd|kr||kr|j|jkst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   rL   
isinstancer,   rA   RuntimeErrorrI   rJ   mathceilx0floorrn   ro   y0
ValueErrorslicemaxr   
frombufferget_datauint32reshapecopyr   )rF   ZbboxrQ   swshr   rn   r   ro   slsrw   r   r   r    copy_from_bbox  s4    
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   rL   r   r,   rA   r   flushrI   rJ   r   r   r   r   r   r   r   Zmark_dirty_rectanglestartstop)rF   regionrQ   r   r   ZslyZslxr   r   r    restore_region  s$    
z FigureCanvasCairo.restore_regionc                 C   s   |   | d S rY   )_get_printed_image_surfaceZwrite_to_png)rF   fobjr   r   r    	print_png  s    zFigureCanvasCairo.print_pngc              	   C   s>   |   \}}|   }|tt|||df d S )Nrv   )	get_width_heightr   r   writer   Z._premultiplied_argb32_to_unmultiplied_rgba8888r   r   r   )rF   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 rY   )
r   r;   r   r   r,   rA   rB   rV   r@   draw)rF   r>   r?   rQ   r   r   r    r     s    z,FigureCanvasCairo._get_printed_image_surfaceZportrait)orientationc                C   s~  d}|| j _| j  \}}|| ||  }}|dkr>|| }}|dkrhttdsXtdt|||}	n|dkrttdstdt|||}	nh|d	v rttd
std|dkrt|t	rt
|d}nt
jd d|d}t|||}	ntd|| j j| j_| jt|	 | jjj}
|dkrJ|
tjd  |
d|  | j | j |
  |	  |dkrz|  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   )r   r;   Zget_size_inchesrM   r,   r   r   r   r   strgzipGzipFiler   r   formatr   rV   r@   r=   r   r   r   pirf   r   Z	show_pagefinishclose)rF   fmtr   r   r;   Zw_inZh_inZwidth_in_pointsZheight_in_pointsrQ   r   r   r   r    _save  sF    






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   rW   c                   @   s   e Zd Zdd ZdS )_RendererGTKCairoc                 C   sJ   t jdkr>t|t js>t jjt jdt|tj	 d dd}|| j
_d S )N	cairocffiz
cairo_t **r   T)Zincref)r,   r   r   r@   Z_from_pointerfficastidobject__basicsize__r=   r   )rF   r   r   r   r    rV     s    

z_RendererGTKCairo.set_contextN)r   r   r   rV   r   r   r   r    r     s   r   c                   @   s   e Zd ZeZeZdS )_BackendCairoN)r   r   r   r   ZFigureCanvasr
   ZFigureManagerr   r   r   r    r  %  s   r  )N)0__doc__r   r   r   numpyr   r,   version_infoImportErrorr   errZ
matplotlibr    r   r   r   Zmatplotlib.backend_basesr   r	   r
   r   r   Zmatplotlib.font_managerr   Zmatplotlib.pathr   Zmatplotlib.transformsr   versionZbackend_versionr!   r1   r/   r0   Z
_f_weightsZFONT_SLANT_ITALICZFONT_SLANT_NORMALZFONT_SLANT_OBLIQUEZ	_f_anglesr9   r<   r   r   r   r   exportr  r   r   r   r    <module>   sv   

 XU{