
    EVf              
       D   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	jj                  e6      Z7dZ8 ejr                  d       G d d             Z:ejv                   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 dNe4j                        ZE G dO dPe      ZF G dQ dRe      ZGdS ZHdT ZId\dUZJd\dVZKd]dWZLd^dXZMeZNg dYZOej                   G dZ d[e             ZQy)_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y)PsBackendHelperc                     i | _         y N)_cachedselfs    g/var/www/html/software/conda/envs/catlas/lib/python3.12/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y)__getattr__r    )obj_typec                     t               S r    )r   r"   s    r$   <lambda>z__getattr__.<lambda>3   s	    o/ r&   z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,   /   sF     <;/020_T__UR0:N1OPFr&   r,   letter)      !@   legal)r8      ledger)r9      a0)Gz@@gHzgG@a1)p=
c7@r?   a2)
ףp=0@rA   a3)zGa'@rC   a4)
ףp= @rE   a5)RQ@rG   a6)Q@rI   a7)HzG@rK   a8)ffffff @rM   a9)\(\?rO   a10)gRQ?rQ   b0)fffffFD@g)\L@b1))\<@rT   b2)QE4@rV   ))\,@rX   )Q8$@rY   )p=
ף@rZ   ))\(@r[   )p=
ף@r\   )Gz@r]   ))\(?r^   )g)\(?r_   )b3b4b5b6b7b8b9b10c                     t        t        j                         d      D ])  \  }\  }}|j                  d      r| |k  s!||k  s'|c S  y)NT)reverselr>   )sorted	papersizeitems
startswith)whkeypwphs        r$   _get_papertypert   R   sM    	 14@ Xb">>#r6a"fJ	
 r&    )sepc                 2    | j                  d |D              S )Nc              3   `   K   | ]&  }|d j                  d      j                  d       ( yw)1.3f0.N)rstrip).0args     r$   	<genexpr>z_nums_to_str.<locals>.<genexpr>\   s*     Jcs4j((-44S9Js   ,.)join)rv   argss     r$   _nums_to_strr   [   s    88JTJJJr&   c                 
   t        |      rFt        |      rt        | d      nt        | d      }|5  t        j                  ||       ddd       yt        j
                  | |t        j                         y# 1 sw Y   yxY w)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   _   ss     S!&s+ 3+T? 	  	(r3'	( 	( 	CFOO<	( 	(s   A99Bc                   
 t        | d      
|D cg c]  }
j                  |       }}dj                  
j                  d
j                  z  dj                  t        t        
j                              dj                  
fd|D              t        |      dz         }d}g }|D ]  }
j                  |t              }
j                         \  }	}|j                  d
j                  |      dj                  t        t        |j                  d	g|j                              d
z  t!        j"                  t%        |	dz  |      ddddd	g dd      j'                  d      z   dz           |dj                  |      z   |z   S c c}w )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_factoraM  %!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
ru   c              3   F   K   | ]  }d j                  |         yw)/N)get_glyph_name)r}   glyph_idfonts     r$   r   z$_font_to_ps_type3.<locals>.<genexpr>   s,      8!)  !!4!4X!> ?@ 8s   !)	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   get_char_indexformatpostscript_nameunits_per_EMr   mapstrr   len
load_glyphr   get_pathappendr   horiAdvancer   convert_to_stringr   decode)	font_pathcharsc	glyph_idspreamble	postambleentriesr   gvr   s             @r$   _font_to_ps_type3r   o   s   " Ia0D167A$$Q'7I7 FT)) 1 11S$)),-HH 8-68 8)nq(  * $I& G 
OOHm4}}1%++H5S1==!*Eaff*E!FG)  %% QVQtUD!
 -d4 5;F7OD 	

( dii((944y 8s   F	c                    dj                  d |D              }t        j                  d| |       	 t        j                  | |      }t        j                  d| t        j                  |       j                  |j                         j                         t        |      }|D cg c]  }|j                  |       }}t               5 }t
        j                  j                  |d      }	t        |	d      5 }
|
j                  |j!                                ddd       t#        t        j$                  |	      |d|       ddd       yc c}w # 1 sw Y   8xY w# 1 sw Y   yxY w# t&        $ r t        j)                  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   2   K   | ]  }t        |        y wr    )chr)r}   r   s     r$   r   z%_font_to_ps_type42.<locals>.<genexpr>   s     /AQ/   zSUBSET %s characters: %szSUBSET %s %d -> %dz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   r   pathr   writegetvaluer   fsencodeRuntimeErrorwarning)r   r   r   
subset_strfontdatar   r   r   tmpdirtmpfiletmps              r$   _font_to_ps_type42r      sS    ///JJJ)9jA"44Y
K

'BGGI4F4N4N%%'..	0 x 5:;T((+;	;! 	GVggll695Ggt$ /		(++-./ bkk'2BIF	G 	G </ /	G 	G  )	* 		sT   A2E# #E;E# -E4 E)E=E# E# E	EE E#  E# # Fc                 B     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                 z    t         r)| j                  j                  dj                   d        | g|i |S )Nz% r   )debugPS	_pswriterr   r'   )r#   r   kwargsmeths      r$   wrapperz!_log_if_debug_on.<locals>.wrapper   s:    NN  2dmm_B!78D*4*6**r&   )	functoolswraps)r   r   s   ` r$   _log_if_debug_onr      s'    
 __T+ +
 Nr&   c                   j    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.useafmc                    t         |   ||       || _        t        j                  d   rd| _        g | _        || _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        i | _        |dz  | _        i | _        d| _        t'        j(                         | _        t-        j.                  t0        j2                        | _        y )Ntext.usetexr   H   )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"B"D&__T\\:r&   c                 l    |yt        |      dk(  r#|d   dk(  ry|d   dk7  r| j                  d       yy)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    "1~"1~"""MN r&   Tc                     |||f| j                   k7  rS| j                  j                  ||cxk(  r|k(  rn nt        |       dnt        |||       d       |r|||f| _         y y y )Nz	 setgray
