o
    tBh>H                     @   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 n! ey@   zddl	ZW n ey= 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mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ej Z!ej"dkrdd Z#ndd Z#d1ddZ$dd Z%i dej&dej&dej&dej&dej&dej'dej'dej'dej'dej&dej&dej&d ej&d!ej&d"ej'd#ej'd$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Z0ej1G d/d0 d0eZ2dS )2z
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.11.0 or cairocffi is installed   )_apicbookfont_manager)_Backend_check_savefig_extra_argsFigureCanvasBaseFigureManagerBaseGraphicsContextBaseRendererBase)ttfFontPropertyMathTextParser)Path)Affine2D	cairocffic                 C   s8   t | tjstjjtjdt| tj d dd} | S )Nz
cairo_t **r   T)incref)	
isinstancecairoContext_from_pointerfficastidobject__basicsize__ctx r    x/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/matplotlib/backends/backend_cairo.py_to_context,   s   r"   c                 C   s   | S Nr    r   r    r    r!   r"   6   s   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)remove_nansclipr      )iter_segmentsr   MOVETOmove_to	CLOSEPOLY
close_pathLINETOline_toCURVE3npasarrayget_current_pointcurve_to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!   attrQ   s
   z-_cairo_font_args_from_font_prop.<locals>.attrnameFONT_SLANT_styleweighti&  )r>   r   upperr   weight_dictgetFONT_WEIGHT_NORMALFONT_WEIGHT_BOLD)rB   rC   rD   slantrG   r    rA   r!   _cairo_font_args_from_font_propL   s   
rN   d      i,  i  i  iX  i  i   i  
ultralightlightnormalmediumregularsemiboldboldheavy)	ultraboldblack)italicrS   obliquec                       s   e Zd Zededd Z fddZdd Z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 )"RendererCairoz3.4c                 C   s   t dS )NCairor   selfr    r    r!   <lambda>   s    zRendererCairo.<lambda>c                    s8   || _ t| d| _tttjdd| _t 	  d S )N)rendererr   )
dpiGraphicsContextCairogcr   r   ImageSurfaceFORMAT_ARGB32text_ctxsuper__init__)r`   rc   	__class__r    r!   rj      s   zRendererCairo.__init__c                 C   s   t || j_d S r#   )r   r   re   r   )r`   surfacer    r    r!   set_ctx_from_surface   s   z"RendererCairo.set_ctx_from_surfacec                 C      || _ || _d S r#   widthheight)r`   rq   rr   r    r    r!   set_width_height      
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   )savelenset_source_rgbafill_preserverestorestroke)r`   r   fill_calpha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   	get_hatchclip_extentsr   scale	translaterr   new_pathr<   r~   	get_alphaget_forced_alpha)r`   re   r5   r6   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   r   r   FT)simplifyr&   i  )r   r   r<   r   r   copy_path_flatfill_extentsr   rr   	enumerater(   rv   ru   append_pathry   r~   r   r   )r`   re   marker_pathmarker_transr5   r6   r   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 )Nr   r   r      )r   ._unmultiplied_rgba8888_to_premultiplied_argb32r   rf   create_for_dataraveldatarg   shaper   rr   ru   set_source_surfacefloatpaintry   )r`   re   r   r   imrm   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   r   r*   ru   select_font_facerN   set_font_sizepoints_to_pixelsget_size_in_pointsr   FontOptionsset_antialiasmplrcParamsANTIALIAS_DEFAULTANTIALIAS_NONEset_font_optionsrotater0   deg2rad	show_textry   )r`   re   r   r   srB   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parserc   ru   r   r   r0   r   r   r*   r   rN   r   r   r   r   chr	rectangleset_source_rgbrx   ry   )r`   re   r   r   r   rB   r   r   rq   rr   descentglyphsrectsfontfontsizeidxoxoywhr    r    r!   r     s*   

zRendererCairo._draw_mathtextc                 C   s   | j | jfS r#   rp   r_   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   )ri   get_text_width_height_descentr   r   r   rc   rh   ru   r   rN   r   r   r   text_extentsry   )r`   r   rB   r   rq   rr   r   _r   	y_bearingr   r   rk   r    r!   r   !  s   

z+RendererCairo.get_text_width_height_descentc                 C   s"   | j j  d| j _d| j _| j S )Nr   F)re   r   ru   _alpha_forced_alphar_   r    r    r!   new_gc9  s   zRendererCairo.new_gcc                 C   s   |d | j  S )NH   )rc   )r`   r7   r    r    r!   r   @  s   zRendererCairo.points_to_pixelsr#   )FN)__name__
__module____qualname__r   
deprecatedpropertyr   rj   rn   rs   r~   r   r   r   r   r   r   r   r   r   __classcell__r    r    rk   r!   r]   }   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 )rd   )bevelmiterround)butt
projectingr   c                    s   t    || _d S r#   )ri   rj   rb   )r`   rb   rk   r    r!   rj   R  s   

zGraphicsContextCairo.__init__c                 C   s   | j   d S r#   )r   ry   r_   r    r    r!   ry   V  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'   )ri   	set_alphar   _rgbr   r   rw   )r`   r|   r   rgbrk   r    r!   r   Y  s   "&zGraphicsContextCairo.set_alphac                 C   s"   | j |rtj d S tj d S r#   )r   r   r   r   r   )r`   r;   r    r    r!   set_antialiasedb  s
   z$GraphicsContextCairo.set_antialiasedc                 C   "   | j tj| j|d || _d S )N)capstyle)r   set_line_capr   check_getitem_capd	_capstyle)r`   csr    r    r!   set_capstylef     
