
    (?er              
       V   d Z ddlZddlZddlmZ ddlZddlmZ ddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlZddlZddlZddlmZmZmZmZ ddlmZ ddlmZmZmZmZ dd	lm Z m!Z! dd
l"m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4  e	j5        e6          Z7dZ8 ej9        d           G d d                      Z:ej;         G d d                      Z<i ddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDZ=dE Z>dFdGdHZ?dI Z@dJ ZAdK ZBdL ZC G dM dNe4jD                  ZE G dO dPe          ZF G dQ dRe          ZGdS ZHdT ZId\dUZJd\dVZKd]dWZLd^dXZMeZNg dYZOejP         G dZ d[e                      ZQdS )_zG
A PostScript backend, which can produce both PostScript .ps and .eps.
    N)Enum)StringIO)TemporaryDirectory)_apicbook_path_text_helpers)AFM)_BackendFigureCanvasBaseFigureManagerBaseRendererBase)is_writable_file_likefile_requires_unicode)get_font)LOAD_NO_SCALEFT2Font)convert_ttf_to_ps)	uni2type1)Path)
TexManager)Affine2D)MixedModeRenderer   )_backend_pdf_psF3.7c                       e Zd Zd ZdS )PsBackendHelperc                     i | _         d S N)_cachedselfs    >lib/python3.11/site-packages/matplotlib/backends/backend_ps.py__init__zPsBackendHelper.__init__+   s        N)__name__
__module____qualname__r%    r&   r$   r   r   )   s#            r&   r   c                       e Zd Z  ej        dd           ed                     Z  ej        dd           ed                     ZdS )__getattr__r    )obj_typec                     t                      S r    )r   r"   s    r$   <lambda>z__getattr__.<lambda>3   s    o// r&   3.8c                     t           S r    )_psDefsr"   s    r$   r0   z__getattr__.<lambda>4   s    w r&   N)r'   r(   r)   r   
deprecatedpropertyps_backend_helperpsDefsr*   r&   r$   r,   r,   /   sr         <;;;//002 20_T_UR000:N:N1O1OPPFFFr&   r,   letter)      !@   legal)r9      ledger)r:      a0)Gz@@gHzgG@a1)p=
c7@r@   a2)
ףp=0@rB   a3)zGa'@rD   a4)
ףp= @rF   a5)RQ@rH   a6)Q@rJ   a7)HzG@rL   a8)ffffff @rN   a9)\(\?rP   a10)gRQ?rR   b0)fffffFD@g)\L@b1))\<@rU   b2)QE4@rW   ))\,@rY   )Q8$@rZ   )p=
ף@r[   ))\(@r\   )p=
ף@r]   )Gz@r^   ))\(?r_   )g)\(?r`   )b3b4b5b6b7b8b9b10c                     t          t                                          d          D ].\  }\  }}|                    d          r| |k     r
||k     r|c S /dS )NT)reverselr?   )sorted	papersizeitems
startswith)whkeypwphs        r$   _get_papertyperu   R   sg    	 1 14@@@  Xb">># 	r66a"ffJJJ4r&    )sepc                 @    |                      d |D                       S )Nc              3   j   K   | ].}|d                      d                               d          V  /dS )1.3f0.N)rstrip).0args     r$   	<genexpr>z_nums_to_str.<locals>.<genexpr>\   sB      JJcsMM((--44S99JJJJJJr&   )join)rw   argss     r$   _nums_to_strr   [   s#    88JJTJJJJJJr&   c                 *   t          |          rbt          |          rt          | d          nt          | d          }|5  t          j        ||           ddd           dS # 1 swxY w Y   dS t          j        | |t          j                   dS )z
    Move the contents of file at *src* to path-or-filelike *dst*.

    If *dst* is a path, the metadata of *src* are *not* copied.
    latin-1encodingrbN)copy_function)r   r   openshutilcopyfileobjmovecopyfile)srcdstfhs      r$   _move_path_to_path_or_streamr   _   s     S!! =&s++#d3++++T?? 	  	( 	(r3'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	CFO<<<<<<s   A%%A),A)c                 >  
 t          | d          

fd|D             }d                    
j        d
j        z  d                    t          t          
j                            d                    
fd|D                       t          |          dz             }d}g }|D ]}
	                    |t                    }
                                \  }}	|                    d	
                    |          d                    t          t          |j        d
g|j                            dz  t          j        t#          |dz  |	          ddddd
g dd                              d          z   dz              |d                    |          z   |z   S )a  
    Subset *chars* from the font at *font_path* into a Type 3 font.

    Parameters
    ----------
    font_path : path-like
        Path to the font to be subsetted.
    chars : str
        The characters to include in the subsetted font.

    Returns
    -------
    str
        The string representation of a Type 3 font, which can be included
        verbatim into a PostScript file.
    r   )hinting_factorc                 :    g | ]}                     |          S r*   get_char_indexr~   cfonts     r$   
<listcomp>z%_font_to_ps_type3.<locals>.<listcomp>   s'    777A$$Q''777r&   aM  %!PS-Adobe-3.0 Resource-Font
%%Creator: Converted from TrueType to Type 3 by Matplotlib.
10 dict begin
/FontName /{font_name} def
/PaintType 0 def
/FontMatrix [{inv_units_per_em} 0 0 {inv_units_per_em} 0 0] def
/FontBBox [{bbox}] def
/FontType 3 def
/Encoding [{encoding}] def
/CharStrings {num_glyphs} dict dup begin
/.notdef 0 def
rv   c              3   H   K   | ]}d                      |           V  dS )/N)get_glyph_name)r~   glyph_idr   s     r$   r   z$_font_to_ps_type3.<locals>.<genexpr>   sN       8 8!) A!4!4X!>!>@@ 8 8 8 8 8 8r&   )	font_nameinv_units_per_embboxr   
num_glyphsz
end readonly def

/BuildGlyph {
 exch begin
 CharStrings exch
 2 copy known not {pop /.notdef} if
 true 3 1 roll get exec
 end
} _d

/BuildChar {
 1 index /Encoding get exch get
 1 index /BuildGlyph get exec
} _d

FontName currentdict end definefont pop
z/%(name)s{%(bbox)s sc
r   )namer   @   NF)   m   lr&      cr&   Tasciizce} _d
)r   formatpostscript_nameunits_per_EMr   mapstrr   len
load_glyphr   get_pathappendr   horiAdvancer   convert_to_stringr   decode)	font_pathchars	glyph_idspreamble	postambleentriesr   gvr   r   s             @r$   _font_to_ps_type3r   o   s   " Ia000D7777777I FT) 11S$),,--HH 8 8 8 8-68 8 8 8 8)nnq(  * * $I& G 
 
OOHm44}}1%++H55S1=!*Eaf*E!F!FGG) )  % QVQtUD!
 -,,d4 4 5;F7OOD 	
 	
 	
 	
" dii(((944r&   c                 @  	 d                     d |D                       }t                              d| |           	 t          j        | |          }t                              d| t          j        |           j        |                                j	                   t          |          		fd|D             }t                      5 }t
          j                             |d          }t          |d          5 }|                    |                                           ddd           n# 1 swxY w Y   t!          t          j        |          |d	|           ddd           dS # 1 swxY w Y   dS # t$          $ r t                              d
            w xY w)a2  
    Subset *chars* from the font at *font_path* into a Type 42 font at *fh*.

    Parameters
    ----------
    font_path : path-like
        Path to the font to be subsetted.
    chars : str
        The characters to include in the subsetted font.
    fh : file-like
        Where to write the font.
    r-   c              3   4   K   | ]}t          |          V  d S r    )chr)r~   r   s     r$   r   z%_font_to_ps_type42.<locals>.<genexpr>   s(      //AQ//////r&   zSUBSET %s characters: %szSUBSET %s %d -> %dc                 :    g | ]}                     |          S r*   r   r   s     r$   r   z&_font_to_ps_type42.<locals>.<listcomp>   s'    ;;;T((++;;;r&   ztmp.ttfwbN*   zDThe PostScript backend does not currently support the selected font.)r   _logdebugr   get_glyphs_subsetosstatst_size	getbuffernbytesr   r   pathr   writegetvaluer   fsencodeRuntimeErrorwarning)
r   r   r   
subset_strfontdatar   tmpdirtmpfiletmpr   s
            @r$   _font_to_ps_type42r      s)    ///////JJJ)9jAAA"4Y
KK

'BGI4F4F4N%%''.	0 	0 	0 x  ;;;;U;;;	!! 	GVgll6955Ggt$$ /		(++--.../ / / / / / / / / / / / / / / bk'22BIFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G    )	* 	* 	* 		sT   BE7 	1E*:(D."E*.D2	2E*5D2	6'E*E7 *E..E7 1E.2E7 7&Fc                 F     t          j                    fd            }|S )z}
    Wrap `RendererPS` method *meth* to emit a PS comment with the method name,
    if the global flag `debugPS` is set.
    c                 p    t           r#| j                            dj         d            | g|R i |S )Nz% r   )debugPS	_pswriterr   r'   )r#   r   kwargsmeths      r$   wrapperz!_log_if_debug_on.<locals>.wrapper   sO     	9N  !7dm!7!7!7888tD*4***6***r&   )	functoolswraps)r   r   s   ` r$   _log_if_debug_onr      s:    
 _T+ + + + +
 Nr&   c                       e Zd ZdZ ej        d          ZdZd" fd	Zd Z	d#dZ
d#d	Zed
             Zd#dZed             Zd#dZd#dZd#dZd Zd Zd$dZd Zed%d            Zed%d            Ze	 d%d            Zed             Zeddd            Zed$d            Zed             Zed             Zed             Z ddd d!Z! xZ"S )&
RendererPSz
    The renderer handles all the drawing primitives using a graphics
    context instance that controls the colors/styles.
    z	fonts/afm	ps.useafmH   c                    t                                          ||           || _        t          j        d         rd| _        g | _        || _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        i | _        |dz  | _        i | _        d| _        t'          j                    | _        t-          j        t0          j                  | _        d S )Ntext.usetexr   r   )superr%   r   mplrcParamstextcntpsfragimagedpicolor	linewidthlinejoinlinecaplinedashfontnamefontsize_hatchesimage_magnification_clip_paths_path_collection_idr   CharacterTracker_character_trackerr   cacher   r   _logwarn_once)r#   widthheightpswriterr   	__class__s        r$   r%   zRendererPS.__init__   s     	'''!<& 	DLDK  
#+b= #$ "1"B"D"D&_T\::r&   c                     |dS t          |          dk    r1|d         dk    rdS |d         dk    r|                     d           dS dS )NT      r   r   zlThe PostScript backend does not support transparency; partially transparent artists will be rendered opaque.F)r   r   )r#   rgb_or_rgbas     r$   _is_transparentzRendererPS._is_transparent  sp    4""1~""t1~""""MN N N 55r&   Tc                     |||f| j         k    r\| j                            ||cxk    r|k    rn nt          |           dnt          |||           d           |r|||f| _         d S d S d S )Nz	 setgray
z setrgbcolor
)r   r   r   r   )r#   rr   bstores        r$   	set_colorzRendererPS.set_color&  s    q!9
""N  $%KKKKaKKKKK %1OO!?!?!?!?$0Aq$9$9!I!I!IK K K  'AY


 #"' 'r&   c                     t          |          }|| j        k    r5| j                            t	          |           d           |r|| _        d S d S d S )N setlinewidth
)floatr   r   r   r   )r#   r   r  s      r$   set_linewidthzRendererPS.set_linewidth.  sh    )$$	&&N  L$;$;!L!L!LMMM +!* '&+ +r&   c                 ,    ddddddd|          } | ddS )Nr   r      )miterroundbevelr   r   r  dz setlinejoin
r*   )r   s    r$   _linejoin_cmdzRendererPS._linejoin_cmd5  s3     Q1qII,,,,,r&   c                     || j         k    r8| j                            |                     |                     |r|| _         d S d S d S r    )r   r   r   r  )r#   r   r  s      r$   set_linejoinzRendererPS.set_linejoin<  sX    t}$$N  !3!3H!=!=>>> ) ( %$) )r&   c                 ,    ddddddd|          } | ddS )Nr   r   r  )buttr  
projectingr   r   r  r  z setlinecap
r*   )r   s    r$   _linecap_cmdzRendererPS._linecap_cmdB  s3     qaA!LL*****r&   c                     || j         k    r8| j                            |                     |                     |r|| _         d S d S d S r    )r   r   r   r  )r#   r   r  s      r$   set_linecapzRendererPS.set_linecapI  sX    dl""N  !2!27!;!;<<< '& #"' 'r&   c                    | j         '| j         \  }}t          j        ||          r||k    rd S | j                            |,t          |          rdt          |  dt          |           dnd           |r||f| _         d S d S )N[z] z	 setdash
z[] 0 setdash
)r   nparray_equalr   r   r   r   )r#   offsetseqr  oldooldseqs         r$   set_linedashzRendererPS.set_linedashO  s    =$=LD&~c6** tv~~ #CHH Xs!3WW|F7K7KWWWW-	/ 	/ 	/  	*#SMDMMM	* 	*r&   c                     ||f| j         | j        fk    r4| j                            d| d|dd           |r|| _         || _        d S d S d S )Nr   rv   rz    selectfont
)r   r   r   r   )r#   r   r   r  s       r$   set_fontzRendererPS.set_font[  su    hDM4=#AAAN  !LX!L!L!L!L!L!LMMM ) ( (	 BA) )r&   c                    d}|| j         v r| j         |         S dt          | j                   z  }t          j        d         }| j        dz  }| j                            d|dd|dd|dd|dd	|d
d|                     t          j	        |          t                                          |          d           d|d
d| d           || j         |<   |S )Nr   zH%dzhatch.linewidthzH  << /PatternType 1
     /PaintType 2
     /TilingType 2
     /BBox[0 0 r  rv   z]
     /XStep z
     /YStep z(

     /PaintProc {
        pop
        r   r  Fsimplifyz]
        gsave
        fill
        grestore
        stroke
     } bind
   >>
   matrix
   0 z translate
   makepattern
   /z
 exch def
)r   r   r   r   r   r   r   _convert_pathr   hatchr   scale)r#   r0  sidelenr   r   
pageheights         r$   create_hatchzRendererPS.create_hatchb  sU   DM!!=''s4=)))L!23	[2%
  	   $	  
       
   Juxzz''005  B B ( )  , 
-   	 	 	0  $er&   c                     | j         S )z
        Get the factor by which to magnify images passed to draw_image.
        Allows a backend to have images at a different resolution to other
        artists.
        )r   r"   s    r$   get_image_magnificationz"RendererPS.get_image_magnification  s     ''r&   FNc           
          |rdd| j         dz  | j        dz  f}nd }t          j        ||||d dg dd                              d          S )Ng        g      R@   )r   r   r&   r   s   clTr   )r   r   r   r   r   )r#   r   	transformclipr.  s        r$   r/  zRendererPS._convert_path  sg     	dj4/t1CDDDD&)T8T---t5 55;VG__	Er&   c           
      $   g }|                                 }|.|                    t          g |j        |j        R   d           |                                \  }}||t          |          f}| j                            |          }|Xdt          | j                  z  }| j
                            d| d|                     ||d           d           || j        |<   |                    | d           d	                    |          S )