z setrgbcolor
)r   r   r   r   )r#   rr   bstores        r$   	set_colorzRendererPS.set_color&  ss    q!9

"NN  $%KaK %1O#4J!?$0Aq$9#:.!IK AY
 	 #r&   c                     t        |      }|| j                  k7  r2| j                  j                  t	        |       d       |r|| _        y y y )N setlinewidth
)floatr   r   r   r   )r#   r   r  s      r$   set_linewidthzRendererPS.set_linewidth.  sK    )$	&NN  L$;#<O!L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  s-     Q1qI1^,,r&   c                     || j                   k7  r5| j                  j                  | j                  |             |r|| _         y y y r    )r   r   r   r  )r#   r   r  s      r$   set_linejoinzRendererPS.set_linejoin<  s?    t}}$NN  !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  s-     qaA!L!M**r&   c                     || j                   k7  r5| j                  j                  | j                  |             |r|| _         y y y r    )r   r   r   r  )r#   r   r  s      r$   set_linecapzRendererPS.set_linecapI  s?    dll"NN  !2!27!;<&  #r&   c                 
   | j                   +| j                   \  }}t        j                  ||      r||k(  ry | j                  j	                  |#t        |      rdt        |  dt        |       dnd       |r
||f| _         y y )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H  !s!3 4B|F7K6LJW-	/ #SMDM r&   c                     ||f| j                   | j                  fk7  r5| j                  j                  d| d|dd       |r|| _         || _        y y y )Nr   ru   ry    selectfont
)r   r   r   r   )r#   r   r   r  s       r$   set_fontzRendererPS.set_font[  s[    hDMM4==#AANN  1XJam!LM ( (  Br&   c                    d}|| j                   v r| j                   |   S dt        | j                         z  }t        j                  d   }| j                  dz  }| j
                  j                  d|dd|dd|dd|dd	|d
