U
    d»{jÆJ  ã                   @   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k
rŒ   zddl	ZW n, ek
r† Z
 zedƒe
‚W 5 dZ
[
X Y nX Y nX 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rºt	 
|  ¡ ¡}|d d… }|dd … }| j|d |d d  |d d |d  |žŽ  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   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/matplotlib/backends/backend_cairo.pyÚ_append_path(   s$      ÿ




2
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                    s8   zt ˆ d| › �ƒƒ W S  tk
r2   t ˆ | ƒ Y S X 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
ultralightZlightÚnormalZmediumZregularZsemiboldÚboldZheavyZ	ultraboldÚblack)Úitalicr4   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    rD   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ÚhasattrrH   rI   rJ   r=   r>   ÚsaveZ
reset_clipZcopy_clip_rectangle_listÚ	TypeErrorÚrestorer<   r   )rE   r   ÚsurfaceÚsizeÚextÚrectÚrestr   r   r    Úset_contextu   s    
zRendererCairo.set_contextú3.6rU   )Úalternativec                 C   s   t  |¡| j_d S ©N)r,   r?   r<   r   )rE   rP   r   r   r    Úset_ctx_from_surface‡   s    z"RendererCairo.set_ctx_from_surfacec                 C   s   || _ || _d S rX   ©r=   r>   )rE   r=   r>   r   r   r    Úset_width_height‹   s    zRendererCairo.set_width_heightc                 C   sz   |d k	rn|  ¡  t|ƒdks |r>| |d |d |d |¡ n | |d |d |d |d ¡ | ¡  | ¡  | ¡  d S )Nr   r   r   r   )rM   ÚlenÚset_source_rgbaÚfill_preserverO   Ústroke)rE   r   Zfill_cÚalphaZalpha_overridesr   r   r    Ú_fill_and_stroke�   s     zRendererCairo._fill_and_strokeNc                 C   st   |j }|d kr"| ¡ d kr"| ¡ nd }|tƒ  dd¡ d| j¡ }| ¡  t||||ƒ |  	||| 
¡ | ¡ ¡ d S ©Nr   éÿÿÿÿr   )r   Z	get_hatchZclip_extentsr   ÚscaleÚ	translater>   Únew_pathr!   ra   Ú	get_alphaÚget_forced_alpha)rE   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   rc   r   FT)Úsimplifyr   iè  )r   rf   r!   r   rd   Zcopy_path_flatZfill_extentsre   r>   Ú	enumerater   r\   rM   Zappend_pathrO   ra   rg   rh   )rE   r<   Zmarker_pathZmarker_transr   r   ri   r   Úx1Úy1Zx2Úy2ZfilledÚiZverticesÚcodesÚxÚyr   r   r    Údraw_markers©   sH     ÿÿ
   ÿ   ÿ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 )Nrc   r   r   é   )r   Z._unmultiplied_rgba8888_to_premultiplied_argb32r,   r@   Zcreate_for_dataZravelÚdatarA   Úshaper   r>   rM   Zset_source_surfaceÚfloatZpaintrO   )rE   r<   rr   rs   ZimrP   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   rf   r   rM   Ú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_textrO   )rE   r<   rr   rs   Ú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:   rM   re   rƒ   r   r„   rf   r   r{   r1   r   r|   r}   r…   ÚchrÚ	rectangleÚset_source_rgbr^   rO   )rE   r<   rr   rs   r†   r'   r‡   r   r=   r>   ÚdescentZglyphsZrectsZfontZfontsizeÚidxÚoxZoyÚwÚhr   r   r    rz      s*    ÿ
ÿ
zRendererCairo._draw_mathtextc                 C   s   | j | jfS rX   rZ   ©rE   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   ru   )rC   Úget_text_width_height_descentrŒ   r�   rŽ   r:   rB   rM   r{   r1   r|   r}   r~   Ztext_extentsrO   )rE   r†   r'   rˆ   r=   r>   r’   Ú_r   Z	y_bearingr•   r–   rF   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   rM   Ú_alphaZ_forced_alphar—   r   r   r    Únew_gc6  s    zRendererCairo.new_gcc                 C   s   |d | j  S )NéH   )r:   )rE   r   r   r   r    r}   =  s    zRendererCairo.points_to_pixels)N)N)FN)Ú__name__Ú
__module__Ú__qualname__rD   rU   r   Ú
deprecatedrY   r[   ra   rj   rt   ry   rŠ   rz   r˜   rš   r�   r}   Ú__classcell__r   r   rF   r    r8   k   s"   	


 ÿ
