
    
3j                     H   S SK r S SKrS SKrS SKrS SKrS SKJr  S SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKJr  S SKrS SKJrJr  S SKJrJrJrJr  S SKJr  S SKJr  S SKJr  S S	K J!r!  S S
KJ"r"  S SK#J$r$J%r%  \RL                  " \'5      r(S r)\
RT                  " S5      r+S r,S r-S r.S r/ " S S5      r0\Rb                  Re                  S5       " S S\05      5       r3S r4S r5SSSS.r6S r7S r8 " S S \5      r9 " S! S"\5      r:\r;S#r<\Rz                   " S$ S%\5      5       r>g)&    N)BytesIO)Image)cbookfont_manager)_BackendFigureCanvasBaseFigureManagerBaseRendererBase)MixedModeRenderer)rgb2hex)UTC)Path)_path)Affine2DAffine2DBasec                 r    U R                  SS5      n U R                  SS5      n U R                  SS5      n U $ )N&&amp;<&lt;>&gt;replacess    Y/home/wildlama/miniconda3/lib/python3.13/site-packages/matplotlib/backends/backend_svg.py_escape_cdatar   E   s7    			#wA			#vA			#vAH    z-(?=-)c                 D    [        U 5      n [        R                  SU 5      $ )Nz- )r   _escape_xml_commentsubr   s    r   _escape_commentr#   O   s    aA""4++r   c                     U R                  SS5      n U R                  SS5      n U R                  SS5      n U R                  SS5      n U R                  S	S
5      n U $ )Nr   r   'z&apos;"z&quot;r   r   r   r   r   r   s    r   _escape_attribr'   T   sW    			#wA			#x A			#x A			#vA			#vAHr   c                     SU ;  a  S[        U 5      -   S-   $ SU ;  a  S[        U 5      -   S-   $ S[        U 5      -   S-   $ )Nr&   r%   )r   r'   r   s    r   _quote_escape_attribr)   ]   sS    ,/qLC-""S( +,/qLC-""S(+.##c)+r   c                 F    U S R                  S5      R                  S5      $ )z|
Create a short string representation of a float, which is %f
formatting with trailing zeros and the decimal point removed.
f0.)rstrip)xs    r   _short_float_fmtr0   c   s"    
 U??3&&s++r   c                   ^    \ rS rSrSrS rSS jrSS jrS rS r	SS	 jr
S
 rSS jrS rSrg)
_XMLWriterk   z=
Parameters
----------
file : writable text file-like object
c                     UR                   U l        [        US5      (       a  UR                  U l        SU l        / U l        / U l        SU l        g )Nflushr   z@                                                                )write_XMLWriter__writehasattrr5   _XMLWriter__open_XMLWriter__tags_XMLWriter__data_XMLWriter__indentation)selffiles     r   __init___XMLWriter.__init__r   sB    zz4!!DJ%r   c                 $   U R                   (       a1  U(       a  U R                  S5        OU R                  S5        SU l         U R                  (       a=  SR                  U R                  5      nU R                  [	        U5      5        / U l        g g )N>
r   r    )r9   r7   r;   joinr   )r=   indentdatas      r   __flush_XMLWriter.__flush{   sa    ;;U#S!DK;;774;;'DLLt,-DK r   Nc                    Uc  0 nU R                  5         [        U5      n/ U l        U R                  R	                  U5        U R                  U R                  S[        U R                  5      S-
   5        U R                  SU 35        0 UEUER                  5        H;  u  pEU(       d  M  [        U5      n[        U5      nU R                  SU SU 35        M=     SU l
        [        U R                  5      S-
  $ )a  
Open a new element.  Attributes can be given as keyword
arguments, or as a string/string dictionary. The method returns
an opaque identifier that can be passed to the :meth:`close`
method, to close all open elements up to and including this one.

Parameters
----------
tag
    Element tag.
attrib
    Attribute dictionary.  Alternatively, attributes can be given as
    keyword arguments.

Returns
-------
An element identifier.
N   r    =)_XMLWriter__flushr   r;   r:   appendr7   r<   lenitemsr)   r9   )r=   tagattribextrakvs         r   start_XMLWriter.start   s    & >FC 3T''(=T[[)9A)=>?qY'v''--/DAq!!$(+q1QC[)	 0
 4;;!##r   c                     U R                  5         U R                  U R                  S[        U R                  5       5        U R                  S[        U5       S35        g)z\
Add a comment to the output stream.

Parameters
----------
comment : str
    Comment text.
Nz<!-- z -->
)rM   r7   r<   rO   r:   r#   )r=   comments     r   rY   _XMLWriter.comment   sK     	T''(9T[[)9:;u_W56f=>r   c                 :    U R                   R                  U5        g)z`
Add character data to the output stream.

Parameters
----------
text : str
    Character data.
N)r;   rN   )r=   texts     r   rF   _XMLWriter.data   s     	4 r   c                 P   U(       aS  U R                   (       d   SU S35       e[        U5      U R                   S   :X  d   SU R                   S    SU 35       eOU R                   (       d   S5       eU R                   R                  5       nU R                  (       a  U R	                  U5        O*U R
                  (       a  SU l        U R                  S5        g	U(       a1  U R                  U R                  S	[        U R                   5       5        U R                  S
U S35        g	)z
Close the current element (opened by the most recent call to
:meth:`start`).

Parameters
----------
tag
    Element tag.  If given, the tag must match the start tag.  If
    omitted, the current element is closed.
indent : bool, default: True
zunbalanced end()zexpected end(z), got zunbalanced end()r   z/>
Nz</rB   )	r:   r   popr;   rM   r9   r7   r<   rO   )r=   rQ   rE   s      r   end_XMLWriter.end   s     ;;8/#a 88; %R8 >B0u=>8 ;;2 22;kkoo;;LL [[DKLL LL++,=S-=>?r#c]#r   c                     [        U R                  5      U:  a,  U R                  5         [        U R                  5      U:  a  M+  gg)z
Close open elements, up to (and including) the element identified
by the given identifier.

Parameters
----------
id
    Element identifier, as returned by the :meth:`start` method.
N)rO   r:   rb   )r=   ids     r   close_XMLWriter.close   s1     $++#HHJ $++#r   c                     Uc  0 nU R                   " X40 UD6  U(       a  U R                  U5        U R                  SS9  g)z
Add an entire element.  This is the same as calling :meth:`start`,
:meth:`data`, and :meth:`end` in sequence. The *text* argument can be
omitted.
NF)rE   )rV   rF   rb   )r=   rQ   r\   rR   rS   s        r   element_XMLWriter.element   s;     >F