d| j                  t        j                  |      t               j                  |      d       d|d
d| d       || j                   |<   |S )Nr   zH%dzhatch.linewidthzH  << /PatternType 1
     /PaintType 2
     /TilingType 2
     /BBox[0 0 r  ru   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#   r+  sidelenr   r   
pageheights         r$   create_hatchzRendererPS.create_hatchb  s   DMM!==''s4==))LL!23	[[2%
 " {!GA; 'QK QK 	 
1 JJuxz''05  B CC ^ 	F - 	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&   Nc           
          |r!dd| j                   dz  | j                  dz  f}nd }t        j                  ||||d dg dd      j	                  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  sZ    djj4/t1CDDD&&)T8T-t55;VG_	Er&   c           
         g }|j                         }|3|j                  t        g |j                  |j                    d       |j                         \  }}||t        |      f}| j                  j                  |      }|[dt        | j                        z  }| j                  j                  d| d| j                  ||d       d       || j                  |<   |j                  | d       d	j                  |      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#   gcr5  rectr   trfrq   custom_clip_cmds           r$   _get_clip_cmdzRendererPS._get_clip_cmd  s   $$&KK<==499=>kJK$$&	cC/C"..2237O&"'#d.>.>*?"?$$ * D#. / 0&  )8  %KK?+2./wwt}r&   c                    |j                   d d \  }}d}|d d dd d d df   }	|	j                         j                  dd      }
|!d}|| j                  z  }|| j                  z  }n?dj	                  t        t        |j                         j                                     }d	}d	}| j                  j                  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       y )Nr  zfalse 3 colorimager   r   z1 0 0 1 0 0ru   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   rB  )r#   r>  xyimr4  rp   ro   imagecmddatahexdatamatrixxscaleyscales                 r$   
draw_imagezRendererPS.draw_image  sY    xx|1'$B$2A2+,,.$$T3/"F111F111FXXc#y'7'7'9'C'C'EFGFFF "B  1Qqe  

!F1: qE 1Qqe51VAa5Aa5 )	 

 	 
 	r&   c                     |d u xr |j                         d u }|j                  xr |}| j                  ||||      }| j                  |||       y )Nr5  r)  )get_hatch_pathshould_simplifyr*  _draw_ps)r#   r>  r   r4  rgbFacer5  r)  pss           r$   	draw_pathzRendererPS.draw_path  sY     $>2#4#4#6$#>''0DidXNb"g&r&   c                    | j                  |      rd n5|d   |d   cxk(  r|d   k(  rn nt        |d          dnt        |d d   d}g d}|j                         }	|j                         st	        |j                               dk(  r|j                         n|j                         d   }
