
    P/PhH                        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 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                 v    t          |          dk    s|r | j        g |d d         |R   d S  | j        |  d S N   )lenset_source_rgba)ctxcoloralphaforced_alphas       a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/matplotlib/backends/backend_cairo.py	_set_rgbar   %   sW    
5zzQ,.U2A2Y.......U####    c                    |                     |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   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 " "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&!!" "r   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>.attrC   sW    	(07400222 	( 	( 	(4'''''	(s    ;;nameFONT_SLANT_styleweighti&  )r9   cairoupperr   weight_dictgetFONT_WEIGHT_NORMALFONT_WEIGHT_BOLD)r<   r=   r>   slantrA   s   `    r   _cairo_font_args_from_font_proprI   >   s    
( ( ( ( ( 4<<DE@g)<)<)>)>@@AAET(^^F)--ff==CC &&)  r   c                   |     e Zd Z fdZd Ze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heightrB   ContextImageSurfaceFORMAT_ARGB32text_ctxsuper__init__)selfrN   	__class__s     r   rX   zRendererCairo.__init__S   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hasattrr\   r]   r^   rQ   rR   save
reset_clipcopy_clip_rectangle_list	TypeErrorrestorerP   r   )rY   r   surfacesizeextrectrest_s           r   set_contextzRendererCairo.set_context\   s   ..""7K(( 	WWl-K-K 	$$&&(:(:(<(<<DDWm,, 
	%%''C9cj(DDHHJJJNN6688KD4 = ;<<<KAq4KKMMM"&
DKKKr   c                     |N|                                   t          | |||           |                                  |                                  |                                  d S N)ra   r   fill_preservere   stroke)r   fill_cr   alpha_overridess       r   _fill_and_strokezRendererCairo._fill_and_stroken   sY    HHJJJc65/:::KKMMM

r   Nc                    |j         }|(|                                |                                nd }|t                                          dd                              d| j                  z   }|                                 t          ||||           |r|	                                 t          |||                                |                                           |                                 |                                 |                                }|rt!          | j                  }|                                                    t(          j        j        ||          }	t)          j        |	          }
t          |
|t                                          ||                               d|          d            |
                    |                     |                                                      |
j        |                                  |
                                 |
                                 t)          j        |	          }|                    t(          j         j!                   |	                                 |"                    |           |                                 |                                 |                                 d S Nr   r   )#r   	get_hatchclip_extentsr   scale	translaterR   new_pathr5   ra   r   	get_alphaget_forced_alpharo   re   get_hatch_pathintrN   r_   create_similarrB   ContentCOLOR_ALPHArS   set_line_widthpoints_to_pixelsget_hatch_linewidthr   get_hatch_colorrp   SurfacePattern
set_extendExtendREPEAT
set_source)rY   rP   r.   r/   rgbFacer   r   
hatch_pathrN   hatch_surface	hatch_ctxhatch_patterns               r   	draw_pathzRendererCairo.draw_pathw   st   f ?r||~~'=   """ 	 zz''2..88DKHHI	S$	4000HHJJJc7BLLNNB4G4G4I4IJJJKKMMM&&((
 	dh--CNN,,;;)35 5Mm44IJ!))#t44>>q#FF   $$T%:%:2;Q;Q;S;S%T%TUUU%I%r'9'9';';<<##%%%!0??M$$U\%8999HHJJJNN=)))KKMMM

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   rv   r   FT)simplifyr    i  )r   r{   r5   r   ry   copy_path_flatfill_extentsrz   rR   	enumerater!   r   ra   append_pathre   rs   r|   r}   )rY   rP   marker_pathmarker_transr.   r/   r   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 )Nrv   r   r      )r   ._unmultiplied_rgba8888_to_premultiplied_argb32rB   rT   create_for_dataraveldatarU   shaper   rR   ra   set_source_surfacefloatpaintre   )rY   rP   r   r   imrf   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 rn   )_draw_mathtextr   r{   r#   ra   select_font_facerI   set_font_sizer   get_size_in_pointsrB   FontOptionsset_antialiasget_antialiasedset_font_optionsrotater)   deg2rad	show_textre   )rY   rP   r   r   sr<   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parserN   ra   rz   r   r)   r   r{   r#   r   rI   r   r   r   r   chr	rectangleset_source_rgbro   re   )rY   rP   r   r   r   r<   r   r   rQ   rR   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 rn   )rQ   rR   rY   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   )rW   get_text_width_height_descentr   r   r   rN   rV   ra   r   rI   r   r   r   text_extentsre   )rY   r   r<   r   rQ   rR   r   rk   r   	y_bearingr   r   rZ   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         _        d | j         _        | j         S )Nr   F)rP   r   ra   _alpha_forced_alpha_hatchr   s    r   new_gczRendererCairo.new_gc'  s=    
  %wr   c                     |dz  | j         z  S )NH   )rN   )rY   r0   s     r   r   zRendererCairo.points_to_pixels3  s    {TX%%r   rn   )FN)__name__