z!GraphicsContextCairo.set_capstylec                 C   sR   |sd S t |j\}}}}| j}|  ||| jj| | || |  d S r#   )	r0   r   boundsr   r   r   rb   rr   r%   )r`   r   r   r   r   r   r   r    r    r!   set_clip_rectanglej  s   z'GraphicsContextCairo.set_clip_rectanglec                 C   sX   |sd S |  \}}| j}|  |t ddd| jj }t||| |	  d S r   )
get_transformed_path_and_affiner   r   r   r   r   rb   rr   r<   r%   )r`   r5   tpathaffiner   r    r    r!   set_clip_paths  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listrb   r   r0   r1   )r`   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'   )ri   set_foregroundrv   r   r   r   rw   )r`   fgisRGBArk   r    r!   r     s   z#GraphicsContextCairo.set_foregroundc                 C   s   | j   d d S r   )r   
get_sourceget_rgbar_   r    r    r!   get_rgb  s   zGraphicsContextCairo.get_rgbc                 C   r   )N)	joinstyle)r   set_line_joinr   r   _joind
_joinstyle)r`   jsr    r    r!   set_joinstyle  r   z"GraphicsContextCairo.set_joinstylec                 C   s"   t || _| j| j| d S r#   )r   
_linewidthr   set_line_widthrb   r   )r`   r   r    r    r!   set_linewidth  s   
z"GraphicsContextCairo.set_linewidthr#   )r   r   r   r   LINE_JOIN_BEVELLINE_JOIN_MITERLINE_JOIN_ROUNDr  LINE_CAP_BUTTLINE_CAP_SQUARELINE_CAP_ROUNDr   rj   ry   r   r   r   r   r   r   r   r  r  r
  r   r    r    rk   r!   rd   E  s*    			rd   c                   @   s   e Zd Zdd ZdS )_CairoRegionc                 C   ro   r#   )_slices_data)r`   slicesr   r    r    r!   rj     rt   z_CairoRegion.__init__N)r   r   r   rj   r    r    r    r!   r    s    r  c                   @   s   e Zd Zdd Zdd Zedd Zedd ZeZd	d
 Z	e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  | 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)	_rendererre   r   
get_targetr   r   rf   RuntimeError	get_width
get_heightmathceilx0floorr   r   y0
ValueErrorslicemaxr0   
frombufferget_datauint32reshapecopyr  )r`   bboxrm   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  re   r   r  r   r   rf   r  flushr  r  r  r  r0   r#  r$  r%  r&  mark_dirty_rectanglestartstop)r`   regionrm   r)  r*  slyslxr    r    r!   restore_region  s    
z FigureCanvasCairo.restore_regionc                 C   s   |   | d S r#   )_get_printed_image_surfacewrite_to_png)r`   fobjr    r    r!   	print_png  s   zFigureCanvasCairo.print_pngc              	   C   s>   |   \}}|   }|tt|||df d S )Nr   )	get_width_heightr5  r$  writer   ._premultiplied_argb32_to_unmultiplied_rgba8888r0   r1   r&  )r`   r7  rq   rr   bufr    r    r!   
print_rgba  s
   
zFigureCanvasCairo.print_rgbac                 C   sN   |   \}}t| jj}||| ttj||}|| | j	| |S r#   )
r9  r]   figurerc   rs   r   rf   rg   rn   draw)r`   rq   rr   rb   rm   r    r    r!   r5    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|t| j j}
|
|| |
|	 |
jj}|dkr|tjd  |d|  | 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 enabledrH  wb)fileobjzUnknown format: {!r}r   r   )r>  rc   get_size_incheshasattrr   r  rD  rF  r   strgzipGzipFilerI  r   formatr]   rs   rn   re   r   r   r0   pir   r?  	show_pagefinishclose)r`   fmtr7  rA  rc   w_inh_inwidth_in_pointsheight_in_pointsrm   rb   r   r    r    r!   _save  sJ   




zFigureCanvasCairo._saverE  rC  rG  rH  N)r   r   r   r,  r4  r	   r8  r=  	print_rawr5  r[  	functoolspartialmethod	print_pdfprint_ps	print_svg
print_svgzr    r    r    r!   r    s    

	5r  c                   @   s   e Zd ZeZeZdS )_BackendCairoN)r   r   r   r  FigureCanvasr   FigureManagerr    r    r    r!   rc    s    rc  r#   )3__doc__r]  rO  r  numpyr0   r   version_infoImportErrorr   err
matplotlibr    r   r   r   matplotlib.backend_basesr   r	   r
   r   r   r   matplotlib.font_managerr   matplotlib.mathtextr   matplotlib.pathr   matplotlib.transformsr   versionbackend_versionr   r"   r<   rN   rK   rL   
_f_weightsFONT_SLANT_ITALICFONT_SLANT_NORMALFONT_SLANT_OBLIQUE	_f_anglesr]   rd   r  r  exportrc  r    r    r    r!   <module>   s    
 



	
 IUu