a
    ëÝEb>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 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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�rdd„ Z#ndd„ 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ƒZ0ej1G dd„ deƒƒZ2d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.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ƒs4tjjtj dt| ƒtj ¡d dd�} | S )Nz
cairo_t **r   T)Zincref)	Ú
isinstanceÚcairoÚContextZ_from_pointerÚffiÚcastÚidÚobjectÚ__basicsize__©Úctx© r   úa/home/ja/django-apps/lartica_env/lib/python3.9/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 ]Æ\}}|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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)	r   ÚpathÚ	transformr"   ÚpointsÚcodeÚcurÚaÚbr   r   r   Ú_append_path:   s     ÿ




:
r0   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   ÚattrQ   s    z-_cairo_font_args_from_font_prop.<locals>.attrÚnameZFONT_SLANT_ÚstyleÚweighti&  )r2   r   Úupperr   Zweight_dictÚgetÚFONT_WEIGHT_NORMALÚFONT_WEIGHT_BOLD)r6   r7   r8   Zslantr:   r   r5   r   Ú_cairo_font_args_from_font_propL   s    ÿþr?   )éd   éÈ   i,  i�  iô  iX  i¼  i   i„  Z
ultralightÚlightÚnormalZmediumZregularZsemiboldÚboldZheavyZ	ultraboldÚblack)ÚitalicrC   Z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 )NZCairor   ©Úselfr   r   r   Ú<lambda>   ó    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__)rI   rM   ©Ú	__class__r   r   rT   �   s    ÿzRendererCairo.__init__c                 C   s   t  |¡| j_d S r!   )r   r   rO   r   )rI   Úsurfacer   r   r   Úset_ctx_from_surfaceˆ   s    z"RendererCairo.set_ctx_from_surfacec                 C   s   || _ || _d S r!   ©ÚwidthÚheight)rI   rZ   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   )ÚsaveÚlenÚset_source_rgbaÚfill_preserveÚrestoreZstroke)rI   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_pathr0   rc   Ú	get_alphaÚget_forced_alpha)rI   rO   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   re   r   FT)Úsimplifyr#   iè  )r   rh   r0   r   rf   Zcopy_path_flatZfill_extentsrg   r[   Ú	enumerater%   r^   r]   Zappend_pathra   rc   ri   rj   )rI   rO   Zmarker_pathZmarker_transr)   r*   rk   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 )Nre   r   r   é   )r   Z._unmultiplied_rgba8888_to_premultiplied_argb32r   rP   Zcreate_for_dataZravelÚdatarQ   Úshaper   r[   r]   Zset_source_surfaceÚfloatZpaintra   )rI   rO   rt   ru   ZimrW   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   rh   r&   r]   Úselect_font_facer?   Ú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_textra   )rI   rO   rt   ru   Úsr6   ÚangleÚismathÚ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ÚparserM   r]   rg   r…   r'   r†   rh   r&   r}   r?   r   r~   r   r‡   ÚchrÚ	rectangleÚset_source_rgbr`   ra   )rI   rO   rt   ru   rˆ   r6   r‰   r   rZ   r[   ÚdescentZglyphsZrectsÚfontZfontsizeÚidxÚoxZoyÚwÚhr   r   r   r|     s*    ÿ
ÿ
zRendererCairo._draw_mathtextc                 C   s   | j | jfS r!   rY   rH   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   rw   )rS   Úget_text_width_height_descentr�   r�   r‘   rM   rR   r]   r}   r?   r~   r   r€   Ztext_extentsra   )rI   rˆ   r6   rŠ   rZ   r[   r•   Ú_r   Z	y_bearingr™   rš   rU   r   r   r�   !  s    ÿ

z+RendererCairo.get_text_width_height_descentc                 C   s"   | j j ¡  d| j _d| j _| j S )Nr   F)rO   r   r]   Ú_alphaZ_forced_alpharH   r   r   r   Únew_gc9  s    zRendererCairo.new_gcc                 C   s   |d | j  S )NéH   )rM   )rI   r+   r   r   r   r   @  s    zRendererCairo.points_to_pixels)N)N)FN)Ú__name__Ú
__module__Ú__qualname__r   Ú
deprecatedÚpropertyr�   rT   rX   r\   rc   rl   rv   r{   r�   r|   r›   r�   r    r   Ú__classcell__r   r   rU   r   rG   }   s"   
ÿ
 ÿ
0
rG   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 )rN   )ZbevelZmiterÚround)ZbuttZ
projectingr¨   c                    s   t ƒ  ¡  || _d S r!   )rS   rT   rL   )rI   rL   rU   r   r   rT   R  s    
zGraphicsContextCairo.__init__c                 C   s   | j  ¡  d S r!   )r   ra   rH   r   r   r   ra   V  s    zGraphicsContextCairo.restorec                    sh   t ƒ  |¡ |  ¡ }| j}|  ¡ rB| j |d |d |d |¡ n"| j |d |d |d |d ¡ d S )Nr   r   r   r$   )rS   Ú	set_alphari   Ú_rgbrj   r   r_   )rI   rb   rŸ   ÚrgbrU   r   r   r©   Y  s     zGraphicsContextCairo.set_alphac                 C   s   | j  |rtjntj¡ d S r!   )r   r�   r   rƒ   r„   )rI   r/   r   r   r   Úset_antialiasedb  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)rI   Úcsr   r   r   Úset_capstylef  s    z!GraphicsContextCairo.set_capstylec                 C   sR   |sd S t  |j¡\}}}}| j}| ¡  | || jj| | ||¡ | ¡  d S r!   )	r'   r¨   Zboundsr   rh   r“   rL   r[   r"   )rI   r“   rt   ru   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 rd   )
Zget_transformed_path_and_affiner   rh   r   rf   rg   rL   r[   r0   r"   )rI   r)   ZtpathZaffiner   r   r   r   Úset_clip_paths  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ÚlistrL   r   r'   r(   )rI   Ú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$   )rS   Úset_foregroundr^   rª   r   r”   r_   )rI   ÚfgZisRGBArU   r   r   r¸   ‡  s    z#GraphicsContextCairo.set_foregroundc                 C   s   | j  ¡  ¡ d d… S r·   )r   Ú
get_sourceZget_rgbarH   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)rI   Újsr   r   r   Úset_joinstyle‘  s    z"GraphicsContextCairo.set_joinstylec                 C   s"   t |ƒ| _| j | j |¡¡ d S r!   )rz   Z
_linewidthr   Zset_line_widthrL   r   )rI   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®   rT   ra   r©   r¬   r°   r±   r²   r¶   r¸   r»   r¾   r¿   r§   r   r   rU   r   rN   E  s(   ýý			rN   c                   @   s   e Zd Zdd„ ZdS )Ú_CairoRegionc                 C   s   || _ || _d S r!   )Ú_slicesÚ_data)rI   Zslicesrx   r   r   r   rT   ›  s    z_CairoRegion.__init__N)r¢   r£   r¤   rT   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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)Ú	_rendererrO   r   Ú
get_targetr   r   rP   ÚRuntimeErrorÚ	get_widthÚ
get_heightÚmathÚceilÚx0Úfloorro   rp   Úy0Ú
ValueErrorÚsliceÚmaxr'   Ú
frombufferÚget_dataÚuint32ÚreshapeÚcopyrÀ   )rI   ZbboxrW   ÚswÚshrË   ro   rÍ   rp   Úslsrx   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Ä   rO   r   rÅ   r   r   rP   rÆ   ÚflushrÇ   rÈ   rÁ   rÂ   r'   rÑ   rÒ   rÓ   rÔ   Zmark_dirty_rectangleÚstartÚstop)rI   ÚregionrW   rÖ   r×   ZslyZslxr   r   r   Úrestore_regionµ  s$    ÿ
ÿÿÿÿz FigureCanvasCairo.restore_regionc                 C   s   |   ¡  |¡ d S r!   )Ú_get_printed_image_surfaceZwrite_to_png)rI   Úfobjr   r   r   Ú	print_pngÃ  s    zFigureCanvasCairo.print_pngc              	   C   s>   |   ¡ \}}|  ¡  ¡ }| t t |¡ ||df¡¡¡ d S )Nrw   )	Úget_width_heightrß   rÒ   Úwriter   Z._premultiplied_argb32_to_unmultiplied_rgba8888r'   r(   rÔ   )rI   rà   rZ   r[   Úbufr   r   r   Ú
print_rgbaÇ  s
    ÿzFigureCanvasCairo.print_rgbac                 C   sN   |   ¡ \}}t| jjƒ}| ||¡ t tj||¡}| |¡ | j 	|¡ |S r!   )
