U
    \	a+                     @   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mZ d dlmZ d dlmZmZ e
jjed dd	Ze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 Z#edd  Z$d!d" Z%ed#gd$d% Z&ed&gd'd( Z'e
jj(d)d*ed+d, Z)e
j*d-ed.d/gd0d1d2 Z+ed3d4 Z,d5d6 Z-ed7gd8d9 Z.dS ):    N)Path)NamedTemporaryFile)dvireadpyplotcheckdep_usetexrcParams)PdfPages)check_figures_equalimage_comparisonTz"This test needs a TeX installation)reasonz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   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=True      ?centerZbottom   )ZhorizontalalignmentZverticalalignmentZfontsize)Z	linewidth)r   pltsubplots	set_titletextZaxhline)r   figax r   E/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/tests/test_backend_pdf.pytest_use14corefonts   s    

r   c                  C   s6   dt d< t \} }|dddg | t  d S )N*   zpdf.fonttype         )r   r   r   plotsavefigioBytesIOr   r   r   r   r   test_type42*   s    r"   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   pdfformat)	r   r   r    Zget_pagecountAssertionErrorr   r   r   r   )r#   r   r   r   r   r   test_multipage_pagecount2   s    r'   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@  )r   r    r   ranger   r   r   r   getvaluecountr&   len)Zpdfior#   ir   r   sr   r   r   test_multipage_properfinalize=   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fhnameospathexistsr&   remover   r   r   r   )tmpr#   filenamer   r   r   r   r   test_multipage_keep_emptyI   s,    






r:   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meshgridZarangesinr   r   Zset_xlimimshowr   r   r   r    r   r,   r1   Z_imagesr&   )XYZr   r   r#   r   r   r   test_composite_imageh   s    $ 

rD   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 )NpikepdfSOURCE_DATE_EPOCH0r<   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)pytestimportorskipsetenvr   r   r   r)   datetimetimezone	timedeltar   r    r   Pdfopendocinfoitemsmpl__version__r&   monkeypatchrE   r   r   Zmdbufr#   infor   r   r   test_savefig_metadata{   s>    
   	
rt   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%   rU   z%not an instance of datetime.datetime.rS   z
1968-08-01z'not one of {"True", "False", "Unknown"}rT   Zfooznot an instance of str.rQ   i  )r   r   rd   ZwarnsUserWarningr   r   r    r!   r   r   r   test_invalid_metadata   s"    ""rx   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 )NrE   rF   rG   r<   rH   rI   rJ   rK   rL   r   r   r   rM   rO   rP   )rU   c                 S   s   i | ]\}}|t |qS r   rV   rX   r   r   r   r\      s      z+test_multipage_metadata.<locals>.<dictcomp>r]   r^   r_   r`   ra   rb   rc   )rd   re   rf   r   r   r   r)   rg   rh   ri   r   r    r   r   rj   rk   rl   rm   rn   ro   r&   rp   r   r   r   test_multipage_metadata   sB    
   	

ry   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	|b}|j
d j}dD ]J\} t fdd|D d }|d k	st|jd t|d kstqW 5 Q R X W 5 Q R X d S )NrE   &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rY   afragmenttest_urlr   r   	<genexpr>   s      z!test_text_urls.<locals>.<genexpr>r   H   rd   re   r   figurer   r   r    r   rj   rk   ZpagesZAnnotsnextr&   ZRectdecimalDecimal)rE   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	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 )NrE   rz   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     s      z%test_text_urls_tex.<locals>.<genexpr>r   z0.7r   r   )rE   r   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   r4   devnullr   r   r   )r#   r   r   r   test_pdfpages_fspath
  s    r   zhatching_legend.pdfc                  C   s\   t jdd} t jddgddddd}t j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   r   Z	RectangleZlegend)r   r   br   r   r   test_hatching_legend  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)	r>   Zogridexpnanr   r   r@   Z
set_xticksZ
set_yticks)xr   ddr   r   r   r   r   test_grayscale_alpha  s    
r   r   )Zrerunsc              
   C   st   dd }|  tjd| dtd< t \}}|ddd t *}t	t
 |j|dd	 W 5 Q R X W 5 Q R X d
S )z:An error is raised if a TeX font lacks a Type-1 equivalentc                  _   s   t jddd d d dS )NZtexfontz	Some Font)ZtexnameZpsnameZeffectsencodingr9   )r   ZPsFont)argskwargsr   r   r   psfont+  s
      z#test_missing_psfont.<locals>.psfont__getitem__Tztext.usetexr   Zhellor#   r$   N)setattrr   Z
PsfontsMapr   r   r   r   r   rd   raises
ValueErrorr   )rq   r   r   r   Ztmpfiler   r   r   test_missing_psfont'  s    r   defaultr#   Zeps)
extensionsc                 C   sD   |   }|  |jttdddddd |  }|  d S )Nr;   r<   d   r[   r   )c)Zadd_subplotZset_axis_offr   r>   r?   Zlinspace)Zfig_testZfig_refZax_testZax_refr   r   r   'test_pdf_eps_savefig_when_color_is_none7  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xlabelrd   r   RuntimeErrorr   r   r    r   r   r   r   test_failing_latexA  s    r   c                  C   s2   t  \} }|jg g dd | jt dd d S )NT)Z
rasterizedr#   r$   )r   r   r   r   r   r    r!   r   r   r   test_empty_rasterizedI  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      ?r<   )sizeg      ?   )r   r   r   )r   r.   r   r   r   test_kerningP  s    r   )/rg   r   r   r4   pathlibr   tempfiler   Znumpyr>   rd   Z
matplotlibrn   r   r   r   r   r   Zmatplotlib.backends.backend_pdfr   Zmatplotlib.testing.decoratorsr	   r
   markZskipifZneeds_usetexr   r"   r'   r/   r:   rD   rt   rx   ry   r   r   r   r   r   Zflakyr   styler   r   r   r   r   r   r   r   <module>   sX   
#%