|	dkD  xr |
dkD  }|rp|j                  d|	z         |j                  | j                  |j                                      |j                  | j                  |j                                      |j                  | j                  ||d	
             |r;|r|j                  d       |r|j                  |dg       |r|j                  d       |r|j                  d       |j                  ddg       |j                  |dd| j                  dz  | j                   dz  fd	      D ]2  \  }}t	        |      s|dd  \  }}|j                  |dd|dd       4 dj#                  |      }| j%                  |||d	d	       y )Nr   r   r  z setgrayr   z setrgbcolor)z/o {gsavenewpath	translatez%.1f setlinewidthFr(  r`  fillgrestorestrokez
} bind defr   rX  r   ru   z or   rc  re  )r  r   get_linewidthget_forced_alphar   get_rgb	get_alphar   r  get_joinstyler  get_capstyler*  extenditer_segmentsr   r   r   r[  )r#   r>  marker_pathmarker_transr   transr\  ps_colorps_cmdlwalphare  verticescoderM  rN  r]  s                    r$   draw_markerszRendererPS.draw_markers  s6    ##G,  qzWQZ571:5 !,-X6 '"1+./|< 	 ;'')S->!-C jjl1o 	 a%EAIMM-23MM$,,R-=-=-?@AMM$++BOO,=>?d((l27 ) 9 	: g&x01j)MM(#z<01"00DJJrM4;;r>: 1   	0NHd 8}}11Qqe2./	0 YYvb"gE%@r&   c                    t        |      dkD  rt        |d   j                        nd}| j                  |||||      }|d|z  z   dz   |dz   |z  k  }|s"t        j                  | |||||||||	|
|||      S g }t        | j                  |||            D ]`  \  }\  }}d| j                  |fz  }| j                  ||d      }| j                  j                  d| d| d	       |j                  |       b | j                  |||||||	|
|||      D ]'  \  }}}}}|d
d|d
d| }| j                  |||       ) | xj                  dz  c_        y )Nr   r   r  zp%d_%dFr(  r   z {
newpath
translate
z
} bind def
r   ru   r   )r   rw  _iter_collection_uses_per_pathr   draw_path_collection	enumerate_iter_collection_raw_pathsr   r*  r   r   r   _iter_collectionr[  )r#   r>  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   r4  r   
path_bytesxoyopath_idgc0r\  r]  s                                r$   r|  zRendererPS.draw_path_collection	  s    .1Z!^3uQx(();;>7J
D q=((1,1/MM 	%44b*E>z:Jd	! ! 
$-d.M.M %/9 %: 	$ A it77;;D++D)e+LJNN   &   	"  d#	$ .2-B-BJJ
JdO.5 	,)BGS' q62a&'+BMM"c7+	, 	  A% r&   )mtextc          
      (   | j                  |j                               ry t        | d      s*| j                  d       | j	                  ||||||d|       y | j                  ||d      \  }}	}
|j                         }d| j                  z  }t        |j                         d d dd	i}d
ddj                  t        j                  d   d   d      }||z  }d|d|}t        j                  |dz         }t        ||
t        j                  |      z  z
  ||
t        j                  |      z  z
        }| j                   j#                  d||||dz  |fz         | j$                  j'                  d| d| d       | xj                  dz  c_        y )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   rv   ,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      ?rF  z	 moveto
(z)
show
grestore
r   )r  rj  hasattrr   	draw_textget_text_width_height_descentget_size_in_pointsr   r   r=  r   r   r  radianscossinr   r   r   r   )r#   r>  rM  rN  spropangler  ro   rp   blr   thetextr   fontcmdtexrangleposs                     r$   draw_texzRendererPS.draw_tex6  s    

-tX&23
 NN2q!QeUEB55ae5L1b**,-bjjl2A.8C8!2 13363||M2157H4J 	 aK',a0 EBJ'1rBFF6N22ARVVF^8K4KL>(4-B> >	? 	 " 	  	 	r&   c	                    | j                  |j                               ry |dk(  r| j                  ||||||      S |r| j                  ||||||      S g }	t        j
                  d   r| j                  |      }
|
j                  j                  dd      j                  d      }d|j                         z  }d}d }|D ]x  }t        j                  t        |      dt        |      d      }	 |
j                  |      }|
j#                  ||      }|}|||z  z  }|	j%                  |||f       |||z  z  }z n| j'                  |      }
| j(                  j+                  |
|       t-        j.                  ||
      D ]z  }|j0                  j                  j                  dd      j                  d      }|j0                  j3                  |j4                        }|	j%                  ||j6                  |f       |  | j8                  |j                           t;        j<                  |	d       D ]{  \  }}| j?                  ||j                         d       djA                  d |D              }| jB                  jE                  d| jG                  |       d|dd|dd|dd| d       } y # t        $ r d	}|
j!                  d
      }Y w xY w)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   8   K   | ]  \  }}}|d d|dd  yw)r   z 0 m /r  z
 glyphshowNr*   )r}   _rM  r   s       r$   r   z'RendererPS.draw_text.<locals>.<genexpr>  s/       9$.Aq$ $%Q%vd1XZ @  9s   rF  r   ru    translate
 rotate
rG  )$r  rj  r  draw_mathtextr   r   _get_font_afmr   encoder   r  r   r=  ordget_width_from_char_nameKeyErrorget_width_charget_kern_dist_from_namer   _get_font_ttfr   trackr	   layout	ft_objectr   	glyph_idxrM  r  	itertoolsgroupbyr&  r   r   r   rB  )r#   r>  rM  rN  r  r  r  r  r  streamr   ps_namer,  thisx	last_namer   r   r   kernitem
glyph_namegroupr  s                          r$   r  zRendererPS.draw_text`  s    

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

%' 68 	NGUMM'4#:#:#<eDii  927 9 9GNN   &B  1Qqe q	 
	 
