U
    f8                     @   s  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d Z$e
j%&dddge
j%&dddgdd Z'dd Z(dd Z)dd Z*dd Z+d d! Z,d"d# Z-d$d% Z.d&d' Z/d(d) Z0d*d+ Z1e#d,d- Z2d.d/ Z3e!d0gd1d2 Z4e!d3gd4d5 Z5ej67d6e d7d8gd9d:d; Z8e#d<d= Z9d>d? Z:e!d@gdAdB Z;dCdD Z<e!dEgdFdGdHdI Z=e!dJgdKdGdLdM Z>dS )N    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                  C   sl   dt d< dt d< dt d< dgt d< d	t d
< d} t \}}|d |jdd| dddd |jddd d S )NTzpdf.use14corefontsz
sans-serifzfont.family   z	font.sizeZ	Helveticazfont.sans-serifr   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   )ZhorizontalalignmentZverticalalignmentZfontsize)Z	linewidth)r   pltsubplots	set_titletextZaxhline)r   figax r   H/tmp/pip-target-lpfmz8o1/lib/python/matplotlib/tests/test_backend_pdf.pytest_use14corefonts   s    

r   zfontname, fontfile)DejaVu SanszDejaVuSans.ttf)WenQuanYi Zen Heiwqy-zenhei.ttcfonttype   *   c                 C   st   t tt| gdj|kr,td| d |td< t \}}|	dddg |j
d| d	 |jt d
d d S )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)ZfontnameZfontfiler"   r   r   r   r   r   test_embed_fonts-   s    r4   c               	   C   s~   t t h} |  dkstt \}}|dddg |j| dd |  dksXt|   |  dksptW 5 Q R X d S )Nr   r'   r(   r#   r*   r+   )	r   r2   r3   Zget_pagecountAssertionErrorr   r   r0   r1   )r*   r   r   r   r   r   test_multipage_pagecount=   s    r6   c               	   C   s|   t  } t| 8}tdD ](}t \}}|d |j|dd qW 5 Q R X |  }|	ddksht
t|dk sxt
d S )N
   zThis is a long titler*   r+   s	   startxrefr'   i@  )r2   r3   r   ranger   r   r   r1   getvaluecountr5   len)Zpdfior*   ir   r   sr   r   r   test_multipage_properfinalizeH   s    

r>   c               
   C   sH  t dd4} t| }|jjj}W 5 Q R X tj|s:tW 5 Q R X t	| t|dd}W 5 Q R X tj|rvtt
 \}}|dddg t dd<} t| }|jjj}|  W 5 Q R X tj|stW 5 Q R X t	| t ddB} t| dd}|jjj}|  W 5 Q R X tj|s0tW 5 Q R X t	| d S )NF)delete)Z
keep_emptyr'   r(   r#   )r   r   _filefhr-   ospathexistsr5   remover   r   r0   r1   )tmpr*   filenamer   r   r   r   r   test_multipage_keep_emptyT   s,    






rH   c               	   C   s  t t dddt ddd\} }t |d }t \}}|dd |j|ddddgd |j|d d d ddddgd d	tjd
< t	t
 (}|j|dd t|jjdkstW 5 Q R X dtjd
< t	t
 (}|j|dd t|jjdkstW 5 Q R X d S )N   r'   r(   r   r#   )ZextentTzimage.composite_imager*   r+   F)npZmeshgridarangesinr   r   Zset_xlimimshowr   r   r2   r3   r1   r;   r@   Z_imagesr5   )XYZr   r   r*   r   r   r   test_composite_images   s    $ 

rS   c            
   	   C   s   t d} tjdtjd}td|d d ddf< dtd< t }|j	|dd t
 }|j|d	d
d | j|F}|j\}|j \}| |}|jst| }t|d}	W 5 Q R X tj||	 d S )Npikepdf)   r'   r#   )ZdtyperU   r   Tr   )resizer*   figure)r,   ZdpiRGB)r.   importorskiprL   ZzerosZuint8rM   r   r   rW   Zfigimager2   r3   r1   PdfopenpagesZimagesvaluesZPdfImageZindexedr5   Zas_pil_imageZasarrayconverttestingZassert_array_equal)
rT   datar   bufr*   pageimageZ	pdf_imageZ	pil_imagergbr   r   r   test_indexed_image   s     


