U
    Fv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      ?centerZbottom   )ZhorizontalalignmentZverticalalignmentZfontsize)Z	linewidth)r   pltsubplots	set_titletextZaxhline)r   figax r   E/tmp/pip-unpacked-wheel-7vhvci0g/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    r3   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   r1   r2   Zget_pagecountAssertionErrorr   r   r/   r0   )r)   r   r   r   r   r   test_multipage_pagecount=   s    r5   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@  )r1   r2   r   ranger   r   r   r0   getvaluecountr4   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existsr4   remover   r   r/   r0   )tmpr)   filenamer   r   r   r   r   test_multipage_keep_emptyT   s,    






rG   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   r1   r2   r0   r:   r?   Z_imagesr4   )XYZr   r   r)   r   r   r   test_composite_images   s    $ 

rR   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dtyperT   r   Tr   )resizer)   figure)r+   ZdpiZRGB)r-   importorskiprK   zerosZuint8rL   r   r   rV   Zfigimager1   r2   r0   PdfopenpagesZimagesvaluesZPdfImageZindexedr4   Zas_pil_imageZasarrayconvertZtestingZassert_array_equal)
rS   datar   bufr)   pageimageZ	pdf_imageZ	pil_imageZrgbr   r   r   test_indexed_image   s     


rb   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 )NrS   SOURCE_DATE_EPOCH0rI   meMultipage PDF	Test pagetest,pdf,multipage  r   r&   r   tzinfoTrueZAuthorTitleSubjectZ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-   rW   setenvr   r   r/   r7   datetimetimezone	timedeltar1   r2   r0   rY   rZ   docinfoitemsmpl__version__r4   ZmonkeypatchrS   r   r   Zmdr_   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+   rr   z%not an instance of datetime.datetime.rp   z
1968-08-01z'not one of {"True", "False", "Unknown"}rq   Zfooznot an instance of str.rn   i  )r   r   r-   ZwarnsUserWarningr0   r1   r2   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 )NrS   rc   rd   rI   re   rf   rg   rh   ri   r   r&   r   rj   rl   rm   )rr   c                 S   s   i | ]\}}|t |qS r   rs   ru   r   r   r   ry      s      z+test_multipage_metadata.<locals>.<dictcomp>rz   r{   r|   r}   r~   r   r   )r-   rW   r   r   r   r/   r7   r   r   r   r1   r2   r   r0   rY   rZ   r   r   r   r   r4   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 )NrS   &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rv   afragmenttest_urlr   r   	<genexpr>  s      z!test_text_urls.<locals>.<genexpr>
QuadPointsr&   H   )r-   rW   r   rV   r   r1   r2   r0   rY   rZ   r[   Annotsnextr4   getattrRectdecimalDecimal)rS   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 )NrS   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-   rW   r   rV   r   r1   r2   r0   rY   rZ   r[   r   r   r4   r   r   r   r   r   rS   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 )NrS   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-   rW   r   rV   r   r1   r2   r0   rY   rZ   r[   r   r   r4   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   rA   devnullr0   r   rV   )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   ZgreenZXXXX)Z	facecolorZhatchZblue N)r   rV   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)	rK   Zogridexpnanr   r   rN   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 )NrH   rI   d   rx   r   )c)Zadd_subplotZset_axis_offr/   rK   rM   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RuntimeErrorr0   r1   r2   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   r/   r0   r1   r2   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      ?rI   )sizeg      ?   )r   rV   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)rv   keyr   r   r   r     s     z%test_glyphs_subset.<locals>.<genexpr>)rt   r   r   Zset_textr   Zget_charmapsetkeysr4   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   rcrV   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   r1   rA   pathlibr   tempfiler   ZnumpyrK   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parametrizer3   r5   r=   rG   rR   rb   r   r   r   r   r   r   r   r   r   stylecontextr   r   r   r   r   r   r   r   r   r   r   <module>   sn   
#%


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