" 	'   5%D //4E5s   .J--KKc                 P   | j                   j                  j                  |d|      \  }}}	}
} | j                  |j	                           | j
                  j                  d|dd|dd|dd       d}|
D ]  \  }}}}}| j                  j                  ||       |j                  |f|k7  r:|j                  |f}| j
                  j                  d|j                   d| d	       t        |t              r|j                  t        |            n|j                  |j                  |            }| j
                  j                  |dd|dd
| d        |D ].  \  }}}}| j
                  j                  | d| d| d| d       0 | j
                  j                  d       y)z-Draw the math text using matplotlib.mathtext.r   rF  r   ru   r  r  Nr   r%  z	 moveto
/z glyphshow
z
 rectfill
	grestore
)
_text2pathmathtext_parserparser  rj  r   r   r   track_glyphr   
isinstancer
   get_name_charr   r   r   )r#   r>  rM  rN  r  r  r  r   r   descentglyphsrectslastfontr   r   numoxoyr  ro   rp   s                        r$   r  zRendererPS.draw_mathtext  s    OO++11!R> 	.vw

%e1QqEQiy"	# +1 	.'D(CR##//c:$$h/8;//9$$,,-QxjFH 1;40E""3s8,##D$7$7$<=  NN  a&"Q  <|-.	. " 	BLBAqNN  B4qAaS!K!@A	B\*r&   c                 h    | j                  ||j                  d      |j                  d      |       y )N)r   r   r  )r   r   r   )draw_gouraud_trianglesreshape)r#   r>  pointscolorsrr  s        r$   draw_gouraud_trianglez RendererPS.draw_gouraud_triangle  s,    ##By(A$*NN9$=u	Fr&   c                    t        |      t        |      k(  sJ t        |      dk(  ry |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                  }|j                  |d   |d   z  df      }|j	                  |      }|j                  |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<   |j                         j                  dd      }| j                  j                  d|dd|dd|dd|dd| d       y )Nr   r   r   r  r   )axisi   l    ))flagsu1)r  z2>u4)r  3u1)dtyper  r  g     o@r  r   rE  zgsave
<< /ShadingType 4
   /ColorSpace [/DeviceRGB]
   /BitsPerCoordinate 32
   /BitsPerComponent 8
   /BitsPerFlag 8
   /AntiAlias true
   /Decode [ r   ru   z  0 1 0 1 0 1 ]
   /DataSource <
z
>
>>
shfill
grestore
)r   ndimrH  r  r4  r  minmaxceilemptyrI  rJ  r   r   )r#   r>  r  r  rr  rH  flat_pointsflat_colors
points_min
points_maxfactorxminyminxmaxymaxrQ  rR  s                    r$   r  z!RendererPS.draw_gouraud_triangles  s   6{c&k)))v;!{{a||A!###||A!###{{a||A!###||A!###nneAhq&91%=>ook2nneAhq&91%=>VVKa0G<
VVKa0G<
+*z*ABC
d
dxx!HuQxJL W%
2f<X$QU+e3X,,.$$T3/ " 1XQtAhaQxqa 1	 
 	r&   rg  c                   | j                   j                  }|j                         dkD  xr  | j                  |j	                                }|sd}| j                  |      rd}|j                         }|rz| j                  |j                                | j                  |j                                | j                  |j                                 | j                  |j                           |s|r  | j                  |j	                         dd    |d        || j                  |              ||j                                 |d       |r5|s|r |d        | j                  |dd ddi  |d       |s|r |d	       |rD| j!                  |      }	 |d        |t#        |j%                         dd          |d