N
 rectclip
zc%dr   z {
Fr-  z
clip
newpath
} bind def
r   r-   )get_clip_rectangler   r   p0sizeget_clip_pathidr   getr   r   r   r/  r   )r#   gcr:  rectr   trfrr   custom_clip_cmds           r$   _get_clip_cmdzRendererPS._get_clip_cmd  s8   $$&&KK<==49===JJJKKK$$&&	cC/C".22377O&"'#d.>*?*?"?$$ && &D#..& & &    )8 %KK?...///wwt}}r&   c                 8   |j         d d         \  }}d}|d d dd d d df         }	|	                                                    dd          }
|d}|| j        z  }|| j        z  }nPd                    t          t          |                                                                                    }d	}d	}| j	        
                    d
|                     |           d|dd|dd| d|dd|dd|dd|dd|dd|dd|dd|dd| d|
 d           d S )Nr  zfalse 3 colorimager  r   z1 0 0 1 0 0rv   g      ?gsave
r   z translate
[z	] concat
z scale
/DataString r  z string def
z 8 [ z 0 0 -z 0 z5 ]
{
currentfile DataString readhexstring pop
} bind 

grestore
)shapetobyteshexr   r   r   r   frozen	to_valuesr   r   rG  )r#   rC  xyimr9  rq   rp   imagecmddatahexdatamatrixxscaleyscales                 r$   
draw_imagezRendererPS.draw_image  s    x|1'$$B$2A2+,,..$$T3//"F11F11FFXXc#y'7'7'9'9'C'C'E'EFFGGFFF B     	   		 
   
          	         %&   
  	   	 	 	 	 	r&   c                     |d u o|                                 d u }|j        o|}|                     ||||          }|                     |||           d S )Nr:  r.  )get_hatch_pathshould_simplifyr/  _draw_ps)r#   rC  r   r9  rgbFacer:  r.  pss           r$   	draw_pathzRendererPS.draw_path  sh     $>2#4#4#6#6$#>'0DidXNNb"g&&&&&r&   c                 z   |                      |          rd nM|d         |d         cxk    r|d         k    rn nt          |d                    dnt          |d d           d}g d}|                                }	|                                s%t	          |                                          dk    r|                                n|                                d         }
