
    (?e$D                        d Z ddlZddlZddlZddlZ	 ddlZej        dk     r edej         d          n*# e$ r" 	 ddl	Zn# e$ rZ
 ed          e
dZ
[
ww xY wY nw xY 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 Z G d de          Z G d de          Z G d d          Z G d de          Z ej!         G 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                    |                     |d|          D ]\  }}|t          j        k    r | j        |   |t          j        k    r|                                  E|t          j        k    r | j        |  `|t          j        k    rdt          j
        |                                           }|d d         }|dd          } | j        g |dz  |dz  dz  z   |dz  dz  |dz  z   |R   |t          j        k    r
 | j        |  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bs	            Alib/python3.11/site-packages/matplotlib/backends/backend_cairo.py_append_pathr,   %   s?   **4d + 4 4 " "4;CK   T^##NNT[  CK   T[  *S224455Crr
ArssACLJ37QUQY.J1q519q1u3DJJJJJJT[  CL&!!" "    c                 "     f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                 |    	  t          d|                        S # t          $ r t          |           cY S w xY w)Nget_)getattrAttributeError)fieldprops    r+   attrz-_cairo_font_args_from_font_prop.<locals>.attr<   sW    	(07400222 	( 	( 	(4'''''	(s    ;;nameFONT_SLANT_styleweighti&  )r1   cairoupperr   weight_dictgetFONT_WEIGHT_NORMALFONT_WEIGHT_BOLD)r4   r5   r6   slantr9   s   `    r+   _cairo_font_args_from_font_proprA   7   s    
( ( ( ( ( 4<<DE@g)<)<)>)>@@AAET(^^F)--ff==CC &&)  r-   c                   l     e Zd Z fdZd Zd ZddZ	 ddZd Zdd	Z	d
 Z
d Z fdZd Zd Z xZS )RendererCairoc                 
   || _         t          |           | _        d | _        d | _        t          j        t          j        t
          j        dd                    | _	        t                                                       d S )N)rendererr   )dpiGraphicsContextCairogcwidthheightr:   ContextImageSurfaceFORMAT_ARGB32text_ctxsuper__init__)selfrF   	__class__s     r+   rP   zRendererCairo.__init__L   sn    &555
e11a88: :r-   c                 ,   |                                 }t          |d          r9t          |d          r)|                                |                                f}nt          |d          r#|                                }|j        |j        f}nh|                                 |                                 |	                                ^}}|rt          d          |^}}}|                                 || j        _        |\  | _        | _        d S )N	get_width
get_heightget_extentszCannot infer surface size)
get_targethasattrrT   rU   rV   rI   rJ   save
reset_clipcopy_clip_rectangle_list	TypeErrorrestorerH   r#   )rQ   r#   surfacesizeextrectrest_s           r+   set_contextzRendererCairo.set_contextU   s   ..""7K(( 	WWl-K-K 	$$&&(:(:(<(<<DDWm,, 
	%%''C9cj(DDHHJJJNN6688KD4 = ;<<<KAq4KKMMM"&
DKKKr-   c                    ||                                  t          |          dk    s|r+|                    |d         |d         |d         |           n0|                    |d         |d         |d         |d                    |                                 |                                 |                                 d S )Nr   r   r   r   )rY   lenset_source_rgbafill_preserver]   stroke)rQ   r#   fill_calphaalpha_overridess        r+   _fill_and_strokezRendererCairo._fill_and_strokeg   s    HHJJJ6{{a?##F1Ivay&)UKKKK##F1Ivay&)VAYOOOKKMMM

