
    hH                        S r SSKrSSKrSSKrSSKr SSKr\R                  S:  a  \" S\R                   S35      e SSKJrJrJr  SS	KJrJrJrJrJr  SS
KJr  SSKJr  SSKJr  S rSS jrS r " S S\5      r " S S\5      r " S S5      r  " S S\5      r!\RD                   " S S\5      5       r#g! \ a     SSK	r N! \ a  r
\" S5      \
eSr
C
ff = ff = f)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                 ~    [        U5      S:X  d  U(       a  U R                  " / US S QUP76   g U R                  " U6   g N   )lenset_source_rgba)ctxcoloralphaforced_alphas       S/var/www/html/env/lib/python3.13/site-packages/matplotlib/backends/backend_cairo.py	_set_rgbar   %   s9    
5zQ,.U2AY..U#    c                 J   UR                  USUS9 GH  u  pEU[        R                  :X  a  U R                  " U6   M+  U[        R                  :X  a  U R                  5         MQ  U[        R                  :X  a  U R                  " U6   Mv  U[        R                  :X  a^  [        R                  " U R                  5       5      nUS S nUSS  nU R                  " / US-  US-  S-  -   QUS-  S-  US-  -   QUQ76   M  U[        R                  :X  d  M  U R                  " U6   GM     g )NT)remove_nansclipr   r   )iter_segmentsr   MOVETOmove_to	CLOSEPOLY
close_pathLINETOline_toCURVE3npasarrayget_current_pointcurve_toCURVE4)	r   path	transformr   pointscodecurabs	            r   _append_pathr5   ,   s    **4d + 44;;KK T^^#NNT[[ KK T[[ **S2245Cr
ArsALLJ37QUQY.J1q519q1u3DJJT[[ LL&!4r   c                   ^  U 4S jnU" S5      n[        [        SU" S5      R                  5        35      nU" S5      n[        R                  R                  XD5      S:  a  [        R                  O[        R                  nX#U4$ )zo
Convert a `.FontProperties` or a `.FontEntry` to arguments that can be
passed to `.Context.select_font_face`.
c                 f   >  [        TSU  35      " 5       $ ! [         a    [        TU 5      s $ f = f)Nget_)getattrAttributeError)fieldprops    r   attr-_cairo_font_args_from_font_prop.<locals>.attrC   s:    	(44w022 	(4''	(s    00nameFONT_SLANT_styleweighti&  )r9   cairoupperr   weight_dictgetFONT_WEIGHT_NORMALFONT_WEIGHT_BOLD)r<   r=   r?   slantrB   s   `    r   _cairo_font_args_from_font_proprJ   >   s|    
( <DE[g)<)<)>(?@AE(^F))--f=C &&))  r   c                      ^  \ rS rSrU 4S jrS r\S 5       rSS jr SS jr	S r
SS jrS	 rS
 rU 4S jrS rS rSrU =r$ )RendererCairoR   c                    > Xl         [        U S9U l        S U l        S U l        [
        R                  " [
        R                  " [
        R                  SS5      5      U l	        [        TU ]-  5         g )N)rendererr   )dpiGraphicsContextCairogcwidthheightrC   ContextImageSurfaceFORMAT_ARGB32text_ctxsuper__init__)selfrP   	__class__s     r   rZ   RendererCairo.__init__S   sU    &5