re   c                 C   s   t d}| dd t \}}|td ddddtjd	d
dtt	dddd}t
 }|j||dd |j|}dd |j D }W 5 Q R X |dddtj ddddtj dddd	kstd S )NrT   SOURCE_DATE_EPOCH0rJ   meMultipage PDF	Test pagetest,pdf,multipage  r   r'   r   tzinfoTrueAuthorTitleSubjectKeywordsModDateTrappedr*   )metadatar,   c                 S   s   i | ]\}}|t |qS r   str.0kvr   r   r   
<dictcomp>   s      z)test_savefig_metadata.<locals>.<dictcomp>D:19700101000000ZMatplotlib v, https://matplotlib.orgD:19680801000000ZMatplotlib pdf backend v/True	z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez	/Producerz/Subjectz/Titlez/Trapped)r.   rY   setenvr   r   r0   r8   datetimetimezone	timedeltar2   r3   r1   rZ   r[   docinfoitemsmpl__version__r5   ZmonkeypatchrT   r   r   mdra   r*   infor   r   r   test_savefig_metadata   s>    
   	
r   c               	   C   s   t  \} }tjtdd | jt dddid W 5 Q R X tjtdd | jt ddd	id W 5 Q R X tjtd
d | jt dddid W 5 Q R X tjtdd | jt dddid W 5 Q R X d S )Nz#Unknown infodict keyword: 'foobar'.)matchr*   Zfoobarinvalid)r,   rw   z%not an instance of datetime.datetime.ru   z
1968-08-01z'not one of {"True", "False", "Unknown"}rv   Zfooznot an instance of str.rr   i  )r   r   r.   ZwarnsUserWarningr1   r2   r3   r   r   r   r   r   test_invalid_metadata   s"    ""r   c                 C   s   t d}| dd t \}}|td ddddtjd	d
dtt	dddd}t
 }t||d}|| || W 5 Q R X |j|}dd |j D }W 5 Q R X |dddtj ddddtj dddd	kstd S )NrT   rf   rg   rJ   rh   ri   rj   rk   rl   r   r'   r   rm   ro   rp   )rw   c                 S   s   i | ]\}}|t |qS r   rx   rz   r   r   r   r~      s      z+test_multipage_metadata.<locals>.<dictcomp>r   r   r   r   r   r   r   )r.   rY   r   r   r   r0   r8   r   r   r   r2   r3   r   r1   rZ   r[   r   r   r   r   r5   r   r   r   r   test_multipage_metadata   sB    
   	

r   c               
      s   t d} dtjdd}|jddd dd |jdd	d
 dd t }|j|dd | j	|v}|j
d j}dD ]^\} t fdd|D d }|d k	stt|dd d kst|jd t|d kstqW 5 Q R X W 5 Q R X d S )NrT   &https://test_text_urls.matplotlib.org/r(   r'   Zfigsize皙?ztest plain 123plain)urlg?ztest mathtext $123$mathtextr*   r+   r   ))z0.1r   )z0.4r   c                 3   s&   | ]}|j j   kr|V  qd S NAURIr{   afragmenttest_urlr   r   	<genexpr>  s      z!test_text_urls.<locals>.<genexpr>
QuadPointsr'   H   )r.   rY   r   rW   r   r2   r3   r1   rZ   r[   r\   Annotsnextr5   getattrRectdecimalDecimal)rT   r   fdr*   annotsyannotr   r   r   test_text_urls   s"    

r   c               
      s   t d} d tjdd}|jdddd  d t }|j|d	d
 | j	|l}|j
d j}t fdd|D d }|d k	stt|dd d k	st|jd |jd td kstW 5 Q R X W 5 Q R X d S )NrT   r   )r'   r'   r   r   N-   )Zrotationr   r*   r+   r   c                 3   s    | ]}|j j  kr|V  qd S r   r   r   r   r   r   r   &  s      z)test_text_rotated_urls.<locals>.<genexpr>r      z0.00001)r.   rY   r   rW   r   r2   r3   r1   rZ   r[   r\   r   r   r5   r   r   r   r   r   rT   r   r   r*   r   r   r   r   r   test_text_rotated_urls  s"    

r   c               
      s   t d} d tjdd}|jdddd  d	d
 t x}|j|dd | j	|R}|j
d j}t fdd|D d }|d k	st|jd tdd kstW 5 Q R X W 5 Q R X d S )NrT   r   r   r   r   gffffff?ztest tex $123$Ttex)usetexr   r*   r+   r   c                 3   s$   | ]}|j j  d kr|V  qdS )r   Nr   r   r   r   r   r   A  s      z%test_text_urls_tex.<locals>.<genexpr>r'   z0.7r   )r.   rY   r   rW   r   r2   r3   r1   rZ   r[   r\   r   r   r5   r   r   r   r   r   r   r   test_text_urls_tex/  s    