3(%(IIdOr   c                     g)zFlush the output stream.N r=   s    r   r5   _XMLWriter.flush   s    r   )__data__indentation__open__tags__writer5   )TNNT)NN)__name__
__module____qualname____firstlineno____doc__r?   rM   rV   rY   rF   rb   rf   ri   r5   __static_attributes__rl   r   r   r2   r2   k   s5    &!$F?	!$:r   r2   z3.11c                       \ rS rSrSrSrg)	XMLWriter   z&
An XML writer class.

:meta private:
rl   N)rv   rw   rx   ry   rz   r{   rl   r   r   r}   r}      s    r   r}   c           
      Z   / nU  H  u  p#US:X  a  US:X  d  US:X  d  US:X  a  US:X  d  US:X  a  US:X  a  M1  US:X  a%  [        U[        5      (       a  UR                  5       nUR                  S	R	                  US
R                  S U 5       5      5      5        M     S
R                  U5      $ )Nscale)rJ   )rJ   rJ   	translate)r   r   rotate)r   matrixz{}({})rK   c              3   8   #    U  H  n[        U5      v   M     g 7frt   r0   ).0r/   s     r   	<genexpr>&_generate_transform.<locals>.<genexpr>  s     >1+A..   )
isinstancer   	to_valuesrN   formatrD   )transform_listpartstypevalues       r   _generate_transformr     s    E%GO$%6/;&5F?8#8
5, ? ?OO%EX__#((>>>@ 	A & 88E?r   c                 N    SR                  S U R                  5        5       5      $ )Nz; c              3   4   #    U  H  u  pU S U 3v   M     g7f)z: Nrl   )r   rT   rU   s      r   r    _generate_css.<locals>.<genexpr>  s     <^TQs"QC[^s   )rD   rP   rR   s    r   _generate_cssr     s    99<V\\^<<<r   squarebuttround)
projectingr   r   c                 d    [        U [        5      (       d  [        SU S[        U 5       S35      eg )NInvalid type for z metadata. Expected str, not r-   )r   str	TypeErrorr   )infokeys     r   _check_is_strr     s;    dC  +C50M:,a) * 	* !r   c           	          [         R                  " U 5      (       a:  U  H3  n[        U[        5      (       a  M  [	        SU S[        U5       S35      e   g [	        SU S[        U 5       S35      e)Nr   z) metadata. Expected iterable of str, not r-   z0 metadata. Expected str or iterable of str, not )npiterabler   r   r   r   )infosr   r   s      r   _check_is_iterable_of_strr   #  s    	{{5DdC(("3C5 988<T
|1!F G G 
 +C5 1004U}A? @ 	@r   c                   (  ^  \ rS rSrS'SS.U 4S jjjrS rS rS rS rS	 r	S
 r
S rS rS rS rS rS rS(S jrS rS r  S)S jrS(S jr S(S jrSS.U 4S jjrS rS rS rS rS(S jrS rS rS(S  jrS(S! jr S*S" jr!S# r"S$ r#S% r$S&r%U =r&$ )+RendererSVGi.  N)metadatac                  > Xl         X l        [        U5      U l        XPl        Uc$  [        USS5      n[        U[        5      (       d  SnX@l        0 U l	        [        R                  " 5       U l        0 U l        0 U l        0 U l        SU l        0 U l        SU l        SU l        [(        T	U ]U  5         [-        5       U l        [1        U5      n[1        U5      nUR3                  [4        5        U R                  R7                  SU S3U S3SU SU 3S	S
[8        R:                  S   SS0S9U l        U R?                  U5        U RA                  5         g )NnamerC   r   Fsvgptz0 0 rK   zhttp://www.w3.org/2000/svgz1.1zsvg.idzxmlns:xlinkzhttp://www.w3.org/1999/xlink)widthheightviewBoxxmlnsversionre   rR   )!r   r   r2   writer	image_dpigetattrr   r   basename_groupd	itertoolscount_image_counter_clip_path_ids_clipd_markers_path_collection_id_hatchd_has_gouraud_n_gradientssuperr?   dict
_glyph_mapr0   r6   	svgPrologrV   mplrcParams	_start_id_write_metadata_write_default_style)
r=   r   r   	svgwriterr   r   r   
str_height	str_width	__class__s
            r   r?   RendererSVG.__init__/  sB   
 +"y&"5Hh,, 'oo/ #$ !&%f-
$U+		"**Kr" \$9+Qzl3.||H%!#AB + D 	X&!!#r   c                     XR                   ;  a"  [        U R                   5      U R                   U'   U R                   U   $ )a^  
Returns a stable and unique identifier for the *clippath* argument
object within the current rendering context.

This allows plots that include custom clip paths to produce identical
SVG output on each render, provided that the :rc:`svg.hashsalt` config
setting and the ``SOURCE_DATE_EPOCH`` build-time environment variable
are set to fixed values.
)r   rO   )r=   clippaths     r   _get_clippath_idRendererSVG._get_clippath_idW  s<     ...,/0C0C,DD)""8,,r   c                     U R                  5         U R                  5         U R                  R                  U R                  5        U R                  R                  5         g rt   )_write_clips_write_hatchesr   rf   r   r5   rm   s    r   finalizeRendererSVG.finalizee  s@    $..)r   c                 	  ^ Uc  0 nSSS[         R                   S3S.UEnU R                  mSU;   a!  US   n[        US5        TR	                  SUS9  UR                  S	S 5      nUGb=  [        U[        5      (       a  U/nGO[        U[        R                  [        R                  45      (       a  UR                  5       /nO[        R                  " U5      (       a  / nU H  n[        U[        5      (       a  UR                  U5        M+  [        U[        R                  [        R                  45      (       a!  UR                  UR                  5       5        M{  [        S
[        U5       S35      e   O[        S[        U5       S35      eSR!                  U5      US	'   OS	U;  a  ["        R$                  " S5      nU(       af  [        R                  R'                  [)        U5      [        R*                  R,                  5      nUR/                  [0        S9R                  5       US	'   O/[        R                  R3                  5       R                  5       US	'   S nU4S jnUR5                  SS 5      nUb  U" U5      nTR	                  SSU0S9  S HN  n	UR5                  U	S 5      n
U
c  M  U" U5      n[        X5        TR	                  SU	R7                  5        3U
S9  MP     S H  n	UR5                  U	S 5      nUc  M  [        U[        5      (       a  U/n[9        X5        U" U5      nTR;                  SU	R7                  5        35        U H5  nTR;                  S5        TR	                  SUS9  TR=                  S5        M7     TR=                  SU	R7                  5        35        M     UR5                  SS 5      nUb  [        U[        5      (       a  U/n[9        US5        U" U5      nTR;                  S5        TR;                  S5        U H  nTR	                  SUS9  M     TR=                  S5        TR=                  S5        Ub  TR?                  U5        U(       a  [A        SSR!                  U5      -   5      eg ) Nzimage/svg+xmlz&http://purl.org/dc/dcmitype/StillImagezMatplotlib vz, https://matplotlib.org/)FormatTypeCreatorTitletitle)r\   DatezQInvalid type for Date metadata. Expected iterable of str, date, or datetime, not r-   z[Invalid type for Date metadata. Expected str, date, datetime, or iterable of the same, not /SOURCE_DATE_EPOCH)tzinfoc                 ~   > U b  U $ TR                  S5      n TR                  SSSSS.S9  TR                  S5        U $ )	Nr   zrdf:RDFz http://purl.org/dc/elements/1.1/zhttp://creativecommons.org/ns#z+http://www.w3.org/1999/02/22-rdf-syntax-ns#)zxmlns:dczxmlns:ccz	xmlns:rdfr   zcc:Work)rV   )midr   s    r   ensure_metadata4RendererSVG._write_metadata.<locals>.ensure_metadata  sL    
,,z*CLL><J,L 
 LL#Jr   r   zdc:typezrdf:resourcer   )	r   Coverager   Descriptionr   
IdentifierLanguageRelationSourcezdc:)r   Contributor	PublisherRightszcc:Agentzdc:titleKeywordsz
dc:subjectzrdf:Bagzrdf:liz.Unknown metadata key(s) passed to SVG writer: ,)!r   __version__r   r   ri   getr   r   datetimedate	isoformatr   r   rN   r   r   rD   osgetenvfromtimestampinttimezoneutcr   r   todayra   lowerr   rV   rb   rf   
ValueError)r=   r   r   r   datesdr   r   urir   r   agentsagentkeywordskeywordr   s                  @r   r   RendererSVG._write_metadatak  s    H%<s//HI	

 
 hW%E%)NN7N/ ||FD)$$$D8#4#4hmm"DEE)*T""A!!S))Q#A(9(98=='IJJQ[[]3'##'7)1./ /    #448J<q!B C C  #xxHV8# 9901D((66s4y(BSBSBWBWX#'<<s<#;#E#E#G #+#4#4#:#:#<#F#F#H 
	 ll64(?!#&CNN9nc-BNCDC<<T*D%c*d(SYY[M2>D EC\\#t,F~&#&& %f2!#&CLL3syy{m,-Z(z6

:&   JJSYY[M*+! E& <<
D1(C(($:%h
;!#&CLL&LL##xg6 $JJy!JJ|$?LLM XXh/0 1 1 r   c                     U R                   n[        SSS.5      nUR                  S5        UR                  SSSU-  S9  UR	                  S5        g )	Nr   r   )stroke-linejoinstroke-linecapdefsstyleztext/cssz*{%s})r   r\   )r   r   rV   ri   rb   )r=   r   default_styles      r   r    RendererSVG._write_default_style  sQ    %&$'& ' 	VwZg6MN

6r   c                 T   [         R                  S   nUc  [        [        R                  " 5       5      n[
        R                  " 5       nUR                  UR                  S5      5        UR                  [        U5      R                  S5      5        U UR                  5       S S  3$ )Nzsvg.hashsaltutf8
   )
r   r   r   uuiduuid4hashlibsha256updateencode	hexdigest)r=   r   contentsaltms        r   _make_idRendererSVG._make_id  s~    ||N+<tzz|$DNN	V$%	W$$V,-cr*+,,r   c                 p    U[        5       R                  SS5      R                  SU R                  5      -   $ )NrJ   r`   r   )r   r   r   r   )r=   	transforms     r   _make_flip_transform RendererSVG._make_flip_transform  s-    8:++Ar2<<QLLLr   c                 T   Ub  [        U5      nUR                  5       nUb  [        U5      nUR                  5       nUR                  5       X#U4nU R                  R                  U5      nUc6  U R                  SU5      nUR                  5       X#U4U4U R                  U'   U$ Uu  pvU$ )z
Create a new hatch pattern
h)tupleget_hatch_colorget_hatch_linewidth	get_hatchr   r   r  get_hatch_path)r=   gcrgbFaceedgelwdictkeyoid_s           r   
_get_hatchRendererSVG._get_hatch  s     GnG!!#;D##%<<>7"5llw';--W-C&(&7&7&97"%Ms$SDLL! 
 FA
r   c                    [        U R                  5      (       d  g SnU R                  nUR                  S5        U R                  R	                  5        GH  u  u  p4pVnUR                  SUSSS[        U5      [        U5      S9  U R                  U[        5       R                  U5      R                  SS5      R                  S	U5      S
S9nUc  Sn	O[        U5      n	UR                  SSS[        US-   5      [        US-   5      U	S9  [        U5      [        U5      [        U5      SSS.n
US   S:  a  [        US   5      U
S'   UR                  SU[        U
5      S9  UR                  S5        GM!     UR                  S5        g )NH   r  patternuserSpaceOnUser,   )re   patternUnitsr/   yr   r         ?      r   FsimplifynonerectrJ   )r/   r7  r   r   fillr   miter)r>  strokestroke-widthr
  r	     stroke-opacitypath)r  r  )rO   r   r   rV   valuesr   _convert_pathr   r   r   r   ri   r   rb   )r=   
HATCH_SIZEr   rD  facer@  r,  r.  	path_datar>  hatch_styles              r   r   RendererSVG._write_hatches  s   4<<  
V-1\\-@-@-B)$TcLL-C
O:  ( **
z"55d#3IIa4L	 +  I
 |t}NNC
1$5:a<(	   $FO%fo$'G&,'.K ay1}03F1I,-NN#K0  
 JJy!G .CH 	

6r   c                    0 nUR                  5       nUR                  5       bL  SU R                  X5       S3US'   Ub0  [        U5      S:X  a!  US   S:w  a  U(       d  [	        US   5      US'   OYUc  S	US'   OP[        USS 5      S
:w  a  [        U5      US'   [        U5      S:X  a!  US   S:w  a  U(       d  [	        US   5      US'   U(       a0  UR                  5       S:w  a  [	        UR                  5       5      US'   UR                  5       u  pVUb2  SR                  S U 5       5      US'   [	        [        U5      5      US'   UR                  5       nU(       a  UR                  5       n[        U5      US'   U(       d  US   S:w  a  [	        US   5      US'   US:w  a  [	        U5      US'   UR                  5       S:w  a  UR                  5       US'   UR                  5       S:w  a  [        UR                  5          US'   U$ )z=Generate a style string from the GraphicsContext and rgbFace.Nurl(#r_   r>     rB  r8  fill-opacityr<  )r   r   r   opacityr   c              3   8   #    U  H  n[        U5      v   M     g 7frt   r   )r   vals     r   r   .RendererSVG._get_style_dict.<locals>.<genexpr>T  s      2614# %%r   zstroke-dasharrayzstroke-dashoffsetr@  rC  rA  r   r	  r   r
  )get_forced_alphar'  r0  rO   r0   r$  r   	get_alpha
get_dashesrD   floatget_linewidthget_rgbget_joinstyleget_capstyle_capstyle_d)	r=   r)  r*  rR   forced_alphaoffsetseq	linewidthrgbs	            r   _get_style_dictRendererSVG._get_style_dict:  s   **,<<>%$T__R%A$B!DF6N#G(9gajC>O()9'!*)E~&!'v!%2%,W%5F6NLA%'!**; ,-=gaj-IF>*BLLNc1 0 @F9mmo?), 261426 *6F%&*:5=*IF&'$$&	**,C&s|F8CFcM+;CF+C'(C)9))D~&!W,,.,<,<,>() F*+6r7H+I'(r   c                 6    [        U R                  X5      5      $ rt   )r   rb  )r=   r)  r*  s      r   
_get_styleRendererSVG._get_styleg  s    T11">??r   c                    UR                  5       nUR                  5       u  p4Ub.  U R                  U5      nU R                  U5      [	        U5      4nO*Ub%  UR
                  u  pgpU R                  Xy-   -
  nXgX4nO0 $ U R                  R                  U5      n
U
c9  U R                  SU5      nUb  X44U4U R                  U'   OX[4U R                  U'   OU
u  pSSU S30$ )Npz	clip-pathrM  r_   )
get_clip_rectangleget_clip_pathr   r   r   boundsr   r   r   r  )r=   r)  cliprectr   clippath_transr-  r/   r7  wr#  clipr.  r/  s                r   _get_clip_attrsRendererSVG._get_clip_attrsj  s    ((*#%#3#3#5 !66~FN,,X6N8KLG!!JA!QS!AQlGI{{w'<--W-C#)1(BC'HG$(/~G$FAuSE^,,r   c           
         [        U R                  5      (       d  g U R                  nUR                  S5        U R                  R	                  5        H  u  p#UR                  SUS9  [        U5      S:X  a%  Uu  pEU R                  XESS9nUR                  SUS9  O<Uu  pxpUR                  S	[        U5      [        U5      [        U	5      [        U
5      S
9  UR                  S5        M     UR                  S5        g )Nr  clipPathre      Fr:  rD  r  r=  r/   r7  r   r   )	rO   r   r   rV   rE  rF  ri   r0   rb   )r=   r   ro  r.  r   rm  rI  r/   r7  rn  r#  s              r   r   RendererSVG._write_clips  s    4;;V++-IDLLL,4yA~+/( ..u / >	v3!
a&q)&q)*1-+A.  0 JJz" .  	

6r   c                     U(       a  U R                   R                  SUS9  g U R                  R                  US5      S-   U R                  U'   U R                   R                  SU SU R                  U   S 3S9  g )Ngrt  r   rJ   r/  r  )r   rV   r   r   )r=   r   gids      r   
open_groupRendererSVG.open_group  sl    KKcc*"ll..q!4q8DLLOKKc1T\\!_Q,?&@Ar   c                 :    U R                   R                  S5        g )Nrz  )r   rb   )r=   r   s     r   close_groupRendererSVG.close_group  s    r   c                 2    [         R                  S   (       + $ )Nzimage.composite_image)r   r   rm   s    r   option_image_nocomposite$RendererSVG.option_image_nocomposite  s    << 7888r   c           
          U(       a  SSU R                   U R                  4nOS n[        R                  " XX4US/ SQS5      R	                  S5      $ )Ng           )   M   L   Q   C   zFascii)r   r   r   convert_to_stringdecode)r=   rD  r  ro  r;  sketchs         r   rF  RendererSVG._convert_path  sK    djj$++6DD&&TVQ*E3396'?	Cr   c           	         U R                  U5      nUS L =(       a    UR                  5       S L nUR                  =(       a    UnU R                  X%XgUR	                  5       S9nUR                  5       b-  U R                  R                  SUR                  5       SS.5        U R                  R                  " SSU0U R                  U5      DSU R                  X5      0D6  UR                  5       b  U R                  R                  S5        g g )N)ro  r;  r  a_blank
xlink:hreftargetr  r  )rD  )r   r(  should_simplifyrF  get_sketch_paramsget_urlr   rV   ri   rp  re  rb   )	r=   r)  rD  r  r*  trans_and_flipro  r;  rI  s	            r   	draw_pathRendererSVG.draw_path  s    229=4?B$5$5$74$?''0D&&t'') ' +	 ::<#KKc"**,(#ST 	@i 	@43G3G3K 	@"&//"">	@::<#KKOOC  $r   c           	         [        UR                  5      (       d  g U R                  nU R                  UU[	        5       R                  SS5      -   SS9nU R                  X5      n	U[        U	5      4n
U R                  R                  U
5      n[        U	R                  5        VVs0 s H  u  pUR                  S5      (       d  M  X_M!     snn5      n	UcS  U R                  SU
5      nUR                  S5        UR                  SXU	S	9  UR                  S5        XR                  U
'   UR                  " S0 U R!                  U5      D6  UR#                  5       b-  U R                  R                  SUR#                  5       SS.5        U R%                  U5      nSSU 30nSSU R&                  S-  U R(                  S-  4nUR+                  UUSS9 H`  u  nn[        U5      (       d  M  USS  u  nn[-        U5      US'   [-        U5      US'   U R/                  X5      US'   UR                  SUS9  Mb     UR#                  5       b  U R                  R                  S5        UR                  S
5        g s  snnf )Nr8  r9  Fr:  r@  r  r  rD  )re   r  r  rz  r  r  r  r  #r   r3  )ro  r;  r/   r7  r  user   rz  )rO   verticesr   rF  r   r   rb  r   r   r   rP   
startswithr  rV   ri   rb   rp  r  r   r   r   iter_segmentsr0   re  )r=   r)  marker_pathmarker_transrD  transr*  r   rI  r  r-  r.  rT   rU   r  rR   ro  r  coder/   r7  s                        r   draw_markersRendererSVG.draw_markers  s9    4==!!&&8:++C66 ' 	 $$R1mE23mm( 9!"h!7  $qt 9 : ;--W-CLL NN6ceNDJJv%(MM'"5D0045::<#KKc"**,(#ST2259!C5	*1djjmT[[^4"00TE 1 ;NHd8}}}1.q1s.q1s"&//"">wuV4; ::<#KKOOC 

359s   %I3
I3
hatchcolorsc                  > Uc  / n[        U5      S:  a  [        US   R                  5      OSnU R                  X4XWU5      nUSU-  -   S-   US-   U-  :  nU(       d  [        T!U ]  XX4XVXxXXXS9$ U R
                  n/ nUR                  S5        [        U R                  X#U5      5       H  u  nu  nn[        UR                  5       5      R                  SS5      nU R                  UUS	S
9nSR                  U R                  UU R                  SU5      5      nUR!                  SUUS9  UR#                  U5        M     UR%                  S5        U R'                  UUXVXxXXXS9 H  u  nnnnnUR)                  5       nUb  UR                  SUSS.S9  U R+                  U5      nU(       a  UR                  " S0 UD6  SU 3[-        U5      [-        U R.                  U-
  5      U R1                  UU5      S.n UR!                  SU S9  U(       a  UR%                  S5        Uc  M  UR%                  S5        M     U =R                  S-  sl        g )Nr   	   rB     r  r  r8  r9  Fr:  zC{:x}_{:x}_{}rC   rD  )re   r  r  r  r  r   rz  r  )r  r/   r7  r  r  rJ   r  )rO   r  _iter_collection_uses_per_pathr   draw_path_collectionr   rV   	enumerate_iter_collection_raw_pathsr   
get_matrixr   rF  r   r   r  ri   rN   rb   _iter_collectionr  rp  r0   r   re  )"r=   r)  master_transformpathsall_transformsoffsetsoffset_trans
facecolors
edgecolors
linewidths
linestylesantialiasedsurlsoffset_positionr  len_pathuses_per_pathshould_do_optimizationr   
path_codesirD  r  r  r.  xoyopath_idgc0r*  url
clip_attrsrR   r   s"                                    r   r   RendererSVG.draw_path_collection  sn    K .1Z!^3uQx(();;7
D q=((1,1/MM 	%7/ez	 0 : : 
V$-d.M.M /9 %: A i !5!5!78>>sDII""4U"CA!((((!T]]2q-ACCNN6cQN/c"%: 	

6-1-B-BJ
O .C .N)BGS' ++-CSx)PQ--c2J/J/ !'m%b)%dkkB&67g6	F NN5N0

3

3).N, 	  A% r   c                    [         R                  " USS9nUS   S:X  a  g U R                  nUR                  S5        [	        S5       GH   nX   u  pgXS-   S-     u  pXS-   S-     u  pX%   nX:X  a  UnUnO<X:X  a  UnU	nO2X-
  X-
  -  nXU-  -
  nSU-  * nUUU-  -
  nU* U-   UU-
  -  nUU-  U-   nUR                  S	S
U R
                  S SUS 3S[        U5      [        U5      [        U5      [        U5      S9  UR                  SS[        [        U5      [        US   5      S.5      S9  UR                  SS[        [        U5      SS.5      S9  UR                  S	5        GM#     UR                  S5        S[        W5       S[        W5       S[        W5       S[        W	5       S[        W
5       S[        W5       S3nUR                  SU[        U5      SSS.S9  UR                  SSSSS S!.S9  UR                  SUS"U R
                  S S#3SS$.S9  UR                  SUS"U R
                  S S%3S&SS'.S9  UR                  SUS"U R
                  S S(3S&SS'.S9  UR                  S5        U =R
                  S-  sl        g ))Nr   )axisr`   r  rB  rJ   ru  r8  linearGradientGRr/   r/  r  r5  )re   gradientUnitsx1y1x2y2stop1)z
stop-colorzstop-opacity)r^  r  r,   zM r   z L rK   z ZrD  
crispEdges)r  r>  rO  shape-renderingr   rz  r<  zurl(#colorMat))r@  rA  r  filterzurl(#GRz_0))r  r>  r  z_1)zurl(#colorAdd))r  r>  r  r  z_2))r   averager   rV   ranger   r0   ri   r   r   rb   )r=   transformed_pointscolors	avg_colorr   r  r  r  r  r  x3y3
rgba_colorxbybm1b1m2b2dpaths                       r   _draw_gouraud_triangle"RendererSVG._draw_gouraud_triangle)  s@    JJvA.	R=AVqA'*FB'Q!4FB'Q!4FBJxg"'*7^Rx[27^cBh27+"Wr\LL ))!,AaU3.#B',<R,@#B',<R,@  B NN#"))"4$4Z^$D%F G  H NN#7:3F47%9 :  ; JJ'(M P 	

6 &r*+1-=b-A,B'+,A.>r.B-C%b)*!,<R,@+AE 	#I.$''35 	 	6 	"((++7"24 	 	5 	%d&7&7%:#>'35 	 	6 	%d&7&7%:#>.'35 	 	6 	%d&7&7%:#>.'35 	 	6 	

3Qr   c           	      .   U R                   nUR                  " S0 U R                  U5      D6  UR                  5       nU R	                  U5      nU R
                  (       dp  SU l        UR                  SSS9  UR                  SSS0S	S
SSS9  UR                  S5        UR                  SSS9  UR                  SSSS9  UR                  S5        [        X#5       H&  u  pxU R                  UR                  U5      U5        M(     UR                  S5        g )Nrz  Tr  colorAddrt  feCompositeinSourceGraphicBackgroundImage
arithmeticr  )rR   in2operatork2k3colorMatfeColorMatrixr   z61 0 0 0 0 
0 1 0 0 0 
0 0 1 0 0 
1 1 1 1 0 
0 0 0 0 1 )r   rE  r  )r   rV   rp  frozenr   r   ri   rb   zipr  r  )	r=   r)  triangles_arraycolors_arrayr  r   r  pointsr  s	            r   draw_gouraud_triangles"RendererSVG.draw_gouraud_triangles  s   5D0045$$&	229=   $DLL   NNo.%%3    JJx LL   NNS  U JJx !/@NF''(@(@(H&Q A

3r   c                     gru   rl   rm   s    r   option_scale_imageRendererSVG.option_scale_image      r   c                      U R                   S-  $ )N      R@)r   rm   s    r   get_image_magnification#RendererSVG.get_image_magnification  s    ~~$$r   c                    UR                   S S u  pgUS:X  d  US:X  a  g U R                  U5      nU(       a  U R                  R                  " S 0 UD6  UR	                  5       n	U	b  U R                  R                  SU	SS.S9  0 n
UR                  5       n[        R                  S   (       a  [        5       n[        R                  " U5      R                  US	S
9  U=(       d     U R                  SUR                  5       5      nS[        R                  " UR                  5       5      R!                  S5      -   U
S'   OU R"                  c  [%        S5      eU R"                   S['        U R(                  5       S3n[*        R-                  SU5        [        R                  " U5      R                  U5        U=(       d    SU R                  SU5      -   nXS'   XS'   Uc  SU-  U R.                  -  nSU-  U R.                  -  nU R                  R1                  S[3        SSSU* 44/5      [5        U5      [5        U R6                  U-
  U-
  * 5      [5        U5      [5        U5      U
S9  OUR9                  5       nUS:w  a  [5        U5      U
S'   [;        5       R=                  SU-  SU-  5      U-   [;        5       R?                  X#5      R=                  SS5      R?                  SU R6                  5      -   nU R                  R1                  S[5        U5      [5        U5      U
[3        SURA                  5       4/5      SS9  U	b  U R                  RC                  S5        U(       a  U R                  RC                  S5        g g )!Nru  r   rz  r  r  r  r   zsvg.image_inlinepng)r   imagezdata:image/png;base64,
r  r  zLCannot save image data to filesystem when writing SVG to an in-memory bufferz.imagez.pngz$Writing image file for inclusion: %sIm_re   r  )r   )rJ   r`   r   )r  r/   r7  r   r   rR   r8  rP  rJ   r`   r   z5image-rendering:crisp-edges;image-rendering:pixelated)r   r   rR   r  r  r  )"shaperp  r   rV   r  get_gidr   r   r   r   	fromarraysaver  getvaluebase64	b64encoder  r   r   nextr   _logr   r   ri   r   r0   r   rU  r   r   r   r  rb   )r=   r)  r/   r7  imr  r#  rn  r  r  rR   r.  buffilenamealphaflippeds                   r   
draw_imageRendererSVG.draw_image  s&    xx|6Q!V))"-
 KK0Z0jjl?KKc*QRjjl<<*+)COOB$$S$7?w?C*  077@A <  }}$  "F G G--tD4G4G/H.INHII<hGOOB$$X.Aw!AAC#+< tq4>>)Aq4>>)AKK-&q1"g(>/@ A"1%"T[[1_q%8#9:&q)2B12E    LLNE|$4U$;y!
  QA.*&&q,221b9CCAt{{ST  KK&q)2B12E-'..:J/K.LMM    ?KKOOC KKOOC  r   c           	      p   U R                   nU(       a  UR                  S5        UR                  5        HQ  u  nu  pEU R                  U5      nU R	                  [        US-  U5      SS9nUR                  SX6[        S/5      S9  MS     UR                  S5        U R                  R                  U5        gg)	zV
Emit definitions for not-yet-defined glyphs, and record them as having
been defined.
r  @   Fr:  rD  )r   )g      ?)re   r  r  N)r   rV   rP   _adjust_glyph_reprrF  r   ri   r   rb   r   r  )r=   glyph_map_newr   
glyph_reprr  codesrI  s          r   _update_glyph_map_defs"RendererSVG._update_glyph_map_defs   s    
 LL 1>1D1D1F-
-X!44Z@
 ..B. / @	z13G2HI  K 2G JJvOO""=1 r   c                 &    UR                  SS5      $ )Nz%20r/  r   )r=   r   s     r   r  RendererSVG._adjust_glyph_repr  s    !!%--r   c	                    U R                   n	U	R                  U5        U R                  n
U R                  n[	        UR                  5       5      nUR                  5       nUb!  UR                  5       nUR                  5       nOS =p0 nUS:w  a  UUS'   UR                  5       (       a  UR                  5       OUR                  5       S   nUS:w  a  [        U5      US'   XR                  -  nU	R                  S[        U5      [        SX#44SU* 44S	UU* 44/5      S
9  U(       dp  UR!                  U5      nUR#                  UXNUU
SS9u  nnnU R%                  U5        U H0  u  nnnnU	R'                  S[        SUU44S	U44/5      SSU 30S9  M2     OUS:X  a  UR)                  XTU
SS9nOUR+                  XTU
SS9nUu  nnnU R%                  U5        U HA  u  nnnnU R-                  U5      nU	R'                  S[        SUU44S	U44/5      SSU 30S9  MC     U H2  u  nn[/        UU5      nU R1                  USS9nU	R'                  SUS9  M4     U	R3                  S5        g )N#000000r>  rB  rJ   rP  rz  r   r   r   r  r  T)featureslanguage	glyph_mapreturn_new_glyphs_onlyr  r  r  )r  rR   TeX)r+  r,  Fr:  rD  rv  )r   rY   r   
_text2pathr   rY  get_size_in_pointsget_fontfeaturesget_languagerT  rU  r0   
FONT_SCALErV   r   r   	_get_fontget_glyphs_with_fontr"  ri   get_glyphs_texget_glyphs_mathtextr  r   rF  rb   ) r=   r)  r/   r7  r   propangleismathmtextr   r+  	text2pathcolorfontsizer)  r*  r  r  
font_scalefont
glyph_infor  rectsr   	xposition	ypositionr   _glyphsvertsr!  rD  rI  s                                    r   _draw_text_as_pathRendererSVG._draw_text_as_path  s   qOO	OO	

%**,--/H))+H"&&HI!E&M"$"5"5"7"7RZZ\!_A:/6E) 4 44
&)qf%UF9%:
{34+  	 	
 &&t,D/8/M/MaX#D 0N 0B,Ju ''6;E7
Iy%1$y)&<= 5(+3  )Aj\*:;  = <F #22y 3 O $77y 8 O/6,Ju''6;E7
Iy%!44Z@
1$y)&<= 5(+3  )Aj\*:;  = <F !&uE5) ..te.D	v3 !&
 	

3r   c	           
      
  ^(^) U R                   n	[        UR                  5       5      n
0 n0 nU
S:w  a  XS'   UR                  5       (       a  UR	                  5       OUR                  5       S   nUS:w  a  [        U5      US'   U(       Gd  0 nUR                  5       S:w  a  UR                  5       US'   UR                  5       S:w  a  UR                  5       US'   UR                  5       n[        R                  R                  X5      nUS	:w  a  U US
'   S m)U)4S jm(U(4S jn[        UR                  5       5       S3US'   SR                  [        R                  U" U5      5      5      US'   UR!                  5       S:w  a  UR!                  5       US'   [#        0 UEUE5      US'   U(       GaG  US:X  d  UR%                  5       S:X  Ga,  UR'                  5       nUR)                  UR+                  5       5      u  nnU R,                  U-
  n[.        R0                  " U5      n[.        R2                  " [.        R4                  " U5      [.        R6                  " U5      /5      n[.        R8                  " UUU-
  UU-
  /5      nUUUS   -  -   nUUUS   -  -   nSSSS.nUUR;                  5          US'   [        U5      US'   [        U5      US'   [#        0 UEUE5      US'   [=        SU* UU44/5      US'   O[=        SX#44SU* 44/5      US'   U	R?                  S XNS!9  g U	RA                  U5        U RB                  RD                  RG                  US"U5      u  nnnnnU	RI                  S#[#        0 UEUE5      [=        SX#44SU* 44/5      S$9  U	RI                  S 5        0 nU H  u  nnn n!n"n#[        RJ                  " U5      n$0 nU$RL                  S:w  a  U$RL                  US'   U$RN                  S:w  a  U$RN                  US'   U$RP                  S	:w  a  U$RP                   US
'   [        U5       S3US'   U$RR                  < US'   U$RT                  S:w  a  U$RT                  US'   [#        0 UEUE5      n%U S%:X  a  S&n URW                  U%/ 5      RY                  U"U#* U 45        GM      UR[                  5        HP  u  n%n&U&R]                  5         U& H4  u  p#n'U	R?                  S'[_        U'5      [        U5      [        U5      U%S(9  M6     MR     U	Ra                  S 5        U HB  u  p#nnU	R?                  S)[        U5      [        U* S-
  5      [        U5      [        U5      S*9  MD     U	Ra                  S#5        g )+Nr'  r>  rB  rJ   rP  normalz
font-stylezfont-varianti  zfont-weightc                     U S;   a  S$ U $ )N)sansz
sans serifz
sans-serifrl   )r   s    r   _normalize_sans7RendererSVG._draw_text_as_text.<locals>._normalize_sans  s    '+/E'E|O4Or   c              3      >#    T" U 5      n U [         R                  ;   a0  [         R                  R                  U 5       H  nT" U5      v   M     U v   g 7frt   )fmfont_family_aliasesFontManager_expand_aliases)fnr   rL  s     r   _expand_family_entry<RendererSVG._draw_text_as_text.<locals>._expand_family_entry  sL     $R(/// !# > >r B-d33 !C s   AAc                    > U R                  5        VVs/ s H4  nT" U5        H$  nU[        R                  ;   a  UO
[        U5      PM&     M6     snn$ s  snnf rt   )
get_familyrO  rP  repr)r7  entryr   rT  s      r   _get_all_quoted_names=RendererSVG._draw_text_as_text.<locals>._get_all_quoted_names  s^     &*__%6A%6E$8$?D !%(>(> >DJN$? O%6A A As   ;Apxz	font-sizez, zfont-familyzfont-stretchr  r   anchorrV   rb   middle)leftrightcenterztext-anchorr/   r7  r   r  r   r\   r   r3  rz  r(         tspan)r/   r7  r  r=  rw  )1r   r   rY  rT  rU  r0   	get_styleget_variant
get_weightrO  weight_dictr   get_sizerD   r   fromkeysget_stretchr   get_rotation_modeget_transformr  get_unitless_positionr   r   deg2radarraysincosdotget_har   ri   rY   r.  mathtext_parserparserV   ttfFontPropertyr  variantweightr   stretch
setdefaultrN   rP   sortchrrb   )*r=   r)  r/   r7  r   r7  r8  r9  r:  r   r<  
font_stylecolor_styler  rR   ry  rZ  r  axay	angle_raddir_vertv_offsetha_mpl_to_svgr   r   descentglyphsrA  spansr?  r=  ccodeglyph_indexnew_xnew_yrY  r  charstrT  rL  s*                                           @@r   _draw_text_as_textRendererSVG._draw_text_as_textc  sp    

%
I"'"$"5"5"7"7RZZ\!_A:%5e%<K	"F ~~8++/>>+;
<(!X--1-=-=-?
>*__&F^^''7F}/5h
=)P
A *:$--/)J(K2&NJ{#(,		3D9:)J}% !X--1-=-=-?
>*+,Iz,I[,IJF7O%1*(?(?(AX(M
 "//1	",,U-H-H-JKB[[2%
 JJu-	88RVVI%6y8I$JK66(a"fB,@A(Xa[00(Xa[00)05+3!5,9%,,.,I
=).r2s.r2s"/0M:0M0M"Nw&9B/0;2 '3{# ': 1&)y);+ ',{# NN61N4 NN1 //55aTB 2E67FE
 LL,-J
-Jk-JK#6)A62&%	284 $5   LL  EDJ@h{E5**40
;;(*/4{{J|,==H,16J~.<<3&38<<.J}--=h-G,H*K
;'/4zzn
=)==H,16J~.%&C&C{&CDB; E  +22EE653IJ# EK& !&u

$GA!NNA*1-*1-# # %  % !. JJv',#eV&q)&r!t,*51+F3   (- JJsOr   c	           
         U R                  U5      n	U	(       a  U R                  R                  " S0 U	D6  UR                  5       b-  U R                  R                  SUR                  5       SS.5        [        R
                  S   S:X  a  U R                  XX4XVXx5        OU R                  XX4XVXx5        UR                  5       b  U R                  R                  S5        U	(       a  U R                  R                  S5        g g )Nrz  r  r  r  zsvg.fonttyperD  r  )	rp  r   rV   r  r   r   rF  r  rb   )
r=   r)  r/   r7  r   r7  r8  r9  r:  r  s
             r   	draw_textRendererSVG.draw_text  s     ))"-
 KK0Z0::<#KKc"**,(#ST<<'61##B1fL##B1fL::<#KKOOC KKOOC  r   c                     gru   rl   rm   s    r   flipyRendererSVG.flipy  r  r   c                 2    U R                   U R                  4$ rt   )r   r   rm   s    r   get_canvas_width_height#RendererSVG.get_canvas_width_height  s    zz4;;&&r   c                 :    U R                   R                  XU5      $ rt   )r.  get_text_width_height_descent)r=   r   r7  r9  s       r   r  )RendererSVG.get_text_width_height_descent   s    <<QfMMr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )Nr3  rt   )NNNN)FN)'rv   rw   rx   ry   r?   r   r   r   r   r  r   r0  r   rb  re  rp  r   r|  r  r  rF  r  r  r  r  r  r  r  r  r"  r  rF  r  r  r  r  r  r{   __classcell__r   s   @r   r   r   .  s    &$!&$ &$P-y1v-M&*X+Z@-..B9 GK!C!" GK)\ >B:& :&xfPB%E!N2&.KZ\|!.'N Nr   r   c                   R   ^  \ rS rSrSSS.rSrSSS.S jrS rS	 rU 4S
 jr	Sr
U =r$ )FigureCanvasSVGi%  zScalable Vector Graphics)r   svgzr3  N)bbox_inches_restorer   c                    [         R                  " USSS9 n[         R                  " U5      (       d  [        R                  " S5      " U5      nU R
                  R                  nSU R
                  l        U R
                  R                  5       u  pgUS-  US-  p[        U R
                  XgU[        XXEUS9US9n
U R
                  R                  U
5        U
R                  5         SSS5        g! , (       d  f       g= f)aa  
Parameters
----------
filename : str or path-like or file-like
    Output target; if a string, a file will be opened for writing.

metadata : dict[str, Any], optional
    Metadata in the SVG file defined as key-value pairs of strings,
    datetimes, or lists of strings, e.g., ``{'Creator': 'My software',
    'Contributor': ['Me', 'My Friend'], 'Title': 'Awesome'}``.

    The standard keys and their value types are:

    * *str*: ``'Coverage'``, ``'Description'``, ``'Format'``,
      ``'Identifier'``, ``'Language'``, ``'Relation'``, ``'Source'``,
      ``'Title'``, and ``'Type'``.
    * *str* or *list of str*: ``'Contributor'``, ``'Creator'``,
      ``'Keywords'``, ``'Publisher'``, and ``'Rights'``.
    * *str*, *date*, *datetime*, or *tuple* of same: ``'Date'``. If a
      non-*str*, then it will be formatted as ISO 8601.

    Values have been predefined for ``'Creator'``, ``'Date'``,
    ``'Format'``, and ``'Type'``. They can be removed by setting them
    to `None`.

    Information is encoded as `Dublin Core Metadata`__.

    .. _DC: https://www.dublincore.org/specifications/dublin-core/

    __ DC_
rn  zutf-8)encodingr3  )r   r   )r  N)r   open_file_cmfile_requires_unicodecodecs	getwriterfiguredpiget_size_inchesr   r   drawr   )r=   r  r  r   fhr  r   r   rn  r#  renderers              r   	print_svgFigureCanvasSVG.print_svg+  s    @ #@B..r22%%g.r2++//C DKKO KK779ME2:v{q(UCA"hG$79H KKX& A@@s   CC//
C=c                     [         R                  " US5       n[        R                  " SUS9 nU R                  " U40 UD6sS S S 5        sS S S 5        $ ! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)Nwbrn  )modefileobj)r   r  gzipGzipFiler  )r=   r  kwargsr  
gzipwriters        r   
print_svgzFigureCanvasSVG.print_svgzY  s[      40Bmmb1Z>>*77 21 10111 100s"   A/A	A/
A"	A//
A=c                     g)Nr   rl   rm   s    r   get_default_filetype$FigureCanvasSVG.get_default_filetype^  s    r   c                 T   > U R                   R                  5         [        TU ]  5       $ rt   )r  draw_without_renderingr   r  )r=   r   s    r   r  FigureCanvasSVG.drawa  s    **,w|~r   rl   )rv   rw   rx   ry   	filetypes	fixed_dpir  r  r  r  r{   r  r  s   @r   r  r  %  s6    235I I9= , \8
 r   r  z<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
c                   0    \ rS rSr\R
                  r\rSr	g)_BackendSVGip  rl   N)
rv   rw   rx   ry   r   r   backend_versionr  FigureCanvasr{   rl   r   r   r  r  p  s    ooO"Lr   r  )?r  r  r   r  r  ior   r   loggingr   rer  numpyr   PILr   
matplotlibr   r   r   rO  matplotlib.backend_basesr   r   r	   r
   !matplotlib.backends.backend_mixedr   matplotlib.colorsr   matplotlib.datesr   matplotlib.pathr   r   matplotlib.transformsr   r   	getLoggerrv   r  r   compiler!   r#   r'   r)   r0   r2   _api
deprecatedr}   r   r   r\  r   r   r   r  FigureManagerSVGr   exportr  rl   r   r   <module>r     s4           	 	     0B B ? %      8 "R jj+ ,
+,Q Qh V
  = &vH*@tN, tNn>& >B % 	 
#( # #r   