0
r8   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 rX   )rC   rD   r9   )rE   r9   rF   r   r    rD   O  s    
zGraphicsContextCairo.__init__c                 C   s   | j  ¡  d S rX   )r   rO   r—   r   r   r    rO   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   )rC   Ú	set_alpharg   Ú_rgbrh   r   r]   )rE   r`   rœ   ÚrgbrF   r   r    r¥   V  s     zGraphicsContextCairo.set_alphac                 C   s   | j  |rtjntj¡ d S rX   )r   r   r,   r�   r‚   )rE   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)rE   Úcsr   r   r    Úset_capstylec  s    z!GraphicsContextCairo.set_capstylec                 C   sR   |sd S t  |j¡\}}}}| j}| ¡  | || jj| | ||¡ | ¡  d S rX   )	r   r¤   Zboundsr   rf   r�   r9   r>   r   )rE   r�   rr   rs   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 rb   )
Zget_transformed_path_and_affiner   rf   r   rd   re   r9   r>   r!   r   )rE   r   ZtpathZaffiner   r   r   r    Úset_clip_pathp  s    ÿz"GraphicsContextCairo.set_clip_pathc                 C   sF   ||f| _ |d kr"| j g d¡ n | j t| j t |¡¡ƒ|¡ d S r‹   )Z_dashesr   Zset_dashÚlistr9   r}   r   r   )rE   Ú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   )rC   Úset_foregroundr\   r¦   r   r‘   r]   )rE   ZfgZisRGBArF   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)rE   Újsr   r   r    Úset_joinstyleŽ  s    z"GraphicsContextCairo.set_joinstylec                 C   s"   t |ƒ| _| j | j |¡¡ d S rX   )rx   Z
_linewidthr   Zset_line_widthr9   r}   )rE   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ª   rD   rO   r¥   r¨   r¬   r­   r®   r²   r´   r¶   r¹   rº   r£   r   r   rF   r    r;   B  s(   ýý			r;   c                   @   s   e Zd Zdd„ ZdS )Ú_CairoRegionc                 C   s   || _ || _d S rX   )Ú_slicesÚ_data)rE   Zslicesrv   r   r   r    rD   ˜  s    z_CairoRegion.__init__N)rŸ   r    r¡   rD   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)rL   r8   Úfigurer:   r¿   r—   r   r   r    Ú	_rendererž  s    
zFigureCanvasCairo._rendererc                 C   s   | j S rX   )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r¢d|kr¢||kr¢|j|jksªt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   rK   Ú
isinstancer,   r@   ÚRuntimeErrorrH   rI   ÚmathÚceilÚx0Úfloorrm   rn   Úy0Ú
ValueErrorÚsliceÚmaxr   Ú
frombufferÚget_dataÚuint32ÚreshapeÚcopyr»   )rE   ZbboxrP   ÚswÚshrÇ   rm   rÉ   rn   Úslsrv   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   rK   rÃ   r,   r@   rÄ   ÚflushrH   rI   r¼   r½   r   rÍ   rÎ   rÏ   rÐ   Zmark_dirty_rectangleÚstartÚstop)rE   ÚregionrP   rÒ   rÓ   ZslyZslxr   r   r    Úrestore_region¾  s*    ÿ
ÿÿÿ  
 
ÿz FigureCanvasCairo.restore_regionc                 C   s   |   ¡  |¡ d S rX   )Ú_get_printed_image_surfaceZwrite_to_png)rE   Úfobjr   r   r    Ú	print_pngÌ  s    zFigureCanvasCairo.print_pngc              	   C   s>   |   ¡ \}}|  ¡  ¡ }| t t |¡ ||df¡¡¡ d S )Nru   )	Úget_width_heightrÛ   rÎ   Úwriter   Z._premultiplied_argb32_to_unmultiplied_rgba8888r   r   rÐ   )rE   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 rX   )
rÀ   r:   rÁ   rÞ   r,   r@   rA   rU   r?   Údraw)rE   r=   r>   rP   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r’ttdƒs‚tdƒ‚t |||¡}	nh|d	krìttd
ƒs¬tdƒ‚|dkrÜt|t	ƒrÌt
 |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_inchesrL   r,   rÄ   rå   rç   rÃ   ÚstrÚgzipÚGzipFilerê   rÊ   ÚformatrÁ   rU   r?   r<   r   rƒ   r   Úpire   râ   Z	show_pageÚfinishÚclose)rE   ÚfmtrÜ   rã   r:   Zw_inZh_inZwidth_in_pointsZheight_in_pointsrP   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¾   rV   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   )rE   r   r   r   r    rU     s    

ÿþþüz_RendererGTKCairo.set_contextN)rŸ   r    r¡   rU   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_anglesr8   r;   r»   r¾   r¢   rù   Zexportr   r   r   r   r    Ú<module>   sv   
ÿþ
íý XU{