
    EVf$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      	 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jB                   G d de             Z"y# e$ r 	 ddl	Zn# e$ rZ
 ed      e
dZ
[
ww xY wY w xY w)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                 8   |j                  |d|      D ]  \  }}|t        j                  k(  r | j                  |  *|t        j                  k(  r| j                          N|t        j                  k(  r | j                  |  q|t        j                  k(  r\t        j                  | j                               }|d d }|dd  } | j                  g |dz  |dz  dz  z   |dz  dz  |dz  z   |  |t        j                  k(  s | j                  |   y )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	            j/var/www/html/software/conda/envs/catlas/lib/python3.12/site-packages/matplotlib/backends/backend_cairo.py_append_pathr,   %   s   **4d + 4 "4;;CKK T^^#NNT[[ CKK T[[ **S2245Cr
ArsACLLJ37QUQY.J1q519q1u3DJJT[[ CLL&!"    c                      fd} |d      }t        t        d |d      j                                } |d      }t        j                  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                 d    	  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<   s<    	(0744w0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    
( <DE[g)<)<)>(?@AE(^F))--ff=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        | -          y )N)rendererr   )dpiGraphicsContextCairogcwidthheightr:   ContextImageSurfaceFORMAT_ARGB32text_ctxsuper__init__)selfrF   	__class__s     r+   rP   zRendererCairo.__init__L   sW    &5
e111a8:r-   c                    |j                         }t        |d      r-t        |d      r!|j                         |j                         f}nt        |d      r)|j	                         }|j
                  |j                  f}nT|j                          |j                          |j                         ^}}|rt        d      |^}}}|j                          || j                  _        |\  | _        | _        y )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$$&(:(:(<<DWm,%%'C99cjj(DHHJNN668KD4 ;<<KAq4KKM"&
DKr-   c                 $   |~|j                          t        |      dk(  s|r|j                  |d   |d   |d   |       n |j                  |d   |d   |d   |d          |j                          |j	                          |j                          y )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    HHJ6{a?##F1Ivay&)UK##F1Ivay&)VAYOKKM

r-   c                 n   |j                   }| |j                         |j                         nd }|t               j	                  dd      j                  d| j                        z   }|j                          t        ||||       | j                  |||j                         |j                                y 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    ff ?r||~'=   " 	 z''2.88DKKHI	S$	40",,."*=*=*?	Ar-   c           	      r   |j                   }|j                          t        |||t               j	                  dd      z          |j                         }|j                         \  }}	}
}|dk(  r|	dk(  r|
dk(  r
|dk(  rd}d }nd}|t               j	                  dd      j                  d| j                        z   }|j                          t        |j                  |d            D ]  \  }\  }}t        |      s|dd  \  }}|j                          |j                  ||       |j                  |       |j                          |s	|dz  dk(  sk| j                  |||j!                         |j#                                 |s1| j                  |||j!                         |j#                                y y )	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    ffS+|hj6F6Fq"6M'MN((* ))+BB7rQw27rQwFGFz''2.88DKKHI	 	$-""9u"=%? 	M A %8}}1
 a#, QX]))Wbllnb6I6I6KM#	M* !!Wbllnb.A.A.CE r-   c                     t        j                  |d d d         }t        j                  j	                  |j                         j                  t        j                  |j                  d   |j                  d   |j                  d   dz        }|j                  }| j                  |z
  |j                  d   z
  }|j                          |j                  |t        |      t        |             |j                          |j                          y )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A"TrT(K$$44HHJOOU00HHQK!bhhqkAo7 ffKK!Obhhqk)
wa%(;		r-   c	                 V   |r| j                  ||||||       y |j                  }	|	j                          |	j                  ||       |	j	                           |	j
                  t        |        |	j                  | j                  |j                                      t        j                         }
|
j                  |j                                |	j                  |
       |r%|	j                  t!        j"                  |              |	j%                  |       |	j'                          y 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   s    
 Aq!T59 &&CLLNKK1HHJ C  "A$"GHd33D4K4K4MNO$$&Dr1134  &