|	dk    o|
dk    }|r|                    d|	z             |                    |                     |	                                                     |                    | 
                    |                                                     |                    |                     ||d	
                     |rG|r|                    d           |r|                    |dg           |r|                    d           |r|                    d           |                    ddg           |                    |dd| j        dz  | j        dz  fd	          D ]>\  }}t	          |          r*|dd          \  }}|                    |dd|dd           ?d                    |          }|                     |||d	d	           d S )Nr   r   r  z setgrayr  z setrgbcolor)z/o {gsavenewpath	translatez%.1f setlinewidthFr-  re  fillgrestorestrokez
} bind defr   r]  r   rv   z or   rh  rj  )r  r   get_linewidthget_forced_alphar   get_rgb	get_alphar   r  get_joinstyler  get_capstyler/  extenditer_segmentsr   r   r   r`  )r#   rC  marker_pathmarker_transr   transra  ps_colorps_cmdlwalpharj  verticescoderR  rS  rb  s                    r$   draw_markerszRendererPS.draw_markers  s
    ##G,,=DD qzWQZ555571:55555 !,,6666 '"1"+.<<< 	 ;::''))&-0->->!-C-C jjll1o 	 a%EAI 	@MM-2333MM$,,R-=-=-?-?@@AAAMM$++BOO,=,=>>???d((l27 ) 9 9 	: 	: 	:  	* 'g&&& 2x0111 *j))) 	$MM(###z<0111"00DJrM4;r>: 1     	0 	0NHd 8}} 0}1...q....///YYvb"gE%@@@@@r&   c                    t          |          dk    rt          |d         j                  nd}|                     |||||          }|d|z  z   dz   |dz   |z  k     }|s!t          j        | |||||||||	|
|||          S g }t          |                     |||                    D ]b\  }\  }}d| j        |fz  }|                     ||d          }| j	        
                    d| d| d	           |                    |           c|                     |||||||	|
|||          D ]+\  }}}}}|d
d|d
d| }|                     |||           ,| xj        dz  c_        d S )Nr   r  r  zp%d_%dFr-  r   z {
newpath
translate
z
} bind def
r   rv   r   )r   r|  _iter_collection_uses_per_pathr   draw_path_collection	enumerate_iter_collection_raw_pathsr   r/  r   r   r   _iter_collectionr`  )r#   rC  master_transformpathsall_transformsoffsetsoffset_trans
facecolors
edgecolors
linewidths
linestylesantialiasedsurlsoffset_positionlen_pathuses_per_pathshould_do_optimization
path_codesir   r9  r   
path_bytesxoyopath_idgc0ra  rb  s                                r$   r  zRendererPS.draw_path_collection	  s    .1ZZ!^^3uQx()));;>7J
D D q=((1,1/MM 	% 	!4b*E>z:Jd	! ! ! 
$-d.M.M %/9 /9 %: %: 	$ 	$ A it7;;D++D)e+LLJN   "" " 	" " "    d####-1-B-BJJ
JdO.5 .5 	, 	,)BGS' +++2+++'++BMM"c7++++  A%    r&   )mtextc          
      p   |                      |                                          rd S t          | d          s3|                     d           |                     ||||||d|           d S |                     ||d          \  }}	}