|	 d       |r |d        |d	       y)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   rF  r   r  zfill
r  ru   z setpattern fill grestore
zstroke
)r   r   rh  r  rj  	get_hatchr  r  rl  r  rm  r#  
get_dashesr  rB  stripr/  r   get_hatch_color)
r#   r]  r>  r\  rc  re  r   mightstroker+  
hatch_names
             r$   r[  zRendererPS._draw_ps  s    $$'')A- B#33BJJLAA 	F(Dr//12b..01R__./Dr}}/%DNNBJJL!,-id  $%bhhjdi DNNGBQK5u5(Ol#**51J), 2 2 4Ra 89:Aj\!<=>*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&  r/  r1  r*  rB  r   rV  r^  ry  r|  r  r  r  r  r  r[  __classcell__r   s   @r$   r   r      s]   
 )E((5M";6'+ - -) + +'
*) D(E,  @ ' ' FJ2A 2Ah *& *&X :> ' 'R 8 8t + +4 F F - -^ 15T 1 1r&   r   c                   (    e Zd Z ed      \  ZZd Zy)_Orientationr  c                 4    | j                   dk(  r|d d d   S |S )N	landscaperD  )r   )r#   rH  s     r$   swap_if_landscapez_Orientation.swap_if_landscape"  s     "ii;6uTrT{AEAr&   N)r'   r(   r)   rangeportraitr  r  r*   r&   r$   r	  r	    s    (Hi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)r]  epsc                      y)Nr]  r*   r"   s    r$   get_default_filetypez#FigureCanvasPS.get_default_filetype+  s    r&   Nr  )metadata	papertypeorientationbbox_inches_restorec          	      
   | j                   j                  }d| j                   _        i }	t        |t        t        j
                  f      rCt        j                  |      j                  }
|
j                  dd      j                  d      |	d<   |xs i j                  ddt        j                   d      |	d<   t	        j                  d      }|rPt        j                  j!                  t#        |      t        j$                  j&                        j)                  d	      nt+        j,                         |	d
<   dj/                  d |	j1                         D              }	|t        j2                  d   }|j5                         }t7        j8                  ddgt:        |       t7        j<                  t>        |j5                               }t        j2                  d   r| j@                  n| jB                  } |||f||	|||d| y )Nr   r   r  TitleCreatorzMatplotlib vz, https://matplotlib.org/SOURCE_DATE_EPOCHz%a %b %d %H:%M:%S %YCreationDater   c              3   2   K   | ]  \  }}d | d|   yw)z%%z: Nr*   )r}   kr   s      r$   r   z+FigureCanvasPS._print_ps.<locals>.<genexpr>F  s%      !<"ab2aSM!<r   zps.papersizefigureauto)r  )r  r   )dpidsc_commentsr  r  r  )"r   r"  r  r   r   PathLikepathlibr   r   r  r   r=  r   __version__getenvdatetimefromtimestampinttimezoneutcstrftimetimectimer   rm   r   lowerr   check_in_listrl   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   
 kkoogR[[12||G,11H3::7C !#+>r"6"63??++DE#GY II&9:
 ! ++%&!!%%''/x0F'G 	^$ yy !<&2&8&8&:!< < ^4IOO%	Hf9y9YO((k&7&7&9; ll=1 ))%% 	 	W 	C#L'9$7	C;A	Cr&   r  c                    |dk(  t        |t        t        j                  f      st	        |      st        d       j                  j                         \  dk(  rt        j                  f       sdk(  r}	}nj                  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                  j)                  |        fd}t*        j,                  d   rt/               5 }t        j0                  j3                  |d      }t5        |dd      5 } ||       ddd       t*        j,                  d   dk(  rt7        t8        |       n*t*        j,                  d   dk(  rt7        t:        |       t=        ||       ddd       yt?        j@                  |dd      5 }tC        |      s tE        jF                  d      |      } ||       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   yxY w)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!  r   g      B@r   r   r  r   r;  c           
         rt        d|        n/t        d|        
dk7  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	j                  t              |        t
        j                  d   sj                  j                  j                         D ]i  \  }}|s	t
        j                  d   }t        |      dkD  rd}| j                          |dk(  r| j                  t        ||             ]t        |||        k 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                   j#                         |        t        d|        t        d|        st        d|        | j                          y ) 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-   )endr?  z%%BeginPrologr   z/mpldict %d dict defzmpldict beginzps.fonttype   r   r   r@  z%%EndPrologz%%Page: 1 1z%s translatez	%d rotatez0 0 r   z	 rectclipshowpagez%%EOF)printr   get_bbox_headerr   r2   r   r   r   usedr   rm   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  s6   /b9&R0(29+>RHl,(!N #$$/$4$4#5R$T*1-. /$%
 r# LE/+<<,[;;@@AA(50r:/+$))G$2.<<,&99>>DDFA$Iu  "||M:H5zC'#%HHJ1}!29e!DE*9eR@A %b!-b)m"-/+.<B#77bAkH,26DeBhr	:;9EBO $..))+"5 %b!*2&gB'HHJr&   ps.usedistillertmp.psro   r   r   Nghostscript)ptyper   xpdf)$r  r   r   r$  r   
