o
    liG                     @   sp  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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 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#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   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   |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)remove_nansclipr      )iter_segmentsr   MOVETOmove_to	CLOSEPOLY
close_pathLINETOline_toCURVE3npasarrayget_current_pointcurve_toCURVE4)	ctxpath	transformr   pointscodecurab r)   _/home/ubuntu/SoloSpeech/.venv/lib/python3.10/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 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*   attr=   s
   z-_cairo_font_args_from_font_prop.<locals>.attrnameFONT_SLANT_styleweighti&  )r-   cairoupperr   weight_dictgetFONT_WEIGHT_NORMALFONT_WEIGHT_BOLD)r1   r2   r3   slantr6   r)   r0   r*   _cairo_font_args_from_font_prop8   s   
r>   c                       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heightr7   ContextImageSurfaceFORMAT_ARGB32text_ctxsuper__init__)selfrA   	__class__r)   r*   rK   M   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hasattrrO   rP   rQ   rD   rE   save
reset_clipcopy_clip_rectangle_list	TypeErrorrestorerC   r!   )rL   r!   surfacesizeextrectrest_r)   r)   r*   set_contextV   s   

zRendererCairo.set_context3.6r_   )alternativec                 C   s   t || j_d S N)r7   rF   rC   r!   )rL   rY   r)   r)   r*   set_ctx_from_surfaceh   s   z"RendererCairo.set_ctx_from_surfacec                 C      || _ || _d S rb   rD   rE   )rL   rD   rE   r)   r)   r*   set_width_heightl   s   
zRendererCairo.set_width_heightc                 C   sz   |d ur7|   t|dks|r||d |d |d | n||d |d |d |d  |  |  |  d S )Nr   r   r   r   )rT   lenset_source_rgbafill_preserverX   stroke)rL   r!   fill_calphaalpha_overridesr)   r)   r*   _fill_and_strokeq   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!   	get_hatchclip_extentsr   scale	translaterE   new_pathr+   rn   	get_alphaget_forced_alpha)rL   rC   r"   r#   rgbFacer!   r   r)   r)   r*   	draw_path|   s   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   rp   r   FT)simplifyr   i  )r!   ru   r+   r   rs   copy_path_flatfill_extentsrt   rE   	enumerater   rg   rT   append_pathrX   rn   rv   rw   )rL   rC   marker_pathmarker_transr"   r#   rx   r!   x1y1x2y2filledi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 )Nrp   r   r      )r   ._unmultiplied_rgba8888_to_premultiplied_argb32r7   rG   create_for_dataraveldatarH   shaper!   rE   rT   set_source_surfacefloatpaintrX   )rL   rC   r   r   imrY   r!   r)   r)   r*   
draw_image   s   zRendererCairo.draw_imageFc	                 C   s   |r|  |||||| d S |j}	|	  |	|| |	  |	jt|  |	| |	  t
 }
|
tjd r>t
jnt
j |	|
 |rR|	t|  |	| |	  d S )Nztext.antialiased)_draw_mathtextr!   ru   r   rT   select_font_facer>   set_font_sizepoints_to_pixelsget_size_in_pointsr7   FontOptionsset_antialiasmplrcParamsANTIALIAS_DEFAULTANTIALIAS_NONEset_font_optionsrotater   deg2rad	show_textrX   )rL   rC   r   r   sr1   angleismath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parserA   rT   rt   r   r   r   ru   r   r   r>   r   r   r   r   chr	rectangleset_source_rgbri   rX   )rL   rC   r   r   r   r1   r   r!   rD   rE   descentglyphsrectsfontfontsizeidxoxoywhr)   r)   r*   r      s*   

zRendererCairo._draw_mathtextc                 C   s   | j | jfS rb   re   rL   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   r   )rJ   get_text_width_height_descentr   r   r   rA   rI   rT   r   r>   r   r   r   text_extentsrX   )rL   r   r1   r   rD   rE   r   r^   r!   	y_bearingr   r   rM   r)   r*   r      s   

z+RendererCairo.get_text_width_height_descentc                 C   s"   | j j  d| j _d| j _| j S )Nr   F)rC   r!   rT   _alpha_forced_alphar   r)   r)   r*   new_gc  s   zRendererCairo.new_gcc                 C   s   |d | j  S )NH   )rA   )rL   r$   r)   r)   r*   r     s   zRendererCairo.points_to_pixelsrb   )FN)__name__
__module____qualname__rK   r_   r   
deprecatedrc   rf   rn   ry   r   r   r   r   r   r   r   r   __classcell__r)   r)   rM   r*   r?   L   s$    	



0
r?   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 )rB   )bevelmiterround)butt
projectingr   c                    s   t    || _d S rb   )rJ   rK   r@   )rL   r@   rM   r)   r*   rK   0  s   

zGraphicsContextCairo.__init__c                 C   s   | j   d S rb   )r!   rX   r   r)   r)   r*   rX   4  s   zGraphicsContextCairo.restorec                    sj   t  | |  }| j}|  r"| j|d |d |d | d S | j|d |d |d |d  d S )Nr   r   r   r   )rJ   	set_alpharv   _rgbrw   r!   rh   )rL   rl   r   rgbrM   r)   r*   r   7  s   "&zGraphicsContextCairo.set_alphac                 C   s"   | j |rtj d S tj d S rb   )r!   r   r7   r   r   )rL   r(   r)   r)   r*   set_antialiased@  s
   z$GraphicsContextCairo.set_antialiasedc                 C   "   | j tj| j|d || _d S )N)capstyle)r!   set_line_capr   check_getitem_capd	_capstyle)rL   csr)   r)   r*   set_capstyleD     
