
    G8cJ                        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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 d-dZd Zi dej>                  dej>                  dej>                  dej>                  dej>                  dej@                  dej@                  dej@                  dej@                  dej>                  dej>                  dej>                  dej>                  dej>                  dej@                  dej@                  dej@                  ej@                  ej@                  dZ!ejD                  ejF                  ejH                  dZ% G d  d!e      Z& G d" d#e      Z' G d$ d%      Z( G d& d'e      Z) ejT                  d(       G d) d*e&             Z+ejX                   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   zEcairo 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	            C/usr/lib/python3/dist-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-   d      i,  i  i  iX  i  i   i  
ultralightlightnormalmediumregularsemiboldboldheavy)	ultraboldblack)italicrF   obliquec                        e Zd Z fdZd Z ej                  dd      d        Z ej                  d      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__)selfrT   	__class__s     r+   r^   zRendererCairo.__init__i   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}ng|j                          |j                          |j                         ^}}|rt        d      |j
                  |j                  f}|j                          || j                  _        |\  | _        | _        y )N	get_width
get_heightget_extentszCannot infer surface size)
get_targethasattrrb   rc   rd   rW   rX   save
reset_clipcopy_clip_rectangle_list	TypeErrorrestorerV   r#   )r_   r#   surfacesizeextrectrests          r+   set_contextzRendererCairo.set_contextr   s    .."7K(WWl-K$$&(:(:(<<DWm,%%'C99cjj(DHHJNN668KD4 ;<<::t{{*DKKM"&
DKr-   3.6rq   )alternativec                 L    t        j                  |      | j                  _        y N)r:   rY   rV   r#   )r_   rl   s     r+   set_ctx_from_surfacez"RendererCairo.set_ctx_from_surface   s    mmG,r-   c                      || _         || _        y ru   rW   rX   )r_   rW   rX   s      r+   set_width_heightzRendererCairo.set_width_height   s    
r-   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   )rg   lenset_source_rgbafill_preserverk   stroke)r_   r#   fill_calphaalpha_overridess        r+   _fill_and_strokezRendererCairo._fill_and_stroke   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	translaterX   new_pathr,   r   	get_alphaget_forced_alpha)r_   rV   r$   r%   rgbFacer#   r   s          r+   	draw_pathzRendererCairo.draw_path   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   r   r   FT)simplifyr   i  )r#   r   r,   r   r   copy_path_flatfill_extentsr   rX   	enumerater   r{   rg   append_pathrk   r   r   r   )r_   rV   marker_pathmarker_transr$   r%   r   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 )Nr   r   r      )r   ._unmultiplied_rgba8888_to_premultiplied_argb32r:   rZ   create_for_dataraveldatar[   shaper#   rX   rg   set_source_surfacefloatpaintrk   )r_   rV   r   r   imrl   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	                    |r| j                  ||||||       y |j                  }	|	j                          |	j                  ||       |	j	                           |	j
                  t        |        |	j                  | j                  |j                                      t        j                         }