|                                }d| j        z  }t          |                                d d         dd	i}d
dd	                    t          j        d         d         d          }||z  }d|d|}t          j        |dz             }t          ||
t          j        |          z  z
  ||
t          j        |          z  z
            }| j                            d||||dz  |fz             | j                            d| d| d           | xj        dz  c_        d S )Nr   zThe PS backend determines usetex status solely based on rcParams['text.usetex'] and does not support having usetex=True only for some elements; this element will thus be rendered as if usetex=False.FTeX)ismathz
psmarker%dr  rw   ,z{\sffamily %s}z{\ttfamily %s})z
sans-serif	monospacezfont.familyr   z{\rmfamily %s}z\color[rgb]{z} Z   z/\psfrag{%s}[bl][bl][1][%f]{\fontsize{%f}{%f}%s}g      ?rK  z	 moveto
(z)
show
grestore
r   )r  ro  hasattrr   	draw_textget_text_width_height_descentget_size_in_pointsr   r   rB  r   r   r"  radianscossinr   r   r   r   )r#   rC  rR  rS  spropangler  rp   rq   blr   thetextr   fontcmdtexrangleposs                     r$   draw_texzRendererPS.draw_tex6  s	    

-- 	FtX&& 	23 3 3
 NN2q!QeUEBBBF55ae5LL1b**,,-bjjll2A2.8C88!2 13 3363|M2157H4J 4J 	 aK',uuaa0 EBJ''1rBF6NN22ARVF^^8K4KLL>(4-B> >	? 	? 	? 	   
   	 	 	 	r&   c	                    |                      |                                          rd S |dk    r|                     ||||||          S |r|                     ||||||          S g }	t          j        d         r|                     |          }
|
j                            dd          	                    d          }d|
                                z  }d}d }|D ]}t          j        t          |          dt          |          d          }	 |
                    |          }n'# t          $ r d	}|
                    d
          }Y nw xY w|
                    ||          }|}|||z  z  }|	                    |||f           |||z  z  }n|                     |          }
| j                            |
|           t-          j        ||
          D ]q}|j        j                            dd          	                    d          }|j                            |j                  }|	                    ||j        |f           r | j        |                                  t;          j        |	d           D ]\  }}|                     ||
                                d           d                     d |D                       }| j!        "                    d| #                    |           d|dd|dd|dd| d           d S )Nr  r   r   replacegMbP?r   uni04Xquestion?c                     | d         S )Nr   r*   )entrys    r$   r0   z&RendererPS.draw_text.<locals>.<lambda>  s
    eAh r&   Fr   c              3   2   K   | ]\  }}}|d d|ddV  dS )r   z 0 m /r  z
 glyphshowNr*   )r~   _rR  r   s       r$   r   z'RendererPS.draw_text.<locals>.<genexpr>  sS        9  9$.Aq$ $% @ @ @d @ @ @ @  9  9  9  9  9  9r&   rK  r   rv    translate
 rotate