r-   Nc                    |j         }|(|                                |                                nd }|t                                          dd                              d| j                  z   }|                                 t          ||||           | 	                    |||
                                |                                           d S Nr   r   )r#   	get_hatchclip_extentsr   scale	translaterJ   new_pathr,   rm   	get_alphaget_forced_alpha)rQ   rH   r$   r%   rgbFacer#   r   s          r+   	draw_pathzRendererCairo.draw_pathr   s    f ?r||~~'=   """ 	 zz''2..88DKHHI	S$	4000",,.."*=*=*?*?	A 	A 	A 	A 	Ar-   c           	      &   |j         }|                                 t          |||t                                          dd          z              |                                }|                                \  }}	}
}|dk    r|	dk    r|
dk    r|dk    rd}d }nd}|t                                          dd                              d| j                  z   }|                                 t          |
                    |d                    D ]\  }\  }}t          |          r|dd          \  }}|                                 |                    ||           |                    |           |                                 |s	|dz  dk    r<|                     |||                                |                                           |s>|                     |||                                |                                           d S d S )	Nr   rp   r   FT)simplifyr   i  )r#   ru   r,   r   rs   copy_path_flatfill_extentsrt   rJ   	enumerater   rf   rY   append_pathr]   rm   rv   rw   )rQ   rH   marker_pathmarker_transr$   r%   rx   r#   x1y1x2y2fillediverticescodesxys                     r+   draw_markerszRendererCairo.draw_markers   s,    fS+|hjj6F6Fq"6M6M'MNNN((** ))++BB77rQww277rQwwFGGFzz''2..88DKHHI	 	$-""9u"==%? %? 	M 	M A %8}} M}1


 a###,,,  MQX]]))Wbllnnb6I6I6K6KM M M  	E!!Wbllnnb.A.A.C.CE E E E E	E 	Er-   c                 (   t          j        |d d d                   }t          j                            |                                j        t          j        |j        d         |j        d         |j        d         dz            }|j	        }| j
        |z
  |j        d         z
  }|                                 |                    |t          |          t          |                     |                                 |                                 d S )Nrp   r   r      )r   ._unmultiplied_rgba8888_to_premultiplied_argb32r:   rL   create_for_dataraveldatarM   shaper#   rJ   rY   set_source_surfacefloatpaintr]   )rQ   rH   r   r   imr^   r#   s          r+   
draw_imagezRendererCairo.draw_image   s    A"TTrT(KK$44HHJJOU0HQK!bhqkAo7 7 fK!Obhqk)


wa%((;;;		r-   Fc	                    |r|                      ||||||           d S |j        }	|	                                 |	                    ||           |	                                  |	j        t          |            |	                    |                     |	                                                     t          j                    }
|
                    |                                           |	                    |
           |r(|	                    t!          j        |                      |	                    |           |	                                 d S N)_draw_mathtextr#   ru   r   rY   select_font_facerA   set_font_sizepoints_to_pixelsget_size_in_pointsr:   FontOptionsset_antialiasget_antialiasedset_font_optionsrotater   deg2rad	show_textr]   )rQ   rH   r   r   sr4   angleismathmtextr#   optss              r+   	draw_textzRendererCairo.draw_text   s9   
  	Aq!T599999 &CLLNNNKK1HHJJJ C "A$"G"GHHd33D4K4K4M4MNNOOO$&&Dr1133444  &&& /

