
    
3j                    D   S r SSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
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rSSKrSSKrSSKJr  SSKrSS	KJrJrJrJrJr  SS
KJ r   SSK!J"r"J#r#J$r$J%r%J&r&  SSK'J(r(  SSK)J*r*  SSK+J,r,J-r-J.r/  SSK0J1r1  SSK2J3r3J4r4J5r5J6r6  SSK7J8r8J9r9  SSK:J;r;  SSK<J=r=  SSKJ>r>  SSK?J@r@  \R                  " \B5      rCS;S jrDS rES rFS<S jrGS<S jrHS<S jrI\JR                  SSSS S!S".5      rLS# rM " S$ S%5      rN\ " S& S'5      5       rO " S( S)5      rP " S* S+\5      rQ " S, S-5      rRS. rS " S/ S05      rT " S1 S2\@R                  5      rV " S3 S4\%5      rW " S5 S65      rX " S7 S8\#5      rY\$rZ\"R                   " S9 S:\"5      5       r\g)=uO   
A PDF Matplotlib backend.

Author: Jouni K Seppänen <jks@iki.fi> and others.
    N)timezone)datetime)Enum)total_ordering)BytesIO)Image)_api_text_helpers
_type1fontcbookdviread)Gcf)_BackendFigureCanvasBaseFigureManagerBaseGraphicsContextBaseRendererBase)MixedModeRenderer)Figure)FontPathget_fontfontManager)AFM)FT2Font	FaceFlags	LoadFlags
StyleFlags)Affine2DBboxBase)Path)UTC)_path   )_backend_pdf_psc                     SnSn/ n[        U 5       HG  u  pV[        U5      nX'-   U:  a	  X'S-   -  nM!  UR                  SR                  XU 5      5        UnUnMI     UR                  SR                  XS 5      5        SR                  U5      $ )z
Make one string from sequence of strings, with whitespace in between.

The whitespace is chosen to form lines of at most *linelen* characters,
if possible.
r   r#       N   
)	enumeratelenappendjoin)stringslinelencurrposlastiresultislengths           Y/home/wildlama/miniconda3/lib/python3.13/site-packages/matplotlib/backends/backend_pdf.py_fillr5   ^   s     GEF'"Qg%z!GMM$))G!$456EG # MM$))GFO,-::f    c           
         [         R                  " S5      nU(       aB  [        R                  " [	        U5      [
        R                  5      nUR                  [        S9nO[        R                  " 5       nS[        R                   S3SU  S[        R                   3US.UEnUR                  5        VVs0 s H  u  pVUc  M
  XV_M     nnnS nS	Ul        S
 nSUl        S n	SU	l        UUUUUUUUU	S.	n
U Ht  nXZ;  a*  [        R                  " SU< S[!        U
5      < S35        M2  X   " XE   5      (       a  ME  [        R                  " SU SXE   < SX   R                   S35        Mv     SU;   a  [#        US   5      US'   U$ s  snnf )a  
Create a PDF infoDict based on user-supplied metadata.

A default ``Creator``, ``Producer``, and ``CreationDate`` are added, though
the user metadata may override it. The date may be the current time, or a
time set by the ``SOURCE_DATE_EPOCH`` environment variable.

Metadata is verified to have the correct keys and their expected types. Any
unknown keys/types will raise a warning.

Parameters
----------
backend : str
    The name of the backend to use in the Producer value.

metadata : dict[str, Union[str, datetime, Name]]
    A dictionary of metadata supplied by the user with information
    following the PDF specification, also defined in
    `~.backend_pdf.PdfPages` below.

    If any value is *None*, then the key will be removed. This can be used
    to remove any pre-defined values.

Returns
-------
dict[str, Union[str, datetime, Name]]
    A validated dictionary of metadata.
SOURCE_DATE_EPOCH)tzinfozMatplotlib vz, https://matplotlib.orgzMatplotlib z
 backend v)CreatorProducerCreationDatec                 "    [        U [        5      $ N)
isinstancestrxs    r4   is_string_like-_create_pdf_info_dict.<locals>.is_string_like   s    !S!!r6   zan instance of strc                 "    [        U [        5      $ r>   )r?   r   rA   s    r4   is_date&_create_pdf_info_dict.<locals>.is_date   s    !X&&r6   z an instance of datetime.datetimec                 T    [        U [        5      (       a  U R                  S;   $ U S;   $ )N)s   Trues   Falses   Unknown)TrueFalseUnknownr?   NamenamerA   s    r4   check_trapped,_create_pdf_info_dict.<locals>.check_trapped   s+    a66<<<444r6   z#one of {"True", "False", "Unknown"})	TitleAuthorSubjectKeywordsr:   r;   r<   ModDateTrappedzUnknown infodict keyword: z. Must be one of .zBad value for infodict keyword z. Got z which is not rV   )osgetenvr   fromtimestampintr   utcreplacer!   todaympl__version__itemstext_for_warningr	   warn_externalsetrM   )backendmetadatasource_date_epochsource_dateinfokvrC   rF   rO   keywordss              r4   _create_pdf_info_dictrm   t   s   @ 		"56,,S1B-CX\\R!)))5nn& "#//!22JK!'*S__4EF# 	D  $zz|=|VaqDAD|D="&:N#'AG5
 &KM"   !"!" 
H !;A5 A114X0A D ETW%%!@ D&&*g["*+">">!?q B C  DtI/YKO >s   6	F	F	c                 B   U R                  S5      nU R                  5       nUb  UR                  nO6[        R                  (       a  [        R
                  nO[        R                  nUS:X  a  US-  nU$ US:  a  USU* S-  U* S-  4-  -  nU$ USUS-  US-  4-  -  nU$ )zL
Convert a datetime to a PDF string representing it.

Used for PDF and PGF.
zD:%Y%m%d%H%M%Sr   Zz+%02d'%02d'i  z-%02d'%02d')strftime	utcoffsetsecondstimedaylightaltzoner   )drzs      r4   _datetime_to_pdfry      s     	


#$A	A}II==AAAv	S
 H	 
Q	]rdlaR4K888 H 	
]a4iT222Hr6   c                    [         R                  " U* 5      n[         R                  " U5      n[         R                  " U5      nXU-  -   nXU-  -   nXU-  -   X5-  -   n	XU-  -
  X6-  -   n
XU-  -   nXU-  -
  nX4X4X4Xx44$ )zJ
Calculate the coordinates of rectangle when rotated by angle around x, y
)mathradianssincos)rB   ywidthheightangle	sin_angle	cos_angleabcrv   efs                r4   !_calculate_quad_point_coordinatesr      s    
 LL% EII	YA	YA	I 22A	I 22A	IA	IAFQFQFQF++r6   c                 8   [        XUX45      nUS-  (       a  SOSn[        S U 5       5      U-
  n[        S U 5       5      U-
  n[        S U 5       5      U-   n	[        S U 5       5      U-   n
[        [        R
                  R                  U5      5      XxX44$ )z[
Get the coordinates of rotated rectangle and rectangle that covers the
rotated rectangle.
Z   gh㈵>r   c              3   *   #    U  H	  oS    v   M     g7fr   N .0rk   s     r4   	<genexpr>,_get_coordinates_of_block.<locals>.<genexpr>       'h!h   c              3   *   #    U  H	  oS    v   M     g7fr#   Nr   r   s     r4   r   r     r   r   c              3   *   #    U  H	  oS    v   M     g7fr   r   r   s     r4   r   r     r   r   c              3   *   #    U  H	  oS    v   M     g7fr   r   r   s     r4   r   r     r   r   )r   minmaxtuple	itertoolschainfrom_iterable)rB   r   r   r   r   verticespadmin_xmin_ymax_xmax_ys              r4   _get_coordinates_of_blockr      s     1u17@H RZ'QC'h''#-E'h''#-E'h''#-E'h''#-E)////9:5(* *r6   c                     [        XX4U5      u  pg[        S5      [        S5      U/ SQ[        S5      U R                  5       S.S.nUS-  (       a  XhS'   U$ )	z5
Create a link annotation object for embedding URLs.
AnnotLinkr   r   r   URI)Sr   )TypeSubtypeRectBorderAr   
QuadPoints)r   rM   get_url)	gcrB   r   r   r   r   
quadpointsrectlink_annotations	            r4   _get_link_annotationr     s\     1ueLJW<e::<
	O rz(2%r6   z\\z\(z\)z\nz\r)\()
c                    [        U S5      (       a  U R                  5       $ [        U [        [        R
                  45      (       aK  [        R                  " U 5      (       d  [        S5      eSU -  nUR                  S5      R                  S5      $ [        U [        5      (       a  SS/U    $ [        U [        [        R                  45      (       a  SU -  $ [        U [        5      (       aU  [        U R                  5       (       a  U R                  S	5      5      $ [        R                   U R                  S
5      -   5      $ [        U ["        5      (       a9  SU R%                  S5      R'                  [(        5      R                  S5      -   S-   $ [        U [*        5      (       aY  [-        S/U R/                  5        VVs/ s H-  u  p#[1        U5      R                  5       S-   [        U5      -   PM/     snnQSP5      $ [        U [2        [4        45      (       a*  [-        S/U  Vs/ s H  n[        U5      PM     snQSP5      $ U c  g[        U [6        5      (       a  [        [9        U 5      5      $ [        U [:        5      (       a/  [-        U R<                   Vs/ s H  n[        U5      PM     sn5      $ [?        S[A        U 5       S35      es  snnf s  snf s  snf )z!Map Python objects to PDF syntax.pdfReprz%Can only output finite numbers in PDFs   %.10f   0   .s   falses   trues   %dasciizUTF-16BE   (latin-1   )s   <<r&   s   >>   [   ]s   nullz$Don't know a PDF representation for z objects)!hasattrr   r?   floatnpfloatingisfinite
ValueErrorrstripboolr[   integerr@   isasciiencodecodecsBOM_UTF16_BEbytesdecode	translate_str_escapesdictr5   ra   rM   listr   r   ry   r   bounds	TypeErrortype)objrw   rj   rk   vals        r4   r   r   *  s    sI{{}
 
C%-	.	.{{3DEEsNxx~$$T** 
C		'"3'' 
C#rzz*	+	+s{ 
C		ckkmmszz'* J 	J"//#**Z2HHJ 	J 
C		JJy!++L9@@KL	 
C		
@C		Ld1goo$&3L
 
  	 
C$	'	'dAc:csgclc:ADABB 
 
C	"	"',-- 
C	"	"cjj9jsgclj9:: >tCyk J" " # 	#+ M ; :s   ?4K$K
Kc                   0    \ rS rSrSrS rS rS rS rSr	g)		Referenceis  zJ
PDF reference object.

Use PdfFile.reserveObject() to create References.
c                     Xl         g r>   idselfr   s     r4   __init__Reference.__init__z  s    r6   c                      SU R                   -  $ )Nz<Reference %d>r   r   s    r4   __repr__Reference.__repr__}  s    $''))r6   c                      SU R                   -  $ )Ns   %d 0 Rr   r   s    r4   r   Reference.pdfRepr  s    477""r6   c                 x    UR                   nU" SU R                  -  5        U" [        U5      5        U" S5        g )N	   %d 0 obj
s   
endobj
)writer   r   )r   contentsfiler   s       r4   r   Reference.write  s1    

mdgg%&gh mr6   r   N)
__name__
__module____qualname____firstlineno____doc__r   r   r   r   __static_attributes__r   r6   r4   r   r   s  s    *#r6   r   c                       \ rS rSrSrSr1 \" S5      k1 \" \" S5      \" S5      S-   5      k-
   V Vs0 s H	  nUSU-  _M     snn rS	 r	S
 r
S rS rS rS rS rSrgs  snn f )rM   i  zPDF name object.rN      !~r#   z#%02xc                     [        U[        5      (       a  UR                  U l        g [        U[        5      (       a  UR	                  S5      nUR                  U R                  5      R                  S5      U l        g )Nr   )r?   rM   rN   r   r   r   _hexifyr   )r   rN   s     r4   r   Name.__init__  sT    dD!!		DI$&&{{7+t||4;;GDDIr6   c                      SU R                   -  $ )Nz	<Name %s>r   r   s    r4   r   Name.__repr__  s    TYY&&r6   c                 >    SU R                   R                  S5      -   $ )N/r   )rN   r   r   s    r4   __str__Name.__str__  s    TYY%%g...r6   c                 b    [        U[        5      =(       a    U R                  UR                  :H  $ r>   rL   r   others     r4   __eq__Name.__eq__  s!    %&B499

+BBr6   c                 b    [        U[        5      =(       a    U R                  UR                  :  $ r>   rL   r
  s     r4   __lt__Name.__lt__  s!    %&A499uzz+AAr6   c                 ,    [        U R                  5      $ r>   )hashrN   r   s    r4   __hash__Name.__hash__  s    DIIr6   c                      SU R                   -   $ )N   /r   r   s    r4   r   Name.pdfRepr  s    diir6   N)r   r   r   r   r   	__slots__rangeordr  r   r   r  r  r  r  r   r   r   r   s   00r4   rM   rM     s    I%%*(H%C#c(Q,*G(HHJH1 'A+~HJGE'/CB 5Js   ArM   c                   $    \ rS rSrSrS rS rSrg)Verbatimi  zEStore verbatim PDF command content for later inclusion in the stream.c                     Xl         g r>   _x)r   rB   s     r4   r   Verbatim.__init__  s    r6   c                     U R                   $ r>   r  r   s    r4   r   Verbatim.pdfRepr  s    wwr6   r  N)r   r   r   r   r   r   r   r   r   r6   r4   r  r    s    Or6   r  c                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S) r+\,S* 5       r-S+r.g,)-Opi  z'PDF operators (not an exhaustive list).   b   B   f   h   s   S   ns   BTs   ET   cs   re   l   ms   cms   Do   G   gs   RGs   rgs   CSs   css   SCNs   scn   d   j   Js   gs   q   Qs   Tds   Tfs   Tms   Tss   Tjs   TJ   w   Ws   shc                     U R                   $ r>   )valuer   s    r4   r   
Op.pdfRepr  s    zzr6   c                     U(       a  U(       a  U R                   $ U R                  $ U(       a  U R                  $ U R                  $ )z
Return the PDF operator to paint a path.

Parameters
----------
fill : bool
    Fill the path with the fill color.
stroke : bool
    Stroke the outline of the path with the line color.
)fill_strokestrokefillendpath)clsr?  r>  s      r4   
paint_pathOp.paint_path  s4     &zz!xx{{"r6   r   N)/r   r   r   r   r   close_fill_stroker=  r?  	closepathclose_stroker>  r@  
begin_textend_textcurveto	rectanglelinetomovetoconcat_matrixuse_xobjectsetgray_strokesetgray_nonstrokesetrgb_strokesetrgb_nonstrokesetcolorspace_strokesetcolorspace_nonstrokesetcolor_strokesetcolor_nonstrokesetdashsetlinejoin
setlinecap	setgstategsavegrestoretextpos
selectfont
textmatrixtextriseshowshowkernsetlinewidthclipshadingr   classmethodrB  r   r   r6   r4   r%  r%    s    1KDILFGJHGIFFMKNM #OGKJIEHGJJHDHLDG # #r6   r%  c                   >    \ rS rSrSrSrSS jrS rS rS r	S	 r
S
rg)Streami  z
PDF stream object.

This has no pdfRepr method. Instead, call begin(), then output the
contents of the stream by calling write(), and finally call end().
)r   r)   pdfFiler   compressobjextraposNc                 t   Xl         X l        X0l        UR                  U l        SU l        Uc  [        5       U l        OUR                  5       U l        Ub'  U R                  R                  [        S5      US.5        U R                  R                  U R                   5        [        R                  S   (       a3  U(       d,  [        R
                  " [        R                  S   5      U l        U R                  c  [        5       U l        gU R!                  5         U R                  R#                  5       U l        g)a  
Parameters
----------
id : int
    Object id of the stream.
len : Reference or None
    An unused Reference object for the length of the stream;
    None means to use a memory buffer so the length can be inlined.
file : PdfFile
    The underlying object to write the stream to.
extra : dict from Name to anything, or None
    Extra key-value pairs to include in the stream header.
png : dict or None
    If the data is already png encoded, the decode parameters.
NFlateDecode)FilterDecodeParmspdf.compression)r   r)   ri  fhr   rj  r   rk  copyupdaterM   
recordXrefr_   rcParamszlibr   _writeHeadertellrl  )r   r   r)   r   rk  pngs         r4   r   Stream.__init__  s      GG	=DJDJ?JJd=.A.13 4 	(<<)*3#//./ 1D88	DIyy~~'DHr6   c                    U R                   R                  nU" SU R                  -  5        U R                  nU R                  US'   [
        R                  S   (       a  [        S5      US'   U" [        U5      5        U" S5        g )Nr   Lengthrq  rn  ro  s   
stream
)	r   r   r   rk  r)   r_   rv  rM   r   )r   r   r   s      r4   rx  Stream._writeHeader*  se    		mdgg%&zzX<<)*!-0DNgdmmr6   c                 &   U R                  5         U R                  c  U R                  R                  5       n[        U5      U l        U R                  R
                  U l        U R                  5         U R                  R                  U5        U R                  R                  S5        gU R                  R                  5       U R                  -
  nU R                  R                  S5        U R                  R                  U R                  U5        g)zFinalize stream.Ns   
endstream
endobj
)_flushr)   r   getvalueri  rr  rx  r   ry  rl  writeObject)r   r   r3   s      r4   end
Stream.end5  s     	88yy))+H8}DHDIIIOOH%IIOO45YY^^%0FIIOO45LL$$TXXv6r6   c                     U R                   c  U R                  R                  U5        gU R                   R                  U5      nU R                  R                  U5        g)zWrite some data on the stream.N)rj  r   r   compress)r   data
compresseds      r4   r   Stream.writeE  sF     #IIOOD!))2248JIIOOJ'r6   c                     U R                   b=  U R                   R                  5       nU R                  R                  U5        SU l         gg)zFlush the compression object.N)rj  flushr   r   )r   r  s     r4   r  Stream._flushN  sA     '))//1JIIOOJ'#D (r6   )rj  rk  r   r   r)   ri  rl  NN)r   r   r   r   r   r  r   rx  r  r   r  r   r   r6   r4   rh  rh    s)     PI%(N	7 ($r6   rh  c                    [        U 5      nSUR                  -  n0 nU GHh  nUR                  U[        R                  5      n[        UR                  U-  5      S[        R                  " UR                  S   U-  5      [        R                  " UR                  S   U-  5      [        R                  " UR                  S   U-  5      [        R                  " UR                  S   U-  5      /nUR                  5       u  pUS-  U-  R                  5       nSR                  [        [        U5      5      R                  S5      S	-   [         R"                  " [%        X5      S S S
S S/ SQS5      -   S-   XBR'                  U5      '   GMk     U$ )N  r   r#         @    r   s    d1
F)r/  r.  r6   r-  r)  Tr(  )r   units_per_EM
load_glyphr   NO_SCALEroundhoriAdvancer{   floorbboxceilget_pathr+   mapr@   r   r"   convert_to_stringr    get_glyph_name)
	font_pathglyph_indicesfontconvprocsglyph_indexgd1rk   r   s
             r4   _get_pdf_charprocsr  W  sQ   ID$###DE$OOK););<!--$&'JJqvvay4'($**QVVAY5E*FIIaffQi$&'166!9t3C)D	
 }}Vd]!!#HHSb\"))'2X=%%Q
