
    G8cx5                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlZ	d dl
Z
d dlZd dlmZmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlm Z m!Z! d dl"m#Z#  e!dg      d        Z$e
jJ                  jM                  dddg      e
jJ                  jM                  dddg      d               Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0e#d        Z1d  Z2 e!d!g      d"        Z3 e!d#g      d$        Z4ejj                  jm                  d%       e d&d'g(      d)               Z7e#d*        Z8d+ Z9 e!d,g      d-        Z:d. Z; e!d/gd01      d2        Z< e!d3gd41      d5        Z=y)6    N)Path)NamedTemporaryFile)pyplotrcParamsfont_manager)_get_data_path)FT2Font)findfontFontProperties)get_glyphs_subset)PdfPages)	Rectangle)check_figures_equalimage_comparison)needs_usetexzpdf_use14corefonts.pdfc                     dt         d<   dt         d<   dt         d<   dgt         d<   d	t         d
<   d} t        j                         \  }}|j                  d       |j	                  dd| ddd       |j                  dd       y )NTzpdf.use14corefontsz
sans-serifzfont.family   z	font.size	Helveticazfont.sans-serifr   zpdf.compressionu   A three-line text positioned just above a blue line
and containing some French characters and the euro symbol:
"Merci pépé pour les 10 €"z0Test PDF backend with option use14corefonts=Trueg      ?centerbottom   )horizontalalignmentverticalalignmentfontsize)	linewidth)r   pltsubplots	set_titletextaxhline)r   figaxs      C/usr/lib/python3/dist-packages/matplotlib/tests/test_backend_pdf.pytest_use14corefontsr$      s    %)H!"*H]H[#.-H"#H"D llnGCLLCDGGCd&   JJscJ"    zfontname, fontfile)DejaVu SanszDejaVuSans.ttf)WenQuanYi Zen Heiwqy-zenhei.ttcfonttype   *   c                 d   t        t        t        | g                  j                  |k7  rt	        j
                  d| d       |t        d<   t        j                         \  }}|j                  g d       |j                  d|        |j                  t        j                         d	       y )
NfamilyzFont z may be missingzpdf.fonttype      r*   z
Axes Title)fontpdfformat)r   r
   r   namepytestskipr   r   r   plotr   savefigioBytesIO)fontnamefontfiler)   r!   r"   s        r#   test_embed_fontsr?   -   s     H^H:678==IeH<78'H^llnGCGGILLHL-KK