ValueErrorr   get_size_inchesrt   r  rl   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#   r5  r6  r"  r#  r  r  r  paper_widthpaper_heightllxllyurxuryrendererrL  r   r   r   r?  r   r   rI  rJ  rK  r   r  r  s   `   ```             @@@@@@@@r$   r4  zFigureCanvasPS._print_figureX  s    7S"++$67(1KLL 335v&(E(Eufo(VWIY(*(-vK(3(E(E)$)&%K u,-./DKK$$***DKK$$+++,000!$c3!3Cc3,&+RFBHS#s#! !M$KK[ 35 	"9	 9	v <<)* $% 
?'',,vx8'3; *r%b)*<< 12mC !(&	N\\"34> !(&	N,Wg>
? 
? ##GS9E (,T266++I6t<D!$'( (* *
? 
?( (s1   /K0	J;9A)K/K;K	 KKKc                0   |dk(  }| j                   j                         \  }	}
d}d}|}|}|| j                   j                  j                  z   }|| j                   j                  j                  z   }||||f}t               | _        t        |	|
| j                  |      }t        | j                   |	|
|||      }| j                   j                  |       t               5 }t        j                  |d      }|j                  d| dt        |      d    dt        t                d	d
j#                  t                dt%        ||       dt%        |	dz  |
dz         d| j                  j'                          dd       |t(        j*                  u r
|
|	}
}	||||f}|s|dk(  r-|j-                  | j                   j                               \  }}n|dk(  rt/        |	|
      }t0        |   \  }}t3        ||j4                  |||j6                        }t8        j:                  d   dk(  st8        j:                  d   rt=        t>        |||||       n+t8        j:                  d   dk(  rt=        t@        |||||       tC        ||       ddd       y# 1 sw Y   yxY w)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   r=  r;  rN  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   r7  z
end
showpage
r   r   r   r!  rM  rO  r   )rP  r   rotatedrQ  N)"r   rS  r   r   r   r   r   r   r   rT  r   r%  r   
write_textrD  r   r2   r   r   r   r	  r  r  rt   rl   _convert_psfragsr   r   r   r   rU  rV  rW  r   )r#   r5  r6  r"  r#  r  r  r  rI  r   r   r  r  r]  r^  r_  r`  r   rJ  ra  r   tmppathr[  r\  psfrag_rotateds                            r$   r3  z FigureCanvasPS._print_figure_tex  s    335vDKK$$***DKK$$+++S#s#! !M$T[[%*FC9LN 	"  ! 5	;Vll684G  q  
 g,    b"  %(F2I&' (  & #)  $, l444 &vS#s+
 h.,7,I,IKK//1-3)\ & .uf =I,5i,@)\-++[,  "N ./=@||M2Z$fID%35 /0F:\$fID%35 )':k5	; 5	; 5	;s   F$JJr]  r  c                 T    | j                   j                          t        |          S r    )r   draw_without_renderingr   rT  )r#   r   s    r$   rT  zFigureCanvasPS.draw8  s    **,w|~r&   )r'   r(   r)   	fixed_dpi	filetypesr  r:  r4  r3  r   partialmethodprint_ps	print_epsrT  r  r  s   @r$   r  r  &  sy    I#13I
 Tz $(CZ !%B(N !%W;r 'y&&y$7H'	''	59I r&   r  c           	      L   t        j                  dt         j                  d   t         j                  j	                  d      z   t         j                  j	                  d      z   t         j                  j	                  d      z   d||dz  z   i      5  t               j                  ddj                  |      |d	k(  rd
nd| j                         j                         dz  d      }ddd       t               5 }t        j                  j                  |d      }t        j                  dddd|gt               t!        j"                  ||        ddd       t%        |       5 }d|j'                  d      v }	ddd       |	S # 1 sw Y   xY w# 1 sw Y   >xY w# 1 sw Y   	S xY w)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   NrN  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)
rf  rq  r[  r\  r  dvifiler   psfiler   rg  s
             r$   re  re  =  s    
!LL./NN44W=>NN44Z@A NN44X>? J#|<=	= 
  ,''  99W-*k9q"??,557
  ( . 
	 %fh/''dE494	AFG$	% 
g 6"$56M .% %6s&   AF9AF#FF
FF#c                     	  | t        |      g|i | y # t        j                  $ r }t        j	                  d|       Y d }~y d }~ww xY w)Nz%s.  Distillation step skipped.)r   r   ExecutableNotFoundErrorr   r   )funcrf  r   r   excs        r$   rU  rU  n  sE    =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        | ||       yy)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=rc  N)r   r   r   r|  _get_executable_info
executabler   r   remover   r   pstoeps)r   r  rP  r   rc  paper_optionr  r"  s           r$   rV  rV  u  s     #}	(	 /tAwi8/Qy9; 'ug./u_F
,,)
*C	##		!	!$	'	2	2	K#/B	;
	;'x0	;29	; 		 IIg
