rL i8ddlZddlZddlZddlZddlZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddlmZddlZddlmZmZddlmZmZmZmZddlmZddlmZddlmZdd l m!Z!dd lm"Z"dd l#m$Z$m%Z%ejLe'Z(d Z)e jTd Z+dZ,dZ-dZ.dZ/GddZ0dZ1dZ2ddddZ3dZ4dZ5GddeZ6GddeZ7eZ8d Z9ejtGd!d"eZ;y)#N)BytesIO)Image)cbook font_manager)_BackendFigureCanvasBaseFigureManagerBase RendererBase)MixedModeRenderer)rgb2hex)UTC)Path)_path)Affine2D Affine2DBasecr|jdd}|jdd}|jdd}|S)N&&<<>>replacess e/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/matplotlib/backends/backend_svg.py _escape_cdatarEs7 #wA #vA #vA Hz-(?=-)cDt|}tjd|S)Nz- )r_escape_xml_commentsubrs r_escape_commentr#OsaA  " "4 ++rc|jdd}|jdd}|jdd}|jdd}|jd d }|S) Nrr'z'"z"rrrrrrs r_escape_attribr'TsW #wA #x A #x A #vA #vA Hrcxd|vrdt|zdzSd|vrdt|zdzSdt|zdzS)Nr&r%)rr'rs r_quote_escape_attribr)]sS,/qLC-" "S (+,/qLC-" "S (+ .# #c )+rcF|djdjdS)z Create a short string representation of a float, which is %f formatting with trailing zeros and the decimal point removed. f0.)rstrip)xs r_short_float_fmtr0cs" U??3  & &s ++rcTeZdZdZdZd dZifdZdZdZd dZ d Z difd Z d Z y) XMLWriterzM Parameters ---------- file : writable text file-like object c|j|_t|dr|j|_d|_g|_g|_d|_y)Nflushrz@ )write_XMLWriter__writehasattrr4_XMLWriter__open_XMLWriter__tags_XMLWriter__data_XMLWriter__indentation)selffiles r__init__zXMLWriter.__init__rs?zz 4 !DJ   %rc|jr,|r|jdn|jdd|_|jr=dj|j}|jt |g|_yy)N> rr)r8r6r:joinr)r<indentdatas r__flushzXMLWriter.__flush{sa ;; U# S!DK ;;774;;'D LLt, -DK rc |jt|}g|_|jj ||j |j dt|jdz |j d|i||jD]5\}}|s t|}t|}|j d|d|7d|_ t|jdz 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. Nr =) _XMLWriter__flushrr:r9appendr6r;lenitemsr)r8)r<tagattribextrakvs rstartzXMLWriter.starts& C   3 T''(=T[[)9A)=>? qY'v''--/ *DAq!!$(+ q1QC[)  *  4;;!##rc|j|j|jdt|j|jdt |dy)z Add a comment to the output stream. Parameters ---------- comment : str Comment text. Nz )rJr6r;rLr9r#)r<comments rrUzXMLWriter.commentsK  T''(9T[[)9:; u_W56f=>rc:|jj|y)z Add character data to the output stream. Parameters ---------- text : str Character data. N)r:rK)r<texts rrDzXMLWriter.datas 4 rNc|rL|js Jd|dt||jdk(s-Jd|jdd||jsJd|jj}|jr|j |n%|j rd|_|j dy |r1|j |jd t|j|j d |d y ) a< 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 zunbalanced end()z expected end(z), got zunbalanced end()rz/> Nz B0u= >8;; 2 2 2;kkoo ;; LL [[DK LL   LL++,=S-=> ? r#c]#rct|j|kDr*|jt|j|kDr)yy)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)rLr9r\)r<ids rclosezXMLWriter.closes1$++# HHJ$++#rc v|j||fi||r|j||jdy)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. F)rCN)rSrDr\)r<rNrWrOrPs relementzXMLWriter.elements5  3(%(  IIdO rcy)zFlush the output stream.Nr<s rr4zXMLWriter.flushs r)TNT) __name__ __module__ __qualname____doc__r>rJrSrUrDr\r_rar4rcrrr2r2ksA & !#$B ? !$: !%R  rr2c <g}|D]\}}|dk(r |dk(s|dk(s|dk(r|dk(s |dk(r|dk(r*|dk(r t|tr|j}|jd j |d j d |Dd j |S) Nscale)rG)rGrG translate)rrrotate)rmatrixz{}({})rHc32K|]}t|ywNr0).0r/s r z&_generate_transform..s>1+A.>) isinstancer to_valuesrKformatrB)transform_listpartstypevalues r_generate_transformr|s E%A e GO$%6/;&5F?8#  8  5, ?OO%E X__ #((>>>@ AA 88E?rcNdjd|jDS)Nz; c30K|]\}}|d|yw)z: Nrc)rrrQrRs rrsz _generate_css.. sdict _glyph_mapr0r5 svgPrologrSmplrcParams _start_id_write_metadata_write_default_style) r<rr svgwriterrrr str_height str_width __class__s rr>zRendererSVG.__init__"sG   * "  y&"5Hh,   'oo/   #$  ! &%f- $U+  "** Kr" \$9+Qzl3.||H%!#AB+D X& !!#rc||jvr"t|j|j|<|j|S)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. )rrL)r<clippaths r_get_clippath_idzRendererSVG._get_clippath_idJs> 4.. .,/0C0C,DD   )""8,,rc|j|j|jj|j|jj yrp) _write_clips_write_hatchesrr_rr4rds rfinalizezRendererSVG.finalizeXs@   $..) rc|i}dddtjdd|}|jd|vr$|d}t|dj d||j d d}|t |tr|g}nt |tjtjfr|jg}ntj|rg}|D]}t |tr|j|%t |tjtjfr |j|jotd t|d ntd t|d d j!||d <nd |vrt#j$d}|ritjj't)|tj*j,}|j/t0j|d <n/tjj3j|d <d}fd}|j5dd}|||}j dd|idD]O} |j5| d} | ||}t| | j d| j7| QdD]} |j5| d} | t | tr| g} t9| | ||}j;d| j7| D]7} j;dj d| j=d9j=d| j7|j5dd} | t | tr| g} t9| d||}j;dj;d| D]}j d|j=dj=d|j?||rtAddj!|zy) Nz image/svg+xmlz&http://purl.org/dc/dcmitype/StillImagez Matplotlib vz, https://matplotlib.org/)FormatTypeCreatorTitletitle)rWDatezQInvalid 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||Sjd}jdddddjd|S) Nrzrdf:RDFz http://purl.org/dc/elements/1.1/zhttp://creativecommons.org/ns#z+http://www.w3.org/1999/02/22-rdf-syntax-ns#)zxmlns:dczxmlns:ccz xmlns:rdfrzcc:Work)rS)midrs rensure_metadataz4RendererSVG._write_metadata..ensure_metadatasL ,,z*C LL><J,L  LL #Jrrzdc:typez rdf:resourcer) rCoverager Descriptionr IdentifierLanguageRelationSourcezdc:)r Contributor PublisherRightszcc:Agentzdc:titleKeywordsz dc:subjectzrdf:Bagzrdf:liz.Unknown metadata key(s) passed to SVG writer: ,)!r __version__rrragetrurdatetimedate isoformatrrrKrrzrBosgetenv fromtimestampinttimezoneutcrr todayr[lowerrrSr\r_ ValueError)r<rrrdatesdrrurirragentsagentkeywordskeywordrs @rrzRendererSVG._write_metadata^s  H%<s//HI     h W%E % ) NN7N /||FD)  $$D8#4#4hmm"DE)*T" /A!!S) Q#A(9(98=='IJ Q[[]3'##'7)1.// / #448J  ?E ,C\\#t,F~&#&  %fc 2!#&C LL3syy{m, - ' Z(z6 :& ' JJSYY[M* +! ,&<< D1  (C($: %h ;!#&C LL & LL ## 7xg6 7 JJy ! JJ| $ ? LL  M XXh/01 1 rc|j}tddd}|jd|jddd|z|j dy) Nrr)stroke-linejoinstroke-linecapdefsstyleztext/cssz*{%s})rzrW)rrrSrar\)r<r default_styles rrz RendererSVG._write_default_stylesQ%&$'&'   VwZg 6MN 6rcNtjd}|ttj}t j }|j|jd|jt|jd||jddS)Nz svg.hashsaltutf8 ) rrruuiduuid4hashlibsha256updateencode hexdigest)r<rzcontentsaltms r_make_idzRendererSVG._make_ids~||N+ <tzz|$D NN  V$% W$$V,- cr*+,,rcp|tjddjd|jzS)NrGrZr)rrkrlr)r< transforms r_make_flip_transformz RendererSVG._make_flip_transforms-8:++Ar2<7D"5llw' ;--W-C&(&7&7&97D"%Ms$SDLL ! FAs rc t|jsyd}|j}|jd|jj D])\\}}}}}|jd|dddt |t ||j |tj|jddjd |d }|d } n t|} |jd ddt |dzt |dz| t|t|t |ddd} |ddkrt |d| d<|jd|t| |jd,|jdy)NHrpatternuserSpaceOnUser,)r^ patternUnitsr/yrr?rFsimplifynonerectrG)r/rrrfillrmiter)rstroke stroke-widthrrstroke-opacitypath)rr)rLrrrSvaluesr _convert_pathrrkrlr rarr\) r< HATCH_SIZErr%facer!rr path_datar hatch_styles rrzRendererSVG._write_hatchess4<<   V-1\\-@-@-B# " ) $T4c LL-C O:  ( ** z"55d#3IIa4L + I |t} NNC 1 $5:a<(   $FO%fo$'G&,'. Kay1}03F1I ,- NN#K0   JJy !G# "H  6rci}|j}|jEd|j||d|d<|zt|dk(rl|ddk7rd|sbt |d|d<nP|d |d<nHt |ddd k7rt ||d<t|dk(r|ddk7r|st |d|d<|r/|jdk7rt |j|d <|j\}}|2d jd |D|d<t t||d<|j}|r|j}t ||d<|s|ddk7rt |d|d<|dk7rt ||d<|jdk7r|j|d<|jdk7rt|j|d<|S)z=Generate a style string from the GraphicsContext and rgbFace.Nurl(#rYrr#r fill-opacityr)rrropacityrc32K|]}t|ywrprq)rrvals rrsz.RendererSVG._get_style_dict..Gs26*- %26rtzstroke-dasharrayzstroke-dashoffsetr!r$r"rrrr)get_forced_alphar rrLr0rr get_alpha get_dashesrBfloat get_linewidthget_rgb get_joinstyle get_capstyle _capstyle_d) r<r r rO forced_alphaoffsetseq linewidthrgbs r_get_style_dictzRendererSVG._get_style_dict-s**, <<> %$T__R%A$B!DF6N#G (9gajC>O()9'!*)E~&!'v!%2%,W%5F6NLA%'!**; ,-=gaj-IF>* BLLNc1 0 @F9 mmo  ?),261426*6F% &*:5=*IF& '$$& **,C&s|F8 CFcM+;CF+C'(C)9))D~&!W,,.,<,<,>() F*+6r7H+I'( rc8t|j||Srp)rrA)r<r r s r _get_stylezRendererSVG._get_styleZsT11"g>??rc|j}|j\}}|.|j|}|j|t |f}n.|*|j \}}}} |j || zz }|||| f}niS|jj|} | :|jd|} |||f| f|j|<n|| f|j|<n| \} } dd| diS)Npz clip-pathr-rY) get_clip_rectangle get_clip_pathrrrboundsrrrr) r<r cliprectrclippath_transrr/rwrcliprrs r_get_clip_attrszRendererSVG._get_clip_attrs]s((*#%#3#3#5 .  !66~FN,,X6N8KLG  !!JAq!Q QqS!A!QlGI{{w' <--W-C#)1>(BC'H G$(/~ G$FAsuSE^,,rc t|jsy|j}|jd|jj D]\}}|jd|t|dk(r-|\}}|j ||d}|j d|nA|\}}} } |j d t|t|t| t|  |jd|jdy) NrclipPathr^Frr%rrr/rrr) rLrrrSr&r'rar0r\) r<rrLrrrJr*r/rrKrs rrzRendererSVG._write_clipsts4;;  V++- #ID# LLL ,4yA~+/(. ..nu/> v3! 1a&q)&q)*1-+A. 0 JJz " #  6rc|r|jjd|y|jj|ddz|j|<|jjd|d|j|dy)NgrPrrGrr)rrSrr)r<rgids r open_groupzRendererSVG.open_groupsl  KK  cc  *"ll..q!4q8DLLO KK  c1T\\!_Q,?&@  Arc:|jjdy)NrU)rr\)r<rs r close_groupzRendererSVG.close_groups rc*tjd S)Nzimage.composite_image)rrrds roption_image_nocompositez$RendererSVG.option_image_nocomposites<< 7888rc |rdd|j|jf}nd}tj|||||dgddj dS)N)MLQCzFascii)rrrconvert_to_stringdecode)r<r%rrLrsketchs rr'zRendererSVG._convert_pathsO djj$++6DD&& )T8VQ *E3396'? Crc |j|}|duxr|jdu}|jxr|}|j|||||j }|j ,|j jdd|j i|j jdd|i|j|d|j||i|j |j jdyy)N)rLrrga xlink:hrefrr)r%) rr should_simplifyr'get_sketch_paramsget_urlrrSrarMrCr\) r<r r%rr trans_and_fliprLrr*s r draw_pathzRendererSVG.draw_paths229=4?B$5$5$74$?''0D&& .th'')'+  ::< # KK  cL"**,#? @  @i @43G3G3K @"&//"g"> @ ::< # KKOOC  $rc t|jsy|j}|j||t j ddzd}|j ||} |t| f} |jj| } t| jD cic]\} } | jdr| | c} } } | X|jd| } |jd|jd| || |jd| |j| <|jdi|j!||j#,|jjd d |j#i|j%|}d d | i}dd|j&dz|j(dzf}|j+||dD]]\}}t|s|dd\}}t-||d<t-||d<|j/|||d<|jd|_|j#|jjd |jd ycc} } w)NrrFrr!rrr%)r^rrrUrirj#rr)rLrr/rruserrU)rLverticesrr'rrkrArrrrM startswithrrSrar\rMrmrrr iter_segmentsr0rC)r<r  marker_path marker_transr%transr rr*rrrrQrRrnrOrLrucoder/rs r draw_markerszRendererSVG.draw_markerssA4==! &&  8:++C6 6' $$R1mE23mm( 91!"h!7 !!t9: ;--W-C LL NN6cYeN D JJv %(DMM' " 5D0045 ::< # KK  cL"**,#? @2259!C5 *1djjmT[[^4"00TE1; 5NHd8}}1.q1s .q1s "&//"g">wuV4 5 ::< # KKOOC  359s$I* ct|dkDrt|djnd}|j|||||}|d|zzdz|dz|zk}|st |||||||||| | | | | S|j }g}|j dt|j|||D]\}\}}t|jjdd}|j||d }d j|j||jd |}|j!d || |j#||j%d|j'||||||| | | | | D]\}}}}}|j)}||j dd|i|j+|}|r|j di|d|t-|t-|j.|z |j1||d}|j!d||r|j%d||j%d|xjdz c_y)Nr r#rrrFrz C{:x}_{:x}_{}rAr%)r^rrirjrrUrq)rjr/rrrsrGrt)rLru_iter_collection_uses_per_pathrdraw_path_collectionrrS enumerate_iter_collection_raw_pathsr get_matrixrkr'rwrrrarKr\_iter_collectionrmrMr0rrC)!r<r master_transformpathsall_transformsoffsets offset_trans facecolors edgecolors linewidths linestyles antialiasedsurlsoffset_positionlen_path uses_per_pathshould_do_optimizationr path_codesir%rrrxoyopath_idgc0r url clip_attrsrOrs! rrz RendererSVG.draw_path_collections{.1Z!^3uQx(();; >7J D  q=( (1 ,1 /M M %7/$e^z:J d ! !   V$-d.M.M %/9%: # A i !5!5!78>>sDII""4U"CA!((((!T]]2q-ACC NN6cQN /   c " #  6-1-B-BJJ JdO.5 )BGS'++-C S,)< =--c2J /J/ !'m%b)%dkkB&67g6 F NN5N 0 3 3) ,   A% rc^tj|d}|ddk(ry|j}|jdt dD]2}||\}}||dzdz\}} ||dzdz\} } ||} || k(r|} |}n?| | k(r|} | }n5| | z || z z }| ||zz }d|z }|||zz }| |z||z z } || z|z}|jd d |j d d |d dt |t |t | t ||jddtt|t | dd|jddtt| dd|jd 5|jddt dt dt dt  dt  dt  d }|jd|t|ddd|jddddd d!|jd|d"|j d d#dd$|jd|d"|j d d%d&dd'|jd|d"|j d d(d&dd'|jd|xj dz c_y))Nr)axisrZrr#rGrQrlinearGradientGRr/rrr)r^ gradientUnitsx1y1x2y2stop1)z stop-colorz stop-opacity)r=rr,zM rz L rHz Zr% crispEdges)rrr/shape-renderingrrUrzurl(#colorMat))r!r"rfilterzurl(#GRz_0))rrrz_1)zurl(#colorAdd))rrrrz_2)) raveragerrSrangerr0rarr r\)r<transformed_pointscolors avg_colorrrrrrrx3y3 rgba_colorxbybm1b1m2b2dpaths r_draw_gouraud_trianglez"RendererSVG._draw_gouraud_triangles]JJvA. R=A   Vq& )A'*FB'Q! 4FB'Q! 4FBJRxr2g"r'*27^Rx[27^cBh27+"Wr\ LL ))!,AaU3.#B',r.B-C%b)*!,'35  6  %d&7&7%:#>.'35  6  %d&7&7%:#>.'35  6  3 Qrc@|j}|jdi|j||j}|j |}|j s~d|_|jdd|j dddid d d d |jd|jdd |j dddid|jdt||D]&\}}|j|j||(|jdy)NrUTrcolorAddrP feCompositein SourceGraphicBackgroundImage arithmeticr)rOin2operatork2k3colorMat feColorMatrixrzrnz61 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 1 1 0 0 0 0 0 1 )rOr&rt) rrSrMfrozenrrrar\ziprr) r<r triangles_array colors_arrayrrrnpointsrs rdraw_gouraud_trianglesz"RendererSVG.draw_gouraud_triangless- 5D0045$$& 229=  $D  LL   NNo.%%3  JJx LL   NN)S  U JJx !/<@ RNFF  ' '(@(@(H& Q R 3rcyrercrds roption_scale_imagezRendererSVG.option_scale_imagerc |jdz S)NR@)rrds rget_image_magnificationz#RendererSVG.get_image_magnifications~~$$rc |jdd\}}|dk(s|dk(ry|j|}|r|jjd i||j } | |jjdd| ii} |j } t jdrt} tj|j| d | xs |jd | j} d tj| jj!d z| d<n|j" t%d |j"dt'|j(d} t*j-d| tj|j| | xsd|jd | z} | | d<| | d<|d|z|j.z }d|z|j.z }|jj1d t3ddd| ffgt5|t5|j6|z |z t5|t5|| n|j9}|dk7rt5|| d<t;j=d|z d|z |zt;j?||j=ddj?d|j6z}t3d|jAfg| d<d| d<|jj1d t5|t5|| | |jjCd|r|jjCdyy)!NrQrrUrirjrzsvg.image_inlinepng)rwimagezdata:image/png;base64, rdzLCannot save image data to filesystem when writing SVG to an in-memory bufferz.imagez.pngz$Writing image file for inclusion: %sIm_r^r)rk)rGrZrl)rr/rrrrOrr0rr]rnrz5image-rendering:crisp-edges;image-rendering:pixelatedr)rrrOrt)"shaperMrrSrmget_gidrrrr fromarraysavergetvaluebase64 b64encoderfrrnextr_logrrrar|r0rr4rrkrlrr\)r<r r/rimrrrKrrrOrbuffilenamealphaflippeds r draw_imagezRendererSVG.draw_imagesDxx|1 6Q!V ))"-  DKK   0Z 0jjl ? KK  c<*=  >jjl <<* +)C OOB  $ $S $ 7?w ?C*  077@A < }}$ "FGG--tD4G4G/H.INH II>)Aq4>>)A KK  -&q1"g(>/@A"1%"T[[1_q%8#9:&q)2B12E  LLNE|$4U$;y!   q#'2 1asD!3 , - #6GNN,-.#0F; , 7O KK  &q)2B12E   ? KKOOC  KKOOC  rc r|j}|r|jd|jD]X\}\}}|j|}|j t |dz|d}|j d||tdgZ|jd|jj|yy) zn Emit definitions for not-yet-defined glyphs, and record them as having been defined. r@Frr%)rk)g?)r^rrN) rrSrM_adjust_char_idr'rrar|r\rr)r< glyph_map_newrchar_idrucodesr*s r_update_glyph_map_defsz"RendererSVG._update_glyph_map_defss   LL .;.A.A.C K**(E..w7 ..B./@ w)13G2HIK  K JJv  OO " "= 1 rc&|jddS)Nz%20rr)r<rs rrzRendererSVG._adjust_char_id suc**rc |j} | j||j} |j} t |j } |j } i}| dk7r| |d<|jr|jn|j d}|dk7rt||d<| | jz }t|td||ffd| ffd|| ffgd }| jd | |su| j|}| j||| d }|\}}}|j!||D]2\}}}}| j#dtd||ffd|ffgdd|i4n|dk(r| j%||| d }n| j'||| d }|\}}}|j!||D]C\}}}}|j)|}| j#dtd||ffd|ffgdd|iE|D]7\}}t+||}|j-|d}| j#d|9| j/d y)N#000000rr#rGr0rlrmrkrrrUrT) glyph_mapreturn_new_glyphs_onlyrsrjrq)rrOTeXFrr%rR)rrUr _text2pathr r8get_size_in_pointsr3r4r0 FONT_SCALErr|rS _get_fontget_glyphs_with_fontrraget_glyphs_texget_glyphs_mathtextrrr'r\) r<r r/rrpropangleismathmtextrr text2pathcolorfontsizerr font_scalerOfont_glyphs glyph_inforrectsglyph_id xposition ypositionrkrvertsrr%r*s r_draw_text_as_pathzRendererSVG._draw_text_as_pathsqOO OO  %**, I !E&M"$"5"5"7 RZZ\!_ A:/6E)  4 44 "5),q!f%UF9%: {34.67   S (&&t,D44a9T5KG/6 ,J u  ' ' 69C ;5)Y1$y)&<= 5(+3)AhZ.9 ; ;#22!y3O$77!y8O/6 ,J u  ' ' 68B :4Iu..w71$y)&<= 5(+3)AgY-8 : :!& 4 uE5) ..te.D v3 4  3rc  '(|j} t|j} i} i} | dk7r| | d<|jr|j n|jd} | dk7rt | | d<|s{i}|j dk7r|j | d<|jdk7r|j| d<tj|j}|d k7r|| d <d ((fd ''fd }t |jd| d<djtj||| d<|jdk7r|j| d<t!i| | |d<|r@|dk(s|j#dk(r'|j%}|j'|j)\}}|j*|z }t-j.|}t-j0t-j2|t-j4|g}t-j6|||z ||z g}|||dzz}|||dzz}dddd}||j9| d<t ||d<t ||d<t!i| | |d<t;d| ||ffg|d<nt;d||ffd| ffg|d<| j=d ||!y| j?||j@jBjE|d"|\}}}}}| jGd#t!i| | t;d||ffd| ffg$| jGd i}|D]\}}} }!}"tjH|}#i} |#jJdk7r|#jJ| d<|#jLdk7r|#jL| d<|#jNd k7r|#jN| d <t |d| d<|#jP| d<|#jRdk7r|#jR| d<t!i| | }$| d%k(rd&} |jU|$gjW|!|" | f|jYD]Q\}$}%|%j[|%D]7\}}}&| j=d't]|&t |t ||$(9S| j_d |D]E\}}}}| j=d)t |t | dz t |t |*G| j_d#y)+Nrrr#rGr0normalz font-stylez font-variantiz font-weightc|dvrdS|S)N)sansz sans serifz sans-serifrc)rs r_normalize_sansz7RendererSVG._draw_text_as_text.._normalize_sansss'+/E'E|O4Orc3K|}|tjvr.tjj|D] }||ywrp)fmfont_family_aliases FontManager_expand_aliases)fnrrs r_expand_family_entryz._expand_family_entryvsQ$R(///!# > >r B4-d334sAAc|jDcgc].}|D]!}|tjvr|n t|#0c}}Scc}}wrp) get_familyrrrepr)rentryrrs r_get_all_quoted_namesz=RendererSVG._draw_text_as_text.._get_all_quoted_namess`&*__%6A!$8$?A !%(>(> >DJNANAAAs3A pxz font-sizez, z font-familyz font-stretchrranchorrSr\middle)leftrightcenterz text-anchorr/rrmrrlrWrrrUr tspan)r/rrrrS)0rr r8r3r4r0 get_style get_variantr weight_dict get_weightget_sizerBrfromkeys get_stretchrget_rotation_mode get_transformrget_unitless_positionrrdeg2radarraysincosdotget_har|rarUrmathtext_parserparserSttfFontPropertyrvariantweightrstretch setdefaultrKrMsortchrr\))r<r r/rrrrrrrr font_style color_stylerrOr;rraxay angle_raddir_vertv_offset ha_mpl_to_svgrrdescentglyphsrspansrrthetextnew_xnew_yrrcharstrrs) @@r_draw_text_as_textzRendererSVG._draw_text_as_textUs  %  I "'K "$"5"5"7 RZZ\!_ A:%5e%>+; <(!X--1-=-=-? >*^^DOO$56F}/5h =) P  A *:$--/)J(K2&NJ{ #(,  3D9:)J} %!X--1-=-=-? >*+,Iz,I[,IJF7O%1*(?(?(AX(M "//1 ",,U-H-H-JKB[[2% JJu- 88RVVI%6y8I$JK66(a"fB,@A(Xa[00(Xa[00)05+3!5 ,9%,,.,I =).r2s .r2s "/0M:0M0M"Nw&9B/0;2'3{#': 1a&)y);+',{# NN61VN 4 NN1 //55aTB 2E67FE LL,-J -Jk-JK#6)Aq62&% 284$5   LL E9? M5h**40 ;;(*/4{{J|,==H,16J~.<<3&38<<.J}--=h-G,H*K ;'/4zzn =)==H,16J~.%&C&C{&CDb="G  +22EE673KL# M&!&  % u $%GAq!NNA*1-*1-# #%% % JJv ', #1eV&q)&r!t,*51+F3   JJsOrc |j|} | r|jjdi| |j,|jjdd|jitj ddk(r|j ||||||||n|j|||||||||j|jjd| r|jjdyy)NrUrirjz svg.fonttyper%rt) rMrrSrmrrr rPr\) r<r r/rrrrrrrs r draw_textzRendererSVG.draw_texts))"-  DKK   0Z 0 ::< # KK  cL"**,#? @ << '6 1  # #B1aufe L  # #B1aufe L ::< # KKOOC  KKOOC  rcyrercrds rflipyzRendererSVG.flipy rrc2|j|jfSrp)rrrds rget_canvas_width_heightz#RendererSVG.get_canvas_width_height szz4;;&&rc<|jj|||Srp)rget_text_width_height_descent)r<rrrs rrXz)RendererSVG.get_text_width_height_descents<rrrrrrrrrArCrMrrWrYr[r'ror|rrrrrrrrr rPrRrTrVrX __classcell__rs@rrr!s&$!&$P - y1v-M&*X+Z@-..B9GK!C!"GK)V8&tfPB%L!\2&+EN[z!.'NrrcFeZdZdddZdZddddZdZdZfd ZxZ S) FigureCanvasSVGzScalable Vector Graphics)rsvgzrN)bbox_inches_restorerctj|dd5}tj|stjd|}|j j }d|j _|j j\}}|dz|dz} }t|j |||t|| ||||} |j j| | jdddy#1swYyxYw)a 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_ rKzutf-8)encodingr)rr)r^N) r open_file_cmfile_requires_unicodecodecs getwriterfiguredpiget_size_inchesr rdrawr) r<rr^rfhrfrrrKrrenderers r print_svgzFigureCanvasSVG.print_svgs@  # @ B..r2.V%%g.r2++//C DKKO KK779ME62:v{qA( UFCAq"hG$79H KK  X &     s CC55C>c tj|d5}tjd|5}|j|fi|cdddcdddS#1swYnxYwdddy#1swYyxYw)NwbrK)modefileobj)rragzipGzipFilerk)r<rkwargsri gzipwriters r print_svgzzFigureCanvasSVG.print_svgzJsg  40 8Bmmb1 85?!4>>*77 8 8 8 8 8 8 8s"A*A A*A A**A3cy)Nrrcrds rget_default_filetypez$FigureCanvasSVG.get_default_filetypeOsrcT|jjt| Srp)redraw_without_renderingrrh)r<rs rrhzFigureCanvasSVG.drawRs **,w|~r) rfrgrh filetypes fixed_dpirkrtrvrhrYrZs@rr\r\s6235II9=, \8 rr\z c(eZdZejZeZy) _BackendSVGN)rfrgrhrrbackend_versionr\ FigureCanvasrcrrr|r|asooO"Lrr|)rs   0BB?% 8w"R !bjj+,  + ,M M ` =&vH * @rN,rNj>&>B%   #(##r