D$tQ-t55
  	!!+./ %" Lr6   c                     ^  \ rS rSrSrS>U 4S jjr\R                  " S5      " \" S 5      5      r	\R                  " S5      " \" S 5      5      r
\R                  " S5      " \" S 5      5      r\R                  " S5      \S	 5       5       rS
 r/ SQ4S jr\S 5       r\S 5       rS rS rS rS rS?S jrS rSS.S jrS rS@S jrS rS rS rS rS r\R@                  " SS5      S>S j5       r!S r"S! r#S" r$S# r%S$ r&S% r'S& r(\R                  " S'5      " \" S( 5      5      r)S) r*S* r+S+ r,S, r-S- r.S. r/S>S/ jr0S0 r1S1 r2S2 r3S3 r4S4 r5\SAS5 j5       r6SBS6 jr7SCS7 jr8S8 r9S9 r:S: r;S; r<S< r=S=r>U =r?$ )DPdfFileio  zPDF file object.Nc                 V  > [         T	U ]  5         [        R                  " S5      U l        / SQ/U l        SU l        SU l        SU l        [        R                  " USSS9u  p4U(       d   UR                  5       U l        UnSU l        X0l        SU l        UR!                  S	5        UR!                  S
5        U R#                  S5      U l        U R#                  S5      U l        / U l        U R#                  S5      U l        U R#                  S5      U l        U R#                  S5      U l        U R#                  S5      U l        U R#                  S5      U l        U R#                  S5      U l        [7        S5      U R&                  S.nU R9                  U R$                  U5        [;        SU=(       d    0 5      U l        S [        R                  " S5       5       U l        0 U l         0 U l!        [D        RF                  " [D        RH                  RK                  [L        RN                  S   S5      5      U l(        0 U l)        S [        R                  " S5       5       U l*        0 U l+        S [        R                  " S5       5       U l,        / U l-        0 U l.        S [        R                  " S5       5       U l/        / U l0        0 U l1        S [        R                  " S5       5       U l2        0 U l3        / U l4        / U l5        / U l6        SRo                  5        Vs/ s H  n[7        U5      PM     nnU R*                  U R2                  U R,                  U R.                  U R0                  US.nU R9                  U R4                  U5        g! [         a    [        5       nXl         GNf = fs  snf )a{  
Parameters
----------
filename : str or path-like or file-like
    Output target; if a string, a file will be opened for writing.

metadata : dict from strings to strings and dates
    Information dictionary object (see PDF reference section 10.2.1
    'Document Information Dictionary'), e.g.:
    ``{'Creator': 'My software', 'Author': 'Me', 'Title': 'Awesome'}``.

    The standard keys are 'Title', 'Author', 'Subject', 'Keywords',
    'Creator', 'Producer', 'CreationDate', 'ModDate', and
    'Trapped'. Values have been predefined for 'Creator', 'Producer'
    and 'CreationDate'. They can be removed by setting them to `None`.
r#   )r   i  the zero objectFNr   wbT)return_openeds	   %PDF-1.4
s   % 
rootpagesfontszextended graphics statesztiling patternszGouraud triangleszexternal objects	resourcesCatalog)r   Pagespdfc              3   >   #    U  H  n[        S U 35      v   M     g7f)FNrM   r   r1   s     r4   r   #PdfFile.__init__.<locals>.<genexpr>       "M:LQ4!A3==:L   zps.fonttypec              3   >   #    U  H  n[        S U 35      v   M     g7f)r   Nr  r  s     r4   r   r    s      K8J1!g8Jr  c              3   >   #    U  H  n[        S U 35      v   M     g7f)SMNr  r  s     r4   r   r    s     J7I!tbH~~7Ir  c              3   >   #    U  H  n[        S U 35      v   M     g7f)HNr  r  s     r4   r   r    r  r  c              3   >   #    U  H  n[        S U 35      v   M     g7f)INr  r  s     r4   r   r    s     E2DQ4!A3==2Dr  PDF Text ImageB ImageC ImageI)FontXObject	ExtGStatePatternShadingProcSet)8superr   r   count_object_seq	xrefTablepassed_in_file_objectoriginal_file_like	tell_baser   to_filehandlery  OSErrorr   rr  currentstreamr   reserveObject
rootObjectpagesObjectpageList
fontObject_extGStateObjecthatchObjectgouraudObjectXObjectObjectresourceObjectrM   r  rm   infoDict_internal_font_seq
_fontNames_dviFontInfor$   CharacterTracker_FONT_MAX_GLYPHgetr_   rv  _character_trackeralphaStates_alpha_state_seq_soft_mask_states_soft_mask_seq_soft_mask_groups_hatch_patterns_hatch_pattern_seqgouraudTriangles_images
_image_seqmarkerspaths_annotationspageAnnotationssplit)
r   filenamerf   rr  openedr  rB   procsetsr  	__class__s
            r4   r   PdfFile.__init__r  s   " 	$??1-78%*""&((4tL