|
j                  t        j                  d   rt        j                  nt        j                          |	j#                  |
       |r%|	j%                  t'        j(                  |              |	j+                  |       |	j-                          y )Nztext.antialiased)_draw_mathtextr#   r   r   rg   select_font_facerA   set_font_sizepoints_to_pixelsget_size_in_pointsr:   FontOptionsset_antialiasmplrcParamsANTIALIAS_DEFAULTANTIALIAS_NONEset_font_optionsrotater   deg2rad	show_textrk   )r_   rV   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+.<<8J+K''))+   &

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parserT   rg   r   r   r   r   r   r   r   rA   r   r   r   r   chr	rectangleset_source_rgbr}   rk   )r_   rV   r   r   r   r4   r   r#   rW   rX   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 ru   rx   r_   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   )r]   get_text_width_height_descentr   r   r   rT   r\   rg   r   rA   r   r   r   text_extentsrk   )r_   r   r4   r   rW   rX   r   _r#   	y_bearingr   r   r`   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)rV   r#   rg   _alpha_forced_alphar   s    r+   new_gczRendererCairo.new_gc3  s6     %wwr-   c                 &    |dz  | j                   z  S )NH   )rT   )r_   r&   s     r+   r   zRendererCairo.points_to_pixels:  s    {TXX%%r-   ru   )FN)__name__
__module____qualname__r^   rq   r   
deprecatedrv   ry   r   r   r   r   r   r   r   r   r   r   __classcell__r`   s   @r+   rQ   rQ   h   s    '$ T__U6- 7- T__U 	A ".E`44'#0&r-   rQ   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 fd	Zd Zd Zd Z xZS )rU   )bevelmiterround)butt
projectingr   c                 0    t         |           || _        y ru   )r]   r^   rS   )r_   rS   r`   s     r+   r^   zGraphicsContextCairo.__init__L  s     r-   c                 8    | j                   j                          y ru   )r#   rk   r   s    r+   rk   zGraphicsContextCairo.restoreP  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   )r]   	set_alphar   _rgbr   r#   r|   )r_   r   r   rgbr`   s       r+   r   zGraphicsContextCairo.set_alphaS  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 ru   )r#   r   r:   r   r   )r_   r*   s     r+   set_antialiasedz$GraphicsContextCairo.set_antialiased\  s/    '(E##	D.3.B.B	Dr-   c                     | j                   j                  t        j                  | j                  |             || _        y )N)capstyle)r#   set_line_capr   check_getitem_capd	_capstyle)r_   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 ru   )	r   r   boundsr#   r   r   rS   rX   r   )r_   r   r   r   r   r   r#   s          r+   set_clip_rectanglez'GraphicsContextCairo.set_clip_rectangled  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 r   )
get_transformed_path_and_affiner#   r   r   r   r   rS   rX   r,   r   )r_   r$   tpathaffiner#   s        r+   set_clip_pathz"GraphicsContextCairo.set_clip_pathm  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listrS   r   r   r   )r_   offsetdashess      r+   
set_dasheszGraphicsContextCairo.set_dashesx  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   )r]   set_foregroundr{   r   r#   r   r|   )r_   fgisRGBAr`   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_rgb  s%    xx""$--/33r-   c                     | j                   j                  t        j                  | j                  |             || _        y )N)	joinstyle)r#   set_line_joinr   r   _joind
_joinstyle)r_   jss     r+   set_joinstylez"GraphicsContextCairo.set_joinstyle  s,    t11$++LMr-   c                     t        |      | _        | j                  j                  | j                  j                  |             y ru   )r   
_linewidthr#   set_line_widthrS   r   )r_   r   s     r+   set_linewidthz"GraphicsContextCairo.set_linewidth  s.    ( > >q ABr-   ru   )r   r   r   r:   LINE_JOIN_BEVELLINE_JOIN_MITERLINE_JOIN_ROUNDr  LINE_CAP_BUTTLINE_CAP_SQUARELINE_CAP_ROUNDr   r^   rk   r   r   r   r  r  r  r  r  r  r#  r   r   s   @r+   rU   rU   ?  s    ''''''F **,,++E!ED	14Cr-   rU   c                       e Zd Zd Zy)_CairoRegionc                      || _         || _        y ru   )_slices_data)r_   slicesr   s      r+   r^   z_CairoRegion.__init__  s    
r-   N)r   r   r   r^    r-   r+   r+  r+    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)rf   rQ   figurerT   r4  r   s    r+   	_rendererzFigureCanvasCairo._renderer  s0     t/0$1$++//$BD!$$$r-   c                     | j                   S ru   )r6  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)r6  rV   r#   re   
isinstancer:   rZ   RuntimeErrorrb   rc   mathceilx0floorr   r   y0
ValueErrorslicemaxr   
frombufferget_datauint32reshapecopyr+  )r_   bboxrl   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)r6  rV   r#   re   r:  r:   rZ   r;  flushrb   rc   r-  r.  r   rD  rE  rF  rG  mark_dirty_rectanglestartstop)r_   regionrl   rJ  rK  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 ru   )_get_printed_image_surfacewrite_to_png)r_   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_heightrX  rE  writer   ._premultiplied_argb32_to_unmultiplied_rgba8888r   r   rG  )r_   rZ  rW   rX   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 ru   )
r5  rT   r6  r]  r:   rZ   r[   rq   rY   draw)r_   rW   rX   rl   s       r+   rX  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                  j!                  t	        j"                  |	             | j                  j$                  j&                  }
|dk(  r5|
j)                  t*        j,                  dz         |
j/                  d|        | j                   j1                  | j                         |
j3                          |	j5                          |dk(  r|j7                          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 enabledrm  wb)fileobjzUnknown format: {!r}r   r   )r5  rT   get_size_inchesrf   r:   r;  ri  rk  r:  strgzipGzipFilern  rA  formatr6  rq   rY   rV   r#   r   r   pir   rc  	show_pagefinishclose)r_   fmtrZ  re  rT   w_inh_inwidth_in_pointsheight_in_pointsrl   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3::3?@@![[__""5==#9:nn##+%JJruuqy!MM!../ 	(&=JJL r-   rj  rh  rl  rm  N)r   r   r   propertyr6  r8  rM  rV  r[  ra  	print_rawrX  r  	functoolspartialmethod	print_pdfprint_ps	print_svg
print_svgzr0  r-   r+   r2  r2    s    % %'&N=: I /9 1f (	''u5I&y&&ud3H'	''u5I(((7Jr-   r2  rr   c                       e Zd Zd Zy)_RendererGTKCairoc                 8   t         j                  dk(  rvt        |t         j                        s\t         j                  j	                  t         j
                  j                  dt        |      t        j                  z         d   d      }|| j                  _        y )N	cairocffiz
cairo_t **r   T)incref)r:   r   r:  rY   _from_pointerfficastidobject__basicsize__rV   r#   )r_   r#   s     r+   rq   z_RendererGTKCairo.set_context  st    NNk)"36----		 sGf2224457 	 . C
 r-   N)r   r   r   rq   r0  r-   r+   r  r    s    r-   r  c                   ,    e Zd Zej                  ZeZeZ	y)_BackendCairoN)
r   r   r   r:   versionbackend_versionr2  FigureCanvasr   FigureManagerr0  r-   r+   r  r  "  s    mmO$L%Mr-   r  ru   ).__doc__r  rs  r<  numpyr   r:   version_infoImportErrorr  err
matplotlibr    r   r   r   matplotlib.backend_basesr	   r
   r   r   r   matplotlib.font_managerr   matplotlib.pathr   matplotlib.transformsr   r,   rA   r>   r?   
_f_weightsFONT_SLANT_ITALICFONT_SLANT_NORMALFONT_SLANT_OBLIQUE	_f_anglesrQ   rU   r+  r2  r   r  exportr  r0  r-   r+   <module>r     s      
%J& '  ( (  4   *"$*%**%** %** %**	
 %** %(( %(( %(( %(( %** %** %** %** %** %((  %((!" %((#$ (((('
, &&&&''	T&L T&nRC. RCj x8( x8v 	 	 	 
&H & &a  %%! %!$	%% 	"%s5   G! !H'G,+H,G?1	G::G??HH