r   c               	   C   s,   t ttj} | t  W 5 Q R X d S r   )r   r   rB   devnullr1   r   rW   )r*   r   r   r   test_pdfpages_fspathH  s    r   zhatching_legend.pdfc                  C   sX   t jdd} tddgddddd}tddgddddd}| ||||gddddg d	S )
z.Test for correct hatching on patches in legend)r'   r(   r   r   greenZXXXX)Z	facecolorZhatchblue N)r   rW   r   Zlegend)r   r   br   r   r   test_hatching_legendM  s    r   zgrayscale_alpha.pdfc                  C   sx   t jddddddf \} }t | d |d   }t j||dk < t \}}|j|ddd |g  |g  dS )z9Masking images with NaN did not work for grayscale imagesr(   r   noneZgray_r)interpolationZcmapN)	rL   Zogridexpnanr   r   rO   Z
set_xticksZ
set_yticks)xr   ddr   r   r   r   r   test_grayscale_alphaX  s    
r   defaultr*   Zeps)
extensionsc                 C   sD   |   }|  |jttdddddd |  }|  d S )NrI   rJ   d   r}   r   )c)Zadd_subplotZset_axis_offr0   rL   rN   Zlinspace)Zfig_testZfig_refZax_testZax_refr   r   r   'test_pdf_eps_savefig_when_color_is_noned  s
     r   c                	   C   s:   t jddd tt t jt dd W 5 Q R X dS )z"Test failing latex subprocess callz$22_2_2$T)r   r*   r+   N)r   Zxlabelr.   ZraisesRuntimeErrorr1   r2   r3   r   r   r   r   test_failing_latexn  s    r   c                  C   s2   t  \} }|jg g dd | jt dd d S )NT)Z
rasterizedr*   r+   )r   r   r0   r1   r2   r3   r   r   r   r   test_empty_rasterizedv  s    r   zkerning.pdfc                  C   s4   t  } d}| jdd|dd | jdd|dd d S )Nu   AVAVAVAVAVAVAVAV€AAVVr   g      ?rJ   )sizeg      ?   )r   rW   r   )r   r=   r   r   r   test_kerning}  s    r   c                  C   s   t td} d}t| }|| tt| |}|| | }| }t|tdd | D ksltt	|t	|k st|
 |
 kstd S )Nzfonts/ttf/DejaVuSerif.ttfz%these should be subsetted! 1234567890c                 s   s   | ]}t |V  qd S r   )chr)r{   keyr   r   r   r     s     z%test_glyphs_subset.<locals>.<genexpr>)ry   r   r   Zset_textr   Zget_charmapsetkeysr5   r;   Zget_num_glyphs)ZfpathcharsZ	nosubfontZsubfontZ	nosubcmapZsubcmapr   r   r   test_glyphs_subset  s    

"r   zmulti_font_type3.pdfgffffff@)Ztolc                  C   sh   t jdgd} tt | jdkr,td tjdddgdd tjd	d
d t	 }|
ddd d S )Nr    r%   r!   Font may be missingr)   r      r&   r   r*   r#   r"   333333?ffffff?"   There are 几个汉字 in between!fmr
   r   r	   r-   r.   r/   r   rcrW   r   fpr   r   r   r   test_multi_font_type3  s    
r   zmulti_font_type42.pdfg@c                  C   sh   t jdgd} tt | jdkr,td tjdddgdd tjd	d
d t	 }|
ddd d S )Nr    r%   r!   r   r)   r   r   r   r*   r$   r   r   r   r   r   r   r   r   r   test_multi_font_type42  s    
r   )?r   r   r2   rB   pathlibr   tempfiler   numpyrL   r.   Z
matplotlibr   r   r   r   r   r   Zmatplotlib.cbookr   Zmatplotlib.ft2fontr   Zmatplotlib.font_managerr	   r
   Z#matplotlib.backends._backend_pdf_psr   Zmatplotlib.backends.backend_pdfr   Zmatplotlib.patchesr   Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.testing._markersr   r   markZparametrizer4   r6   r>   rH   rS   re   r   r   r   r   r   r   r   r   r   stylecontextr   r   r   r   r   r   r   r   r   r   r   <module>   sn   
#%