2!)
 -1*!
 	(),,V4--g6,,W5 $ 2 23M N--.?@!//0CD!//0BC"00=Y))+$/-eX^D"M)//!:L"M"1"B"B++//]0KQO#Q  K	8J K!#Jyq7IJ!#!"M)//!:L"M "E)//!2DE

   " &E%J%J%LM%LDG%LM
 "__ $ 2 2"&"7"7 $ 0 0 $ 2 2 (*	 	,,i8S  3Y*2'3| Ns   *N N&N#"N#z3.11c                     U R                   $ r>   )r  r   s    r4   <lambda>PdfFile.<lambda>  s    door6   c                     0 $ r>   r   _s    r4   r  r    s    br6   c                     0 $ r>   r   r  s    r4   r  r    s    "r6   c           
         0 n[         R                  " [         R                  " S5      5      nU R                  R	                  5        H  u  p4X$R
                     nUR                  c/  [        SR                  UR                  UR
                  5      5      e[        R                  " UUUR                  UR                  UR                  UR                  S9XR
                  '   M     U$ )N
pdftex.mapNNo usable font file found for {} (TeX: {}); the font may lack a Type-1 version)dvifontpdfnamefontfilebasefontencodingfileeffects)r   
PsfontsMapfind_tex_filer  ra   texnamer  r   formatpsnametypesSimpleNamespaceencodingr
  )r   rv   tex_font_mapr  r  psfonts         r4   dviFontInfoPdfFile.dviFontInfo  s     ))'*?*?*MN $ 1 1 7 7 9G!//2F& 9VFMM7??;= = "'!6!6#__"Aoo !: r6   c                    U R                  5         XsU l        U l        U R                  S5      nU R                  S5      n[	        S5      U R
                  U R                  SSSU-  SU-  /UUS.nU R                  S5      nU R                  Xe5        U R                  R                  U5        U R                  R                  X@R                  45        U R                  UR                  U R                  S5      5        U R                  [	        S	5      [        R                   5        U R                  [	        S	5      [        R"                  5        U R                  [$        R&                  S
   [        R(                  5        / U l        g )Nzpage contentsannotationsPager   H   )r   Parent	ResourcesMediaBoxContentsAnnotspagezlength of content stream	DeviceRGBr  )	endStreamr   r   r  rM   r  r  r  r  r*   r  r  beginStreamr   outputr%  rS  rT  GraphicsContextPdf
joinstylesrX  )r   r   r   contentObjectannotsObjectthePage
pageObjects          r4   newPagePdfFile.newPage  sE   "'
DK**?;))-8<!-- $ 3 3 !1b5j"v+>,) ''/
-Z(  ,0D0D!EF))++,FG	I 	D%r'>'>?D%r'A'AB&11':BNNK  "r6   r.  r   r   c                 l    [        S5      [        S5      UUS.nU R                  R                  U5        g )Nr   Text)r   r   r  r   )rM   r  r*   )r   textpositionRecttheNotes       r4   newTextnotePdfFile.newTextnote  s3    ="6l#'
 	##G,r6   c                 v   ^ U4S jm[        U 5      [        R                  S-   S-  -  nT" US5      nUSS S-   $ )z
Get a prefix for a subsetted font name.

The prefix is six uppercase letters followed by a plus sign;
see PDF reference section 5.5.3 Font Subsets.
c                 v   > X:  a  [         R                  U    $ T" X-  U5      [         R                  X-     -   $ r>   )stringascii_uppercase)nbasetoStrs     r4   r<  )PdfFile._get_subset_prefix.<locals>.toStr!  s>    x--a00 !)T*V-C-CAH-MMr6   r#   r     N   +)r  sysmaxsize)charsethashedprefixr<  s      @r4   _get_subset_prefixPdfFile._get_subset_prefix  sD    	 g3;;?a"78vr" bqzCr6   c                 `    [         R                  [        UR                  5       5      5      U -   $ r>   )r  rF  	frozensetvalues)ps_namecharmaps     r4   _get_subsetted_psnamePdfFile._get_subsetted_psname0  s$    )))GNN4D*EFPPr6   c           
      h   U R                  5         U R                  5         U R                  5         U R                  5         U R	                  5         U R                  5         U R                  5         U R                  R                  5        VVVs0 s H  u  po2U_M
     nnnnU R                  R                  5        H  nUS   XES   '   M     U R                   H  u	  p&psppnX4U'   M     U R                  U R                  U5        U R                  5         U R                  5         U R                  5         U R                  U R                   [#        S5      U R$                  ['        U R$                  5      S.5        U R)                  5         U R+                  5         U R-                  5         gs  snnnf )z>Write out the various deferred objects and the pdf end matter.r#   r   r  )r   KidsCountN)r"  _write_annotations
writeFontswriteExtGSTates_write_soft_mask_groupswriteHatcheswriteGouraudTrianglesr  rJ  r  r  r  r  writeImageswriteMarkerswritePathCollectionTemplatesr  rM   r  r)   writeInfoDict	writeXrefwriteTrailer)r   imagerN   obxobjectstuppathtransr+   cappaddingfilledstrokeds                r4   finalizePdfFile.finalize4  sm    	!$$&""$,0LL,?,?,AC,Ab"H,A 	 C<<&&(C"1vHV ) :: GD4gwTN ++X6))+))"&w-"&--#&t}}#57	8 	 	'Cs   F-c                 0   U R                  5         U R                  (       a  U R                  R                  5         gU R                  b3  U R                  R                  U R                  R                  5       5        U R                  R                  5         g)z)Flush all buffers and free all resources.N)r"  r  rr  r  r  r   r  closer   s    r4   rk  PdfFile.closeS  s^     	%%GGMMO&&2''--dgg.>.>.@AGGMMOr6   c                     U R                   c  U R                  R                  U5        g U R                   R                  U5        g r>   )r  rr  r   )r   r  s     r4   r   PdfFile.write^  s2    %GGMM$$$T*r6   c           
          U R                  [        U Vs/ s H  n[        U5      PM     sn5      5        U R                  S5        g s  snf )Nr'   )r   r5   r   )r   r  rB   s      r4   r$  PdfFile.outputd  s7    

5d3d'!*d345

5 4s   Ac                 F    U R                   b   e[        XXU5      U l         g r>   )r  rh  )r   r   r)   rk  rz  s        r4   r#  PdfFile.beginStreamh  s%    !!)))#BT#>r6   c                 b    U R                   b"  U R                   R                  5         S U l         g g r>   )r  r  r   s    r4   r"  PdfFile.endStreaml  s-    )""$!%D *r6   rk  c                    U R                  UR                  S U5        U R                  R                  U5        U R	                  5         g r>   )r#  r   r  r   r"  )r   refr  rk  s       r4   outputStreamPdfFile.outputStreamq  s6    u-  &r6   c                 P    U R                    H  u  pU R                  X5        M     g r>   )r  r  )r   r(  r  s      r4   rR  PdfFile._write_annotationsv  s#    )-):):%L\7 *;r6   c                    [        U[        5      (       a  U/nOv[        U[        5      (       a  [        US5      /nOS[        R                  S   (       a%  [
        R                  " US[        R                  S9nO[
        R                  " U5      nSnU Hs  nU R                  R                  XR45      nU(       d  UnUb  M-  [        U R                  5      nX`R                  XR4'   [        R                  SXbU5        U(       a  Mq  UnMu     U$ )z
Select a font based on fontprop and return a name suitable for
``Op.selectfont``. If fontprop is a string, it will be interpreted
as the filename of the font.
r   pdf.use14corefontsafm)fontext	directoryNz"Assigning font %s (subset %d) = %r)r?   r   r@   r_   rv  _fontManager_find_fonts_by_propsRendererPdf_afm_font_dirr  r  nextr  _logdebug)r   fontpropsubset	filenamesfirst_FxfnameFxs          r4   fontNamePdfFile.fontNamez  s     h))!
I#&&!(A./I\\./$99%;3L3LI %99(CIE$$e_5Bz$112350

?USx!H  r6   c                     [        SUR                  R                  S5       35      n[        R	                  SX!R                  5        XR
                  U'   [        U5      $ )z
Given a dvi font object, return a name suitable for Op.selectfont.

Register the font internally (in ``_dviFontInfo``) if not yet registered.
zF-r   zAssigning font %s = %s (dvi))rM   r  r   r  r  r  )r   r  r  s      r4   dviFontNamePdfFile.dviFontName  sP     GOO227;<=>