z!GraphicsContextCairo.set_capstylec                 C   sR   |sd S t |j\}}}}| j}|  ||| jj| | || |  d S rb   )	r   r   boundsr!   ru   r   r@   rE   r   )rL   r   r   r   r   r   r!   r)   r)   r*   set_clip_rectangleH  s   z'GraphicsContextCairo.set_clip_rectanglec                 C   sX   |sd S |  \}}| j}|  |t ddd| jj }t||| |	  d S ro   )
get_transformed_path_and_affiner!   ru   r   rs   rt   r@   rE   r+   r   )rL   r"   tpathaffiner!   r)   r)   r*   set_clip_pathQ  s   z"GraphicsContextCairo.set_clip_pathc                 C   sH   ||f| _ |d u r| jg d d S | jt| jt|| d S r   )_dashesr!   set_dashlistr@   r   r   r   )rL   offsetdashesr)   r)   r*   
set_dashes\  s   
zGraphicsContextCairo.set_dashesNc                    s@   t  || t| jdkr| jj| j  d S | jj| j  d S Nr   )rJ   set_foregroundrg   r   r!   r   rh   )rL   fgisRGBArM   r)   r*   r   e  s   z#GraphicsContextCairo.set_foregroundc                 C   s   | j   d d S r   )r!   
get_sourceget_rgbar   r)   r)   r*   get_rgbl  s   zGraphicsContextCairo.get_rgbc                 C   r   )N)	joinstyle)r!   set_line_joinr   r   _joind
_joinstyle)rL   jsr)   r)   r*   set_joinstyleo  r   z"GraphicsContextCairo.set_joinstylec                 C   s"   t || _| j| j| d S rb   )r   
_linewidthr!   set_line_widthr@   r   )rL   r   r)   r)   r*   set_linewidths  s   
z"GraphicsContextCairo.set_linewidthrb   )r   r   r   r7   LINE_JOIN_BEVELLINE_JOIN_MITERLINE_JOIN_ROUNDr   LINE_CAP_BUTTLINE_CAP_SQUARELINE_CAP_ROUNDr   rK   rX   r   r   r   r   r   r   r   r   r   r   r   r)   r)   rM   r*   rB   #  s*    			rB   c                   @      e Zd Zdd ZdS )_CairoRegionc                 C   rd   rb   )_slices_data)rL   slicesr   r)   r)   r*   rK   y  s   
z_CairoRegion.__init__N)r   r   r   rK   r)   r)   r)   r*   r  x  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)rS   r?   figurerA   r  r   r)   r)   r*   	_renderer  s   
zFigureCanvasCairo._rendererc                 C   s   | j S rb   )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  rC   r!   rR   
isinstancer7   rG   RuntimeErrorrO   rP   mathceilx0floorr   r   y0
ValueErrorslicemaxr   
frombufferget_datauint32reshapecopyr  )rL   bboxrY   swshr  r   r  r   slsr   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  rC   r!   rR   r
  r7   rG   r  flushrO   rP   r  r  r   r  r  r  r  mark_dirty_rectanglestartstop)rL   regionrY   r  r  slyslxr)   r)   r*   restore_region  s    
z FigureCanvasCairo.restore_regionc                 C   s   |   | d S rb   )_get_printed_image_surfacewrite_to_png)rL   fobjr)   r)   r*   	print_png  s   zFigureCanvasCairo.print_pngc              	   C   s>   |   \}}|   }|tt|||df d S )Nr   )	get_width_heightr&  r  writer   ._premultiplied_argb32_to_unmultiplied_rgba8888r   r   r  )rL   r(  rD   rE   bufr)   r)   r*   
print_rgba  s
   
zFigureCanvasCairo.print_rgbac                 C   sL   | j j| j_|  \}}ttj||}| jt| | j 	| j |S rb   )
r  rA   r  r*  r7   rG   rH   r_   rF   draw)rL   rD   rE   rY   r)   r)   r*   r&    s   z,FigureCanvasCairo._get_printed_image_surface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   	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 enabledr8  wb)fileobjzUnknown format: {!r}r   r   )r  rA   get_size_inchesrS   r7   r  r4  r6  r
  strgzipGzipFiler9  r  formatr  r_   rF   rC   r!   r   r   pirt   r/  	show_pagefinishclose)rL   fmtr(  r1  rA   w_inh_inwidth_in_pointsheight_in_pointsrY   r!   r)   r)   r*   _save  sH   




zFigureCanvasCairo._saver5  r3  r7  r8  N)r   r   r   propertyr  r	  r  r%  r)  r.  	print_rawr&  rJ  	functoolspartialmethod	print_pdfprint_ps	print_svg
print_svgzr)   r)   r)   r*   r  ~  s    
	3r  r`   c                   @   r   )_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)incref)r7   r   r
  rF   _from_pointerfficastidobject__basicsize__rC   r!   )rL   r!   r)   r)   r*   r_     s   

z_RendererGTKCairo.set_contextN)r   r   r   r_   r)   r)   r)   r*   rS    s    rS  c                   @   s   e Zd ZejZeZeZ	dS )_BackendCairoN)
r   r   r   r7   versionbackend_versionr  FigureCanvasr
   FigureManagerr)   r)   r)   r*   r\    s    r\  rb   )'__doc__rM  r>  r  numpyr   r7   version_infoImportErrorrT  err
matplotlibr    r   r   r   matplotlib.backend_basesr   r	   r
   r   r   matplotlib.font_managerr   matplotlib.pathr   matplotlib.transformsr   r+   r>   r?   rB   r  r  r   rS  exportr\  r)   r)   r)   r*   <module>   sT    


 XU{