2::uf-.MM!KKMr-   c                    |j                   }| j                  j                  j                  || j                  |      \  }}	}
}}|j                          |j                  ||       |r%|j                  t        j                  |              |D ]  \  }}}}}|j                          |j                  ||         |j                  t        t        |              |j                  | j!                  |             |j#                  t%        |              |D ]P  \  }}}}|j                          |j'                  || ||        |j)                  ddd       |j+                          R |j-                          y 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   sH   ffOO++11!TXXtD 	.vw 	
aJJrzz5&)*+1 	$'D(CRLLNKKRC  C  01FGId33H=>MM#c(#	$ " 	 LBAqLLNMM"rc1qb)q!Q'		  	r-   c                 2    | j                   | j                  fS r   )rI   rJ   rQ   s    r+   get_canvas_width_heightz%RendererCairo.get_canvas_width_height   s    zz4;;&&r-   c                    |dk(  rt         |   |||      S |r:| j                  j                  j	                  || j
                  |      ^}}}}|||fS | j                  }|j                           |j                  t        |        |j                  | j                  |j                                      |j                  |      dd \  }	}
}|j                          |
|||	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?78D&II//55a4H 'E67Q&'))mm 	
=dCD$//0G0G0IJK**1-a2	1a!Q]""r-   c                     | j                   j                  j                          d| j                   _        d| j                   _        | j                   S )Nr   F)rH   r#   rY   _alpha_forced_alphar   s    r+   new_gczRendererCairo.new_gc  s6     %wwr-   c                 &    |dz  | j                   z  S )NH   )rF   )rQ   r&   s     r+   r   zRendererCairo.points_to_pixels  s    {TXX%%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   sG    '$	A ".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                 0    t         |           || _        y r   )rO   rP   rE   )rQ   rE   rR   s     r+   rP   zGraphicsContextCairo.__init__$  s     r-   c                 8    | j                   j                          y r   )r#   r]   r   s    r+   r]   zGraphicsContextCairo.restore(  s    r-   c                     t         |   |       | j                         }| j                  }| j	                         r(| j
                  j                  |d   |d   |d   |       y | j
                  j                  |d   |d   |d   |d          y )Nr   r   r   r   )rO   	set_alpharv   _rgbrw   r#   rg   )rQ   rk   r   rgbrR   s       r+   r   zGraphicsContextCairo.set_alpha+  s}    % !ii  "HH$$SVSVSVVDHH$$SVSVSVSVDr-   c                     | j                   j                  |rt        j                         y t        j                         y r   )r#   r   r:   ANTIALIAS_DEFAULTANTIALIAS_NONE)rQ   r*   s     r+   set_antialiasedz$GraphicsContextCairo.set_antialiased4  s/    '(E##	D.3.B.B	Dr-   c                 6    | j                   j                         S r   )r#   get_antialiasr   s    r+   r   z$GraphicsContextCairo.get_antialiased8  s    xx%%''r-   c                     | j                   j                  t        j                  | j                  |             || _        y )N)capstyle)r#   set_line_capr   check_getitem_capd	_capstyle)rQ   css     r+   set_capstylez!GraphicsContextCairo.set_capstyle;  s,    d00bIJr-   c                    |sy t        j                  |j                        \  }}}}| j                  }|j	                          |j                  || j                  j                  |z
  |z
  ||       |j                          y 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?  se    XXi../
1ahha--1A5q!<
r-   c                 $   |sy |j                         \  }}| j                  }|j                          |t               j	                  dd      j                  d| j                  j                        z   }t        |||       |j                          y 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  su    <<>vhhJ$$Q+55a9M9MNOS%(
r-   c           	          ||f| _         || j                  j                  g d       y | j                  j                  t        | j                  j                  t        j                  |                  |       y r   )_dashesr#   set_dashlistrE   r   r   r   )rQ   offsetdashess      r+   
set_dasheszGraphicsContextCairo.set_dashesS  s[    v~>HHb!$HHT]]33BJJv4FGHr-   c                     t         |   ||       t        | j                        dk(  r$ | j                  j
                  | j                    y  | j                  j                  | j                    y Nr   )rO   set_foregroundrf   r   r#   r   rg   )rQ   fgisRGBArR   s      r+   r   z#GraphicsContextCairo.set_foreground\  sR    r6*tyy>Q#DHH##TYY/$DHH$$dii0r-   c                 X    | j                   j                         j                         d d S r   )r#   