rL  )$r  ro  r  draw_mathtextr   r   _get_font_afmr   encoder   r  r   rB  ordget_width_from_char_nameKeyErrorget_width_charget_kern_dist_from_namer   _get_font_ttfr   trackr	   layout	ft_objectr   	glyph_idxrR  r  	itertoolsgroupbyr+  r   r   r   rG  )r#   rC  rR  rS  r  r  r  r  r  streamr   ps_namer1  thisx	last_namer   r   r   kernitem
glyph_namegroupr  s                          r$   r  zRendererPS.draw_text`  s    

-- 	FU??==Q1dE::: 	@%%b!Q4???<$ 	=%%d++D+227IFF D33555EEI ' ' }SVV-?3q66-?-?-?@@5 99$??EE 5 5 5%D //44EEE5 33ItDD 	%wt4555&' %%d++D#))$222%,Q55 = =>9"F7I66vvg !^::4>JJ
w
;<<<<

%%' 6 68 8 	 	NGUMM'4#:#:#<#<eDDDii  9  927 9  9  9 9 9GN   "B" " " " " 	" " " 	" " "
 	" " "    	 	s   D''!E
Ec                 >   | j         j                            |d|          \  }}}	}
} | j        |                                  | j                            d|dd|dd|dd           d}|
D ]\  }}}}}| j                            ||           |j	        |f|k    r/|j	        |f}| j                            d|j	         d| d	           t          |t                    r"|                    t          |                    n'|                    |                    |                    }| j                            |dd|dd
| d           |D ]-\  }}}}| j                            | d| d| d| d           .| j                            d           dS )z-Draw the math text using matplotlib.mathtext.r   rK  r   rv   r  r  Nr   r*  z	 moveto
/z glyphshow
z
 rectfill
	grestore
)
_text2pathmathtext_parserparser  ro  r   r   r   track_glyphr   
isinstancer
   get_name_charr   r   r   )r#   rC  rR  rS  r  r  r  r   r   descentglyphsrectslastfontr   r   numoxoyr  rp   rq   s                        r$   r  zRendererPS.draw_mathtext  s<    O+11!R>> 	.vw

%%"&" "&" "!" " "	# 	# 	# +1 	. 	.'D(CR#//c:::$h/8;;/9$$F,FFxFFFH H H 1;40E0E >""3s88,,,##D$7$7$<$<==  N  ) - -") - -- - -. . . . " 	B 	BLBAqN  B!@!@!@!@a!@!@!!@!@!@AAAA\*****r&   c                     |                      ||                    d          |                    d          |           d S )N)r   r  r  )r   r  r  )draw_gouraud_trianglesreshape)r#   rC  pointscolorsrw  s        r$   draw_gouraud_trianglez RendererPS.draw_gouraud_triangle  sJ    ##By(A(A$*NN9$=$=u	F 	F 	F 	F 	Fr&   c                    t          |          t          |          k    sJ t          |          dk    rd S |j        dk    sJ |j        d         dk    sJ |j        d         dk    sJ |j        dk    sJ |j        d         dk    sJ |j        d         dk    sJ |j        }|                    |d         |d         z  df          }|                    |          }|                    |d         |d         z  df          }t          j        |d          dz
  }t          j        |d          dz   }	t          j        d|	|z
  z            }
|\  }}|	\  }}t          j	        |d         |d         z  g d	
          }d|d<   ||z
  |
z  |d<   |d d d df         dz  |d<   |
                                                    dd          }| j                            d|dd|dd|dd|dd| d           d S )Nr   r  r   r  r  )axisi   l    ))flagsu1)r  z2>u4)r  3u1)dtyper  r  g     o@r  r   rJ  zgsave
<< /ShadingType 4
   /ColorSpace [/DeviceRGB]
   /BitsPerCoordinate 32
   /BitsPerComponent 8
   /BitsPerFlag 8
   /AntiAlias true
   /Decode [ r   rv   z  0 1 0 1 0 1 ]
   /DataSource <
z
>
>>
shfill
grestore
)r   ndimrM  r  r9  r"  minmaxceilemptyrN  rO  r   r   )r#   rC  r  r  rw  rM  flat_pointsflat_colors
points_min
points_maxfactorxminyminxmaxymaxrV  rW  s                    r$   r  z!RendererPS.draw_gouraud_triangles  s   6{{c&kk))))v;;!F{a|A!####|A!####{a|A!####|A!####nneAhq&91%=>>ook22nneAhq&91%=>>VKa000G<
VKa000G<
+*z*ABCC
d
dx!HuQxJJJL L L W%
2f<X$QQQU+e3X,,..$$T3//        !%   *.   	   	 	 	 	 	r&   rl  c                ~   | j         j        }|                                dk    o'|                     |                                           }|sd}|                     |          rd}|                                }|r|                     |                                           |                     |                                           | 	                    |
                                            | j        |                                  |s|r$ | j        |                                dd            |d            ||                     |                      ||                                            |d           |r>|s|r |d            | j        |dd         ddi  |d           |s|r |d	           |r[|                     |          }	 |d            |t#          |                                dd                      |d
|	 d           |r |d            |d	           dS )at  
        Emit the PostScript snippet *ps* with all the attributes from *gc*
        applied.  *ps* must consist of PostScript commands to construct a path.

        The *fill* and/or *stroke* kwargs can be set to False if the *ps*
        string already includes filling and/or stroking, in which case
        `_draw_ps` is just supplying properties and clipping.
        r   FNr  rK  r   r  zfill
r  rv   z setpattern fill grestore
zstroke
)r   r   rm  r  ro  	get_hatchr  r  rq  r  rr  r(  
get_dashesr  rG  stripr4  r   get_hatch_color)
r#   rb  rC  ra  rh  rj  r   mightstroker0  
hatch_names
             r$   r`  zRendererPS._draw_ps  s    $''))A- B#33BJJLLAAA 	 	F(( 	D 	0r//11222b..00111R__..///Dr}}// 	.% 	.DNBJJLL!,--id  $$%%%bhhjjd 	$ ! !i   DNGBQBK5u555E(OOO $ $l### 	?**511JE)E, 2 2 4 4RaR 89:::E=j===>>> 	E*lr&   )r   )T)FNr    )#r'   r(   r)   __doc__r   _get_data_path_afm_font_dir_use_afm_rc_namer%   r  r  r  staticmethodr  r  r  r  r(  r+  r4  r6  r/  rG  r   r[  rc  r~  r  r  r  r  r  r  r`  __classcell__r  s   @r$   r   r      s        
 )E(55M"; ; ; ; ; ;6  ' ' ' '+ + + + - - \-) ) ) ) + + \+' ' ' '
* 
* 
* 
*) ) ) )     D( ( (E E E E  ,    @ ' ' ' ' FJ2A 2A 2A 2Ah *& *& *&X :> ' ' ' ' 'R 8 8 8 8t + + +4 F F F - - -^ 15T 1 1 1 1 1 1 1 1 1r&   r   c                   0    e Zd Z ed          \  ZZd ZdS )_Orientationr  c                 2    | j         dk    r|d d d         n|S )N	landscaperI  )r   )r#   rM  s     r$   swap_if_landscapez_Orientation.swap_if_landscape"  s"    "i;66uTTrT{{EAr&   N)r'   r(   r)   rangeportraitr  r  r*   r&   r$   r  r    s:        %((HiB B B B Br&   r  c                        e Zd ZdZdddZd Zdddddd	Zdd
dZdd
dZ e	j
        ed          Z e	j
        ed          Z fdZ xZS )FigureCanvasPSr   
PostscriptzEncapsulated Postscript)rb  epsc                     dS )Nrb  r*   r"   s    r$   get_default_filetypez#FigureCanvasPS.get_default_filetype+  s    tr&   Nr  )metadata	papertypeorientationbbox_inches_restorec          	         | j         j        }d| j         _        i }	t          |t          t          j        f          rEt          j        |          j        }
|
	                    dd          
                    d          |	d<   |pi                     ddt          j         d          |	d<   t	          j        d          }|rOt          j                            t#          |          t          j        j                                      d	          nt+          j                    |	d
<   d                    d |	                                D                       }	|t          j        d         }|                                }t7          j        ddgt:          |           t7          j        t>          |                                          }t          j        d         r| j         n| j!        } |||f||	|||d| d S )Nr   r   r  TitleCreatorzMatplotlib vz, https://matplotlib.org/SOURCE_DATE_EPOCHz%a %b %d %H:%M:%S %YCreationDater   c              3   ,   K   | ]\  }}d | d| V  dS )z%%z: Nr*   )r~   kr   s      r$   r   z+FigureCanvasPS._print_ps.<locals>.<genexpr>F  sC       !< !<"aMMMaMM!< !< !< !< !< !<r&   zps.papersizefigureauto)r  )r  r   )dpidsc_commentsr  r  r  )"r%  r'  r  r   r   PathLikepathlibr   r   r  r   rB  r   __version__getenvdatetimefromtimestampinttimezoneutcstrftimetimectimer   rn   r   lowerr   check_in_listrm   check_getitemr  _print_figure_tex_print_figure)r#   fmtoutfiler  r  r  r  r   r'  r(  filenamesource_date_epochprinters                r$   	_print_pszFigureCanvasPS._print_ps.  s$   
 kogR[122 	D|G,,1H33::7CC !#+>r"6"6E3?EEE#G #GY I&9::
 !H++%&&!%' ''/x0F'G'G'G 	^$ yy !< !<&2&8&8&:&:!< !< !< < < ^4IOO%%	Hf9y9YOOOO(k&7&7&9&9; ; ; l=1&4))% 	 	W 	C#L'9$7	C 	C;A	C 	C 	C 	C 	Cr&   r  c                4    |dk    t          |t          t          j        f          st	          |          st          d           j                                        \  dk    r5t          j	        ddd           t                              f           sdk    r}	}n#                    t                             \  }}	d	|z
  z  d	|	z
  z  }
}|
 j        j        j        z   }| j        j        j        z   }d