UK+r%   c                     t        t        j                               5 } | j                         dk(  sJ t	        j
                         \  }}|j                  g d       |j                  | d       | j                         dk(  sJ | j                          | j                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r/   r3   r4   r0   r1   )r   r;   r<   get_pagecountr   r   r9   r:   )r3   r!   r"   s      r#   test_multipage_pagecountrB   =   s    	"**,	 (3  "a''',,.R
	C&  "a'''  "a'''( ( (s   BB55B>c                  p   t        j                         } t        |       5 }t        d      D ]=  }t	        j
                         \  }}|j                  d       |j                  |d       ? 	 d d d        | j                         }|j                  d      dk(  sJ t        |      dk  sJ y # 1 sw Y   @xY w)N
   zThis is a long titler3   r4   s	   startxrefr0   i@  )r;   r<   r   ranger   r   r   r:   getvaluecountlen)pdfior3   ir!   r"   ss         r#   test_multipage_properfinalizerL   H   s    JJLE	% +Cr 	+AllnGCLL/0KKEK*	++
 	A77< A%%%q6E>>+ +s   AB,,B5c                     t        d      5 } t        |       5 }|j                  j                  j                  }d d d        t
        j                  j                        sJ 	 d d d        t        j                         t        |d      5 }	 d d d        t
        j                  j                  |      rJ t        j                         \  }}|j                  g d       t        d      5 } t        |       5 }|j                  j                  j                  }|j                          d d d        t
        j                  j                  |      sJ 	 d d d        t        j                  |       t        d      5 } t        | d      5 }|j                  j                  j                  }|j                          d d d        t
        j                  j                  |      sJ 	 d d d        t        j                  |       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   kxY w)NF)delete)
keep_emptyr/   )r   r   _filefhr6   ospathexistsremover   r   r9   r:   )tmpr3   filenamer!   r"   s        r#   test_multipage_keep_emptyrX   T   s    
5	) (Sc] 	)cyy||((H	)ww~~h'''( IIh	(u	- ww~~h'''llnGCGGI	5	) (Sc] 	cyy||((HKKM	 ww~~h'''	(
 IIh	5	) (Sce, 	yy||((HKKM	 ww~~h'''	(
 IIh1	) 	)( ( 	 	( (	 	( (su   H!H)HH /H:;1H-,)H:?I1I>)IH	HH H*-H7	2H::II	IIc                  `   t        j                  t        j                  ddd      t        j                  ddd            \  } }t        j                  |dz        }t	        j
                         \  }}|j                  dd       |j                  |g d       |j                  |d d d	   g d
       dt        j                  d<   t        t        j                               5 }|j                  |d       t        |j                  j                        dk(  sJ 	 d d d        dt        j                  d<   t        t        j                               5 }|j                  |d       t        |j                  j                        dk(  sJ 	 d d d        y # 1 sw Y   {xY w# 1 sw Y   y xY w)N   r0   r1   r   r*   )r   r0   r   r0   )extent)r1   r*   r   r0   Tzimage.composite_imager3   r4   F)npmeshgridarangesinr   r   set_xlimimshowr   r   r;   r<   r:   rH   rP   _images)XYZr!   r"   r3   s         r#   test_composite_imagerh   s   sQ    ;;ryyQ*BIIb!Q,?@DAq
qAvAllnGCKK1IIaI%IIa"glI+,0CLL()	"**,	 +3C&399$$%***+ -2CLL()	"**,	 +3C&399$$%***+ +	+ ++ +s   %8F8F$F!$F-c                    t        j                  d      }| j                  dd       t        j                         \  }}|j                  t        d             ddddt        j                  d	d
dt        j                  t        j                  d                  dd}t        j                         }|j                  ||d       |j                  j                  |      5 }|j                  j!                         D ci c]  \  }}|t#        |       }	}}d d d        	dddt$        j&                   ddddt$        j&                   dddd	k(  sJ y c c}}w # 1 sw Y   DxY w)NpikepdfSOURCE_DATE_EPOCH0r[   meMultipage PDF	Test pagetest,pdf,multipage  r   r0   r   tzinfoTrueAuthorTitleSubjectKeywordsModDateTrappedr3   )metadatar5   D:19700101000000ZMatplotlib v, https://matplotlib.orgD:19680801000000ZMatplotlib pdf backend v/True	z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez	/Producerz/Subjectz/Titlez/Trapped)r7   importorskipsetenvr   r   r9   rE   datetimetimezone	timedeltar;   r<   r:   Pdfopendocinfoitemsstrmpl__version__
monkeypatchrj   r!   r"   mdbufr3   kvinfos
             r#   test_savefig_metadatar      sP   !!),G*C0llnGCGGE!H  ($$!Qx001C1CA1FGI
B **,CKKbK/			#	 ;#&)kk&7&7&9:da3q6	::; ,"3??"33KL)'//@A!
 
 
 
 ;; ;s   "E EEEE%c                     t        j                         \  } }t        j                  t        d      5  | j                  t        j                         dddi       d d d        t        j                  t        d      5  | j                  t        j                         ddd	i       d d d        t        j                  t        d
      5  | j                  t        j                         dddi       d d d        t        j                  t        d      5  | j                  t        j                         dddi       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   y xY w)Nz#Unknown infodict keyword: 'foobar'.)matchr3   foobarinvalid)r5   r|   z%not an instance of datetime.datetime.rz   z
1968-08-01z'not one of {"True", "False", "Unknown"}r{   fooznot an instance of str.rw   i  )r   r   r7   warnsUserWarningr:   r;   r<   r!   r"   s     r#   test_invalid_metadatar      s;   llnGC	kA
C PBJJL(I9NOP 
kC
E 8BJJL'6 	 	88
 
kE
G MBJJL)U9KLM 
k)B	C JBJJL'4IJ JP P8 8
M MJ Js/   )E	?)E)E!)E-	EE!E*-E6c                 0   t        j                  d      }| j                  dd       t        j                         \  }}|j                  t        d             ddddt        j                  d	d
dt        j                  t        j                  d                  dd}t        j                         }t        ||      5 }|j                  |       |j                  |       d d d        |j                  j                  |      5 }|j                   j#                         D ci c]  \  }}|t%        |       }	}}d d d        	dddt&        j(                   ddddt&        j(                   dddd	k(  sJ y # 1 sw Y   xY wc c}}w # 1 sw Y   PxY w)Nrj   rk   rl   r[   rm   rn   ro   rp   rq   r   r0   r   rr   rt   ru   )r|   r}   r~   r   r   r   r   r   )r7   r   r   r   r   r9   rE   r   r   r   r;   r<   r   r:   r   r   r   r   r   r   r   r   s
             r#   test_multipage_metadatar      sx   !!),G*C0llnGCGGE!H  ($$!Qx001C1CA1FGI
B **,C	#	# sCC 
		#	 ;#&)kk&7&7&9:da3q6	::; ,"3??"33KL)'//@A!
 
 
 
 
 ;; ;s*    #E:F$F:F:FFFc                     t        j                  d      } dt        j                  d      }|j	                  ddd d       |j	                  dd	d
 d       t        j                         5 }|j                  |d       | j                  j                  |      5 }|j                  d   j                  }dD ]X  \  }t        fd|D        d       }|J t        |dd       J |j                  d   t        j                   |      dz  k(  rXJ  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrj   &https://test_text_urls.matplotlib.org/r1   r0   figsize皙?ztest plain 123plain)urlg?ztest mathtext $123$mathtextr3   r4   r   ))z0.1r   )z0.4r   c              3   ^   K   | ]$  }|j                   j                    k(  s!| & y wNAURI).0afragmenttest_urls     r#   	<genexpr>z!test_text_urls.<locals>.<genexpr>   s)     M1!##''z(5L*LQMs   "--
QuadPointsr0   H   )r7   r   r   figurer   r;   r<   r:   r   r   pagesAnnotsnextgetattrRectdecimalDecimal)	rj   r!   fdr3   annotsyannotr   r   s	          @@r#   test_text_urlsr      sL   !!),G7H
**V
$CHHS#'z-?H@HHS#,XJh2GHH	 @Bu%[[b! 	@SYYq\((F  G @8MM (((ulD9AAAzz!}(:R(????@	@@ @	@ 	@@ @s+   4/D8#A3D,D,D8,D5	1D88Ec                  X   t        j                  d      } dt        j                  d      }|j	                  dddd        t        j                         5 }|j                  |d	
       | j                  j                  |      5 }|j                  d   j                  }t        fd|D        d       }|J t        |dd       J |j                  d   |j                  d   t!        j"                  d      z
  k(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrj   r   )r0   r0   r   r   N-   )rotationr   r3   r4   r   c              3   X   K   | ]!  }|j                   j                   k(  s| # y wr   r   r   r   r   s     r#   r   z)test_text_rotated_urls.<locals>.<genexpr>  s"     ?qaccggH:&>?s   **r      z0.00001)r7   r   r   r   r   r;   r<   r:   r   r   r   r   r   r   r   r   r   r   rj   r!   r   r3   r   r   r   s         @r#   test_text_rotated_urlsr      s+   !!),G7H
**V
$CHHS#sRzH;	 @Bu%[[b! 	@SYYq\((F ?F?E $$$5,5AAA::a="W__Y%??@ @ @	@@ @	@ 	@@ @s%   /D 	A9DD D	D  D)c                  $   t        j                  d      } dt        j                  d      }|j	                  dddd d	
       t        j                         5 }|j                  |d       | j                  j                  |      5 }|j                  d   j                  }t        fd|D        d       }|J |j                  d   t        j                  d      dz  k(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrj   r   r   r   r   gffffff?ztest tex $123$Ttex)usetexr   r3   r4   r   c              3   \   K   | ]#  }|j                   j                   d k(  s | % yw)r   Nr   r   s     r#   r   z%test_text_urls_tex.<locals>.<genexpr>)  s'     BqaccggH:S1A&ABs   !,,r0   z0.7r   )r7   r   r   r   r   r;   r<   r:   r   r   r   r   r   r   r   r   r   s         @r#   test_text_urls_texr     s   !!),G7H
**V
$CHHS#'XJc:JHK	 @Bu%[[b! 
	@SYYq\((F BFBE $$$::a=GOOE$:R$????
	@@ @
	@ 
	@@ @s%   /DAC:)D:D	?DDc                      t        t        t        j                              5 } | j	                  t        j                                d d d        y # 1 sw Y   y xY wr   )r   r   rR   devnullr:   r   r   )r3   s    r#   test_pdfpages_fspathr   0  s<    	$rzz"	# "sCJJL!" " "s   $AAzhatching_legend.pdfc                      t        j                  d      } t        ddgdddd      }t        ddgdddd      }| j                  ||||gg d       y	)
z.Test for correct hatching on patches in legend)r0   r1   r   r   greenXXXX)	facecolorhatchblue) r   r   r   N)r   r   r   legend)r!   r   bs      r#   test_hatching_legendr   5  sU     **V
$C1a&!Q'@A1a&!Q&?AJJ1a|-.r%   zgrayscale_alpha.pdfc                  D   t         j                  ddddddf   \  } }t        j                  | dz  |dz  z          }t         j                  ||dk  <   t	        j
                         \  }}|j                  |dd       |j                  g        |j                  g        y)z9Masking images with NaN did not work for grayscale imagesr1   r   nonegray_r)interpolationcmapN)	r^   ogridexpnanr   r   rc   
set_xticks
set_yticks)xr   ddr!   r"   s        r#   test_grayscale_alphar   @  s     88BqGR"W$%DAq	!Q$A+	B&&BrBwKllnGCIIbXI6MM"MM"r%   defaultr3   eps)
extensionsc           	          | j                         }|j                          |j                  t        j                  t        j
                  ddd            dd       |j                         }|j                          y )NrZ   r[   d   r   r   )c)add_subplotset_axis_offr9   r^   ra   linspace)fig_testfig_refax_testax_refs       r#   'test_pdf_eps_savefig_when_color_is_noner   L  s`     ""$GLLB3/0#L@  "F
r%   c                      t        j                  dd       t        j                  t              5  t        j
                  t        j                         d       ddd       y# 1 sw Y   yxY w)z"Test failing latex subprocess callz$22_2_2$T)r   r3   r4   N)r   xlabelr7   raisesRuntimeErrorr:   r;   r<    r%   r#   test_failing_latexr  V  sG     JJz$'	|	$ 0BJJL/0 0 0s   *A$$A-c                      t        j                         \  } }|j                  g g d       | j                  t	        j
                         d       y )NT)
rasterizedr3   r4   )r   r   r9   r:   r;   r<   r   s     r#   test_empty_rasterizedr  ^  s9    llnGCGGBtG$KK

UK+r%   zkerning.pdfc                      t        j                         } d}| j                  dd|d       | j                  dd|d       y )Nu   AVAVAVAVAVAVAVAV€AAVVr   g      ?r[   )sizeg      ?   )r   r   r   )r!   rK   s     r#   test_kerningr  e  s:    
**,C!AHHQQQHHHQQRH r%   c                     t        t        d            } d}t        |       }|j                  |       t        t	        | |            }|j                  |       |j                         }|j                         }t        |      t        d |j                         D              k(  sJ t        |      t        |      k  sJ |j                         |j                         k(  sJ y )Nzfonts/ttf/DejaVuSerif.ttfz%these should be subsetted! 1234567890c              3   2   K   | ]  }t        |        y wr   )chr)r   keys     r#   r   z%test_glyphs_subset.<locals>.<genexpr>}  s     @#SX@s   )
r   r   r	   set_textr   get_charmapsetkeysrH   get_num_glyphs)fpathchars	nosubfontsubfont	nosubcmapsubcmaps         r#   test_glyphs_subsetr  m  s    :;<E3E Iu 'u56GU%%'I!!#G u:@@@@@@ w<#i.((( !!#y'?'?'AAAAr%   zmulti_font_type3.pdfgffffff@)tolc                  b   t        j                  dg      } t        t        j                  |             j                  dk7  rt        j                  d       t        j                  dddgd       t        j                  d	d
       t        j                         }|j                  ddd       y )Nr'   r-   r(   Font may be missingr2   r&      r.   r  r3   r*   r)   333333?ffffff?"   There are 几个汉字 in between!fmr   r   r
   r6   r7   r8   r   rcr   r   fpr!   s     r#   test_multi_font_type3r'    s    			#6"7	8BBKKO!!%55)*FF6=*=>RHFF51
**,CHHT5>?r%   zmulti_font_type42.pdfg@c                  b   t        j                  dg      } t        t        j                  |             j                  dk7  rt        j                  d       t        j                  dddgd       t        j                  d	d
       t        j                         }|j                  ddd       y )Nr'   r-   r(   r  r2   r&   r  r  r3   r+   r  r  r   r!  r"  r%  s     r#   test_multi_font_type42r)    s    			#6"7	8BBKKO!!%55)*FF6=*=>RHFF52
**,CHHT5>?r%   )>r   r   r;   rR   pathlibr   tempfiler   numpyr^   r7   
matplotlibr   r   r   r   r   r#  matplotlib.cbookr   matplotlib.ft2fontr	   matplotlib.font_managerr
   r   #matplotlib.backends._backend_pdf_psr   matplotlib.backends.backend_pdfr   matplotlib.patchesr   matplotlib.testing.decoratorsr   r   matplotlib.testing._markersr   r$   markparametrizer?   rB   rL   rX   rh   r   r   r   r   r   r   r   r   r   stylecontextr   r  r  r  r  r'  r)  r   r%   r#   <module>r:     s     	 	  '     , & < A 4 ( O 4 +,-# .#& -%+0  aW-, .	
,(	>+& FJ("J@6@4 @ @0"
 ()*/ +/ ()* + 9/ 0  0 0, =/"! #!B2 )*4	@ 5	@ *+5	@ 6	@r%   