get_sourceget_rgbar   s    r+   get_rgbzGraphicsContextCairo.get_rgbc  s%    xx""$--/33r-   c                     | j                   j                  t        j                  | j                  |             || _        y )N)	joinstyle)r#   set_line_joinr   r   _joind
_joinstyle)rQ   jss     r+   set_joinstylez"GraphicsContextCairo.set_joinstylef  s,    t11$++LMr-   c                     t        |      | _        | j                  j                  | j                  j                  |             y r   )r   
_linewidthr#   set_line_widthrE   r   )rQ   r   s     r+   set_linewidthz"GraphicsContextCairo.set_linewidthj  s.    ( > >q A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     s    ''''''F **,,++E!ED(	14Cr-   rG   c                       e Zd Zd Zy)_CairoRegionc                      || _         || _        y 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y)FigureCanvasCairoc                 z    t        | d      s$t        | j                  j                        | _        | j                  S )N_cached_renderer)rX   rC   figurerF   r  r   s    r+   	_rendererzFigureCanvasCairo._rendererv  s0     t/0$1$++//$BD!$$$r-   c                     | j                   S r   )r!  r   s    r+   get_rendererzFigureCanvasCairo.get_renderer  s    ~~r-   c           	         | j                   j                  j                  j                         }t	        |t
        j                        st        d      |j                         }|j                         }t        j                  |j                        }t        j                  |j                        }t        j                  ||j                  z
        }t        j                  ||j                   z
        }d|k  rA||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*                  |j-                         t(        j.                        j1                  ||f      |	   j3                         }
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  sp   ..##''224'5#5#56MO O !YYtwwZZ YYrDGG|$ZZTWW%RB"HDGG);GbTWW-?^,,BSb!_,-uRc"r'1o9M/NNg..0"))<"b"3((, 	C&&r-   c                 x   | j                   j                  j                  j                         }t	        |t
        j                        st        d      |j                          |j                         }|j                         }|j                  \  }}|j                  t        j                  |j                         t        j                         j#                  ||f      ||f<   |j%                  |j&                  |j&                  |j(                  |j&                  z
  |j(                  |j&                  z
         y )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'5#5#56MO O !>>S)/ 
w'')299	5
'2r(
CH
&$$IIsyy#((SYY"63998L	Nr-   c                 B    | j                         j                  |       y r   )_get_printed_image_surfacewrite_to_png)rQ   fobjs     r+   	print_pngzFigureCanvasCairo.print_png  s    '')66t<r-   c           	          | j                         \  }}| j                         j                         }|j                  t	        j
                  t        j                  |      j                  ||df                   y )Nr   )	get_width_heightrC  r0  writer   ._premultiplied_argb32_to_unmultiplied_rgba8888r   r   r2  )rQ   rE  rI   rJ   bufs        r+   
print_rgbazFigureCanvasCairo.print_rgba  sa    --/v--/88:

5GGJJsO##UFA$679 	:r-   c                 f   | j                   j                  | j                  _        | j                         \  }}t	        j
                  t        j                  ||      }| j                  j                  t	        j                  |             | 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  sx    ![[__--/v$$U%8%8%H""5==#9:(r-   portrait)orientationc                   d}|| j                   _        | j                   j                         \  }}||z  ||z  }}|dk(  r||}}|dk(  r3t        t        d      st        d      t	        j                  |||      }	n|dk(  r3t        t        d      st        d      t	        j                  |||      }	n|d	v rwt        t        d
      st        d      |dk(  r?t        |t              rt        j                  |d      }nt        j                  d d|      }t	        j                  |||      }	nt        d|      | j                   j                  | j                  _        | j                  j                  t	        j                   |	             | j                  j"                  j$                  }
|dk(  r5|
j'                  t(        j*                  dz         |
j-                  d|        | j                   j/                  | j                         |
j1                          |	j3                          |dk(  r|j5                          y y )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  s    [[002
d,03Js
)+% / .O $;5+." $5 6 6oodO=MNGE\5,/" $5 6 6&&t_>NOGO#5,/" $5 6 6f}dC(==t4D==tTBD&&t_>NOG/w788![[__""5==#9:nn##+%JJruuqy!MM!../ 	(&=JJL 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    % %'&N=: I /9 1f (	''u5I&y&&ud3H'	''u5I(((7Jr-   r  c                   ,    e Zd Zej                  ZeZeZ	y)_BackendCairoN)
r   r   r   r:   versionbackend_versionr  FigureCanvasr   FigureManagerr  r-   r+   rs  rs    s    mmO$L%Mr-   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       %J& &&+&8&8%9H I 	I ' ) (  4   *"$(I&L I&XUC. UCp x8( x8v 
&H & &{  %%! %!$	%% 	"%s5   )B5 5C;C ?C C	CCCC