2:uf--...MM!KKMMMMMr-   c                 J   |j         }| j        j                            || j        |          \  }}	}
}}|                                 |                    ||           |r(|                    t          j	        |                      |D ]\  }}}}}|
                                 |                    ||             |j        t          t          |                      |                    |                     |                     |                    t%          |                     |D ]`\  }}}}|
                                 |                    || ||            |                    ddd           |                                 a|                                 d S Nr   )r#   
_text2pathmathtext_parserparserF   rY   rt   r   r   r   ru   r   r   rA   r   r   r   r   chr	rectangleset_source_rgbrh   r]   )rQ   rH   r   r   r   r4   r   r#   rI   rJ   descentglyphsrectsfontfontsizeidxoxoywhs                       r+   r   zRendererCairo._draw_mathtext   s   fO+11!TXtDD 	.vw 	


a 	+JJrz5&))***+1 	$ 	$'D(CRLLNNNKKRC    C 01F1FGGI Id33H==>>>MM#c((####! 	  	 LBAqLLNNNMM"rc1qb)))q!Q'''r-   c                     | j         | j        fS r   )rI   rJ   rQ   s    r+   get_canvas_width_heightz%RendererCairo.get_canvas_width_height   s    z4;&&r-   c                 
   |dk    r#t                                          |||          S |r/| j        j                            || j        |          ^}}}}|||fS | j        }|                                  |j        t          |            |
                    |                     |                                                     |                    |          dd         \  }	}
}|                                 |
|||	z   fS )NTeXr   r   )rO   get_text_width_height_descentr   r   r   rF   rN   rY   r   rA   r   r   r   text_extentsr]   )rQ   r   r4   r   rI   rJ   r   rc   r#   	y_bearingr   r   rR   s               r+   r   z+RendererCairo.get_text_width_height_descent   s    U??7788D&III 	*/55a4HH 'E67Q&'))m 	


=dCCDD$//0G0G0I0IJJKKK**1--ac2	1a!Q]""r-   c                 |    | j         j                                         d| j         _        d| j         _        | j         S )Nr   F)rH   r#   rY   _alpha_forced_alphar   s    r+   new_gczRendererCairo.new_gc  s2     %wr-   c                     |dz  | j         z  S )NH   )rF   )rQ   r&   s     r+   r   zRendererCairo.points_to_pixels  s    {TX%%r-   r   )FN)__name__
__module____qualname__rP   rd   rm   ry   r   r   r   r   r   r   r   r   __classcell__rR   s   @r+   rC   rC   K   s           ' ' '$	 	 	A A A A ".E .E .E .E`     0  4' ' '# # # # #0  & & & & & & &r-   rC   c                        e Zd Zej        ej        ej        dZej        ej	        ej
        dZ fdZd Z fdZd Zd Zd Zd	 Zd
 Zd Zd fd	Zd Zd Zd Z xZS )rG   )bevelmiterround)butt
projectingr   c                 V    t                                                       || _        d S r   )rO   rP   rE   )rQ   rE   rR   s     r+   rP   zGraphicsContextCairo.__init__$  s$     r-   c                 8    | j                                          d S r   )r#   r]   r   s    r+   r]   zGraphicsContextCairo.restore(  s    r-   c                 t   t                                          |           |                                 }| j        }|                                 r1| j                            |d         |d         |d         |           d S | j                            |d         |d         |d         |d                    d S )Nr   r   r   r   )rO   	set_alpharv   _rgbrw   r#   rg   )rQ   rk   r   rgbrR   s       r+   r   zGraphicsContextCairo.set_alpha+  s    %   !!i  "" 	EH$$SVSVSVVDDDDDH$$SVSVSVSVDDDDDr-   c                 j    | j                             |rt          j        nt          j                   d S r   )r#   r   r:   ANTIALIAS_DEFAULTANTIALIAS_NONE)rQ   r*   s     r+   set_antialiasedz$GraphicsContextCairo.set_antialiased4  s>    '(BE##e.B	D 	D 	D 	D 	Dr-   c                 4    | j                                         S r   )r#   get_antialiasr   s    r+   r   z$GraphicsContextCairo.get_antialiased8  s    x%%'''r-   c                 z    | j                             t          j        | j        |                     || _        d S )N)capstyle)r#   set_line_capr   check_getitem_capd	_capstyle)rQ   css     r+   set_capstylez!GraphicsContextCairo.set_capstyle;  s5    d0bIIIJJJr-   c                     |sd S t          j        |j                  \  }}}}| j        }|                                 |                    || j        j        |z
  |z
  ||           |                                 d S r   )	r   r   boundsr#   ru   r   rE   rJ   r   )rQ   r   r   r   r   r   r#   s          r+   set_clip_rectanglez'GraphicsContextCairo.set_clip_rectangle?  su     	FXi.//
1aha-1A5q!<<<




r-   c                 B   |sd S |                                 \  }}| j        }|                                 |t                                          dd                              d| j        j                  z   }t          |||           |	                                 d S ro   )
get_transformed_path_and_affiner#   ru   r   rs   rt   rE   rJ   r,   r   )rQ   r$   tpathaffiner#   s        r+   set_clip_pathz"GraphicsContextCairo.set_clip_pathH  s     	F<<>>vhJJ$$Q++55a9MNNOS%(((




