o
    hH                     @   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alphaforced_alpha r   u/var/www/html/construction_image-detection-poc/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)remove_nansclipr   r   )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$   




:

r2   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nameFONT_SLANT_styleweighti&  )r4   cairoupperr   weight_dictgetFONT_WEIGHT_NORMALFONT_WEIGHT_BOLD)r8   r9   r:   slantr=   r   r7   r   _cairo_font_args_from_font_prop>   s   
rE   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heightr>   ContextImageSurfaceFORMAT_ARGB32text_ctxsuper__init__)selfrH   	__class__r   r   rR   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hasattrrV   rW   rX   rK   rL   save
reset_clipcopy_clip_rectangle_list	TypeErrorrestorerJ   r   )rS   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)r[   r   fill_preserver_   stroke)r   fill_cr   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
||| |  |  |  | }|rt| j}| tjj||}	t|	}
t|
|t || d|d  |
| |  |
j|   |
  |
  t|	}|tj j! |	  |"| |  |  |  d S Nr   r   )#r   	get_hatchclip_extentsr   scale	translaterL   new_pathr2   r[   r   	get_alphaget_forced_alpharh   r_   get_hatch_pathintrH   rY   create_similarr>   ContentCOLOR_ALPHArM   set_line_widthpoints_to_pixelsget_hatch_linewidthr   get_hatch_colorri   SurfacePattern
set_extendExtendREPEAT
set_source)rS   rJ   r+   r,   rgbFacer   r   
hatch_pathrH   hatch_surface	hatch_ctx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   rn   r   FT)simplifyr   i  )r   rs   r2   r   rq   copy_path_flatfill_extentsrr   rL   	enumerater   r   r[   append_pathr_   rl   rt   ru   )rS   rJ   marker_pathmarker_transr+   r,   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 )Nrn   r   r      )r   ._unmultiplied_rgba8888_to_premultiplied_argb32r>   rN   create_for_dataraveldatarO   shaper   rL   r[   set_source_surfacefloatpaintr_   )rS   rJ   r   r   imr`   r   r   r   r   
draw_image   s   zRendererCairo.draw_imageFc	                 C   s   |r|  |||||| d S |j}	|	  |	|| |	  |	jt|  |	| |	  t
 }
|
|  |	|
 |rK|	t|  |	| |	  d S rg   )_draw_mathtextr   rs   r    r[   select_font_facerE   set_font_sizer|   get_size_in_pointsr>   FontOptionsset_antialiasget_antialiasedset_font_optionsrotater&   deg2rad	show_textr_   )rS   rJ   r   r   sr8   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parserH   r[   rr   r   r&   r   rs   r    r   rE   r   r   r|   r   chr	rectangleset_source_rgbrh   r_   )rS   rJ   r   r   r   r8   r   r   rK   rL   descentglyphsrectsfontfontsizeidxoxoywhr   r   r   r      s*   

zRendererCairo._draw_mathtextc                 C   s   | j | jfS rg   )rK   rL   rS   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   )rQ   get_text_width_height_descentr   r   r   rH   rP   r[   r   rE   r   r|   r   text_extentsr_   )rS   r   r8   r   rK   rL   r   re   r   	y_bearingr   r   rT   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)rJ   r   r[   _alpha_forced_alpha_hatchr   r   r   r   new_gc'  s
   zRendererCairo.new_gcc                 C   s   |d | j  S )NH   )rH   )rS   r-   r   r   r   r|   3  s   zRendererCairo.points_to_pixelsrg   )FN)__name__
__module____qualname__rR   rf   staticmethodrl   r   r   r   r   r   r   r   r   r|   __classcell__r   r   rT   r   rF   R   s    	

&
0
rF   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 )rI   )bevelmiterround)butt
projectingr   c                    s   t    || _d S rg   )rQ   rR   rG   )rS   rG   rT   r   r   rR   E  s   

zGraphicsContextCairo.__init__c                 C   s   | j   d S rg   )r   r_   r   r   r   r   r_   I  s   zGraphicsContextCairo.restorec                    s*   t  | t| j| j|  |   d S rg   )rQ   	set_alphar   r   _rgbrt   ru   )rS   r   rT   r   r   r   L  s   zGraphicsContextCairo.set_alphac                 C   s"   | j |rtj d S tj d S rg   )r   r   r>   ANTIALIAS_DEFAULTANTIALIAS_NONE)rS   r1   r   r   r   set_antialiasedQ  s
   z$GraphicsContextCairo.set_antialiasedc                 C   s
   | j  S rg   )r   get_antialiasr   r   r   r   r   U  s   
z$GraphicsContextCairo.get_antialiasedc                 C   "   | j tj| j|d || _d S )N)capstyle)r   set_line_capr   check_getitem_capd	_capstyle)rS   csr   r   r   set_capstyleX     
z!GraphicsContextCairo.set_capstylec                 C   sR   |sd S t |j\}}}}| j}|  ||| jj| | || |  d S rg   )	r&   r   boundsr   rs   r   rG   rL   r   )rS   r   r   r   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 rm   )
get_transformed_path_and_affiner   rs   r   rq   rr   rG   rL   r2   r   )rS   r+   tpath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   )_dashesr   set_dashlistrG   r|   r&   r'   )rS   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   )rQ   set_foregroundr   r   r   r   r   )rS   fgisRGBArT   r   r   r   y  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)rS   jsr   r   r   set_joinstyle  r   z"GraphicsContextCairo.set_joinstylec                 C   s"   t || _| j| j| d S rg   )r   
_linewidthr   r{   rG   r|   )rS   r   r   r   r   set_linewidth  s   
z"GraphicsContextCairo.set_linewidthrg   )r   r   r   r>   LINE_JOIN_BEVELLINE_JOIN_MITERLINE_JOIN_ROUNDr  LINE_CAP_BUTTLINE_CAP_SQUARELINE_CAP_ROUNDr   rR   r_   r   r   r   r   r   r   r   r   r   r  r  r   r   r   rT   r   rI   8  s,    		rI   c                   @   s   e Zd Zdd ZdS )_CairoRegionc                 C   s   || _ || _d S rg   )_slices_data)rS   slicesr   r   r   r   rR     s   
z_CairoRegion.__init__N)r   r   r   rR   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)rZ   rF   figurerH   r  r   r   r   r   	_renderer  s   
zFigureCanvasCairo._rendererc                 C   s   | j S rg   )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  rJ   r   rY   
isinstancer>   rN   RuntimeErrorrV   rW   mathceilx0floorr   r   y0
ValueErrorslicemaxr&   
frombufferget_datauint32reshapecopyr  )rS   bboxr`   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  rJ   r   rY   r  r>   rN   r  flushrV   rW   r  r  r&   r   r!  r"  r#  mark_dirty_rectanglestartstop)rS   regionr`   r&  r'  slyslxr   r   r   restore_region  s    
z FigureCanvasCairo.restore_regionc                 C   s   |   | d S rg   )_get_printed_image_surfacewrite_to_png)rS   fobjr   r   r   	print_png  s   zFigureCanvasCairo.print_pngc              	   C   s>   |   \}}|   }|tt|||df d S )Nr   )	get_width_heightr2  r!  writer   ._premultiplied_argb32_to_unmultiplied_rgba8888r&   r'   r#  )rS   r4  rK   rL   bufr   r   r   
print_rgba  s
   