t           j        u r||
||f\  }
}}}d|	z  z
  cd|
|||ft%                       _        t)           j        |          t+           j        ||          } j                            |            fd}t.          j        d         rt3                      5 }t          j                            |d          }t9          |dd          5 } ||           ddd           n# 1 swxY w Y   t.          j        d         dk    rt;          t<          |           n/t.          j        d         dk    rt;          t>          |           tA          ||           ddd           dS # 1 swxY w Y   dS tC          j"        |dd          5 }tG          |          s tI          j%        d          |          } ||           ddd           dS # 1 swxY w Y   dS )a'  
        Render the figure to a filesystem path or a file-like object.

        Parameters are as for `.print_figure`, except that *dsc_comments* is a
        string containing Document Structuring Convention comments,
        generated from the *metadata* parameter to `.print_figure`.
        r  z,outfile must be a path or a file-like objectr&  r1   papertype='auto'zQPass an explicit paper type, 'figure', or omit the *papertype* argument entirely.r   addendumr%  g      B@r   r   r  r   r@  c           
         rt          d|            n<t          d|            
dk    rt          d
 |            t          d|            t          d d	j         d	t                    d
          dd|            t          t                    }t          d|            t
          j        d         s|t          j        j                  z  }t          d|z  |            t          d|            t          d		                    t                    |            t
          j        d         sj        j        
                                D ]~\  }}|st
          j        d         }t          |          dk    rd}|                                  |dk    r$|                     t          ||                     mt          |||            t          d|            t          d|            st          d|            t          d|            t          dt                    z  |            rt          dz  |            t          dt          dz  dz             d|            t          j                                        |            t          d|            t          d|            st          d|            |                                  d S ) Nz%!PS-Adobe-3.0 EPSF-3.0)filez%!PS-Adobe-3.0r%  z%%DocumentPaperSizes: z
%%Pages: 1z%%LanguageLevel: 3
z
%%Orientation: r   r   z
%%EndComments
r-   )endrG  z%%BeginPrologr   z/mpldict %d dict defzmpldict beginzps.fonttype   r   r  rH  z%%EndPrologz%%Page: 1 1z%s translatez	%d rotatez0 0 r   z	 rectclipshowpagez%%EOF)printr   get_bbox_headerr   r3   r   r   r   usedr   rn   flushr   r   r   r   r   r   )r   Ndictr   r   fonttyper   r(  r   is_epsr  r  ps_rendererrotationr#   r   r  r  s        r$   print_figure_implz7FigureCanvasPS._print_figure.<locals>.print_figure_impl  sR    -/b99999&R0000((>9>>RHHHHl,,,, %!% %$/$4% % %T**1-% % %
 r# # # # LLE/++++<, B[;@AAA(50r::::/++++$))G$$2....<, A&9>DDFFA A$Iu  ! "|M:H5zzC''#%HHJJJ1}}!29e!D!DEEEE*9eR@@@@%b!!!!-b)))) .m"----/++++.<B#7#77bAAAA 7kH,26666EeBhr	::EEEBOOOO $.))++"5555 %b!!!!*2&&&& (gB''''HHJJJJJr&   ps.usedistillertmp.psrp   r   r   Nghostscript)ptyper   xpdf)&r  r   r   r)  r   
ValueErrorr%  get_size_inchesr   warn_deprecatedru   r  rm   r   r   r   r  r  r   r   r   r   drawr   r   r   r   r   r   _try_distill
gs_distillxpdf_distillr   r   open_file_cmr   codecs	getwriter)r#   r:  r;  r'  r(  r  r  r  paper_widthpaper_heightllxllyurxuryrendererrT  r   r   r   rG  r   r   rQ  rR  rS  r   r  r  s   `   ```             @@@@@@@@r$   r9  zFigureCanvasPS._print_figureX  s    7S"+$677 	M(11	MKLLL 3355v -?+KL L L L '(E(Eufo(V(VWI 	&Y(**(-vKK(3(E(E)$)& )&%K u,-./DK$**DK$++,000!$c3!3Cc3,&+RFBHS#s#! !MMM$K[ 35 5 5 	"""9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	v <)* 	( $%% 
?',,vx88'3;;; *r%%b)))* * * * * * * * * * * * * * *< 12mCC !(&	N N N N N\"34>> !(&	N N N N,Wg>>>
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? #GS9EEE (,T22 =66+I66t<<D!!$'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sI   3J$HJ$H!	!J$$H!	%A2J$$J(+J(8LLLc                   |dk    }| j                                         \  }	}
d}d}|}|}|| j         j        j        z   }|| j         j        j        z   }||||f}t                      | _        t          |	|
| j        |          }t          | j         |	|
|||          }| j         	                    |           t                      5 }t          j        |d          }|                    d| dt          |          d          dt          t                      d	d
                    t                      dt%          ||           dt%          |	dz  |