KK   	w/ r&   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       |rt        |        yy# 1 sw Y   xY w)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.pdfrN  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  rP  r   rc  r  r   tmppdftmppss	            r$   rW  rW    s2    T"Y'
#}	(	 /tAwi8/Qy9; 'ug./		 $fi0VX. 	'',+%,-     $	% 	'''9feDd	LE7#!$"  #$ $s   B	C77D 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	j                  ||g      |fS )
zx
    Return a postscript header string for the given bbox lbrt=(l, b, r, t).
    Optionally, return rotate command.
    z.2fru   r   z translate
90 rotater-   z%%%%BoundingBox: %d %d %d %dz%%HiResBoundingBox: z.6fr   )r  r  r   )	lbrtrc  rj   r  r  trotate	bbox_infohires_bbox_infos	            r$   rD  rD    s     JAq!QaC9AaW$9:.!Q
BGGAJ1OOI,QsG1QsG1QsG1QsGLO99i12F::r&   c                    |rt        ||      \  }}nd\  }}| dz   }t        |d      5 }t        | d      5 }|j                  }|D ]  }	|	j                  d      r& |d       |s ||j	                  d      d	z          :|	j                  d
      r. ||	        |d       |r ||j	                  d      d	z           n|r|	j                  d      r ||	        |D ]6  }	|	j                  d      r	 |d       |	j                  d      r/ ||	       8 	 ddd       ddd       t        j                  |        t        j                  ||        y# 1 sw Y   =xY w# 1 sw Y   AxY w)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)	rD  r   r   rn   r  r   r  r   r   )
r   r   rc  r  r  rr  epshtmphr   lines
             r$   r  r    st    +D'B	6&	6G	gt	 )d7D&9 )T

 	Dw'23)**73e;<!12d & ' &--0589$// +K Ld/	6  	Dx( ! " !56d	=) )V IIg
KK!Y) ) ) )s)   E!-E%B3EE!E	E!!E*)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y)
_BackendPSzLevel IIN)r'   r(   r)   backend_versionr  FigureCanvasr*   r&   r$   r  r  9  s     O!Lr&   r  )Fr7   NF)F)NF)Rr  rY  r(  enumr   r   ior   r  loggingr   r%  r   tempfiler   r.  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   r3   r   caching_module_getattrr,   rl   rt   r   r   r   r   r   RendererPDFPSBaser   r	  r  re  rU  rV  rW  rD  r  FigureManagerPSr2   exportr  r*   r&   r$   <module>r     s\          	   '    8 8 A A I , 5 0 /   , * ?  w"
   
 Q Q Q"Xy "i"x" >" >	"
 >" >" =" <" <" <" <" <" L" >" >"  >!"" "!  1"	6   K= N5b#Lh22 hVB4 BT% Tn.b=$0N&R;":"z $. 
" " "r&   