r-   c           	          ||f| _         || j                            g d           d S | j                            t          | j                            t          j        |                              |           d S r   )_dashesr#   set_dashlistrE   r   r   r   )rQ   offsetdashess      r+   
set_dasheszGraphicsContextCairo.set_dashesS  s|    v~>Hb!$$$$$HT]33BJv4F4FGGHH    r-   Nc                     t                                          ||           t          | j                  dk    r | j        j        | j          d S  | j        j        | j          d S Nr   )rO   set_foregroundrf   r   r#   r   rg   )rQ   fgisRGBArR   s      r+   r   z#GraphicsContextCairo.set_foreground\  sd    r6***ty>>Q#DH#TY////$DH$di0000r-   c                 h    | j                                                                         d d         S r   )r#   
get_sourceget_rgbar   s    r+   get_rgbzGraphicsContextCairo.get_rgbc  s+    x""$$--//33r-   c                 z    | j                             t          j        | j        |                     || _        d S )N)	joinstyle)r#   set_line_joinr   r   _joind
_joinstyle)rQ   jss     r+   set_joinstylez"GraphicsContextCairo.set_joinstylef  s5    t1$+LLLMMMr-   c                     t          |          | _        | j                            | j                            |                     d S r   )r   
_linewidthr#   set_line_widthrE   r   )rQ   r   s     r+   set_linewidthz"GraphicsContextCairo.set_linewidthj  s;    (( > >q A ABBBBBr-   r   )r   r   r   r:   LINE_JOIN_BEVELLINE_JOIN_MITERLINE_JOIN_ROUNDr  LINE_CAP_BUTTLINE_CAP_SQUARELINE_CAP_ROUNDr   rP   r]   r   r   r   r   r   r   r   r   r  r
  r  r   r   s   @r+   rG   rG     sR       ''' F *,+ E! ! ! ! !  E E E E ED D D( ( (    	 	 	  1 1 1 1 1 14 4 4  C C C C C C Cr-   rG   c                       e Zd Zd ZdS )_CairoRegionc                 "    || _         || _        d S r   )_slices_data)rQ   slicesr   s      r+   rP   z_CairoRegion.__init__p  s    


r-   N)r   r   r   rP    r-   r+   r  r  o  s#            r-   r  c                       e Zd Zed             Zd Zd Zd Zd Zd Z	e	Z
d Zdd	d
Z ej        ed          Z ej        ed          Z ej        ed          Z ej        ed          ZdS )FigureCanvasCairoc                 l    t          | d          st          | j        j                  | _        | j        S )N_cached_renderer)rX   rC   figurerF   r  r   s    r+   	_rendererzFigureCanvasCairo._rendererv  s5     t/00 	C$1$+/$B$BD!$$r-   c                     | j         S r   )r!  r   s    r+   get_rendererzFigureCanvasCairo.get_renderer  s
    ~r-   c           	         | j         j        j                                        }t	          |t
          j                  st          d          |                                }|	                                }t          j        |j                  }t          j        |j                  }t          j        ||j        z
            }t          j        ||j        z
            }d|k    r2||k    r,|j        |j        k    rd|k    r||k    r|j        |j        k    st#          d          t%          ||t'          ||z
  d          z             t%          ||t'          ||z
  d          z             f}	t)          j        |                                t(          j                                      ||f          |	                                         }
t5          |	|
          S )Nz;copy_from_bbox only works when rendering to an ImageSurfacer   zInvalid bbox)r!  rH   r#   rW   
isinstancer:   rL   RuntimeErrorrT   rU   mathceilx0floorr   r   y0
ValueErrorslicemaxr   
frombufferget_datauint32reshapecopyr  )rQ   bboxr^   swshr)  r   r+  r   slsr   s              r+   copy_from_bboxz FigureCanvasCairo.copy_from_bbox  s   .#'2244'5#566 	OMO O O  !!YtwZ  YrDG|$$ZTW%%RB"HHDG););GGbTW-?-?^,,,BSb!__,--uRc"r'1oo9M/N/NNg..00")<<"b""3((, 	C&&&r-   c                 B   | j         j        j                                        }t	          |t
          j                  st          d          |                                 |	                                }|
                                }|j        \  }}|j        t          j        |                                t          j                                      ||f          ||f<   |                    |j        |j        |j        |j        z
  |j        |j        z
             d S )Nz;restore_region only works when rendering to an ImageSurface)r!  rH   r#   rW   r%  r:   rL   r&  flushrT   rU   r  r  r   r/  r0  r1  r2  mark_dirty_rectanglestartstop)rQ   regionr^   r5  r6  slyslxs          r+   restore_regionz FigureCanvasCairo.restore_region  s	   .#'2244'5#566 	OMO O O  !!>S)/ 
w''))29	5	5
'2r(

CH
&$$Isy#(SY"6398L	N 	N 	N 	N 	Nr-   c                 T    |                                                      |           d S r   )_get_printed_image_surfacewrite_to_png)rQ   fobjs     r+   	print_pngzFigureCanvasCairo.print_png  s(    ''))66t<<<<<r-   c           	         |                                  \  }}|                                                                 }|                    t	          j        t          j        |                              ||df                               d S )Nr   )	get_width_heightrC  r0  writer   ._premultiplied_argb32_to_unmultiplied_rgba8888r   r   r2  )rQ   rE  rI   rJ   bufs        r+   
print_rgbazFigureCanvasCairo.print_rgba  s    --//v--//88::

5GJsOO##UFA$6779 9 	: 	: 	: 	: 	:r-   c                 6   | j         j        | j        _        |                                 \  }}t	          j        t          j        ||          }| j                            t	          j        |                     | j         	                    | j                   |S r   )
r   rF   r!  rH  r:   rL   rM   rd   rK   draw)rQ   rI   rJ   r^   s       r+   rC  z,FigureCanvasCairo._get_printed_image_surface  sy    ![_--//v$U%8%HH""5=#9#9:::(((r-   portrait)orientationc                   d}|| j         _        | j                                         \  }}||z  ||z  }}|dk    r||}}|dk    r;t          t          d          st          d          t	          j        |||          }	n|dk    r;t          t          d          st          d          t	          j        |||          }	n|d	v rt          t          d
          st          d          |dk    rBt          |t                    rt          j        |d          }nt          j        d d|          }t	          j        |||          }	nt          d|          | j         j        | j        _        | j                            t	          j        |	                     | j        j        j        }
|dk    r9|
                    t(          j        dz             |
                    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 enabledrX  wb)fileobjzUnknown format: r   r   )r   rF   get_size_inchesrX   r:   r&  rT  rV  r%  strgzipGzipFilerY  r,  r!  rd   rK   rH   r#   r   r   pirt   rN  	show_pagefinishclose)rQ   fmtrE  rP  rF   w_inh_inwidth_in_pointsheight_in_pointsr^   r#   s              r+   _savezFigureCanvasCairo._save  sZ    [0022
d,03Js
)+%% / .O $;;5+.. 6" $5 6 6 6odO=MNNGGE\\5,// 6" $5 6 6 6&t_>NOOGGO##5,// 6" $5 6 6 6f}}dC(( C=t44DD=tTBBBD&t_>NOOGG777888![_""5=#9#9:::n#+%%JJruqy!!!MM!../// 	(((&==JJLLLLL =r-   rU  rS  rW  rX  N)r   r   r   propertyr!  r#  r8  rA  rF  rL  	print_rawrC  ri  	functoolspartialmethod	print_pdfprint_ps	print_svg
print_svgzr  r-   r+   r  r  u  s        % % X%  ' ' '&N N N= = =: : : I   /9 1 1 1 1 1f (	'u55I&y&ud33H'	'u55I((77JJJr-   r  c                   $    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+   rs  rs    s        mO$L%MMMr-   rs  r   )#__doc__rl  r^  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,   rA   rC   rG   r  r  exportrs  r  r-   r+   <module>r     s             %LLLJ&&k H&+&8H H H I I 	I '  % % %%!!!!! % % %k !$	%% 	"!% ) ( ( ( ( ( ( ( ( (              4 3 3 3 3 3             * * * * * *" " " "$  (I& I& I& I& I&L I& I& I&XUC UC UC UC UC. UC UC UCp       x8 x8 x8 x8 x8( x8 x8 x8v 
& & & & &H & & & & &s2   #8 AAAAAAAA