dz             d| j                                         dd           |t(          j        u r
|
|	}
}	||||f}|s|dk    r0|                    | j                                                   \  }}n=|dk    r't/          j        ddd           t3          |	|
          }t4          |         \  }}t7          ||j        |||j                  }t<          j        d         dk    st<          j        d         rtA          tB          |||||           n0t<          j        d         dk    rtA          tD          |||||           tG          ||           ddd           dS # 1 swxY w Y   dS )a(  
        If :rc:`text.usetex` is True, a temporary pair of tex/eps files
        are created to allow tex to manage the text layout via the PSFrags
        package. These files are processed to yield the final ps or eps file.

        The rest of the behavior is as for `._print_figure`.
        r  r   rE  r@  rV  z+%!PS-Adobe-3.0 EPSF-3.0
%%LanguageLevel: 3
r   z&
%%EndComments
%%BeginProlog
/mpldict z dict def
mpldict begin
r-   z
end
%%EndProlog
mpldict begin
z translate
0 0 r   r<  z
end
showpage
r   r   r%  r&  r1   rB  zGPass an explicit paper type, or omit the *papertype* argument entirely.rC  rU  rW  r   )rX  r   rotatedrY  N)$r%  r[  r   r   r   r   r   r   r   r]  r   r*  r   
write_textrL  r   r3   r   r   r   r  r  r  r   r\  ru   rm   _convert_psfragsr   r   r   r   r^  r_  r`  r   )r#   r:  r;  r'  r(  r  r  r  rQ  r   r   r  r  rf  rg  rh  ri  r   rR  rj  r   tmppathrd  re  psfrag_rotateds                            r$   r8  z FigureCanvasPS._print_figure_tex  s    3355vDK$**DK$++S#s#! !MMM$T[%*FC9LN N N 	"""  !! 8	;Vl6844G   q	  g,,    b"  %(F2I&&    & #)  $ $ $, l444 &vS#s+
  	Ah..,7,I,IK//11-3 -3)\\ &&(5G3ST T T T !/uf = =I,5i,@)\-+[, " "N ./=@@|M2 AZ$fID%35 5 5 5 5 /0F::\$fID%35 5 5 5 )':::q8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	; 8	;s   G&J99J= J=rb  r  c                 v    | j                                          t                                                      S r    )r%  draw_without_renderingr   r]  )r#   r  s    r$   r]  zFigureCanvasPS.draw>  s)    **,,,ww||~~r&   )r'   r(   r)   	fixed_dpi	filetypesr  r?  r9  r8  r   partialmethodprint_ps	print_epsr]  r  r  s   @r$   r  r  &  s        I#13 3I  
 Tz $(C (C (C (C (CZ !%E( E( E( E( E(T !%Z; Z; Z; Z; Z;x 'y&y$77H'	'	599I        r&   r  c           	         t          j        dt           j        d         t           j                            d          z   t           j                            d          z   t           j                            d          z   d||dz  z   i          5  t                                          dd                    |          |d	k    rd
nd|                                 	                                dz  d          }ddd           n# 1 swxY w Y   t                      5 }t          j                            |d          }t          j        dddd||gt                     t!          j        ||            ddd           n# 1 swxY w Y   t%          |           5 }d|                    d          v }	ddd           n# 1 swxY w Y   |	S )aj  
    When we want to use the LaTeX backend with postscript, we write PSFrag tags
    to a temporary postscript file, each one marking a position for LaTeX to
    render some text. convert_psfrags generates a LaTeX document containing the
    commands to convert those tags to text. LaTeX/dvips produces the postscript
    file that includes the actual text.
    ztext.latex.preambler   graphicxr   z:\geometry{papersize={%(width)sin,%(height)sin},margin=0in})r   r   zt
\begin{figure}
  \centering\leavevmode
  %(psfrags)s
  \includegraphics*[angle=%(angle)s]{%(epsfile)s}
\end{figure}r   r  r  r   )psfragsr  epsfile
   )r   NrV  dvipsz-qz-R0z-o	Landscapei  )r   
rc_contextr   
texmanager_usepackage_if_not_loadedr   make_dvir   resolveas_posixr   r   r   r   _check_and_log_subprocessr   r   r   r   read)
ro  rz  rd  re  r  dvifiler   psfiler   rp  s
             r$   rn  rn  C  s    
!L./N44W==>N44Z@@A N44X>>? J#|<<=	= 
 
   ,,''  99W--*k99q"??,,5577 
  (                . 
		 %fh//'dE494	A 	A 	AFG$$$	% % % % % % % % % % % % % % % 
g 6"$56 6 6 6 6 6 6 6 6 6 6 6 6 6 6s8   A*DD
D
AFFFF??GGc                     	  | t          |          g|R i | d S # t          j        $ r&}t                              d|           Y d }~d S d }~ww xY w)Nz%s.  Distillation step skipped.)r   r   ExecutableNotFoundErrorr   r   )funcro  r   r   excs        r$   r^  r^  t  s|    =S\\+D+++F+++++& = = =6<<<<<<<<<=s    AAAc                    |rdg}n#|dk    rd|d          d|d          g}nd| g}| dz   }t           j        d	         }t          j        t          j        d
          j        ddd|z  dg|d| | t                     t          j        |            t          j
        ||            |rt          | ||           dS dS )z
    Use ghostscript's pswrite or epswrite device to distill a file.
    This yields smaller files without illegal encapsulated postscript
    operators. The output is low-level, converting text to outlines.
    	-dEPSCropr%  z-dDEVICEWIDTHPOINTS=r  z-dDEVICEHEIGHTPOINTS=r  z-sPAPERSIZE=z.pszps.distiller.resgsz-dBATCHz	-dNOPAUSEz-r%dz-sDEVICE=ps2writez-sOutputFile=rl  N)r   r   r   r  _get_executable_info
executabler   r   remover   r   pstoeps)r   r  rX  r   rl  paper_optionr  r'  s           r$   r_  r_  {  s$     0#}	(		 9tAw889Q99; /u../u_F
,)
*C	#		!$	'	'	2	K#/B	;
	;000	;29	; 		   Ig
K     0 	w//////0 0r&   c           	      $   t          j        d           t          j        d           |rdg}n#|dk    rd|d          d|d          g}nd	| g}t                      5 }t          j        |d
          }t          j        |d          }t          j        ddddddg|| |t                     t          j        dddd||gt                     t          j	        ||            ddd           n# 1 swxY w Y   |rt          |            dS dS )a
  
    Use ghostscript's ps2pdf and xpdf's/poppler's pdftops to distill a file.
    This yields smaller files without illegal encapsulated postscript
    operators. This distiller is preferred, generating high-level postscript
    output that treats text as text.
    r  pdftopsr  r%  z-dDEVICEWIDTHPOINTS#r  z-dDEVICEHEIGHTPOINTS#r  z-sPAPERSIZE#ztmp.pdfrV  ps2pdfz-dAutoFilterColorImages#falsez-dAutoFilterGrayImages#falsez-sAutoRotatePages#Nonez-sGrayImageFilter#FlateEncodez-sColorImageFilter#FlateEncodez-papermatchz-level3N)r   r  r   r*  r   r   r  r   r   r   r  )	r   r  rX  r   rl  r  r   tmppdftmppss	            r$   r`  r`    s    T"""Y'''
 0#}	(		 9tAw889Q99; /u../			 $fi00VX.. 	',+%,-     $	% 	% 	% 	''9feDd	L 	L 	LE7###!$ $ $ $ $ $ $ $ $ $ $ $ $ $ $"   s    BC22C69C6c           	          | \  }}}}|r||z   ddddd}nd}d||t          j        |          t          j        |          fz  }d|dd|dd|dd|d}d	                    ||g          |fS )
zx
    Return a postscript header string for the given bbox lbrt=(l, b, r, t).
    Optionally, return rotate command.
    z.2frv   r   z translate
90 rotater-   z%%%%BoundingBox: %d %d %d %dz%%HiResBoundingBox: z.6fr   )r"  r  r   )	lbrtrl  rk   r
  r	  trotate	bbox_infohires_bbox_infos	            r$   rL  rL    s     JAq!Q aC:::a::::.!Q

BGAJJ1OOILQLLLQLLLQLLLQLLLO99i122F::r&   c                 P   |rt          ||          \  }}nd\  }}| dz   }t          |d          5 }t          | d          5 }|j        }|D ]}	|	                    d          r/ |d           |r! ||                    d          d	z              F|	                    d
          r; ||	            |d           |r! ||                    d          d	z               n$|r|	                    d          r ||	           |D ]D}	|	                    d          r |d           #|	                    d          r9 ||	           E	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          j        |            t          j        ||            dS )z
    Convert the postscript to encapsulated postscript.  The bbox of
    the eps file will be replaced with the given *bbox* argument. If
    None, original bbox will be used.
    r  )NNz.epsr   r   s   %!PSs   %!PS-Adobe-3.0 EPSF-3.0
r      
s   %%EndCommentssp   %%BeginProlog
save
countdictstack
mark
newpath
/showpage {} def
/setpagedevice {pop} def
%%EndProlog
%%Page 1 1
)s   %%Bounds   %%HiResBounds   %%DocumentMedias   %%Pagess   %%EOFsJ   cleartomark
countdictstack
exch sub { end } repeat
restore
showpage
%%EOF
s   %%PageBoundingBoxN)	rL  r   r   ro   r  r   r  r   r   )
r   r   rl  r  r  r{  epshtmphr   lines
             r$   r  r    s     '+D'BBB	66&	6G	gt		 )d7D&9&9 )T
 	 	Dw'' 2333 =E)**733e;<<<!122 d & ' ' '  :E&--0058999 $// +K L L d  	 	Dx(( 
 ! " " " " !566 d	=) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )V Ig
K!!!!!s6   E2DEE2E	E2"E	#E22E69E6)z/_d { bind def } bind defz/m { moveto } _dz/l { lineto } _dz/r { rlineto } _dz/c { curveto } _dz/cl { closepath } _dz/ce { closepath eofill } _dz/sc { setcachedevice } _dc                       e Zd ZdZeZdS )
_BackendPSzLevel IIN)r'   r(   r)   backend_versionr  FigureCanvasr*   r&   r$   r  r  ?  s         O!LLLr&   r  )Fr8   NF)F)NF)Rr  rb  r-  enumr   r   ior   r  loggingr   r*  r   tempfiler   r3  numpyr"  
matplotlibr   r   r   r   r	   matplotlib._afmr
   matplotlib.backend_basesr   r   r   r   matplotlib.cbookr   r   matplotlib.font_managerr   matplotlib.ft2fontr   r   matplotlib._ttconvr   matplotlib._mathtext_datar   matplotlib.pathr   matplotlib.texmanagerr   matplotlib.transformsr   !matplotlib.backends.backend_mixedr   r-   r   	getLoggerr'   r   r   r4   r   caching_module_getattrr,   rm   ru   r   r   r   r   r   RendererPDFPSBaser   r  r  rn  r^  r_  r`  rL  r  FigureManagerPSr3   exportr  r*   r&   r$   <module>r     s^                           				   ' ' ' ' ' '          8 8 8 8 8 8 8 8 8 8 8 8      A A A A A A A A A A A A I I I I I I I I , , , , , , 5 5 5 5 5 5 5 5 0 0 0 0 0 0 / / / / / /             , , , , , , * * * * * * ? ? ? ? ? ?       w""
        
 Q Q Q Q Q Q Q Q"Xy "i"x" >" >	"
 >" >" =" <" <" <" <" <" L" >" >"  >!"" "!  1" " "	6     K K K K K= = = N5 N5 N5b# # #L  h h h h h2 h h hVB B B B B4 B B BZ Z Z Z Z% Z Z Zz. . .b= = =$0 $0 $0 $0N& & & &R; ; ; ;":" :" :" :"z $  . 
" " " " " " " " " "r&   