râ   rG   ÚfigurerM   r\   r   rP   rQ   rX   Údraw)rI   rZ   r[   rL   rW   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	v 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 |¡ƒ‚t| j jƒ}
|
 ||¡ |
 |	¡ |
jj}|dk�rL| tjd ¡ | d| ¡ | 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æ   rM   Zget_size_inchesÚhasattrr   rÆ   rê   rì   r   ÚstrÚgzipÚGzipFilerï   rÎ   ÚformatrG   r\   rX   rO   r   r…   r'   Úpirg   rç   Z	show_pageÚfinishÚclose)rI   Úfmtrà   rè   rM   Zw_inZh_inZwidth_in_pointsZheight_in_pointsrW   rL   r   r   r   r   Ú_saveÙ  sH    ÿ






zFigureCanvasCairo._saverë   ré   rí   rî   N)r¢   r£   r¤   rÙ   rÞ   r	   rá   rå   Z	print_rawrß   rû   Ú	functoolsÚpartialmethodZ	print_pdfZprint_psZ	print_svgZ
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Ã   ZFigureCanvasr   ZFigureManagerr   r   r   r   rþ     s   rþ   )N)3Ú__doc__rü   rô   rÉ   Únumpyr'   r   Úversion_infoÚImportErrorr   ÚerrZ
matplotlibr‚   Ú r   r   r   Zmatplotlib.backend_basesr   r	   r
   r   r   r   Zmatplotlib.font_managerr   Zmatplotlib.mathtextr   Zmatplotlib.pathr   Zmatplotlib.transformsr   ÚversionZbackend_versionr¢   r    r0   r?   r=   r>   Z
_f_weightsZFONT_SLANT_ITALICZFONT_SLANT_NORMALZFONT_SLANT_OBLIQUEZ	_f_anglesrG   rN   rÀ   rÃ   Zexportrþ   r   r   r   r   Ú<module>   sz   
ÿþ 


íý IUu