17OOL%,'"G}r6   c                    0 n[        U R                  R                  5       5       H8  u  p#[        R	                  SUR
                  5        U R                  U5      X'   M:     [        U R                  R                  5       5       H  u  u  pEn[        R	                  SXE5        UR                  S5      (       a*  [        R	                  S5        U R                  U5      X'   M^  [        R	                  S5        U R                  R                  U   U   nU R                  XEU5      X'   M     U R                  U R                  U5        g )Nz"Embedding Type-1 font %s from dvi.zEmbedding font %r:%d.z.afmzWriting AFM font.zWriting TrueType font.)sortedr  ra   r  r  r  _embedTeXFontr  endswith_write_afm_fontr  usedembedTTFr  r  )r   r  r  r  r  r  r  rL  s           r4   rS  PdfFile.writeFonts  s    &t'8'8'>'>'@ AGJJ;W__M!//8EN !B '-T__-B-B-D&E"XJJ.A  ((

./ 00:	 

341166x@H MM(GD	 'F 	%0r6   c                 "   [        US5       n[        U5      nS S S 5        WR                  5       n[        S5      [        S5      [        U5      [        S5      S.nU R	                  S5      nU R                  Xe5        U$ ! , (       d  f       Nm= f)Nrbr  Type1WinAnsiEncoding)r   r   BaseFontEncodingfont dictionary)openr   get_fontnamerM   r  r  )r   r  rr  r  fontnamefontdictfontdictObjects          r4   r  PdfFile._write_afm_font  s    (D!Rr7D "$$& L#G} $X $%6 79 ++,=>2 "!s   B  
Bc           
         [         R                  " [         R                  " S5      5      nX!R                     nUR                  c/  [        SR                  UR                  UR                  5      5      eU R                  S5      n[        S5      [        S5      S.n[        R                  " UR                  5      nUR                  bM  UR                  [        [         R                  " UR                  5      5       VVs0 s H  u  pxXx_M	     snn5      nUR                   (       a  UR#                  UR                   5      n[%        UR&                  UR(                  5      n	U R*                  R,                  U	   S   n
U
 Vs1 s H)  n[/        U R*                  R1                  U	SU5      5      iM+     nnUR3                  XR5                  U
R7                  5       5      5      n[        UR8                  S   5      US	'   U R;                  U5      US
'   UR8                  S   nU R=                  U5      US'   [?        URA                  5       SS9=oS'   [C        URA                  5       SS9=oS'   URD                  n[G        XS-   5       Vs/ s H/  nURI                  U5      =n(       a  SURJ                  -  S-	  OSPM1     nnU R                  S5      =US'   nU RM                  UU5        U RM                  XE5        U$ s  snnf s  snf s  snf )Nr  r  r  r  r  )r   r   r   FontNamer  FontDescriptorr  )default	FirstChar   LastCharr#   r     zglyph widthsWidths)'r   r  r  r  r  r   r  r  r  rM   r   	Type1Fontr  with_encodingr(   
_parse_encr
  	transformr   r  
face_indexr  r  r  subset_to_unicoder  rF  rJ  propcreateType1Descriptor_generate_encodingr   keysr   _metricsr  get_metrics	tex_widthr  )r   r  r  r  r  r  t1fontr1   r   r  rL  ccodecharsr  fclcfont_metricscharglyph_metricswidthswidthsObjects                        r4   r  PdfFile._embedTeXFont  s   ))'*?*?*MNoo.??"5w79 9 ++,=>fg
 %%foo6??&))"+G,>,>v,O"PQ"P$!"PQF >>%%fnn5F W]]G,>,>?	))..y9!< !
 ! ''99)QNO  	 

 u&=&=gnn>N&OP#FKK
$;<%)%?%?%G!";;z*#66x@%(!%DDk"$'$EEj!'' $BQ/1/d (4'?'?'EEmE -111b8LMN/ 	 1 -1,>,>~,NN\v.2= R
1s   K<
0L	6Lc                     Sn/ n[        UR                  5       5       H:  u  pEXBS-   :w  a  UR                  U5        UnUR                  [        U5      5        M<     [        S5      US.$ )Nr#   r  r   Differences)r  ra   r*   rM   )r   r  prevr0   coderN   s         r4   r  PdfFile._generate_encoding  sf     !12JDaxd#DMM$t*%	 3 $!
 	
r6   r  c                    U R                  S5      nU R                  S5      nUR                  S   nUR                  S   nSnU(       a  US-  n  US-  nU(       a  US	-  n   UR                  S
   nSR                  [        S UR	                  5        5       5      5      n	[        S5      [        UR                  S   5      UUR                  S   UUR                  S   S   UR                  S   S   SSUUR                  S   SU	S.n
U R                  X:5        U R                  USR                  UR                  S S 5      [        UR                  S   5      [        UR                  S   5      SS.S9  U$ )Nfont descriptorz	font fileItalicAngleisFixedPitchr   r#   r     r  r   c              3   <   #    U  H  nUS :w  d  M  SU 3v   M     g7f)z.notdefr  Nr   r  s     r4   r   0PdfFile.createType1Descriptor.<locals>.<genexpr>+  s&      !2A	> !A3!2s   
r  r  FontBBoxr  r  i  
FamilyName2   )r   r  Flagsr  r  AscentDescent	CapHeightXHeightFontFile
FontFamilyStemVCharSetr6   )Length1Length2Length3ru  )
r  r  r+   r  rJ  rM   r  rx  partsr)   )r   r  r  fontdescObjectfontfileObjectitalic_anglefixed_pitchflagsr  rC  
descriptors              r4   r  PdfFile.createType1Descriptor  s    ++,=>++K8{{=1kk.1VOE VOE
 VOE   ;;z*'' !)!2 
   01J 78 !;;z2'!;;z215!;;z215)!;;|4"

$ 	4.#((6<<3C*D,/Q,@,/Q,@,-!/ 	 	0
 r6   sO  /CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (Adobe)
   /Ordering (UCS)
   /Supplement 0
>> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <ffff>
endcodespacerange
%d beginbfrange
%s
endbfrange
endcmap
CMapName currentdict /CMap defineresource pop
end
endc                 n  ^ ^^^^^ [        T5      n[        R                  S   mUR                  S4S jmUUU 4S jmUUUUU 4S jnUUUUU 4S jnT R	                  UR
                  U5      mTR                  SS5      m[        T5      mUR                  S	5      =(       d    S
S
S.nUR                  S5      =(       d    SS0nUR                  n	UR                  n
S
nSn[        R                  U	;   a  US-  n U(       a  US-  nOUS-  n[        R                  U
;   a  US-  n   [        S5      TUUR                   Vs/ s H
  nT" USS9PM     snT" UR                   SS9T" UR"                  SS9T" US   SS9T" US   5      US   S   S
S.
nTS:X  a	  U" XBX>5      $ TS:X  a	  U" XBX>5      $ gs  snf )z9Embed the TTF font from the named file into the document.pdf.fonttypeTc                     X-  S-  nU(       a  [        U5      $ US:  a  [        R                  " U5      $ [        R                  " U5      $ )z2Convert font coordinates to PDF glyph coordinates.r  r   )r  r{   r  r  )r3   upenearestr:  s       r4   cvtPdfFile.embedTTF.<locals>.cvtf  s@    L4'EU|#qyzz%((yy''r6   c           
        >^ ^ Sn/ n[        UR                  5       5       H'  nXBS-   :w  a  UR                  XD/5        OXCS   S'   UnM)     UUU 4S jmTS:X  a  SOSn/ nU HQ  u  pxSR                  U4S	 j[	        XxS-   5       5       5      n	UR                  S
USU S3 SUSU S3 SU	 S35        MS     TR
                  [        U5      SR                  U5      R                  S5      4-  n
U
$ )Nr  r#   c                    > TR                   R                  TTU 5      nUR                  S5      R                  5       nSU S3$ )Nutf-16be<>)r  r  r   hex)r  r  hexstrr  r   subset_indexs      r4   _to_unicodeDPdfFile.embedTTF.<locals>.generate_unicode_cmap.<locals>._to_unicode|  sE    //AAlE3j15576(!}$r6   r  r  r  r  c              3   4   >#    U  H  nT" U5      v   M     g 7fr>   r   )r   rB   r  s     r4   r   BPdfFile.embedTTF.<locals>.generate_unicode_cmap.<locals>.<genexpr>  s     &S?R!{1~~?Rs   r  0rB   z> <z> []r   r   )r  r  r*   r+   r  _identityToUnicodeCMapr)   r   )r  rL  
last_ccodeunicode_groupsr  r   unicode_bfrangestartr  real_valuesunicode_cmapr  r  fonttyper   s   `          @r4   generate_unicode_cmap/PdfFile.embedTTF.<locals>.generate_unicode_cmapq  s   JN/N*"))5.9,12&q)"
 0% "QAAE O,
!hh&SuUPQE?R&SS&&awaZ(C%z?#k]!LN - !77 0!YY7>>wGIIL  r6   c                   >^ ^ T"R                  S5      nT"R                  S5      nT"R                  S5      nT"R                  S5      nT"R                  S5      n/ n	[        T5      [        T5      pT R                   Vs/ s H
  nT" USS9PM     nn[	        S5      T!U
UU[	        S	5      US
   U/ SQU[	        S5      U	S.UUS.nUUU 4S jn[        XS-   5       Vs/ s H  nU" U5      PM     nn[        U5      US'   [        TR                  5        VVs/ s H  u  nnUT R                  U5      4PM     snn5      nSnU H<  u  nnUUS-   :w  a  U	R                  U5        U	R                  [	        U5      5        UnM>     [        TTR                  5       5      n0 n[        U5       H0  nUU   nT"R                  S5      nT"R                  UU5        UUU'   M2     T " UT5      nT"R                  Xn5        T"R                  XS5        T"R                  UU5        T"R                  UU5        T"R                  UU5        U$ s  snf s  snf s  snnf )z5The Type 3-specific part of embedding a Truetype fontzfont widthsr  r  zcharacter procsToUnicode mapFr  r  Type3r  )MbP?r   r   r  r   r   r  r  )r   r  r  r  r  r   rM   r  
FontMatrix	CharProcsr  r  	ToUnicodec                    > TR                  TR                  U S5      [        R                  [        R                  -  S9R
                  nT" U5      $ )Nr   r  )r  r  r   r  
NO_HINTINGr  )charcoder   rL  r  r  s     r4   get_char_width?PdfFile.embedTTF.<locals>.embedTTFType3.<locals>.get_char_width  sM    KK!,#,,y/C/CC ( EEP[  5z!r6   r#   MaxWidthr  charProc)r  r   r   r  rM   r  r  ra   r  r*   r  rJ  rx  r  )#r  r  rL  r  r  r  r  charprocsObjecttoUnicodeMapObjectdifferencesArray	firstcharlastcharrB   r  r  r  r  r  r  ginddifferenceslast_cr   rN   rawcharprocs	charprocscharnamestreamcharprocObjectr  r  r  r  rK  r   s#   ` `                           r4   embedTTFType3'PdfFile.embedTTF.<locals>.embedTTFType3  so   --m<L!//0ABN!//0ABN"001BCO!%!3!3O!D!"%g,Gx3799=9aC5)9D= V#&$"0=":. 6, ,#35 '/H&" ',Iz&BD&B( %X.&B  D%([Jz" !FMmmo"FU{ud++D12o" K F&4
?$++A. ''T
3	 ' .h8HILI"<0%h/!%!3!3J!?!!.&9&4	(#	 1 1wGL ^6^8\62_i80,?!!y >4D"s   >I I I

c                   > TR                  S5      nTR                  S5      nTR                  S5      nTR                  S5      nTR                  S5      nTR                  S5      n	TR                  S5      n
[        R                  STX5        [        R                  " TUR                  5       5       n[        R                  " U5      nS	S	S	5        [        R                  S
TU[        R                  " T5      R                  WR                  5       R                  5        [        U5      n [        S5      [        S5      TSSSS.UU	US.n[        S5      [        S5      T[        S5      U/U
S.nXS'   TR                  XR                  5       SUR                  5       R                  0S9  S/S-  n/ nSnUR!                  5        Hr  u  nnU R#                  U[$        R&                  [$        R(                  -  S9nUR+                  UT" UR,                  5      45        [/        U5      UU'   [1        UU5      nMt     UR3                  5         US	US-    nSn/ nSnU HU  u  nnUUS-   :w  a$  UR+                  U5        UR+                  U/5        OUS   R+                  U5        [1        UU5      nUnMW     SR5                  U5      R7                  S5      nTR                  X5        T" X5      nTR                  U
U5        UUS '   TR9                  X]5        TR9                  Xn5        TR9                  XC5        TR9                  U	U5        U$ ! , (       d  f       GN= f)!z6The Type 42-specific part of embedding a Truetype fontr  zCID font dictionaryzType 0 font dictionaryzCIDToGIDMap streamzfont file streamzType 0 widthsr  zSUBSET %r:%d characters: %sNzSUBSET %r:%d %d -> %dr  CIDFontType2AdobeIdentityr   )RegistryOrdering
Supplement)r   r   r  CIDSystemInfor  WCIDToGIDMapType0z
Identity-H)r   r   r  r  DescendantFontsr  	FontFile2r  ru   i   r  r#   r  r  r  r  r  )r  r  r  r$   get_glyphs_subsetrJ  font_as_filerX   statst_size	getbuffernbytesr   rM   rx  r  ra   r  r   r  r  r*   r  chrr   sortr+   r   r  )r  r  rL  r  r  cidFontDictObjecttype0FontDictObjectcidToGidMapObjectr  wObjectr   r  fontdatacidFontDicttype0FontDictcid_to_gid_mapr  	max_ccoder  r$  glyphr  w	max_widthr   r  r  r  r  rK  r   s                             r4   embedTTFType42(PdfFile.embedTTF.<locals>.embedTTFType42  sQ   !//0ABN $ 2 23H I"&"4"45M"N $ 2 23G H!//0BCN((9G!%!3!3O!DJJ4hV 2283:>>3CEHN*77?E JJ'<!))8+=+=+?+F+F 8$D V/# ' *"#"% #10K V=# .$5#6/M '5{# 1 1 3 ("4"4"6"="=>  @
 #Ve^NFI&}}t.7.@.@9CWCW.W ( Yuc%*;*;&<=>(+D	u%y1	  / KKM+NY];NJAI &uJN*HHUOHHeW%bELL'	51	"
 !'  WW^4;;JGN/@ 1GL0,?%.Jz" .<0@^8Wa(&&eE Es   5M
Mr   r]   pcltr   )	capHeightxHeightpostitalicAngler   r   Fr#   r      r  r  r  rS  rT  )
r   r  r  r  r  r  r  r  r  r  r  *   N)r   r_   rv  r  rM  postscript_namer   rM   get_sfnt_table
face_flagsstyle_flagsr   FIXED_WIDTHr   ITALICr  ascender	descender)r   r  r  rL  r  r,  rP  rR  rU  ffsfr  symbolicrB   r  r  r  r  rK  s   ``             @@@@r4   r  PdfFile.embedTTFa  s   !<</ --t 		(	 :E	" E	"N]	' ]	'B ,,T-A-A7K..)4w-""6*LA!.L""6*E}f.E__  B&VOEVOEVOE"VOE )*8<		B	1Q.	B$--74>>59T+.>4	?+.q1
 q= WII^!$gJJ  Cs   F2
c                     U R                   R                  US5      nUb  US   $ [        U R                  5      nU[	        S5      US   US   S.4U R                   U'   U$ )z?Return name of an ExtGState that sets alpha to the given value.Nr   r  r#   )r   CAca)r  r  r  r  rM   )r   alphastaterN   s       r4   
alphaStatePdfFile.alphaStatec  ss       $$UD18OD))*D-(%(4 5 	 r6   c                    U R                   R                  US5      nUb  US   $ [        U R                  5      nU R	                  S5      nU[        S5      S[        S5      [        S5      S/US	.S
.4U R                   U'   U R                  R                  U[        S5      [        S5      S[        S5      [        S5      S./ SQSSU00/ SQS.[        S5      [        R                  /45        U$ )z
Return an ExtGState that sets the soft mask to the given shading.

Parameters
----------
smask : Reference
    Reference to a shading in DeviceGray color space, whose luminosity
    is to be used as the alpha channel.

Returns
-------
Name
Nr   z transparency group for soft maskr  FMask
Luminosityr#   )r   r   BCG)r   AISSMaskr  FormTransparency
DeviceGray)r   CS)r#   r   r   r#   r   r   r  r   )r   r   r#   r#   )r   r   FormTypeGroupMatrixr  BBox)
r  r  r  r  r  rM   r  r*   r%  re  )r   smaskrj  rN   groupObs        r4   _soft_mask_statePdfFile._soft_mask_statep  s    &&**5$78OD''($$%GH[) Ll+# 		)
u% 	%%Y<n-|, -'#u6$ #Y

#'
 	  r6   c                     U R                  U R                  [        / U R                  R	                  5       QU R
                  R	                  5       Q5      5        g r>   )r  r  r   r  rJ  r  r   s    r4   rT  PdfFile.writeExtGSTates  sT    !! !!((*''..0 	
r6   c                     U R                    HB  u  pnU R                  UR                  S U5        U R                  " U6   U R	                  5         MD     g r>   )r  r#  r   r$  r"  )r   r_  
attributescontents       r4   rU  PdfFile._write_soft_mask_groups  sC    '+'='=#BGRUUD*5KK!NN (>r6   c                     Uu  p#pEUb  [        U5      nUb  [        U5      nX#XE4nU R                  R                  US 5      nUb  U$ [        U R                  5      nXpR                  U'   U$ r>   )r   r  r  r  r  )r   hatch_styleedgefacehatchlwpatternrN   s           r4   hatchPatternPdfFile.hatchPattern  sz     +E;D;D5-&&**;=ND++,,0[)r6   3.10c                     U R                   R                  5        VVVVVs0 s H  u  nu  p#pEXX44_M     snnnnn$ s  snnnnnf r>   )r  ra   )r   rj   r   r   hls         r4   r  r    s?    ,0,@,@,F,F,HC,HLQ1q9,HC Cs   <c                 8   [        5       nSnU R                  R                  5        GH  u  p4U R                  S5      nXQU'   SSR	                  5        Vs/ s H  n[        U5      PM     sn0nU R                  UR                  S [        S5      SSSSSX"/X"USSSSSU R                  S-  /S	.	5        Uu  ppU R                  US   US   US
   [        R                  5        U	bL  U R                  U	S   U	S   U	S
   [        R                  SSX"[        R                  [        R                  5
        U R                  US   US   US
   [        R                  5        U R                  U[        R                  5        U R                  " U R!                  ["        R$                  " U
5      ['        5       R)                  U5      SS96   U R                  [        R*                  5        U R-                  5         GM     U R/                  U R0                  U5        g s  snf )N      R@zhatch patternProcsetsr  r  r#   r   r  )	r   PatternType	PaintType
TilingTyper{  XStepYStepr  rz  r  Fsimplify)r   r  ra   r  r  rM   r#  r   r   r$  r%  rQ  rR  rJ  r?  rc  pathOperationsr    r  r   scaler=  r"  r  r  )r   	hatchDictsidelenr  rN   r_  rB   res
stroke_rgbfill_rgbr  r  s               r4   rV  PdfFile.writeHatches  s   F	!%!5!5!;!;!=K##O4B dO%D%J%J%LM%LDG%LMOCti !Q1!!q!Q4;;+;<>? /:+J%KK
1z!}jm((*#HQK!hqk//q'BLLGG% KK
1z!}jm++- KKBOO,KK,,

5!
  ) -   ! KK'NNE ">F 	))95? Ns   Hc                     [        S[        U R                  5      -  5      nU R                  SU 35      nU R                  R	                  X4X45        X44$ )ae  
Add a Gouraud triangle shading.

Parameters
----------
points : np.ndarray
    Triangle vertices, shape (n, 3, 2)
    where n = number of triangles, 3 = vertices, 2 = x, y.
colors : np.ndarray
    Vertex colors, shape (n, 3, 1) or (n, 3, 4)
    as with points, but last dimension is either (gray,)
    or (r, g, b, alpha).

Returns
-------
Name, Reference
zGT%dzGouraud triangle )rM   r)   r  r  r*   )r   pointscolorsrN   r_  s        r4   addGouraudTrianglesPdfFile.addGouraudTriangles  sV    $ FS!6!6778"3D6 :;$$d%?@xr6   c                 B   [        5       nU R                   GHh  u  p#pEX1U'   UR                  nUR                  US   US   -  S45      nUR                  S   nUS;   d   eUR                  US   US   -  U45      n	US:X  a  Sn[        R
                  " USS9S-
  n
[        R                  " USS9S-   nS	X-
  -  nU R                  UR                  S SS
SS[        US:X  a  SOS5      SU
S   US   U
S   US   /SS/U-  -   S.5        [        R                  " US   US   -  4SSSSU44/S9nSUS'   Xz-
  U-  US'   U	S S 2S U24   S-  US'   U R                  UR                  5       5        U R                  5         GMk     U R                  U R                  U5        g )Nr   r#   r  r#   r  r  r  axisr   l    rX     r!  rv  F)ShadingTypeBitsPerCoordinateBitsPerComponentBitsPerFlag
ColorSpace	AntiAliasDecode)r  u1)r  z>u4)r  r  r  dtyper  r  g     o@)r   r  shapereshaper   r   r   r#  r   rM   emptyr   tobytesr"  r  r  )r   gouraudDictrN   r_  r  r  r  flat_pointscolordimflat_colors
points_min
points_maxfactor	streamarrs                 r4   rW  PdfFile.writeGouraudTriangles  s   f(,(=(=$Df "LLE ..%(U1X*=q)ABK||AHv%%% ..%(U1X*=x)HIK1}!4?J!4?J:#:;Ft !&(%& !#$,M[|  $']JqM']JqM; !fx/0 qE!H$&&. $467I
 "#Ig#.#;v"EIh"-a(l";e"CIhJJy((*+NNO )>P 	++[9r6   c                     U R                   R                  [        U5      S5      nUb  US   $ [        U R                  5      nU R                  SU 35      nXU4U R                   [        U5      '   U$ )z=Return name of an image XObject representing the given image.Nr#   zimage )r  r  r   r  r  r  )r   r^  entryrN   r_  s        r4   imageObjectPdfFile.imageObject3  sm       ED18ODOO$&0#("3RYr6   c                 F   USSS2   nUR                   S:X  a  US4$ USS2SS2SS24   n[        R                  " USS9nUR                  S   S:X  aK  USS2SS2S4   S   n[        R                  " US	:H  5      (       a  SnX#4$ [        R                  " USS9n X#4$ SnX#4$ )
z
Unpack image array *im* into ``(data, alpha)``, which have shape
``(height, width, 3)`` (RGB) or ``(height, width, 1)`` (grayscale or
alpha), except that alpha is None if the image is fully opaque.
Nr  r  r  C)orderr  ).Nr  )ndimr   arrayr  all)r   imrgbri  s       r4   _unpackPdfFile._unpack?  s     "X77a<t8OQ2A2X,C((3c*Cxx{a1a7I.66%3,'' E
 : HHU#6E : :r6   c                    [        5       nUR                  USS9  UR                  S5        SnS=pE [        R                  " SUR                  S5      5      u  pgUS;   aT  UR                  U5      n[        U5      U:w  a  [        S5      eUS	:X  a  [        US   5      nO-US
:X  a  UnO$US:X  a  X8-  nOUS:X  a  O&UR                  US5        UR                  SS5        M  X4U4$ )zV
Write the image *img* into the pdf file using png
predictors with Flate compression.
rz  )r  r  r6   Ns   !L4s)   IHDR   PLTE   IDATztruncated datar  r  r  s   IENDr#   r  )	r   saveseekstructunpackreadr)   RuntimeErrorr[   )	r   imgbufferpng_data	bit_depthpaletter3   r   r  s	            r4   	_writePngPdfFile._writePngV  s    
 &A""	!==&++a.ALF22{{6*t9&&'7887? #DGIW_"GW_$HFA&KK1! " G++r6   c           	      |   UR                   u  pEn[        S5      [        S5      UU[        SSS.U   5      SS.nU(       a  X7S'   [        R                  S	   (       GaY  UR                   S
   S:X  a  UR	                  S
S9nSXeS.n[
        R                  " U5      n	U	R                  SS9n
US:X  Ga  U
Gb  [        U
5      n[        R                  " U
 VVVs/ s H  u  pU  H  oPM     M     snnn[        R                  S9nUSSS2   R                  [        R                  5      S-  USSS2   R                  [        R                  5      S-  -  USSS2   -  nUSS2SS2S4   R                  [        R                  5      S-  USS2SS2S4   R                  [        R                  5      S-  -  USS2SS2S4   -  n[        R                  " U5      R                  [        R                  5      nU[        R                  " UUUS9   n[
        R                  " U5      R!                  S5      n	U	R#                  U5        U R%                  U	5      u  nnnUb  Uc  ['        S5      eUSUS-   n[        S5      [        S5      US-
  U/US'   UUS'   SUS'   UUS'   OU R%                  U	5      u  n  nOSnU R)                  UU R+                  S5      UUS9  U(       a  U R,                  R/                  W5        O)U R,                  R/                  UR1                  5       5        U R3                  5         gs  snnnf ) z
Write the image *data*, of shape ``(height, width, 1)`` (grayscale) or
``(height, width, 3)`` (RGB), as pdf object *id* and with the soft mask
(alpha channel) *smask*, which should be either None or a ``(height,
width, 1)`` array.
r  r   rv  r!  r#   r  r  )r   r   WidthHeightr  r  rs  rq  r  r#   r  
   )	PredictorColorsColumnsr   )	maxcolorsr  Nr  r      r  )sorterPzinvalid PNG headerIndexedr  r  r  zlength of image stream)rz  )r  rM   r_   rv  squeezer   	fromarray	getcolorsr)   r   r  uint8astypeuint32argsortsearchsortedconvert
putpaletter  r  r#  r  r  r   r  r"  )r   r  r   r|  r   r   color_channelsr   rz  r  
img_colors
num_colorsr   colorcompr  	palette24rgb24indicesrgb8r  r  s                         r4   	_writeImgPdfFile._writeImgs  s
    )-

%~Iw-!l{"CN"ST#$&  L<<)**zz"~"|||, "nOC//$'C5J"z'= !_
((#VXQPUDPUD#V)+3%addm22299=C%addm22299=BD$QTT]+	 q!Qw-..ryy9R?q!Qw-..ryy9Q>@aAg' **Y/66rxx@ry%PQood+33C8w'/3~~c/B,)W$&';<<!/:>2%))_d;6G%/!^W%>L!*3&' !H*3&'!%!4!QC78	 	 	 $$X.$$T\\^4G $Ws   L7c                    U R                   R                  5        Hg  u  pnU R                  U5      u  pEUb-  U R                  S5      nU R	                  XVR
                  5        OS nU R	                  XCR
                  U5        Mi     g )Nr|  )r  rJ  r  r  r  r   )r   r  rN   r_  r  adatasmaskObjects          r4   rX  PdfFile.writeImages  sj    !\\002MCr,,s+KD "009unn5"NN44 3r6   c                    U R                  XSS9n[        U5      [        U5      [        U5      Xg4n	U R                  R	                  U	5      n
U
cl  [        S[        U R                  5      -  5      nU R                  S[        U R                  5      -  5      nUR                  U5      nXX/U R                  U	'   U$ U
S   U:  a  XZS'   U
S   nU$ )z<Return name of a marker XObject representing the given path.Fr  zM%dz	marker %dr  r   )	r  r   r   r  r  rM   r)   r  get_extents)r   rb  rc  r?  r>  r  	joinstylecapstylepathopskeyr0   rN   r_  r  s                 r4   markerObjectPdfFile.markerObject  s     %%dE%BW~tDz4<M!!#&>DLL 112D##K#dll2C$CDB##E*D!%4 4DLL
  bzBr
!9Dr6   c           
      \   U R                   R                  5        GH  u  u  pp4nu  pgpUR                  U	S-  5      nU R                  UR                  S [        S5      [        S5      [        UR                  5      S.5        U R                  [        R                  U   [        R                  5        U R                  [        R                  U   [        R                  5        U R                  " U6   U R                  [        R                  X#5      5        U R!                  5         GM     g )N   r  rt  r   r   r{  )r  ra   paddedr#  r   rM   r   extentsr$  r%  r&  r%  rX  	capstylesrY  rB  r"  )
r   r  r?  r>  r  r  rN   r_  r  r  s
             r4   rY  PdfFile.writeMarkers  s    &*ll&8&8&:#9gV!d ;;rAv&DtiT&\dll+-. KK*55i@(KK*44X>NKK!KKd34NN% ';r6   c                    [        S[        U R                  5      -  5      nU R                  S[        U R                  5      -  5      nU R                  R	                  XrX8UR                  5       UR                  5       XEU4	5        U$ )NzP%dzpath %d)rM   r)   r  r  r*   get_joinstyleget_capstyle)	r   r   rb  rc  re  rf  rg  rN   r_  s	            r4   pathCollectionObjectPdfFile.pathCollectionObject  sr    EC

O+,	C

O ;<

B$4$4$68Ig'	( r6   c           
         U R                    GHg  u	  pp4pVpxn	U R                  X#SS9n
UR                  U5      n[        R                  " [        R
                  " UR                  5      5      (       d  / SQnO&UR                  U5      n[        UR                  5      nU R                  UR                  S [        S5      [        S5      US.5        U R                  [        R                  U   [        R                   5        U R                  [        R"                  U   [        R$                  5        U R                  " U
6   U R                  [        R'                  X5      5        U R)                  5         GMj     g )NFr  r   r   r   r   r  rt  r  )r  r  r  r   r  r   r  r  r   r#  r   rM   r$  r%  r&  r%  rX  r  rY  rB  r"  )r   rN   rb  rc  r_  r  r  re  rf  rg  r  r  r  s                r4   rZ  $PdfFile.writePathCollectionTemplates  s   TI))$)FG##E*D66"++dll344&{{7+t||,tiT&\ "# KK*55i@(KK*44X>NKK!KKf67NN# $r6   c                    [        [        R                  " XX#US[        R                  R
                  [        R                  R
                  S[        R                  R
                  [        R                  R
                  /S5      5      /$ )Nr?  r6   T)	r  r"   r  r%  rL  r:  rK  rI  rE  )rb  r  rd  r  sketchs        r4   r  PdfFile.pathOperations  sc    00TVYY__biioosBJJ4D4D\\!   	r6   c                     U(       a-  SSU R                   S-  U R                  S-  4nUR                  nOS nSnU R                  XX5US9nU R                  " U6   g )N        r  F)r  r#  )r   r   should_simplifyr  r$  )r   rb  r  rd  r#  r  cmdss          r4   	writePathPdfFile.writePath  sa    djj2ot{{R/?@D++HDH""4D*0 # 2Tr6   c                 ~    [        U R                  5      nU R                  R                  SSU/5        [	        U5      $ )z
Reserve an ID for an indirect object.

The name is used for debugging in case we forget to print out
the object with writeObject.
Nr   )r  r  r  r*   r   )r   rN   r   s      r4   r  PdfFile.reserveObject   s6     $""#tQo.}r6   c                 r    U R                   R                  5       U R                  -
  U R                  U   S'   g Nr   )rr  ry  r  r  r   s     r4   ru  PdfFile.recordXref+  s(     $ ?r1r6   c                 \    U R                  UR                  5        UR                  X 5        g r>   )ru  r   r   )r   objectr   s      r4   r  PdfFile.writeObject.  s    		"X$r6   c                 V   U R                   R                  5       U R                  -
  U l        U R	                  S[        U R                  5      -  5        [        U R                  5       H=  u  nu  p#nUc  [        SX4-  5      eUS:X  a  SOSnSX#U4-  nU R	                  U5        M?     g)zWrite out the xref table.s
   xref
0 %d
NzNo offset for object %d (%s)r  r(  r,  s   %010d %05d %b 
)	rr  ry  r  	startxrefr   r)   r  r(   AssertionError)r   r1   offset
generationrN   r  r1  s          r4   r\  PdfFile.writeXref2  s    $..8

?S%889-6t~~-F)A)D~$2aY>@ @ #&77dT*f#-FF

4  .Gr6   c                 |    U R                  S5      U l        U R                  U R                  U R                  5        g)z8Write out the info dictionary, checking it for good formri   N)r  
infoObjectr  r  r   s    r4   r[  PdfFile.writeInfoDict?  s.     ,,V4$--8r6   c                     U R                  S5        U R                  [        [        U R                  5      U R                  U R
                  S.5      5        U R                  SU R                  -  5        g)zWrite out the PDF trailer.s   trailer
)SizeRootInfos   
startxref
%d
%%%%EOF
N)r   r   r)   r  r  r:  r4  r   s    r4   r]  PdfFile.writeTrailerE  sZ     	

< 

7(____&' 	(
 	

04>>ABr6   )'r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rr  r  r  r  r  r   r  r:  r  r  r  r  r  r  r  r  r  r4  r  r   r  r>   r  r   )NNNFN)r  )@r   r   r   r   r   r   r	   
deprecatedproperty	fontNamesmulti_byte_charprocstype1Descriptorsr  r+  r4  staticmethodrF  rM  rh  rk  r   r$  r#  r"  rx  rR  r  r  rS  r  r  r  delete_parameterr  r  r  rk  r~  rT  rU  r  hatchPatternsrV  r  rW  r  r  r  r  rX  r  rY  r  rZ  r  r)  r  ru  r  r\  r[  r]  r   __classcell__r  s   @r4   r  r  o  s   e9N '1M(NOI??628L3IJv.x/EF	__V  (": .@ -    , Q Q>	+?&
 04 
8B	1$
2h
 
6:.D /DL*@KD2h
" OOF+H 6 - M&6P.*:X
.,:=~5:,*  		@%!9	C 	Cr6   r  c                      ^  \ rS rSr\R
                  " S5      rSrU 4S jrS r	SS jr
S rSS	 jrSS
 jrSS.S jr SS jrS rSS jrS rSS.S jrS rS rSS jrS rSrU =r$ )r  iQ  zfonts/pdfcorefontsr}  c                 f   > [         TU ]  XC5        Xl        U R                  5       U l        X l        g r>   )r  r   r   new_gcr   	image_dpi)r   r   rP  r   r   r  s        r4   r   RendererPdf.__init__V  s'    '	++-"r6   c                 f    U R                   R                  " U R                  R                  5       6   g r>   )r   r$  r   rh  r   s    r4   rh  RendererPdf.finalize\  s!    		$''**,-r6   Nc                    [        USS5      nX!l        [        USS5      nUR                  5       c  UR                  SSS9  UR                  (       a  UR
                  UR
                  4Ul        OBUb  [        U5      S:  a  UR                  S	   S
4Ul        OUR                  S	   US	   4Ul        U R                  R                  U5      nU(       a  U R                  R                  " U6   X1l        XAl        g )N
_fillcolorr&  r&  r&  _effective_alphas      ?rY  r   T)isRGBAr  r  rY  )getattrrU  get_rgbset_foreground_forced_alpha_alpharW  r)   _rgbr   deltar   r$  )r   r   	fillcolor	orig_fillorig_alphasra  s         r4   check_gcRendererPdf.check_gc_  s    Bl;	!b"5zB::< l48$&IIryy#9B #i.1"4$&GGAJ#4B $&GGAJ	!#=B b!IIe$ "*r6   c                      U R                   S-  $ )Nr  )rP  r   s    r4   get_image_magnification#RendererPdf.get_image_magnificationz  s    ~~d""r6   c                    UR                   S S u  pgUS:X  d  US:X  a  g Uc  UR                  S5        U R                  U5        SU-  U R                  -  nSU-  U R                  -  nU R                  R                  U5      nUc]  U R                  R                  [        R                  USSXbU[        R                  U[        R                  [        R                  5        g UR                  5       R                  5       u  pppU R                  R                  [        R                  SSSSX#[        R                  XXX[        R                  U[        R                  [        R                  5        g )Nr  r   rY  r  r#   )r  	set_alphare  rP  r   r  r$  r%  r[  rM  rN  r\  frozen	to_values)r   r   rB   r   r  r  r  rN  imobtr1tr2tr3tr4tr5tr6s                  r4   
draw_imageRendererPdf.draw_image}  s&    xx|6Q!VLLb1Ht~~%1Ht~~%yy$$R(IIRXX1aAr/?/?!2>>2;;@ ,5+;+;+=+G+G+I(CcIIRXX1ar/?/? s2;K;K!2>>2;;@r6   c                    U R                  X5        U R                  R                  X#US L =(       a    UR                  5       S L UR	                  5       5        U R                  R                  U R                  R                  5       5        g r>   )re  r   r)  get_hatch_pathget_sketch_paramsr$  r   paint)r   r   rb  r  rgbFaces        r4   	draw_pathRendererPdf.draw_path  sg    b"		tO; 1 1 3t ;  "	$ 			)r6   hatchcolorsc                
   Sn[         R                  " U5      n[         R                  " U5      nUc  / n[        U5      (       d  SnUR                  5       (       + nO3[         R                  " US S 2S4   US   :H  5      (       a	  US   S:g  nOSn[        U5      (       d  SnOh[         R                  " [         R                  " U	5      S:H  5      (       a  SnO3[         R                  " US S 2S4   US   :H  5      (       a	  US   S:g  nOSn[        U5      S:  a  [        US   R
                  5      OSnU R                  X4XWU5      nUU-   S-   UU-  :  nU(       a  U(       d  [        R                  " XX#UXVXxXXXS9$ [         R                  " U	5      n/ n/ n[        U R                  X#U5      5       H  u  nu  nnU R                  R                  UUUUWW5      nUR                  U5        [        UR
                  5      (       a@  UR                  U5      nUR                  UR                   S	-  UR"                  S	-  45        M  UR                  S
5        M     [%        ['        UU5      5      nU R                  R                   S-  nU R                  R"                  S-  nU R                  R(                  n U " U R*                  R-                  5       6   S
u  n!n"U R/                  UUXVXxXXXS9 H  u  n#n$n%n&n'SU#s=::  a  U::  aa  O  O^SU$s=::  a  U::  aQ  O  ONU R1                  U&U'5        U#U!-
  U$U"-
  n)n(U " SSSSU(U)[2        R4                  U%[2        R6                  5	        U#U$n"n!Mw  UU%   u  n*n+U** U#s=::  a	  UU*-   ::  a  O  OU+* U$s=::  a	  UU+-   ::  d  O  M  U R1                  U&U'5        U#U!-
  U$U"-
  n)n(U " SSSSU(U)[2        R4                  U%[2        R6                  5	        U#U$n"n!M     U " U R*                  R9                  5       6   g )NTFr  )r   r  r&  r   r  r~  r  rW  r  r#   )r   asarrayr)   	get_hatchr  r   _iter_collection_uses_per_pathr   draw_path_collectionr   r(   _iter_collection_raw_pathsr   r  r*   r  r   r   r   zipr$  r   push_iter_collectionre  r%  rM  rN  pop),r   r   master_transformr  all_transformsoffsetsoffset_trans
facecolors
edgecolors
linewidths
linestylesantialiasedsurlsoffset_positionr  can_do_optimizationrf  rg  len_pathuses_per_pathshould_do_optimizationre  
path_codespath_extentsr1   rb  r  rN   r  path_extent_mapcanvas_widthcanvas_heightr$  lastxlastyxoyopath_idgc0r{  dxdyextent_xextent_ys,                                               r4   r   RendererPdf.draw_path_collection  s    #ZZ
+
ZZ
+
K:F&(lln"4vvjA&*T*::;;#D)S0&+#:Gvvbjj,344
1a4(Jt,<<==$T*c1&+# .1Z!^3uQx(();;7
D }$q(8m+CC 	 $-C44*>z	: : &&$
$-d.M.M /9 %: A i9911D)Wfg?Dd#
 4==!!''	2##TZZ!^T[[1_$EF##F+%:" s:|<=yy+		((2-!!u-1-B-BJ
O .C .N)BGS' B&,&1+Cm+Cc7+eR%ZBq!Q2r2+;+;W~~'!2u "1!9HhI>|h'>>!	RC=8+CCMM#w'%ZeB1aAr2r'7'7>>#r5E5?.N@ 	r6   c                    [        U5      n[        U5      nXx-  Xx-   S-   :  a  [        R                  " XX#XEU5        g U R                  X5        UR	                  U5      n	UR                  5       n
U R                  R                  nU R                  R                  X#XU R                  R                  UR                  5       UR                  5       5      nU" [        R                  5        Su  pUR                  USSU R                  R                   S-  U R                  R"                  S-  4SS9 H  u  nn[        U5      (       d  M  USS  u  nnSUs=::  a  U R                  R                   S-  ::  a)  O  O&SUs=::  a  U R                  R"                  S-  ::  d  O  Mo  UU-
  UU-
  nnU" SSSSUU[        R$                  U[        R&                  5	        UUpM     U" [        R(                  5        g )	Nr  rW  r   r  F)rd  r  r  r#   )r)   r   draw_markersre  r?  r>  r   r$  r  r   
_linewidthr  r  r%  r[  iter_segmentsr   r   rM  rN  r\  )r   r   marker_pathmarker_transrb  rc  r{  len_marker_pathusesr?  r>  r$  markerr  r  r   r  rB   r   r  r  s                        r4   r  RendererPdf.draw_markers  s   
 k*4y!O$:Q$>>%%d&*7<b"www!!''tTWW5G5G 13 	rxx"00DIIOOB.		0@0@0CD 1  NHd 8}}}1Q6$))//B"66;dii&6&6&;;UAIBq!Q2r2+;+;r~~/ !u  	r{{r6   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;   d   eUR                  nUR                  US   US   -  S45      nUR	                  U5      nUR                  U5      nU R
                  R                  Xc5      u  pxU R
                  R                  n	UR                  S   S:X  a:  UR                  S5        U R                  U5        U	" U[        R                  5        g US   n
[        R                  " XS S 2S S 2S4   5      (       a:  UR                  U
5        U R                  U5        U	" U[        R                  5        g US S 2S S 2S4   S S 2S S 2S 4   n
U R
                  R                  Xj5      u  pU R
                  R                  U5      nU	" [        R                  U[        R                   U[        R                  [        R"                  5        g )Nr   r  r#   r  r  rY  )r   r   r  )r)   r  r  r  r  r   r  r$  rk  re  r%  re  r   allcloser~  r[  rZ  r\  )r   r   r  r  rc  r  tpointsrN   r   r$  ri  smask_obgstates                r4   draw_gouraud_triangles"RendererPdf.draw_gouraud_triangles:  s   6{c&k)))v;!{{a||A!###||A!###{{a||A!###||A&(((qE!H!4a 89//&)//%())//@!!<<?aLLMM"4$w;;uQ1Wo..LLMM"4$ 1a7OAq$J/E))77GKAYY//9F288VR\\;; r6   c           	         X6s=:X  a  S:X  a3  O  O0U R                   R                  X-
  X%-
  [        R                  5        g [        R
                  " U5      nU R                   R                  [        R                  " U5      [        R                  " U5      [        R                  " U5      * [        R                  " U5      X[        R                  5        U R                   R                  SS[        R                  5        g r.  )	r   r$  r%  r]  r{   r|   r~   r}   r_  )r   rB   r   r   oldxoldyoldangles          r4   _setup_textposRendererPdf._setup_textposb  s    !!IIQXqx<LL'EIITXXe_dhhuo"hhuo-txx2==2 IIQ2::.r6   c                    U R                   R                  R                  USU5      u  pxpnUR                  5       b6  U R                  R
                  S   S   R                  [        XX7X5      5        [        R                  S   n[        R                  " U5      nU R                  R                  [        R                  5        U R                  R                  [        R                  " U5      [        R                   " U5      [        R                   " U5      * [        R                  " U5      X#[        R"                  5        U R%                  XR&                  5        SnSu  nnU R                  R                  [        R(                  5        U
 H  u  nnnnnnU R                  R*                  R-                  UUU5      u  nn[/        UR0                  UR2                  5      nU R5                  UUSUU5        UUnnUUU4U:w  aJ  U R                  R                  U R                  R7                  UU5      U[        R8                  5        UUU4nU R                  R                  U R;                  U/U5      [        R<                  5        M     U R                  R                  [        R>                  5        U H`  u  nnpxU R                  R                  [        R                  UUXx[        R@                  [        RB                  [        RD                  5        Mb     U R                  R                  [        RD                  5        g )Nr  r  r#   r  r  rW  r   )#
_text2pathmathtext_parserparser   r   r  r*   r   r_   rv  r{   r|   r$  r%  r[  r~   r}   rM  re  r`  rG  r  track_glyphr   r  r  r  r  r^  _encode_glyphsra  rH  rJ  r?  r\  )r   r   rB   r   r2   r  r   r   r   descentglyphsrectsr  r   	prev_fontr  r  r  fontsizer  r  oxoyr  subset_charcoder  s                             r4   draw_mathtextRendererPdf.draw_mathtextl  sx    OO++11!R> 	.w ::<#II""2&q)001Eq20 1 <</ LL		"		!dhhqk((1+txx{r//	1 	b''"	
d		':@6D(E;B,0II,H,H,T,Te[-*)L/ T__=IB46R$D<2i?		  !3!3I|!Lh!#0%|X=	IIT00/1BHMWW& ;A 			% &+!BEIIRXXr2u\\277BKKA &+
 			%r6   )mtextc          
      .
   U R                  5       nUR                  5       n	UR                  XI5      n
[        R                  " U
S5       nUu  nS S S 5        UR                  5       bL  U R                  R                  S   S   R                  [        XUWR                  UR                  U5      5        S / pWR                   H  nUR                  U:w  aN  U R                  R                  UR                  5      nUSUUR                  R                  //-  nUR                  nUSUR                   UR"                  [%        UR&                  /5      /UR                   UR                  -   //-  nU R                  R(                  R+                  UR                  UR&                  UR,                  5        M     Su  nnn	U[/        U5      S-
  :  a  UUUS-    u  nnUS   S:X  a  US   n	OUS   US   s=:X  a  S:X  a  O  O~US   US   :X  ar  US	   US   -
  n[1        U5      S
:  a-  US   S==   US   S   -  ss'   US	==   US	   US   -
  -  ss'   O#US==   US-  U	-  US   S   /-  ss'   US	   US	'   UUS-   	 M  US-  nU[/        U5      S-
  :  a  M  [3        5       R5                  U5      R7                  X#5      nU R9                  XR:                  5        U R                  R=                  [>        R@                  5        Su  nnnnU H  nUS   S:X  a3  U R                  R=                  US   US   [>        RB                  5        M?  US   S:X  a  URE                  US   US   45      u  nnU RG                  UUUUU5        UUnn[/        US   5      S:X  a2  U R                  R=                  US   S   [>        RH                  5        M  U R                  R=                  US   [>        RJ                  5        M   e   U R                  R=                  [>        RL                  5        U RO                  5       nURQ                  U5        URS                  S5        [T        RV                  [T        RX                  [T        RX                  [T        RX                  [T        RZ                  /nUR\                   HM  u  nnnn[U        UU/UU-   U/UU-   UU-   /UUU-   /SS//U5      n U R_                  UU UUR:                  5        MO     g ! , (       d  f       GN= f)Nr  r  r#   r  r1  )r   r   Nr  r   r  g?r  g     @@r   )0get_texmanagerget_size_in_pointsmake_dvir   Dvir   r   r  r*   r   r   r   r1  r  r  sizerB   r   r   rM  r  r  indexr)   absr   
rotate_degr   re  r`  r$  r%  rG  r^  r  r  ra  rb  rH  rO  copy_propertiesset_linewidthr    MOVETOLINETO	CLOSEPOLYboxesr|  )!r   r   rB   r   r2   r  r   r  
texmanagerr  dvifiledvir   oldfontseqr1  r  r1   curxeltnxtr6  mytranscuryr  r  boxgcr  x1y1r  rN  rb  s!                                    r4   draw_texRendererPdf.draw_tex  st   ((*
**,%%a2[["%ED & ::<#II""2&q)001Eq$**dkk52: ; RIIDyyG#))//		:$))..9::))VTVVTVVeTZZL.A-BDFF4::DUVWWCII((44TYY

DJJW  '4#c(1*n1QqSzHC1vq6Q3q6+V+A#a&0@Q#a&v;$F2J#a&)+JFc!fSVm+FFvf}X5s1vayAAF VCF!HFA #c(1*n" *''.88> 	b''"		'!+dD$C1v		  QQ?Q6!$..AA/?@
d##D$tTB!4ds1v;!#II$$SVAY8II$$SVR[[9u  			% b!A;;T[[$++>># JJLBAq"bBqD":1bd|b"Q$ZQ!")+DNN5$9 'U &%s   	T
Tc                 T    US;   a  [        U5      $ SR                  S U 5       5      $ )Nr  r6   c              3   D   #    U  H  oR                  S S5      v   M     g7f)r  bigN)to_bytes)r   rM  s     r4   r   -RendererPdf._encode_glyphs.<locals>.<genexpr>  s     EfUq%00fs    )r   r+   )r   r  r  s      r4   r  RendererPdf._encode_glyphs  s)    v= xxEfEEEr6   c                 8    SSSS.U   nUR                  US5      $ )Ncp1252r   r  )r#   r  rY  r]   )r   )r   r2   r  r  s       r4   encode_stringRendererPdf.encode_string  s$    I:>xHxx),,r6   c	           
      h
  ^ ^^ T R                  XR                  5        U(       a  T R                  XX4XV5      $ UR                  5       mUb!  UR	                  5       n	UR                  5       n
OS =p[        R                  S   (       a  T R                  U5      nT R                  R                  [        R                  T R                  R                  U5      T[        R                  5        T R                  X#U5        T R                  R                  T R!                  USS9[        R"                  [        R$                  5        GOyT R'                  U5      n[        R                  S   mUUU 4S jnT R                  R                  [        R(                  5        [*        R,                  " U5      nT R                  R                  [*        R.                  " U5      [*        R0                  " U5      [*        R0                  " U5      * [*        R.                  " U5      X#[        R2                  5        / nS nSnT R                  R                  [        R                  5        [4        R6                  " XKU	U
S9 GH  nT R                  R8                  R;                  UR<                  UR>                  UR@                  5      u  nnUR<                  U4U:w  a  U" U5        [C        UR<                  RD                  UR<                  RF                  5      nT R                  R                  UU5      nT R                  R                  UT[        R                  5        T R                  URH                  SSUSS5        UR<                  U4nURH                  nURJ                  (       a<  U" U5        T R                  R                  URJ                  [        RL                  5        URN                  (       a  URQ                  URN                  5        URQ                  U5        URJ                  (       d  GM  U" U5        T R                  R                  S[        RL                  5        GM     U" U5        T R                  R                  [        R$                  5        T R                  R                  [        RR                  5        URU                  5       bb  URW                  XIU
S9  URY                  5       u  nnT R                  RZ                  S   S   RQ                  []        XUUS	-  US	-  U5      5        g g )
Nr}  r#   )r  r  c           
      H  > U (       d  g TR                   R                  [        R                  " U [        5       VVs/ s H2  u  pU[
        :X  a  S[        U5      -  T-  OTR                  UT5      PM4     snn[        R                  5        U R                  5         g s  snnf )Ni)r   r$  r   groupbyr   r   r  r  r%  rb  clear)kerns_or_charstpgroupr  r  r   s      r4   output_singlebyte_chunk6RendererPdf.draw_text.<locals>.output_singlebyte_chunk	  s    %		  
 '0&7&7&MO&M :<ued5k)H4--eX>?&MO KK! $$&	Os   9B
r   )featureslanguager  r  )/re  r`  r  r  get_fontfeaturesget_languager_   rv  _get_font_afmr   r$  r%  rG  r  r^  r  r  ra  rH  _get_font_ttfr[  r{   r|   r~   r}   rM  r
   layoutr  r  	ft_objectr  r  r   r  r  rB   r   r`  	prev_kernr*   r\  r   set_textget_width_heightr  r   )r   r   rB   r   r2   r  r   ismathr  r  r  r  r   r   singlebyte_chunkr  prev_start_xitemr  r  r  ft_namer   r   r  r  s   `                       @@r4   	draw_textRendererPdf.draw_text  s   
 	b''"%%bQ4??**,--/H))+H"&&H <<,-%%d+DIIR]]!YY//5xPe,IIT//A/>WWbkk3  %%d+D||N3H
' IIRXX&U#AIITXXa[$((1+"hhqk\488A;2#3#35  "ILIIR]]+%,,Qx6>@#'99#?#?#K#KNNDIIt/?/?$A NNF+y8+,<= ()=)=)-)B)B!DI"ii00FCGII$$WhF''1lAqI!% 8I#'66L66+,<=II$$TVVR[[9>>$++DNN; ''1666+,<=II$$Q4+@, $$45IIR[[)IIR[[)::<#MM!MB 113ME6II""2&q)001Eq%"*frk52: ; $r6   c                 ,    [        U R                  5      $ r>   )r%  r   r   s    r4   rO  RendererPdf.new_gcW	  s    !$)),,r6   )r   r   rP  r>   r   rB  )r   r   r   r   r   _get_data_pathr  _use_afm_rc_namer   rh  re  rh  ru  r|  r  r  r  r  r  r  r  r  r  rO  r   rK  rL  s   @r4   r  r  Q  s    (()=>M+#.+6#@<* >Bnb "$L& P/+&Z ;? R:hF
-_;B- -r6   r  c            
          ^  \ rS rSrU 4S jrS rS rS rS rSSS	S
.r	SSS	S.r
S rS rS rS rS rS rS rS rS rS rS rS\4S\4S\4S\4S\4S\4S\4S\4S\44	rS  rU 4S! jrS" rS#rU =r$ )$r%  i\	  c                 X   > [         TU ]  5         SU l        SU l        Xl        S U l        g )NrV  rX  )r  r   rU  rW  r   parent)r   r   r  s     r4   r   GraphicsContextPdf.__init__^	  s)    )!+	r6   c                 N    [        U R                  5      nUS	 US	 [        U5      $ )Nr   r  )r   __dict__repr)r   rv   s     r4   r   GraphicsContextPdf.__repr__e	  s'    fIhKAwr6   c                     U R                   S:  =(       aG    U R                  S:  =(       a1    [        U R                  5      S:*  =(       d    U R                  S   S:g  $ )z
Predicate: does the path need to be stroked (its outline drawn)?
This tests for the various conditions that disable stroking
the path, in which case it would presumably be filled.
r   r  r&  )r  r_  r)   r`  r   s    r4   r>  GraphicsContextPdf.strokek	  sK     !# =a =TYY1$;		!(;	>r6   c                     [        U5      (       a  US   nOU R                  nU R                  =(       d(    USL=(       a    [        U5      S:*  =(       d    US   S:g  $ )z
Predicate: does the path need to be filled?

An optional argument can be used to specify an alternative
_fillcolor, as needed by RendererPdf.draw_markers.
r   Nr  r&  )r)   rU  _hatch)r   argsrU  s      r4   r?  GraphicsContextPdf.fillv	  sZ     t99aJJ A4' @j/Q&>*Q-3*>	Br6   c                 f    [         R                  U R                  5       U R                  5       5      $ )zW
Return the appropriate pdf operator to cause the path to be
stroked, filled, or both.
)r%  rB  r?  r>  r   s    r4   rz  GraphicsContextPdf.paint	  s!    
 }}TYY[$++-88r6   r   r#   r  )buttr  
projecting)miterr  bevelc                 @    U R                   U   [        R                  /$ r>   )r  r%  rY  r   styles     r4   capstyle_cmdGraphicsContextPdf.capstyle_cmd	  s    u%r}}55r6   c                 @    U R                   U   [        R                  /$ r>   )r&  r%  rX  r-  s     r4   joinstyle_cmd GraphicsContextPdf.joinstyle_cmd	  s    &77r6   c                 &    U[         R                  /$ r>   )r%  rc  )r   r   s     r4   linewidth_cmd GraphicsContextPdf.linewidth_cmd	  s    r''r6   c                 P    Uu  p#Uc  / nSn[        U5      U[        R                  /$ r.  )r   r%  rW  )r   dashesr6  dashs       r4   dash_cmdGraphicsContextPdf.dash_cmd	  s-    <DFT
FBJJ//r6   c                 \    U R                   R                  U5      nU[        R                  /$ r>   )r   rk  r%  rZ  )r   ri  forcedeffective_alphasrN   s        r4   	alpha_cmdGraphicsContextPdf.alpha_cmd	  s&    yy##$45bll##r6   c                 >   U(       dC  U R                   b  U R                  U R                   5      $ [        S5      [        R                  /$ X R                   X4nU R
                  R                  U5      n[        S5      [        R                  U[        R                  /$ )Nr!  r  )rU  fillcolor_cmdrM   r%  rT  r   r  rV  )r   r  hatch_colorhatch_linewidthr  rN   s         r4   	hatch_cmdGraphicsContextPdf.hatch_cmd	  s    *))$//::[)2+E+EFF&PK99))+6DOR%?%?"//1 1r6   c                     [         R                  S   (       a  / $ US   US   s=:X  a	  US   :X  a  O  OUS   [        R                  /$ / US S Q[        R                  P$ Nzpdf.inheritcolorr   r#   r  r  )r_   rv  r%  rO  rQ  r   r  s     r4   rgb_cmdGraphicsContextPdf.rgb_cmd	  s^    <<*+Iq6SV%s1v%FB--../S!W/b..//r6   c                     Ub  [         R                  S   (       a  / $ US   US   s=:X  a	  US   :X  a  O  OUS   [        R                  /$ / US S Q[        R                  P$ rH  )r_   rv  r%  rP  rR  rI  s     r4   rB   GraphicsContextPdf.fillcolor_cmd	  sb    ;#,,'9:IVs1v'Q'FB00112S!W2b1122r6   c                     [        U R                  5      nUR                  U 5        U R                  Ul        Xl        [        R
                  /$ r>   )r%  r   r  r  r%  r[  )r   r  s     r4   r  GraphicsContextPdf.push	  s:    #DII.t$zr6   c                     U R                   c   eU R                  U R                   5        U R                   R                   U l         [        R                  /$ r>   )r  r  r%  r\  r   s    r4   r  GraphicsContextPdf.pop	  sA    {{&&&T[[)kk((}r6   c                    / nU R                   U R                  4X4:w  aX  U R                  bK  UR                  U R	                  5       5        U R                   U R                  4X4:w  a  U R                  b  MK  U R                   U R                  4X4:w  d  U R                  c  UR                  U R                  5       5        U R                   U:w  a?  UR                  U[        R                  [        R                  [        R                  /5        U R                  U:w  aV  UR                  5       u  pEUR                  [        R                  XESS9[        R                  [        R                  /-   5        U$ )z1Set clip rectangle. Calls `.pop()` and `.push()`.Fr  )	_cliprect	_clippathr  extendr  r  r%  rJ  rd  r@  get_transformed_path_and_affiner  r  )r   cliprectclippathr(  rb  affines         r4   clip_cmdGraphicsContextPdf.clip_cmd	  s   /H3GGKK+KK
# /H3GGKK+ ^^T^^,0DD#KK		$~~)Xr||RWWbjjIJ~~)'GGI**4%*HWWbjj)*+ r6   )rS  rT  )r_  r^  rW  )	_capstyle)rU  )
_joinstyle)r  )_dashes)r`  )r#  _hatch_color_hatch_linewidthc           
         / nSnU R                    H  u  pESnU H;  n[        X5      n[        X5      n	 Ub  U	c  XLnO[        X:g  5      n U(       d  M;    O   UR                  S:X  a	  U(       a  SnU(       d  Mj  UR                  S:X  a  SnU Vs/ s H  n[        X5      PM     n	nUR                  U" U /U	Q76 5        U H  n[        X[        X5      5        M     M     U$ ! [         ah    [        R
                  " U5      n[        R
                  " U	5      n	UR                  U	R                  :g  =(       d    [        R                  " X:g  5      n GN	f = fs  snf )ze
Copy properties of other into self and return PDF commands
needed to transform *self* into *other*.
FrE  TrB  )commandsr[  r   r   r   r  r  anyr   rU  setattr)
r   r  r(  fill_performedparamscmd	differentpourstheirss
             r4   ra  GraphicsContextPdf.delta	  s@   
 ==KFIt' *	9|v~$($6	$($8	 9 " ||{*~ 	y<<?2%)N5;<V'%+V<C.v./ADWU%67  7 ): ' " 9::d+DZZ/F!%v||!; "8!#!7 9 =s   	C$C$E$A.EEc                    > [         TU ]  U5        [        USU R                  5      n[        USU R                  5      nX l        X0l        g)z%
Copy properties of other into self.
rU  rW  N)r  r  r[  rU  rW  )r   r  rb  r>  r  s       r4   r  "GraphicsContextPdf.copy_properties
  sH     	&E<A	"5*=#'#9#9;#!1r6   c                     / nU R                   b.  UR                  U R                  5       5        U R                   b  M.  U$ )z2
Make sure every pushed graphics state is popped.
)r  rU  r  )r   r(  s     r4   rh  GraphicsContextPdf.finalize
  s6     kk%KK
# kk%r6   )rW  rU  r   r  )r   r   r   r   r   r   r>  r?  rz  r  r&  r/  r2  r5  r:  r?  rE  rJ  rB  r  r  rZ  rb  ra  r  rh  r   rK  rL  s   @r4   r%  r%  \	  s    	>B9 Qa8Iq15J68(0$
103, 
$X.	99E	&	-(	-(	-(	x 	G	7CH$L	2 r6   r%  c                       \ rS rSrSr\R                  " SSSS9SS j5       rS	 rS
 r	S r
S rS rSS jrS r/ SQ4S jrSrg)PdfPagesi)
  a  
A multi-page PDF file.

Examples
--------
>>> import matplotlib.pyplot as plt
>>> # Initialize:
>>> with PdfPages('foo.pdf') as pdf:
...     # As many times as you like, create a figure fig and save it:
...     fig = plt.figure()
...     pdf.savefig(fig)
...     # When no figure is specified the current figure is saved
...     pdf.savefig()

Notes
-----
In reality `PdfPages` is a thin wrapper around `PdfFile`, in order to avoid
confusion when using `~.pyplot.savefig` and forgetting the format argument.
r  
keep_emptyzThis parameter does nothing.)addendumNc                 *    Xl         X0l        SU l        g)a  
Create a new PdfPages object.

Parameters
----------
filename : str or path-like or file-like
    Plots using `PdfPages.savefig` will be written to a file at this location.
    The file is opened when a figure is saved for the first time (overwriting
    any older file with the same name).

metadata : dict, optional
    Information dictionary object (see PDF reference section 10.2.1
    'Document Information Dictionary'), e.g.:
    ``{'Creator': 'My software', 'Author': 'Me', 'Title': 'Awesome'}``.

    The standard keys are 'Title', 'Author', 'Subject', 'Keywords',
    'Creator', 'Producer', 'CreationDate', 'ModDate', and
    'Trapped'. Values have been predefined for 'Creator', 'Producer'
    and 'CreationDate'. They can be removed by setting them to `None`.
N)	_filename	_metadata_file)r   r  rs  rf   s       r4   r   PdfPages.__init__>
  s    . "!
r6   c                     U $ r>   r   r   s    r4   	__enter__PdfPages.__enter__Y
  s    r6   c                 $    U R                  5         g r>   )rk  )r   exc_typeexc_valexc_tbs       r4   __exit__PdfPages.__exit__\
  s    

r6   c                 z    U R                   c#  [        U R                  U R                  S9U l         U R                   $ )Nrf   )rx  r  rv  rw  r   s    r4   _ensure_filePdfPages._ensure_file_
  s,    :: $..IDJzzr6   c                     U R                   b<  U R                   R                  5         U R                   R                  5         SU l         gg)zG
Finalize this object, making the underlying file a complete
PDF file.
N)rx  rh  rk  r   s    r4   rk  PdfPages.closed
  s:    
 ::!JJ!JJDJ "r6   c                 6    U R                  5       R                  $ )zy
Return a modifiable information dictionary object
(see PDF reference section 10.2.1 'Document Information
Dictionary').
)r  r  r   s    r4   infodictPdfPages.infodictn
  s       "+++r6   c                    [        U[        5      (       dV  Uc  [        R                  " 5       nO[        R                  " U5      nUc  [        SU 35      eUR                  R                  nUR                  " U 4SSS.UD6  g)z
Save a `.Figure` to this file as a new page.

Any other keyword arguments are passed to `~.Figure.savefig`.

Parameters
----------
figure : `.Figure` or int, default: the active figure
    The figure, or index of the figure, that is saved to the file.
Nz
No figure r  )r  re   )	r?   r   r   
get_activeget_fig_managerr   canvasfiguresavefig)r   r  kwargsmanagers       r4   r  PdfPages.savefigv
  sp     &&))~..*--f5 :fX!677^^**FtCE5CFCr6   c                 H    [        U R                  5       R                  5      $ )z=Return the current number of pages in the multipage pdf file.)r)   r  r  r   s    r4   get_pagecountPdfPages.get_pagecount
  s    4$$&//00r6   r-  c                 B    U R                  5       R                  X5        g)z
Add a new text note to the page to be saved next. The optional
positionRect specifies the position of the new note on the
page. It is outside the page per default to make sure it is
invisible on printouts.
N)r  r4  )r   r1  r2  s      r4   attach_notePdfPages.attach_note
  s     	'';r6   )rx  rv  rw  r  r>   )r   r   r   r   r   r	   rI  r   r{  r  r  rk  r  r  r  r  r   r   r6   r4   rr  rr  )
  s^    ( 
6<$BDD2
,D,1 .@ <r6   rr  c                   J   ^  \ rS rSrSrSS0rS rSSS.S jrU 4S	 jrS
r	U =r
$ )FigureCanvasPdfi
  r  r  zPortable Document Formatc                     g)Nr  r   r   s    r4   get_default_filetype$FigureCanvasPdf.get_default_filetype
  s    r6   N)bbox_inches_restorerf   c                   U R                   R                  nSU R                   l        U R                   R                  5       u  pV[        U[        5      (       a  UR                  5       nO	[        XS9n UR                  XV5        [        U R                   XVU[        XtXe5      US9nU R                   R                  U5        UR                  5         [        U[        5      (       d  UR                  5         [        U[        5      (       a  UR                  5         g UR                  5         g ! [        U[        5      (       a  UR                  5         f UR                  5         f = f)Nr  r  )r  )r  dpiget_size_inchesr?   rr  r  r  r+  r   r  drawrh  r"  rk  )	r   r  r  rf   r  r   r   r   renderers	            r4   	print_pdfFigureCanvasPdf.print_pdf
  s    kkoo335h))((*D87D	LL'(UCDv5$79H KKX&h11(H-- 

 (H-- 

s   4BD- -8E%c                 T   > U R                   R                  5         [        TU ]  5       $ r>   )r  draw_without_renderingr  r  )r   r  s    r4   r  FigureCanvasPdf.draw
  s    **,w|~r6   r   )r   r   r   r   	fixed_dpi	filetypesr  r  r  r   rK  rL  s   @r4   r  r  
  s0     I23I '+T4 r6   r  c                       \ rS rSr\rSrg)_BackendPdfi
  r   N)r   r   r   r   r  FigureCanvasr   r   r6   r4   r  r  
  s    "Lr6   r  )K   rA  )]r   r   r   r   enumr   	functoolsr   ior   r   loggingr{   rX   r8  r  rA  rs   r  rw  numpyr   PILr   
matplotlibr_   r	   r
   r   r   r   matplotlib._pylab_helpersr   matplotlib.backend_basesr   r   r   r   r   !matplotlib.backends.backend_mixedr   matplotlib.figurer   matplotlib.font_managerr   r   r   r  matplotlib._afmr   matplotlib.ft2fontr   r   r   r   matplotlib.transformsr   r   matplotlib.pathr    matplotlib.datesr!   r"   r  r$   	getLoggerr   r  r5   rm   ry   r   r   r   r@   	maketransr   r   r   rM   r  r%  rh  r  r  RendererPDFPSBaser  r%  rr  r  FigureManagerPdfexportr  r   r6   r4   <module>r     s       $     	   
       F F )  @ $ S S  H H 4      "d,Tn0,"*04 }}
u5UD EF#R .      B B# B#JZ$ Z$z0_C _CD'H-/33 H-VJ, JZn< n<b%& %P %  
#( # #r6   