
    h              
       D   S r SSKrSSKrSSKrSSKJr  SSKrSSKJr  SSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKrSSKJr  SSKrSSKrSSKrSSKrSSKrSSKJrJrJrJr  SSKJr  SSKJ r J!r!J"r"J#r#  SS	K$J%r%J&r&  SS
K'J(r(  SSK)J*r*  SSK+J,r,  SSK-J.r.  SSK/J0r0  SSK1J2r2  SSK3J4r4  SSK5J6r6  \
Rn                  " \85      r9Sr:0 SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S%_S&S'_S(S)_S*S+_S,S-_S.S/_S0S1_S2S3_S4S5_S6S7S8S9S:S;S<S=S>.Er;S?S@.SA jr<SB r=SC r>SD r?SE r@SF rASG rBSH rCSI rDSJ rE " SK SL\6R                  5      rG " SM SN\5      rH " SO SP\!5      rISQ rJSR rKS]SS jrLS]ST jrM\R                  " SU5      S^SV j5       rOSW rPSX rQS_SY jrR\"rS/ SZQrT\ R                   " S[ S\\ 5      5       rVg)`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)	LoadFlags)	uni2type1)Path)
TexManager)Affine2D)MixedModeRenderer   )_backend_pdf_psFletter)      !@   legal)r      ledger)r      a0)Gz@@gHzgG@a1)p=
c7@r"   a2)
ףp=0@r$   a3)zGa'@r&   a4)
ףp= @r(   a5)RQ@r*   a6)Q@r,   a7)HzG@r.   a8)ffffff @r0   a9)\(\?r2   a10)gRQ?r4   b0)fffffFD@g)\L@b1))\<@r7   b2)QE4@r9   ))\,@r;   )Q8$@r<   )p=
ף@r=   ))\(@r>   )p=
ף@r?   )Gz@r@   ))\(?rA   )g)\(?rB   )b3b4b5b6b7b8b9b10 )sepc                 2    U R                  S U 5       5      $ )Nc              3   d   #    U  H&  oS  R                  S5      R                  S5      v   M(     g7f)1.3f0.N)rstrip).0args     P/var/www/html/env/lib/python3.13/site-packages/matplotlib/backends/backend_ps.py	<genexpr>_nums_to_str.<locals>.<genexpr>I   s+     JTc4j((-44S99Ts   .0)join)rL   argss     rU   _nums_to_strrZ   H   s    88JTJJJ    c                    [        U5      (       aH  [        U5      (       a
  [        U SS9O[        U S5      nU   [        R                  " X!5        SSS5        g[        R
                  " X[        R                  S9  g! , (       d  f       g= f)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      rU   _move_path_to_path_or_streamrj   L   sj     S!!&s++ 3+T? 	 r' R 	CFOO< Rs   A==
Bc                 0  ^
 [        U SS9m
U Vs/ s H  nT
R                  U5      PM     nnSR                  T
R                  ST
R                  -  SR                  [        [        T
R                  5      5      SR                  U
4S jU 5       5      [        U5      S-   S9nSn/ nU H  nT
R                  U[        R                  5      nT
R                  5       u  pUR                  ST
R                  U5      SR                  [        [        UR                   S	/UR                  Q5      5      S
.-  ["        R$                  " ['        U	S-  U5      SSSSS	/ SQS5      R)                  S5      -   S-   5        M     USR                  U5      -   U-   $ s  snf )aU  
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
rK   c              3   L   >#    U  H  nS TR                  U5       3v   M     g7f)/N)get_glyph_name)rS   glyph_idfonts     rU   rV   $_font_to_ps_type3.<locals>.<genexpr>   s+      8-6  !!4!4X!> ?@-6s   !$)	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   )nameru   @   NF)   m   lr[      cr[   Tasciizce} _d
)r   get_char_indexformatpostscript_nameunits_per_EMrX   mapstrru   len
load_glyphr   NO_SCALEget_pathappendro   horiAdvancer   convert_to_stringr   decode)	font_pathcharsc	glyph_idspreamble	postambleentriesrp   gvrq   s             @rU   _font_to_ps_type3r   \   s   " Ia0D167A$$Q'I7 FT)) 1 11S$)),-HH 8-68 8)nq(  * $I& GOOHi&8&89}}%++H5S1==!*Eaff*E!FG)  %% QVQtUD!
 -d4 5;F7OD 	
 ( dii((944y 8s   Fc           
         SR                  S U 5       5      n[        R                  SX5         0 nU R                  S5      (       a  SUS'   [        R
                  R                  " U 40 UD6 n[        R                  " X5       n[        R                  " U5      R                  5       n[        R                  SU [        R                  " U 5      R                  [        U5      5        UR                  [!        XVU5      5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f! ["         a    [        R%                  S	U 5        e f = f)
a
  
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.
 c              3   8   #    U  H  n[        U5      v   M     g 7fN)chr)rS   r   s     rU   rV   %_font_to_ps_type42.<locals>.<genexpr>   s     /AQs   zSUBSET %s characters: %sz.ttcr   
fontNumberzSUBSET %s %d -> %dNzIThe PostScript backend does not currently support the selected font (%s).)rX   _logdebugendswith	fontToolsttLibTTFontr   get_glyphs_subsetfont_as_filegetvalueosstatst_sizer   write_serialize_type42RuntimeErrorwarning)r   r   ri   
subset_strkwrq   subsetfontdatas           rU   _font_to_ps_type42r      s    ///JJJ)9A f%% B|oo$$Y5"5//	F&&33F;DDFHJJ$i1C1K1KH HH&tX>? G 65FF 65  W	 		sB   >D7 .D&A?DD&D7 
D#	D&&
D40D7 4D7 7"Ec                     [        U R                  S5      U5      u  p4U S   nU S   n[        U5      n[        X!U5      n[        R
                  " SUS    SUS    SU S	   R                  S
 SUR                  S5       SUR                  S5       SUR                  S5       SUR                  S5       SUR                   SUR                  (       a  SOS SUR                   SUR                   S[        [        U 5      6  SU SU S35      $ )a?  
Output a PostScript Type-42 format representation of font

Parameters
----------
font : fontTools.ttLib.ttFont.TTFont
    The original font object
subset : fontTools.ttLib.ttFont.TTFont
    The subset font object
fontdata : bytes
    The raw font data in TTF format

Returns
-------
str
    The Type-42 formatted font
locapostrw   z
        %%!PS-TrueTypeFont-r   rQ   r   -headz.7fzi
        10 dict begin
        /FontType 42 def
        /FontMatrix [1 0 0 1 0 0] def
        /FontName /   z; def
        /FontInfo 7 dict dup begin
        /FullName (   z) def
        /FamilyName (z) def
        /Version (   z) def
        /ItalicAngle z def
        /isFixedPitch truefalsez  def
        /UnderlinePosition z! def
        /UnderlineThickness zX def
        end readonly def
        /Encoding StandardEncoding def
        /FontBBox [z=] def
        /PaintType 0 def
        /CIDMap 0 def
        z	
        z9
        FontName currentdict end definefont pop
        )_version_and_breakpointsget_generate_charstrings_generate_sfntstextwrapdedentfontRevisiongetDebugNameitalicAngleisFixedPitchunderlinePositionunderlineThicknessrZ   _bounds)	rq   r   r   versionbreakpointsr   rw   r   sfntss	            rU   r   r      s[   $ 4DHHV4DhOG<D<D!&)EHk:E??  #AJ<qAd6l6O6OPS5T U %%a() *%%a() *''*+ ,$$Q'( )&&' (!%!2!2v@ A 223 4!445 6 !'$-01 2	 
 		 	)  r[   c           	         [         R                  " SUSS 5      u  p#nX#4n0 n[        U5       HB  n[         R                  " SUSUS-  -   SUS-   S-  -    5      u  ppXUR                  S5      '   MD     U b%  U R                  SS	  V
s1 s H
  oS
   U
-   iM     nn
O
[        5       n[        1 UR                  5       kUk[        U5      i5      nX\4$ s  sn
f )aT  
Read the version number of the font and determine sfnts breakpoints.

When a TrueType font file is written as a Type 42 font, it has to be
broken into substrings of at most 65535 bytes. These substrings must
begin at font table boundaries or glyph boundaries in the glyf table.
This function determines all possible breakpoints and it is the caller's
responsibility to do the splitting.

Helper function for _font_to_ps_type42.

Parameters
----------
loca : fontTools.ttLib._l_o_c_a.table__l_o_c_a or None
    The loca table of the font if available
fontdata : bytes
    The raw data of the font

Returns
-------
version : tuple[int, int]
    A 2-tuple of the major version number and minor version number.
breakpoints : list[int]
    The breakpoints is a sorted list of offsets into fontdata; if loca is not
    available, just the table boundaries.
z>3hNr   z>4sIII      r   r|   glyf)	structunpackranger   	locationssetsortedvaluesr   )r   r   v1v2	numTablesr   tablesitag_offsetglyf_breakpointsr   s                rU   r   r     s    6 eXbq\:BIhGF9"MM(HR!B$YrQqSRTH}4UV&,szz'"#  BF..QTRTBUVBU6NV3BUV5M6==?M-=Ms8}MNK Ws   Cc                     U R                  S5      n[        R                  R                  R	                  U5      nUR                  5        H  nX   R                  U5        M     UR                  =(       d    S$ )a?  
Compute the font bounding box, as if all glyphs were written
at the same start position.

Helper function for _font_to_ps_type42.

Parameters
----------
font : fontTools.ttLib.ttFont.TTFont
    The font

Returns
-------
tuple
    (xMin, yMin, xMax, yMax) of the combined bounding box
    of all the glyphs in the font
F)r   r   r   r   )getGlyphSetr   pens	boundsPen	BoundsPenkeysdrawbounds)rq   gspenrw   s       rU   r   r   ,  s[    $ 
		%	 B
..
"
"
,
,R
0C	
c ::%%r[   c                     U R                  5       nS[        U5       S3n[        U5       H  u  p4USU SU S3-  nM     US-  nU$ )z
Transform font glyphs into CharStrings

Helper function for _font_to_ps_type42.

Parameters
----------
font : fontTools.ttLib.ttFont.TTFont
    The font

Returns
-------
str
    A definition of the CharStrings dictionary in PostScript
z/CharStrings z dict dup begin
rn   rK   z def
zend readonly def)getGlyphOrderr   	enumerate)rq   gosr   rw   s        rU   r   r   E  s^      
			B
By 12AR=	qas&!! !	AHr[   c           	      >  ^ SmSnU[        U 5      :  aV  [        R                  " X#S-   5      nX$S-
     nXS::  a  US   nTSXU R                  5        S3-  mUnU[        U 5      :  a  MV  TS-  mS	R	                  U4S
 j[        S[        T5      S5       5       5      $ )a  
Transform font data into PostScript sfnts format.

Helper function for _font_to_ps_type42.

Parameters
----------
fontdata : bytes
    The raw data of the font
font : fontTools.ttLib.ttFont.TTFont
    The fontTools font object
breakpoints : list
    Sorted offsets of possible breakpoints

Returns
-------
str
    The sfnts array for the font definition, consisting
    of hex-encoded strings in PostScript format
z/sfnts[r   i  r   r   <z00>z]defr}   c              3   2   >#    U  H  nTXS -    v   M     g7f)d   N )rS   r   r   s     rU   rV   "_generate_sfnts.<locals>.<genexpr>}  s     ?)>AQq3Z)>s   r   )r   bisectbisect_lefthexrX   r   )r   rq   r   posr   newposr   s         @rU   r   r   ]  s    * 	A
C
H
{%K8qS!= _F	qf%))+,C00 H
 KA99?q#a&#)>???r[   c                 F   ^  [         R                  " T 5      U 4S j5       nU$ )zq
Wrap `RendererPS` method *meth* to emit a PS comment with the method name,
if the global flag `debugPS` is set.
c                    > [         (       a)  U R                  R                  STR                   S35        T" U /UQ70 UD6$ )Nz% r}   )debugPS	_pswriterr   __name__)selfrY   kwargsmeths      rU   wrapper!_log_if_debug_on.<locals>.wrapper  s<    7NN  2dmm_B!78D*4*6**r[   )	functoolswraps)r  r  s   ` rU   _log_if_debug_onr    s'    
 __T+ +
 Nr[   c                     ^  \ rS rSrSr\R                  " S5      rSrS!U 4S jjr	S r
S"S jrS"S	 jr\S
 5       rS"S jr\S 5       rS"S jrS"S jrS"S jrS rS rS#S jrS r\S$S j5       r\S$S j5       r\ S$S j5       r\S 5       r\SS.S j5       r\S#S j5       r\S 5       r\S 5       r SSS.S jr!S r"U =r#$ )%
RendererPSi  zt
The renderer handles all the drawing primitives using a graphics
context instance that controls the colors/styles.
z	fonts/afm	ps.useafmc                   > [         TU ]  X5        X0l        [        R                  S   (       a  SU l        / U l        X@l        S U l        S U l	        S U l
        S U l        S U l        S U l        S U l        0 U l        US-  U l        0 U l        SU l        [&        R(                  " 5       U l        [,        R.                  " [0        R2                  5      U l        g )Ntext.usetexr   H   )super__init__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        rU   r  RendererPS.__init__  s     	'!<<&DLDK  
#+b= #$ "1"B"B"D&__T\\:r[   c                 t    Uc  g[        U5      S:X  a%  US   S:X  a  gUS   S:w  a  U R                  S5        gg)NTr      r   r   zlThe PostScript backend does not support transparency; partially transparent artists will be rendered opaque.F)r   r#  )r   rgb_or_rgbas     rU   _is_transparentRendererPS._is_transparent  sP    "1~"1~"""MN r[   Tc                     XU4U R                   :w  aW  U R                  R                  Xs=:X  a  U:X  a  O  O[        U5       S3O[        XU5       S35        U(       a
  XU4U l         g g g )Nz	 setgray
z setrgbcolor
)r  r   r   rZ   )r   rr   bstores        rU   	set_colorRendererPS.set_color  sk    !9

"NN  $%KaK %1O#4J!?$0q$9#:.!IK AY
 	 #r[   c                     [        U5      nXR                  :w  a6  U R                  R                  [	        U5       S35        U(       a  Xl        g g g )N setlinewidth
)floatr  r   r   rZ   )r   r  r1  s      rU   set_linewidthRendererPS.set_linewidth  sG    )$	&NN  L$;#<O!LM!*  'r[   c                 &    SSSSSSS.U    n U S S3$ )Nr   r      )miterroundbevelr   r   r:  dz setlinejoin
r   )r  s    rU   _linejoin_cmdRendererPS._linejoin_cmd  s-     Q1qI1^,,r[   c                     XR                   :w  a9  U R                  R                  U R                  U5      5        U(       a  Xl         g g g r   )r  r   r   r?  )r   r  r1  s      rU   set_linejoinRendererPS.set_linejoin  s;    }}$NN  !3!3H!=> (  %r[   c                 &    SSSSSSS.U    n U S S3$ )Nr   r   r:  )buttr<  
projectingr   r   r:  r>  z setlinecap
r   )r  s    rU   _linecap_cmdRendererPS._linecap_cmd  s-     qaA!L!M**r[   c                     XR                   :w  a9  U R                  R                  U R                  U5      5        U(       a  Xl         g g g r   )r  r   r   rG  )r   r  r1  s      rU   set_linecapRendererPS.set_linecap  s;    ll"NN  !2!27!;<&  #r[   c                 (   U R                   b/  U R                   u  pE[        R                  " X%5      (       a  XA:X  a  g U R                  R	                  Ub(  [        U5      (       a  S[        U6  S[        U5       S3OS5        U(       a	  X4U l         g g )N[z] z	 setdash
z[] 0 setdash
)r  nparray_equalr   r   r   rZ   )r   r   seqr1  oldooldseqs         rU   set_linedashRendererPS.set_linedash  s    ==$==LD~~c**t~ #CHH  !s!3 4B|F7K6LJW-	/ #MDM r[   c                     X4U R                   U R                  4:w  a8  U R                  R                  SU SUS S35        U(       a  Xl         X l        g g g )Nrn   rK   rO    selectfont
)r  r  r   r   )r   r  r  r1  s       rU   set_fontRendererPS.set_font  sU    DMM4==#AANN  1XJam!LM ( (  Br[   c                    SnXR                   ;   a  U R                   U   $ S[        U R                   5      -  nU R                  S-  nU R                  R	                  SUS SUS SUS SUS SUS	 S
U R                  [        R                  " U5      [        5       R                  U5      SS9 SUS	 SU S35        X@R                   U'   U$ )Nr  zH%dzH  << /PatternType 1
     /PaintType 2
     /TilingType 2
     /BBox[0 0 r>  rK   z]
     /XStep z
     /YStep z(

     /PaintProc {
        pop
        r   r5  Fsimplifyz]
        gsave
        fill
        grestore
        stroke
     } bind
   >>
   matrix
   0 z translate
   makepattern
   /z
 exch def
)
r  r   r%  r   r   _convert_pathr   hatchr   scale)r   r]  r  sidelenrw   
pageheights         rU   create_hatchRendererPS.create_hatch  s    MM!==''s4==))[[2%
 " {!GA; 'QK QK 	 
1 DJJu%xz'7'7'@5Q R S ^ 	F + 	.  $er[   c                     U R                   $ )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    rU   get_image_magnification"RendererPS.get_image_magnification  s     '''r[   Nc           
          U(       a!  SSU R                   S-  U R                  S-  4nOS n[        R                  " XX4S S/ SQS5      R	                  S5      $ )Ng        g      R@r   )ry   rz   r[   r{   s   clTr|   )r$  r%  r   r   r   )r   path	transformclipr[  s        rU   r\  RendererPS._convert_path$  sV    djj4/t1CDDD&&TT-t55;VG_	Er[   c                    / nUR                  5       nUb3  UR                  [        / UR                  QUR                  Q76  S35        UR                  5       u  pEUb  U[        U5      4nU R                  R                  U5      nUcV  S[        U R                  5      -  nU R                  R                  SU SU R                  XESS9 S35        XpR                  U'   UR                  U S35        S	R                  U5      $ )
N
 rectclip
zc%drn   z {
FrZ  z
clip
newpath
} bind def
r}   r   )get_clip_rectangler   rZ   p0sizeget_clip_pathidr  r   r   r   r   r\  rX   )r   gcrj  rectrh  trfkeycustom_clip_cmds           rU   _get_clip_cmdRendererPS._get_clip_cmd-  s   $$&KK<==499=>kJK$$&	C/C"..2237O&"'#d.>.>*?"?$$ * D. / 0&  )8  %KK?+2./wwt}r[   c                    UR                   S S u  pgSnUS S S2S S 2S S24   n	U	R                  5       R                  SS5      n
Uc  SnXpR                  -  nX`R                  -  nO?SR	                  [        [        UR                  5       R                  5       5      5      nS	nS	nU R                  R                  S
U R                  U5       SUS SUS SU SUS SUS SUS SUS SUS SUS SUS SUS SU SU
 S35        g )Nr:  zfalse 3 colorimager   r*  r}   z1 0 0 1 0 0rK   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tobytesr   r  rX   r   r   frozen	to_valuesr   r   rx  )r   rs  xyimri  hwimagecmddatahexdatamatrixxscaleyscales                 rU   
draw_imageRendererPS.draw_imageC  sS    xx|'$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                     US L =(       a    UR                  5       S L nUR                  =(       a    UnU R                  X#XVS9nU R                  XqU5        g )Nrj  r[  )get_hatch_pathshould_simplifyr\  _draw_ps)r   rs  rh  ri  rgbFacerj  r[  pss           rU   	draw_pathRendererPS.draw_pathd  sS     $>2#4#4#6$#>''0DdNbg&r[   c                    U R                  U5      (       a  S O7US   US   s=:X  a	  US   :X  a  O  O[        US   5       S3O[        US S 6  S3n/ SQnUR                  5       n	UR                  5       (       d  [	        UR                  5       5      S:X  a  UR                  5       OUR                  5       S   n
U	S:  =(       a    U
S:  nU(       ap  UR                  SU	-  5        UR                  U R                  UR                  5       5      5        UR                  U R                  UR                  5       5      5        UR                  U R                  X#S	S
95        U(       aJ  U(       a  UR                  S5        U(       a  UR                  US/5        U(       a  UR                  S5        U(       a  UR                  S5        UR                  SS/5        UR                  USSU R                  S-  U R                   S-  4S	S9 H7  u  p[	        U5      (       d  M  USS  u  pUR                  US SUS S35        M9     SR#                  U5      nU R%                  UXS	S	S9  g )Nr   r   r:  z setgrayr*  z setrgbcolor)z/o {gsavenewpath	translatez%.1f setlinewidthFrZ  r  fillgrestorestrokez
} bind defr  r  r   rK   z or}   r  r  )r,  rZ   get_linewidthget_forced_alphar   get_rgb	get_alphar   r?  get_joinstylerG  get_capstyler\  extenditer_segmentsr$  r%  rX   r  )r   rs  marker_pathmarker_transrh  transr  ps_colorps_cmdlwalphar  verticescoder  r  r  s                    rU   draw_markersRendererPS.draw_markersl  s1    ##G,,  qzWQZ571:5 !,-X6 '"1+./|< 	 ;''))S->!-C jjl1o 	 a%EAIMM-23MM$,,R-=-=-?@AMM$++BOO,=>?d((27 ) 9 	: g&x01j)MM(#z<01"00DJJrM4;;r>: 1  NH 8}}}1Qqe2./  YYvb"E%@r[   c                    [        U5      S:  a  [        US   R                  5      OSnU R                  X4XWU5      nUSU-  -   S-   US-   U-  :  nU(       d  [        R                  " XX#UXVXxXXU5      $ / n[        U R                  X#U5      5       H^  u  nu  nnSU R                  U4-  nU R                  UUSS9nU R                  R                  SU SU S	35        UR                  U5        M`     U R                  UUXVXxXXU5       H(  u  nnnnnUS
 SUS
 SU 3nU R                  UUU5        M*     U =R                  S-  sl        g )Nr   r*  r:  zp%d_%dFrZ  rn   z {
newpath
translate
z
} bind def
r   rK   r   )r   r  _iter_collection_uses_per_pathr   draw_path_collectionr   _iter_collection_raw_pathsr  r\  r   r   r   _iter_collectionr  )r   rs  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_codesr   rh  ri  rw   
path_bytesxoyopath_idgc0r  r  s                                rU   r  RendererPS.draw_path_collection  s    .1Z!^3uQx(();;7
D q=((1,1/MM 	%44*>z	! ! 
$-d.M.M /9 %: A it77;;D++D)e+LJNN   &   	"  d#%: .2-B-BJ
O.5)BGS' q62a&'+BMM"c7+.5 	  A% r[   )mtextc          
      ,   U R                  UR                  5       5      (       a  g [        U S5      (       d'  U R                  S5        U R	                  XX4XVSU5        g U R                  XESS9u  pn
UR                  5       nSU R                  -  n[        UR                  5       S S SS	06nS
SS.R                  [        R                  S   S   S5      nX-  nSU< SU< 3n[        R                  " US-   5      n[        X*[        R                  " U5      -  -
  X:[        R                  " U5      -  -
  5      nU R                   R#                  SXXS-  U4-  5        U R$                  R'                  SU SU S35        U =R                  S-  sl        g )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*  rL   ,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      ?r|  z	 moveto
(z)
show
grestore
r   )r,  r  hasattrr#  	draw_textget_text_width_height_descentget_size_in_pointsr  rZ   r   r  r  rN  radianscossinr  r   r   r   )r   rs  r  r  r   propangler  r  r  blr  thetextr  fontcmdtexrangler   s                     rU   draw_texRendererPS.draw_tex  s    

--tX&&23
 NN2!UEB55ae5Lb**,-bjjl2A.8C8!2 13363||M2157H4J 	 K',a0 EBJ'1BFF6N22ARVVF^8K4KL>4-B> >	? 	 " 	  	 	r[   c	                    U R                  UR                  5       5      (       a  g US:X  a  U R                  XX4XV5      $ U(       a  U R                  XX4XV5      $ / n	[        R
                  S   (       a  U R                  U5      n
U
R                  R                  SS5      R                  S5      nSUR                  5       -  nSnS nU Hy  n[        R                  " [        U5      S[        U5      S 35      n U
R                  U5      nU
R#                  UU5      nUnUUU-  -  nU	R%                  XU45        UUU-  -  nM{     OU R'                  U5      n
U R(                  R+                  X5        [,        R.                  " XJ5       H{  nUR0                  R                  R                  SS5      R                  S5      nUR0                  R3                  UR4                  5      nU	R%                  UUR6                  U45        M}     U R8                  " UR                  5       6   [:        R<                  " U	S 5       H{  u  nnU R?                  XR                  5       S5        SRA                  S U 5       5      nU RB                  RE                  SU RG                  U5       SUS SUS SUS SU S35        M}     g ! [         a    S	nU
R!                  S
5      n GNf = f)Nr  r
  r|   replacegMbP?r   uni04Xquestion?c                     U S   $ )Nr   r   )entrys    rU   <lambda>&RendererPS.draw_text.<locals>.<lambda>&  s    eAhr[   Fr}   c              3   <   #    U  H  u  pnUS  SUS S3v   M     g7f)r   z 0 m /r   z
 glyphshowNr   )rS   r   r  rw   s       rU   rV   'RendererPS.draw_text.<locals>.<genexpr>(  s,       927JA$ $%Q%vd1XZ @27s   r|  r   rK    translate
 rotate
r}  )$r,  r  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_objectro   	glyph_idxr  r2  	itertoolsgroupbyrW  rX   r   r   rx  )r   rs  r  r  r   r  r  r  r  streamrq   ps_namer^  thisx	last_namer   rw   r$  kernitem
glyph_namegroupr  s                          rU   r  RendererPS.draw_text  s    

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

%' 68NGUMM'#:#:#<eDii  927 9 9GNN   &B  1Qqe q	 
	 
" 8'   5%D //4E5s   9J<<KKc                 \   U R                   R                  R                  USU5      u  pxpnU R                  " UR	                  5       6   U R
                  R                  SUS SUS SUS S35        SnU
 H  u  pnnnU R                  R                  X5        UR                  U4U:w  a:  UR                  U4nU R
                  R                  SUR                   SU S	35        [        U[        5      (       a  UR                  [        U5      5      OUR                  UR                  U5      5      nU R
                  R                  US SUS S
U S35        M     U H/  u  nnnnU R
                  R                  U SU SU SU S35        M1     U R
                  R                  S5        g)z-Draw the math text using matplotlib.mathtext.r  r|  r   rK   r  r  Nrn   rV  z	 moveto
/z glyphshow
z
 rectfill
	grestore
)
_text2pathmathtext_parserparser2  r  r   r   r!  track_glyphr   
isinstancer
   get_name_charr   ro   r~   )r   rs  r  r  r   r  r  r$  r%  descentglyphsrectslastfontrq   r  numoxoyr	  r  r  s                        rU   r  RendererPS.draw_mathtext3  s    OO++11!R> 	.w

%e1QqEQiy"	# +1'DCR##//:$$h/8;//9$$,,-QxjFH 1;40E0E""3s8,##D$7$7$<=  NN  a&"Q  <|-. ,2 "LBAqNN  B4qAaS!K!@A "\*r[   c                    [        U5      [        U5      :X  d   e[        U5      S:X  a  g UR                  S:X  d   eUR                  S   S:X  d   eUR                  S   S:X  d   eUR                  S:X  d   eUR                  S   S:X  d   eUR                  S   S:X  d   eUR                  nUR                  US   US   -  S45      nUR	                  U5      nUR                  US   US   -  S45      n[
        R                  " USS9S-
  n[
        R                  " USS9S-   n	[
        R                  " SX-
  -  5      n
Uu  pU	u  p[
        R                  " US   US   -  / S	QS
9nSUS'   Xh-
  U
-  US'   US S 2S S24   S-  US'   UR                  5       R                  SS5      nU R                  R                  SUS SUS SUS SUS SU S35        g )Nr   r*  r   r:  r   )axisi   l    ))flagsu1)pointsz2>u4)colors3u1)dtyper  r   g     o@r!  r}   r{  zgsave
<< /ShadingType 4
   /ColorSpace [/DeviceRGB]
   /BitsPerCoordinate 32
   /BitsPerComponent 8
   /BitsPerFlag 8
   /AntiAlias true
   /Decode [ r   rK   z  0 1 0 1 0 1 ]
   /DataSource <
z
>
>>
shfill
grestore
)r   ndimr~  reshaperi  rN  minmaxceilemptyr  r   r   r   )r   rs  r   r!  r  r~  flat_pointsflat_colors
points_min
points_maxfactorxminyminxmaxymaxr  r  s                    rU   draw_gouraud_triangles!RendererPS.draw_gouraud_trianglesN  s   6{c&k)))v;!{{a||A!###||A!###{{a||A!###||A!###nneAhq&91%=>ook2nneAhq&91%=>VVKa0G<
VVKa0G<
+**ABC

xx!HuQxJL W%2f<X$QU+e3X,,.$$T3/ " 1XQtAhaQxqa 1	 
 	r[   r  c                f   U R                   R                  nUR                  5       S:  =(       a$    U R                  UR	                  5       5      (       + nU(       d  SnU R                  U5      (       a  SnUR                  5       nU(       az  U R                  UR                  5       5        U R                  UR                  5       5        U R                  UR                  5       5        U R                  " UR                  5       6   U(       d  U(       a   U R                  " UR	                  5       SS 6   U" S5        U" U R                  U5      5        U" UR                  5       5        U" S5        U(       aI  U(       d  U(       a  U" S5        U R                  " USS SS06  U" S5        U(       d  U(       a  U" S	5        U(       aR  U R!                  XR#                  5       5      n	U" S5        U" [%        UR'                  5       SS 6 5        U" S
U	 S35        U(       a  U" S5        U" S	5        g)aD  
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*  r|  r}   r1  zfill
r  rK   z setpattern fill grestore
zstroke
)r   r   r  r,  r  	get_hatchr7  rB  r  rJ  r  rS  
get_dashesr2  rx  stripra  get_hatch_linewidthrZ   get_hatch_color)
r   r  rs  r  r  r  r   mightstroker]  
hatch_names
             rU   r  RendererPS._draw_ps~  s    $$'')A- B#33BJJLAA 	F((Dr//12b..01R__./r}}/%NNBJJL!,-id  $%bhhjdi NNGBQK5u5(Ol#**52H2H2JKJ), 2 2 4Ra 89:Aj\!<=>*lr[   )r!  r  r  r#  r  r   r  r  r  r  r  r  r  r  r  r  r  )r  )T)FNr   )$r   
__module____qualname____firstlineno____doc__r   _get_data_path_afm_font_dir_use_afm_rc_namer  r,  r2  r7  staticmethodr?  rB  rG  rJ  rS  rW  ra  re  r\  rx  r  r  r  r  r  r  r  r  r3  r  __static_attributes____classcell__r'  s   @rU   r	  r	    sE   
 ((5M";6'+ - -) + +'
*)@(E,  @ ' ' FJ2A 2Ah *& *&X :> ' 'R 8 8t + +4 - -^ 15T 1 1r[   r	  c                   0    \ rS rSr\" S5      u  rrS rSrg)_Orientationi  r:  c                 6    U R                   S:X  a  US S S2   $ U$ )N	landscaper   )rw   )r   r~  s     rU   swap_if_landscape_Orientation.swap_if_landscape  s     "ii;6uTrT{AEAr[   r   N)	r   r>  r?  r@  r   portraitrL  rM  rF  r   r[   rU   rJ  rJ    s    (HiBr[   rJ  c                      ^  \ rS rSrSrSSS.rS rSSSSS	.S
 jrSS.S jrSS.S jr	\
R                  " \S5      r\
R                  " \S5      rU 4S jrSrU =r$ )FigureCanvasPSi  r  
PostscriptzEncapsulated Postscript)r  epsc                     g)Nr  r   rd  s    rU   get_default_filetype#FigureCanvasPS.get_default_filetype  s    r[   NrO  )metadata	papertypeorientationbbox_inches_restorec          	      *   U R                   R                  nSU R                   l        0 n	[        U[        [        R
                  45      (       aD  [        R                  " U5      R                  n
U
R                  SS5      R                  S5      U	S'   U=(       d    0 R                  SS[        R                   S35      U	S'   [        R                  " S5      nU(       aP  [        R                  R!                  [#        U5      [        R$                  R&                  5      R)                  S	5      O[*        R,                  " 5       U	S
'   SR/                  S U	R1                  5        5       5      n	Uc  [        R2                  S   nUR5                  5       n[6        R8                  " S/[:        QUS9  [6        R<                  " [>        UR5                  5       S9n[        R2                  S   (       a  U R@                  OU RB                  nU" X4XXTUS.UD6  g )Nr  r|   r  TitleCreatorzMatplotlib vz, https://matplotlib.org/SOURCE_DATE_EPOCHz%a %b %d %H:%M:%S %YCreationDater}   c              3   6   #    U  H  u  pS U SU 3v   M     g7f)z%%z: Nr   )rS   kr   s      rU   rV   +FigureCanvasPS._print_ps.<locals>.<genexpr>  s"      !<&:dab2aSM&:s   zps.papersizefigure)rX  )rY  r  )dpidsc_commentsrY  rX  rZ  )"rc  rd  r  r   r   PathLikepathlibr   rw   r  r   r   r  __version__getenvdatetimefromtimestampinttimezoneutcstrftimetimectimerX   itemsr  lowerr   check_in_list	papersizecheck_getitemrJ  _print_figure_tex_print_figure)r   fmtoutfilerW  rX  rY  rZ  r  rd  re  filenamesource_date_epochprinters                rU   	_print_psFigureCanvasPS._print_ps  s   
 kkoogR[[12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%	H1y1YG((k&7&7&9; ll=1 ))%% 	 	 	C#'$7	C;A	Cr[   rZ  c                  ^ ^^^^^^^^^^^ US:H  m[        U[        [        R                  45      (       d  [	        U5      (       d  [        S5      eT R                  R                  5       u  mmT(       d  TS:X  a  TTpOTR                  [        T   5      u  pSUT-
  -  mSU	T-
  -  mTn
TnU
T R                  R                  R                  -   nUT R                  R                  R                  -   nSmT[        R                  L a  XX4u  ppSU	-  T-
  TsmmSmXX4m[        5       T l        [#        TTT R                   US9m[%        T R                  TTUTUS	9nT R                  R'                  U5        UUUUUUUUU UUU4S
 jn[(        R*                  S   (       a  [-        5        n[        R.                  R1                  US5      n[3        USSS9 nU" U5        SSS5        [(        R*                  S   S:X  a  [5        [6        UTTTS9  O([(        R*                  S   S:X  a  [5        [8        UTTTS9  [;        UU5        SSS5        g[<        R>                  " USSS9 n[A        U5      (       d  [B        RD                  " S5      " U5      nU" U5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f! , (       d  f       g= f)z
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`.
rS  z,outfile must be a path or a file-like objectrc  g      B@r   r  r  r  r  c           
        > T(       a  [        SU S9  O'[        SU S9  T
S:w  a  [        ST
 3U S9  [        SU S9  [        ST ST	R                   S	[        T5       S
3SU S9  [        [        5      n[        SU S9  [
        R                  S   (       d"  U[        TR                  R                  5      -  n[        SU-  U S9  [        SU S9  [        S	R                  [        5      U S9  [
        R                  S   (       d  TR                  R                  R                  5        Hp  u  p#U(       d  M  [
        R                  S   n[        U5      S:  a  SnU R                  5         US:X  a  U R                  [        X#5      5        Md  [        X#U 5        Mr     [        SU S9  [        SU S9  T(       d
  [        SU S9  [        SU S9  [        S[        TT5      -  U S9  T(       a  [        ST-  U S9  [        S[        TS-  TS-  5       S3U S9  [        TR                   R#                  5       U S9  [        SU S9  [        SU S9  T(       d
  [        SU S9  U R                  5         g )Nz%!PS-Adobe-3.0 EPSF-3.0)filez%!PS-Adobe-3.0rc  z%%DocumentPaperSizes: z
%%Pages: 1z%%LanguageLevel: 3
z
%%Orientation: r}   z
%%EndComments
r   )endr  z%%BeginPrologr
  z/mpldict %d dict defzmpldict beginzps.fonttype   *   r*  r  z%%EndPrologz%%Page: 1 1z%s translatez	%d rotatez0 0 r  z	 rectclipshowpagez%%EOF)printrw   _get_bbox_headerr   _psDefsr  r  r!  usedrX   rr  flushr   r   r   rZ   r   r   )ri   Ndictr   r   fonttyperu   re  r%  is_epsrY  rX  ps_rendererrotationr   r$  r  r  s        rU   print_figure_impl7FigureCanvasPS._print_figure.<locals>.print_figure_impl  s'   /b9&R0(29+>RHl,(!N #$$/$4$4#5R%d+, -$%
 r# LE/+<<,[;;@@AA(50r:/+$))G$2.<<,&99>>DDF %I  "||M:H5zC'#%HHJ1}!29!DE*9R@ G %b!-b)m"-/+.<B#77bAkH,26DeBhr	:;9EBO $..))+"5 %b!*2&gB'HHJr[   ps.usedistillertmp.psr  r]   r^   Nghostscript)ptyperu   xpdf)#r  r   r   rf  r   
ValueErrorrc  get_size_inchesrM  ru  ru   r$  r%  rJ  rL  r   r   r	  r   r   r  r  r   rh  rX   rb   _try_distill
gs_distillxpdf_distillrj   r   open_file_cmr   codecs	getwriter)r   ry  rz  rd  re  rY  rX  rZ  paper_widthpaper_heightllxllyurxuryrendererr  tmpdirtmpfileri   r  ru   r%  r  r  r  r$  r  r  s   `   ```             @@@@@@@@rU   rx  FigureCanvasPS._print_figure  s    7S"++$677(11KLL 335vY(*(-v(3(E(E)$)&%K u,-./DKK$$***DKK$$+++,000!$3!3Cc,&+RFBH##! !M$KK[ 35 	"9	 9	 9	v <<)* $%'',,vx8'3;r%b) <<< 12mC !(&	N\\"34> !(&	N,Wg> &% ##GS9E,T22!++I6t<D!$' FE <; &% FEs1   ,,J4	J#!A%J4%5K#
J1	-J44
K
Kc                   US:H  nU R                   R                  5       u  pSnSnUnUnXR                   R                  R                  -   nXR                   R                  R                  -   nXUU4n[        5       U l        [        XU R                  US9n[        U R                   XUUUS9nU R                   R                  U5        [        5        n[        R                  " US5      nUR                  SU S[        U5       S[        [         5       S	S
R#                  [         5       S[%        X5       S[%        U	S-  U
S-  5       SU R                  R'                  5        S3SS9  U[(        R*                  L a  XpXUU4nU(       d  US:X  a-  UR-                  U R                   R                  5       5      u  nnO[.        U   u  nn[1        UUR2                  UUUR4                  5      n[6        R8                  S   S:X  d  [6        R8                  S   (       a  [;        [<        UXUUS9  O([6        R8                  S   S:X  a  [;        [>        UXUUS9  [A        UU5        SSS5        g! , (       d  f       g= f)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`.
rS  r   r  r  r  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  rm  z
end
showpage
r]   r^   rc  r  r  r  )r  ru   rotatedr  N)!rc  r  ru   r$  r%  r   r   r	  r   r   r   rg  r   
write_textr  r   r  rX   rZ   r   rJ  rL  rM  ru  _convert_psfragsr  rw   r  r  r  r  r  rj   )r   ry  rz  rd  re  rY  rX  rZ  r  r$  r%  r  r  r  r  r  r  ru   r  r  r  tmppathr  r  psfrag_rotateds                            rU   rw   FigureCanvasPS._print_figure_texl  sw    335KK$$***KK$$+++#s#! !M$T[[%*C9LN 	"  !Vll684G  $  
 g,    b  %(F2I&' (  & #)  $, l444 &v#s+
 h.,7,I,IKK//1-3)\ -6i,@)\-++[,  "N ./=@||M2Z$fD%35 /0F:\$fD%35 )':g "!!s   FI,,
I:r  rS  c                 T   > U R                   R                  5         [        TU ]  5       $ r   )rc  draw_without_renderingr  r   )r   r'  s    rU   r   FigureCanvasPS.draw  s    **,w|~r[   )r   )r   r>  r?  r@  	fixed_dpi	filetypesrU  r~  rx  rw  r  partialmethodprint_ps	print_epsr   rF  rG  rH  s   @rU   rQ  rQ    su    I#13I
 Tz $(CZ !%(H !%U;n &&y$7H''	59I r[   rQ  c           	      j   [         R                  " S[         R                  S   [         R                  R	                  S5      -   [         R                  R	                  S5      -   [         R                  R	                  S5      -   SX#S.-  -   05         [        5       R                  SSR                  U5      US	:X  a  S
OSU R                  5       R                  5       S.-  SS9nSSS5        [        5        n[        R                  R                  US5      n[        R                  " SSSSUW/[        5        [         R"                  " Xp5        SSS5        [%        U 5       nSUR'                  S5      ;   n	SSS5        U	$ ! , (       d  f       N= f! , (       d  f       NI= f! , (       d  f       W	$ = f)aR  
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}   rL  r  r   )psfragsr  epsfile
   )r  Nr  dvipsz-qz-R0z-o	Landscapei  )r  
rc_contextr  
texmanager_usepackage_if_not_loadedr   make_dvirX   resolveas_posixr   r   rh  r   _check_and_log_subprocessr   rc   re   rb   read)
r  r  r  r  rY  dvifiler  psfileri   r  s
             rU   r  r    s}    
!LL./NN44W=>NN44Z@A NN44X>? J#<=	= 
 ,''  99W-*k9q"??,557
  ( 
. 
	fh/''dE494	AF$	 
 
g"$5 
M
 
. 
	 
s&   AF7AF"F#
F
F #
F2c                      U " [        U5      /UQ70 UD6  g ! [        R                   a   n[        R	                  SU5         S nAg S nAff = f)Nz%s.  Distillation step skipped.)r   r  ExecutableNotFoundErrorr   r   )funcr  rY   r  excs        rU   r  r    sE    =S\+D+F+&& =6<<=s    AAAc                    U(       a  S/nOUS:X  a  SUS    3SUS    3/nOSU 3/nU S-   n[         R                  S	   n[        R                  " [         R                  " S
5      R
                  SSSU-  S/UQSU 3PU P[        5        [        R                  " U 5        [        R                  " X`5        U(       a  [        XUS9  gg)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.
	-dEPSCroprc  z-dDEVICEWIDTHPOINTS=r:  z-dDEVICEHEIGHTPOINTS=r*  z-sPAPERSIZE=z.pszps.distiller.resr   z-dBATCHz	-dNOPAUSEz-r%dz-sDEVICE=ps2writez-sOutputFile=)r  N)r  r  r   r  _get_executable_info
executabler   r   removerc   re   pstoeps)r  rS  r  ru   r  paper_optionr  rd  s           rU   r  r    s     #}	(	 /tAwi8/Qy9; 'ug./u_F
,,)
*C	##		!	!$	'	2	2	K#/B	;
	;'x0	;29	; 		 IIg
KK   	w/ r[   c           	      0   [         R                  " S5        [         R                  " S5        U(       a  S/nOUS:X  a  SUS    3SUS    3/nOS	U 3/n[        5        n[        R                  " US
5      n[        R                  " US5      n[
        R                  " SSSSSS/UQU PUP[        5        [
        R                  " SSSSXx/[        5        [        R                  " X5        SSS5        U(       a  [        U 5        gg! , (       d  f       N"= f)z
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  rc  z-dDEVICEWIDTHPOINTS#r:  z-dDEVICEHEIGHTPOINTS#r*  z-sPAPERSIZE#ztmp.pdfr  ps2pdfz-dAutoFilterColorImages#falsez-dAutoFilterGrayImages#falsez-sAutoRotatePages#Nonez-sGrayImageFilter#FlateEncodez-sColorImageFilter#FlateEncodez-papermatchz-level3N)r  r  r   rg  r   r   r  r   rc   re   r  )	r  rS  r  ru   r  r  r  tmppdftmppss	            rU   r  r  *  s'    T"Y'
#}	(	 /tAwi8/Qy9; 'ug./		fi0VX. 	'',+%,-     $	% 	'''9fDd	LE#! 
"  # 
	s   BD
Dz3.9c                 B    [        U 5      U(       a  [        U 5      4$ S4$ )zl
Return a postscript header string for the given bbox lbrt=(l, b, r, t).
Optionally, return rotate command.
r   )r  _get_rotate_command)lbrtr  s     rU   get_bbox_headerr  S  s$     D!$7$=QQbQQr[   c                     U u  pp4S[        U5       S[        U5       S[        R                  " U5       S[        R                  " U5       SUS SUS SUS SUS 3$ )zGReturn a PostScript header string for bounding box *lbrt*=(l, b, r, t).z%%BoundingBox: rK   z
%%HiResBoundingBox: z.6f)rl  mathr(  r  lr0  r/  ts        rU   r  r  \  sm    JA!c!fXQs1vha		!~Qtyy|n M##$S'1S'1S'1S'C Dr[   c                 $    U u  pp4X-   S SSS S3$ )uO   Return a PostScript 90° rotation command for bounding box *lbrt*=(l, b, r, t).z.2frK   r   z translate
90 rotater   r  s        rU   r  r  c  s%    JA!c#Ya#w344r[   c                 D   U S-   n[        US5       n[        U S5       nUR                  nU H  nUR                  S5      (       a6  U" S5        U(       a%  U" [        U5      R	                  S5      S-   5        MM  MO  UR                  S5      (       a<  U" U5        U" S	5        U(       a#  U" [        U5      R	                  S5      S-   5          O+U(       a  UR                  S
5      (       a  M  U" U5        M     U HC  nUR                  S5      (       a
  U" S5        M#  UR                  S5      (       a  M;  U" U5        ME     SSS5        SSS5        [        R                  " U 5        [        R                  " X05        g! , (       d  f       NC= f! , (       d  f       NL= f)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.
z.epswbr`   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)
rb   r   
startswithr  r  r  r   r  rc   re   )r  ru   r  r  epshtmphr   lines           rU   r  r  i  s]    G	gt	d7D&9T

Dw''23*4077@5HI !122d & ' -d3::7CeKL$// +K L Ld/ 6 Dx(( ! " !566d = ':	V IIg
KK!Y ':&9		s#   FD$F F 
F	
F
F)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                       \ rS rSrSr\rSrg)
_BackendPSi  zLevel IIr   N)r   r>  r?  r@  backend_versionrQ  FigureCanvasrF  r   r[   rU   r  r    s     O!Lr[   r  )Fr   NF)F)NF)WrA  r   r  rj  enumr   r  ior   r  loggingr  r   rg  rc   r   tempfiler   r   rp  r   numpyrN  
matplotlibr  r   r   r   r	   matplotlib._afmr
   matplotlib.backend_basesr   r   r   r   matplotlib.cbookr   r   matplotlib.font_managerr   matplotlib.ft2fontr   matplotlib._mathtext_datar   matplotlib.pathr   matplotlib.texmanagerr   matplotlib.transformsr   !matplotlib.backends.backend_mixedr   r   r   	getLoggerr   r   r   ru  rZ   rj   r   r   r   r   r   r   r   r  RendererPDFPSBaser	  rJ  rQ  r  r  r  r  
deprecatedr  r  r  r  FigureManagerPSr  exportr  r   r[   rU   <module>r     s]            	    '      8 8 A A I , ( /   , * ?  "
"Xy "i"x" >" >	"
 >" >" =" <" <" <" <" <" L" >" >"  >!"" "!  1"	6   K= N5b!H-`( V&20 @Fa22 aHB4 BO% Od.b=$0N&R R RD54"n $. 
" " "r[   