e111a8:r   c                 
   UR                  5       n[        US5      (       a2  [        US5      (       a!  UR                  5       UR                  5       4nO[        US5      (       a)  UR	                  5       nUR
                  UR                  4nOWUR                  5         UR                  5         UR                  5       tpVU(       a  [        S5      eUt  psUR                  5         XR                  l        Uu  U l        U l        g )N	get_width
get_heightget_extentszCannot infer surface size)
get_targethasattrr_   r`   ra   rS   rT   save
reset_clipcopy_clip_rectangle_list	TypeErrorrestorerR   r   )r[   r   surfacesizeextrectrest_s           r   set_contextRendererCairo.set_context\   s    .."7K((WWl-K-K$$&(:(:(<<DWm,,%%'C99cjj(DHHJNN668KD ;<<KAqKKM"&
DKr   c                     Ub<  U R                  5         [        XX#5        U R                  5         U R                  5         U R	                  5         g N)rd   r   fill_preserverh   stroke)r   fill_cr   alpha_overridess       r   _fill_and_strokeRendererCairo._fill_and_stroken   s9    HHJc5:KKM

r   c                    UR                   nUc!  UR                  5       c  UR                  5       OS nU[        5       R	                  SS5      R                  SU R                  5      -   nUR                  5         [        XRX65        UbY  UR                  5         [        XTUR                  5       UR                  5       5        UR                  5         UR                  5         UR                  5       nU(       Ga  [!        U R"                  5      nUR%                  5       R'                  [(        R*                  R,                  X5      n	[(        R.                  " U	5      n
[        X[        5       R	                  X* 5      R                  SU5      S 5        U
R1                  U R3                  UR5                  5       5      5        U
R6                  " UR9                  5       6   U
R                  5         U
R;                  5         [(        R<                  " U	5      nUR?                  [(        R@                  RB                  5        UR                  5         URE                  U5        UR                  5         UR                  5         UR;                  5         g Nr   r   )#r   	get_hatchclip_extentsr   scale	translaterT   new_pathr5   rd   r   	get_alphaget_forced_alphars   rh   get_hatch_pathintrP   rb   create_similarrC   ContentCOLOR_ALPHArU   set_line_widthpoints_to_pixelsget_hatch_linewidthr   get_hatch_colorrt   SurfacePattern
set_extendExtendREPEAT
set_source)r[   rR   r.   r/   rgbFacer   r   
hatch_pathrP   hatch_surface	hatch_ctxhatch_patterns               r   	draw_pathRendererCairo.draw_pathw   s   ff ?r||~'=   " 	 z''2.88DKKHI	S	0HHJcBLLNB4G4G4IJKKM&&(
dhh-CNN,;;))35Mm4I!))#t4>>q#F $$T%:%:2;Q;Q;S%TU%%r'9'9';<##%!00?M$$U\\%8%89HHJNN=)KKM

r   c           	         UR                   nUR                  5         [        XrU[        5       R	                  SS5      -   5        UR                  5       nUR                  5       u  ppUS:X  a  U	S:X  a  U
S:X  a  US:X  a  SnS nOSnU[        5       R	                  SS5      R                  SU R                  5      -   nUR                  5         [        UR                  USS95       H  u  nu  p[        U5      (       d  M  USS  u  nnUR                  5         UR                  UU5        UR                  U5        UR                  5         U(       d  US-  S:X  d  Mw  U R                  XvUR!                  5       UR#                  5       5        M     U(       d0  U R                  XvUR!                  5       UR#                  5       5        g g )	Nr   r{   r   FT)simplifyr    i  )r   r   r5   r   r~   copy_path_flatfill_extentsr   rT   	enumerater!   r   rd   append_pathrh   rw   r   r   )r[   rR   marker_pathmarker_transr.   r/   r   r   x1y1x2y2fillediverticescodesxys                     r   draw_markersRendererCairo.draw_markers   s    ffS|hj6F6Fq"6M'MN((* ))+7rQw27rQwFGFz''2.88DKKHI	 	$-""9u"=%? A 8}}}1
 a#, QX]))bllnb6I6I6KM#%?* !!bllnb.A.A.CE r   c                 "   [         R                  " US S S2   5      n[        R                  R	                  UR                  5       R                  [        R                  UR                  S   UR                  S   UR                  S   S-  5      nUR                  nU R                  U-
  UR                  S   -
  nUR                  5         UR                  U[        U5      [        U5      5        UR                  5         UR                  5         g )Nr{   r   r      )r   ._unmultiplied_rgba8888_to_premultiplied_argb32rC   rV   create_for_dataraveldatarW   shaper   rT   rd   set_source_surfacefloatpaintrh   )r[   rR   r   r   imri   r   s          r   
draw_imageRendererCairo.draw_image   s    AA"TrT(K$$44HHJOOU00HHQK!bhhqkAo7 ffKK!Obhhqk)
wa%(;		r   c	                 f   U(       a  U R                  XX4XV5        g UR                  n	U	R                  5         U	R                  X#5        U	R	                  5         U	R
                  " [        U5      6   U	R                  U R                  UR                  5       5      5        [        R                  " 5       n
U
R                  UR                  5       5        U	R                  U
5        U(       a&  U	R                  [         R"                  " U* 5      5        U	R%                  U5        U	R'                  5         g rr   )_draw_mathtextr   r   r#   rd   select_font_facerJ   set_font_sizer   get_size_in_pointsrC   FontOptionsset_antialiasget_antialiasedset_font_optionsrotater)   deg2rad	show_textrh   )r[   rR   r   r   sr<   angleismathmtextr   optss              r   	draw_textRendererCairo.draw_text   s    
 qT9 &&CLLNKKHHJ  "A$"GHd33D4K4K4MNO$$&Dr1134  &

2::uf-.MM!KKMr   c                    UR                   nU R                  R                  R                  X@R                  U5      u  ppnUR                  5         UR                  X#5        U(       a&  UR                  [        R                  " U* 5      5        U H  u  pnnnUR                  5         UR                  UU* 5        UR                  " [        [        U5      5      6   UR                  U R!                  U5      5        UR#                  [%        U5      5        M     U HQ  u  nnnnUR                  5         UR'                  UU* UU* 5        UR)                  SSS5        UR+                  5         MS     UR-                  5         g Nr   )r   
_text2pathmathtext_parserparserP   rd   r   r   r)   r   r   r#   r   rJ   r   r   r   r   chr	rectangleset_source_rgbrs   rh   )r[   rR   r   r   r   r<   r   r   rS   rT   descentglyphsrectsfontfontsizeidxoxoywhs                       r   r   RendererCairo._draw_mathtext   s2   ffOO++11!XXtD 	.w 	
aJJrzz5&)*+1'DCRLLNKKRC   01FGId33H=>MM#c(# ,2 "LBAqLLNMM"rc1qb)q!Q'	 " 	r   c                 2    U R                   U R                  4$ rr   )rS   rT   r[   s    r   get_canvas_width_height%RendererCairo.get_canvas_width_height  s    zz4;;&&r   c                   > US:X  a  [         TU ]  XU5      $ U(       a6  U R                  R                  R	                  XR
                  U5      tpEpgXEU4$ U R                  nUR                  5         UR                  " [        U5      6   UR                  U R                  UR                  5       5      5        UR                  U5      SS u  pnUR                  5         XX-   4$ )NTeXr   r   )rY   get_text_width_height_descentr   r   r   rP   rX   rd   r   rJ   r   r   r   text_extentsrh   )r[   r   r<   r   rS   rT   r   rn   r   	y_bearingr   r   r\   s               r   r   +RendererCairo.get_text_width_height_descent  s     U?78&II//55a4H 'E7'))mm 	
=dCD$//0G0G0IJK**1-a2	aQ]""r   c                     U R                   R                  R                  5         SU R                   l        SU R                   l        S U R                   l        U R                   $ )Nr   F)rR   r   rd   _alpha_forced_alpha_hatchr   s    r   new_gcRendererCairo.new_gc'  sC    
  %wwr   c                 &    US-  U R                   -  $ )NH   )rP   )r[   r0   s     r   r   RendererCairo.points_to_pixels3  s    {TXX%%r   )rP   rR   rT   rX   rS   rr   )FN)__name__
__module____qualname____firstlineno__rZ   ro   staticmethodrw   r   r   r   r   r   r   r   r   r   __static_attributes____classcell__r\   s   @r   rL   rL   R   s[    '$  #L ".E`04'#0
& &r   rL   c                     ^  \ rS rSr\R
                  \R                  \R                  S.r\R                  \R                  \R                  S.rU 4S jrS rU 4S jrS rS rS	 rS
 rS rS rSU 4S jjrS rS rS rSrU =r$ )rQ   i8  )bevelmiterround)butt
projectingr   c                 .   > [         TU ]  5         Xl        g rr   )rY   rZ   rO   )r[   rO   r\   s     r   rZ   GraphicsContextCairo.__init__E  s     r   c                 8    U R                   R                  5         g rr   )r   rh   r   s    r   rh   GraphicsContextCairo.restoreI  s    r   c                    > [         TU ]  U5        [        U R                  U R                  U R                  5       U R                  5       5        g rr   )rY   	set_alphar   r   _rgbr   r   )r[   r   r\   s     r   r  GraphicsContextCairo.set_alphaL  s:    % HHdii!143H3H3J	Lr   c                     U R                   R                  U(       a  [        R                  5        g [        R                  5        g rr   )r   r   rC   ANTIALIAS_DEFAULTANTIALIAS_NONE)r[   r4   s     r   set_antialiased$GraphicsContextCairo.set_antialiasedQ  s/    '(E##	D.3.B.B	Dr   c                 6    U R                   R                  5       $ rr   )r   get_antialiasr   s    r   r   $GraphicsContextCairo.get_antialiasedU  s    xx%%''r   c                     U R                   R                  [        R                  " U R                  US95        Xl        g )N)capstyle)r   set_line_capr   check_getitem_capd	_capstyle)r[   css     r   set_capstyle!GraphicsContextCairo.set_capstyleX  s*    d00bIJr   c                 
   U(       d  g [         R                  " UR                  5      u  p#pEU R                  nUR	                  5         UR                  X R                  R                  U-
  U-
  XE5        UR                  5         g rr   )	r)   r   boundsr   r   r   rO   rT   r   )r[   r   r   r   r   r   r   s          r   set_clip_rectangle'GraphicsContextCairo.set_clip_rectangle\  s]    XXi../
ahha--1A5q<
r   c                 *   U(       d  g UR                  5       u  p#U R                  nUR                  5         U[        5       R	                  SS5      R                  SU R                  R                  5      -   n[        XBU5        UR                  5         g rz   )
get_transformed_path_and_affiner   r   r   r~   r   rO   rT   r5   r   )r[   r.   tpathaffiner   s        r   set_clip_path"GraphicsContextCairo.set_clip_pathe  sq    <<>hhJ$$Q+55a9M9MNOS(
r   c           	          X4U l         Uc  U R                  R                  / S5        g U R                  R                  [        U R                  R                  [        R                  " U5      5      5      U5        g r   )_dashesr   set_dashlistrO   r   r)   r*   )r[   offsetdashess      r   
set_dashesGraphicsContextCairo.set_dashesp  sY    ~>HHb!$HHT]]33BJJv4FGHr   c                    > [         TU ]  X5        [        U R                  5      S:X  a$  U R                  R
                  " U R                  6   g U R                  R                  " U R                  6   g r   )rY   set_foregroundr   r  r   r   r   )r[   fgisRGBAr\   s      r   r,  #GraphicsContextCairo.set_foregroundy  sL    r*tyy>QHH##TYY/HH$$dii0r   c                 X    U R                   R                  5       R                  5       S S $ r   )r   
get_sourceget_rgbar   s    r   get_rgbGraphicsContextCairo.get_rgb  s%    xx""$--/33r   c                     U R                   R                  [        R                  " U R                  US95        Xl        g )N)	joinstyle)r   set_line_joinr   r  _joind
_joinstyle)r[   jss     r   set_joinstyle"GraphicsContextCairo.set_joinstyle  s*    t11$++LMr   c                     [        U5      U l        U R                  R                  U R                  R                  U5      5        g rr   )r   
_linewidthr   r   rO   r   )r[   r   s     r   set_linewidth"GraphicsContextCairo.set_linewidth  s.    ( > >q ABr   )r  r$  r9  r>  rO   rr   )r   r   r   r   rC   LINE_JOIN_BEVELLINE_JOIN_MITERLINE_JOIN_ROUNDr8  LINE_CAP_BUTTLINE_CAP_SQUARELINE_CAP_ROUNDr  rZ   rh   r  r  r   r  r  r!  r)  r,  r3  r;  r?  r   r   r   s   @r   rQ   rQ   8  s    ''''''F **,,++E!L
D(	14C Cr   rQ   c                       \ rS rSrS rSrg)_CairoRegioni  c                     Xl         X l        g rr   )_slices_data)r[   slicesr   s      r   rZ   _CairoRegion.__init__  s    
r   )rK  rJ  N)r   r   r   r   rZ   r    r   r   rH  rH    s    r   rH  c                       \ rS rSr\S 5       rS rS rS rS r	S r
\
rS rS	S
.S jr\R                  " \S5      r\R                  " \S5      r\R                  " \S5      r\R                  " \S5      rSrg)FigureCanvasCairoi  c                     [        U S5      (       d$  [        U R                  R                  5      U l        U R                  $ )N_cached_renderer)rc   rL   figurerP   rR  r   s    r   	_rendererFigureCanvasCairo._renderer  s3     t/00$1$++//$BD!$$$r   c                     U R                   $ rr   )rT  r   s    r   get_rendererFigureCanvasCairo.get_renderer  s    ~~r   c           	         U R                   R                  R                  R                  5       n[	        U[
        R                  5      (       d  [        S5      eUR                  5       nUR                  5       n[        R                  " UR                  5      n[        R                  " UR                  5      n[        R                  " XAR                  -
  5      n[        R                  " XAR                   -
  5      nSU::  aD  Xc::  a?  UR                  UR                  ::  a%  SU::  a  X::  a  UR                   UR                  ::  d  [#        S5      e[%        Xw['        X-
  S5      -   5      [%        XU['        Xe-
  S5      -   5      4n	[(        R*                  " UR-                  5       [(        R.                  5      R1                  XC45      U	   R3                  5       n
[5        X5      $ )Nz;copy_from_bbox only works when rendering to an ImageSurfacer   zInvalid bbox)rT  rR   r   rb   
isinstancerC   rV   RuntimeErrorr_   r`   mathceilx0floorr   r   y0
ValueErrorslicemaxr)   
frombufferget_datauint32reshapecopyrH  )r[   bboxri   swshr^  r   r`  r   slsr   s              r   copy_from_bbox FigureCanvasCairo.copy_from_bbox  s_   ..##''224'5#5#566MO O !YYtwwZZ YYrGG|$ZZWW%RBHDGG);GTWW-?^,,BS!_,-uRc"'1o9M/NNg..0"))<""3((, 	C&&r   c                 ~   U R                   R                  R                  R                  5       n[	        U[
        R                  5      (       d  [        S5      eUR                  5         UR                  5       nUR                  5       nUR                  u  pVUR                  [        R                  " UR                  5       [        R                   5      R#                  XC45      XV4'   UR%                  UR&                  UR&                  UR(                  UR&                  -
  UR(                  UR&                  -
  5        g )Nz;restore_region only works when rendering to an ImageSurface)rT  rR   r   rb   rZ  rC   rV   r[  flushr_   r`   rJ  rK  r)   rd  re  rf  rg  mark_dirty_rectanglestartstop)r[   regionri   rj  rk  slyslxs          r   restore_region FigureCanvasCairo.restore_region  s    ..##''224'5#5#566MO O !>>)/ 
w'')299	5
'2(
CH
&$$IIsyy#((SYY"63998L	Nr   c                 B    U R                  5       R                  U5        g rr   )_get_printed_image_surfacewrite_to_png)r[   fobjs     r   	print_pngFigureCanvasCairo.print_png  s    '')66t<r   c           	          U R                  5       u  p#U R                  5       R                  5       nUR                  [        R
                  " [        R                  " U5      R                  X#S45      5      5        g )Nr   )	get_width_heightrz  re  writer   ._premultiplied_argb32_to_unmultiplied_rgba8888r)   r*   rg  )r[   r|  rS   rT   bufs        r   
print_rgbaFigureCanvasCairo.print_rgba  s]    --/--/88:

5GGJJsO##UA$679 	:r   c                 f   U R                   R                  U R                  l        U R                  5       u  p[        R
                  " [        R                  X5      nU R                  R                  [        R                  " U5      5        U R                   R                  U R                  5        U$ rr   )
rS  rP   rT  r  rC   rV   rW   ro   rU   draw)r[   rS   rT   ri   s       r   rz  ,FigureCanvasCairo._get_printed_image_surface  st    ![[__--/$$U%8%8%H""5==#9:(r   portrait)orientationc                   SnX@R                   l        U R                   R                  5       u  pVXT-  Xd-  pUS:X  a  XpUS:X  a8  [        [        S5      (       d  [        S5      e[        R                  " X'U5      n	OUS:X  a8  [        [        S5      (       d  [        S5      e[        R                  " X'U5      n	OUS	;   a  [        [        S
5      (       d  [        S5      eUS:X  aC  [        U[        5      (       a  [        R                  " US5      nO[        R                  " S SUS9n[        R                  " X'U5      n	O[        SU< 35      eU R                   R                  U R                  l        U R                  R                  [        R                   " U	5      5        U R                  R"                  R$                  n
US:X  a5  U
R'                  [(        R*                  S-  5        U
R-                  SU* 5        U R                   R/                  U R                  5        U
R1                  5         U	R3                  5         US:X  a  UR5                  5         g g )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 enabledr  wb)fileobjzUnknown format: r   r   )rS  rP   get_size_inchesrc   rC   r[  r  r  rZ  strgzipGzipFiler  ra  rT  ro   rU   rR   r   r   r)   pir   r  	show_pagefinishclose)r[   fmtr|  r  rP   w_inh_inwidth_in_pointsheight_in_pointsri   r   s              r   _saveFigureCanvasCairo._save  s    [[002
,0J
)+%  . $;5+.." $5 6 6ood=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   r  r  r  r  )rR  N)r   r   r   r   propertyrT  rW  rm  rw  r}  r  	print_rawrz  r  	functoolspartialmethod	print_pdfprint_ps	print_svg
print_svgzr   rN  r   r   rP  rP    s    % %'&N=: I /9 1f ''u5I&&ud3H''u5I((7Jr   rP  c                   4    \ rS rSr\R
                  r\r\	r
Srg)_BackendCairoi  rN  N)r   r   r   r   rC   versionbackend_versionrP  FigureCanvasr   FigureManagerr   rN  r   r   r  r    s    mmO$L%Mr   r  rr   )$__doc__r  r  r\  numpyr)   rC   version_infoImportError	cairocffierr r   r   r   matplotlib.backend_basesr	   r
   r   r   r   matplotlib.font_managerr   matplotlib.pathr   matplotlib.transformsr   r   r5   rJ   rL   rQ   rH  rP  exportr  rN  r   r   <module>r     s       %J& &&+&8&8%9H I 	I ' ) (  4   *$"$(c&L c&LQC. QCh x8( x8v 
&H & &u  %%! %!$	%%%s)   *B: :CCC	CCC