__module____qualname__rX   rl   staticmethodrs   r   r   r   r   r   r   r   r   r   __classcell__rZ   s   @r   rK   rK   R   s           ' ' '$   \# # # #L ".E .E .E .E`     0  4' ' '# # # # #0
 
 
& & & & & & &r   rK   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 )rO   )bevelmiterround)butt
projectingr   c                 V    t                                                       || _        d S rn   )rW   rX   rM   )rY   rM   rZ   s     r   rX   zGraphicsContextCairo.__init__E  s$     r   c                 8    | j                                          d S rn   )r   re   r   s    r   re   zGraphicsContextCairo.restoreI  s    r   c                     t                                          |           t          | j        | j        |                                 |                                            d S rn   )rW   	set_alphar   r   _rgbr|   r}   )rY   r   rZ   s     r   r   zGraphicsContextCairo.set_alphaL  s_    %   Hdi!1!143H3H3J3J	L 	L 	L 	L 	Lr   c                 j    | j                             |rt          j        nt          j                   d S rn   )r   r   rB   ANTIALIAS_DEFAULTANTIALIAS_NONE)rY   r4   s     r   set_antialiasedz$GraphicsContextCairo.set_antialiasedQ  s>    '(BE##e.B	D 	D 	D 	D 	Dr   c                 4    | j                                         S rn   )r   get_antialiasr   s    r   r   z$GraphicsContextCairo.get_antialiasedU  s    x%%'''r   c                 z    | j                             t          j        | j        |                     || _        d S )N)capstyle)r   set_line_capr   check_getitem_capd	_capstyle)rY   css     r   set_capstylez!GraphicsContextCairo.set_capstyleX  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 rn   )	r)   r   boundsr   r{   r   rM   rR   r   )rY   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 ru   )
get_transformed_path_and_affiner   r{   r   ry   rz   rM   rR   r5   r   )rY   r.   tpathaffiner   s        r   set_clip_pathz"GraphicsContextCairo.set_clip_pathe  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listrM   r   r)   r*   )rY   offsetdashess      r   
set_dasheszGraphicsContextCairo.set_dashesp  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 r   )rW   set_foregroundr   r   r   r   r   )rY   fgisRGBArZ   s      r   r  z#GraphicsContextCairo.set_foregroundy  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_rgb  s+    x""$$--//33r   c                 z    | j                             t          j        | j        |                     || _        d S )N)	joinstyle)r   set_line_joinr   r   _joind
_joinstyle)rY   jss     r   set_joinstylez"GraphicsContextCairo.set_joinstyle  s5    t1$+LLLMMMr   c                     t          |          | _        | j                            | j                            |                     d S rn   )r   
_linewidthr   r   rM   r   )rY   r   s     r   set_linewidthz"GraphicsContextCairo.set_linewidth  s;    (( > >q A ABBBBBr   rn   )r   r   r   rB   LINE_JOIN_BEVELLINE_JOIN_MITERLINE_JOIN_ROUNDr  LINE_CAP_BUTTLINE_CAP_SQUARELINE_CAP_ROUNDr   rX   re   r   r   r   r  r  r
  r  r  r  r   r#  r   r   s   @r   rO   rO   8  sR       ''' F *,+ E! ! ! ! !  L L L L L
D D D( ( (    	 	 	  1 1 1 1 1 14 4 4  C C C C C C Cr   rO   c                       e Zd Zd ZdS )_CairoRegionc                 "    || _         || _        d S rn   )_slices_data)rY   slicesr   s      r   rX   z_CairoRegion.__init__  s    


r   N)r   r   r   rX    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dS )FigureCanvasCairoc                 l    t          | d          st          | j        j                  | _        | j        S )N_cached_renderer)r`   rK   figurerN   r4  r   s    r   	_rendererzFigureCanvasCairo._renderer  s5     t/00 	C$1$+/$B$BD!$$r   c                     | j         S rn   )r6  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)r6  rP   r   r_   
isinstancerB   rT   RuntimeErrorr\   r]   mathceilx0floorr   r   y0
ValueErrorslicemaxr)   
frombufferget_datauint32reshapecopyr+  )rY   bboxrf   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)r6  rP   r   r_   r:  rB   rT   r;  flushr\   r]   r-  r.  r)   rD  rE  rF  rG  mark_dirty_rectanglestartstop)rY   regionrf   rJ  rK  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 rn   )_get_printed_image_surfacewrite_to_png)rY   fobjs     r   	print_pngzFigureCanvasCairo.print_png  s(    ''))66t<<<<<r   c           	         |                                  \  }}|                                                                 }|                    t	          j        t          j        |                              ||df                               d S )Nr   )	get_width_heightrX  rE  writer   ._premultiplied_argb32_to_unmultiplied_rgba8888r)   r*   rG  )rY   rZ  rQ   rR   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 rn   )
r5  rN   r6  r]  rB   rT   rU   rl   rS   draw)rY   rQ   rR   rf   s       r   rX  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 enabledrm  wb)fileobjzUnknown format: r   r   )r5  rN   get_size_inchesr`   rB   r;  ri  rk  r:  strgzipGzipFilern  rA  r6  rl   rS   rP   r   r   r)   pirz   rc  	show_pagefinishclose)rY   fmtrZ  re  rN   w_inh_inwidth_in_pointsheight_in_pointsrf   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   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        % % X%  ' ' '&N N N= = =: : : I   /9 1 1 1 1 1f (	'u55I&y&ud33H'	'u55I((77JJJr   r2  c                   $    e Zd Zej        ZeZeZ	dS )_BackendCairoN)
r   r   r   rB   versionbackend_versionr2  FigureCanvasr   FigureManagerr0  r   r   r  r    s        mO$L%MMMr   r  rn   )$__doc__r  rs  r<  numpyr)   rB   version_infoImportError	cairocffierr r   r   r   matplotlib.backend_basesr	   r
   r   r   r   matplotlib.font_managerr   matplotlib.pathr   matplotlib.transformsr   r   r5   rI   rK   rO   r+  r2  exportr  r0  r   r   <module>r     s             %LLLJ&&k H&+&8H H H I I 	I '  % % %%!!!!! % % %k !$	%% 	"!% ) ( ( ( ( ( ( ( ( (              4 3 3 3 3 3             * * * * * *$ $ $" " " "$  (c& c& c& c& c&L c& c& c&LQC QC QC QC QC. QC QC QCh       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