zFigureCanvasCairo.print_rgbac                 C   sL   | j j| j_|  \}}ttj||}| jt| | j 	| j |S rg   )
r  rH   r  r6  r>   rN   rO   rf   rM   draw)rS   rK   rL   r`   r   r   r   r2    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 enabledrD  wb)fileobjzUnknown format: r   r   )r  rH   get_size_inchesrZ   r>   r  r@  rB  r  strgzipGzipFilerE  r  r  rf   rM   rJ   r   r   r&   pirr   r;  	show_pagefinishclose)rS   fmtr4  r=  rH   w_inh_inwidth_in_pointsheight_in_pointsr`   r   r   r   r   _save  sH   




zFigureCanvasCairo._saverA  r?  rC  rD  N)r   r   r   propertyr  r  r)  r1  r5  r:  	print_rawr2  rU  	functoolspartialmethod	print_pdfprint_ps	print_svg
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   r>   versionbackend_versionr  FigureCanvasr
   FigureManagerr   r   r   r   r^    s    r^  rg   )$__doc__rX  rJ  r  numpyr&   r>   version_infoImportError	cairocffierr r   r   r   matplotlib.backend_basesr   r	   r
   r   r   matplotlib.font_managerr   matplotlib.pathr   matplotlib.transformsr   r   r2   rE   rF   rI   r  r  exportr^  r   r   r   r   <module>   sP    


 gT{