o
    :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 d dl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j01d0ed1d2gd3d4d5 Z2ed6d7 Z3d8d9 Z4ed:gd;d< Z5d=d> Z6dS )?    N)Path)NamedTemporaryFile)dvireadpyplotcheckdep_usetexrcParams)_get_data_path)FT2Font)get_glyphs_subset)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   C/usr/lib/python3/dist-packages/matplotlib/tests/test_backend_pdf.pytest_use14corefonts   s   

r   c                  C   s4   dt d< t \} }|g d | 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 9} |  dksJ t \}}|g d |j| dd |  dks+J |   |  dks7J W d    d S 1 sBw   Y  d S )Nr   r   pdfformatr   r   )r   r#   r$   Zget_pagecountr   r   r!   r"   )r'   r   r   r   r   r   test_multipage_pagecount6   s   "r*   c                  C   s   t  } t| !}tdD ]}t \}}|d |j|dd qW d    n1 s,w   Y  |  }|	ddks>J t
|dk sFJ d S )N
   zThis is a long titler'   r(   s	   startxrefr   i@  )r#   r$   r   ranger   r   r   r"   getvaluecountlen)Zpdfior'   ir   r   sr   r   r   test_multipage_properfinalizeA   s   

r2   c               	   C   s  t dd)} t| }|jjj}W d    n1 sw   Y  tj|s'J W d    n1 s1w   Y  t| t|dd}W d    n1 sLw   Y  tj|rYJ t	
 \}}|g d t dd-} t| }|jjj}|  W d    n1 sw   Y  tj|sJ W d    n1 sw   Y  t| t dd/} t| dd}|jjj}|  W d    n1 sw   Y  tj|sJ W d    n1 sw   Y  t| d S )NF)delete)Z
keep_emptyr   )r   r   _fileZfhnameospathexistsremover   r   r!   r"   )tmpr'   filenamer   r   r   r   r   test_multipage_keep_emptyM   s:   







r<   c                  C   s.  t t dddt ddd\} }t |d }t \}}|dd |j|g dd |j|d d d	 g d
d dtjd< t	t
 }|j|dd t|jjdksYJ W d    n1 scw   Y  dtjd< t	t
 }|j|dd t|jjdksJ W d    d S 1 sw   Y  d S )N   r   r   r   r    )r   r   r   r   )Zextent)r   r    r   r   Tzimage.composite_imager'   r(   F)npZmeshgridZarangesinr   r   Zset_xlimimshowr   r   r#   r$   r"   r/   r4   Z_images)XYZr   r   r'   r   r   r   test_composite_imagel   s    $

"rF   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 d    n1 sUw   Y  |dddtj ddddtj dddd	kssJ d S )NpikepdfSOURCE_DATE_EPOCH0r>   meMultipage PDF	Test pagetest,pdf,multipage  r   r   r   ZtzinfoTrueZAuthorTitleZSubjectZKeywordsModDateTrappedr'   )metadatar)   c                 S      i | ]	\}}|t |qS r   str.0kvr   r   r   
<dictcomp>       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__monkeypatchrG   r   r   Zmdbufr'   infor   r   r   test_savefig_metadata   s:   
	
rv   c                  C   s*  t  \} }tjtdd | jt dddid W d    n1 s$w   Y  tjtdd | jt ddd	id W d    n1 sGw   Y  tjtd
d | jt dddid W d    n1 sjw   Y  tjtdd | jt dddid W d    d S 1 sw   Y  d S )Nz#Unknown infodict keyword: 'foobar'.)matchr'   ZfoobarZ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.rR   i  )r   r   rf   ZwarnsUserWarningr"   r#   r$   r%   r   r   r   test_invalid_metadata   s*   "ry   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 d    n1 sMw   Y  |j|}dd |j D }W d    n1 smw   Y  |dddtj ddddtj dddd	ksJ d S )NrG   rH   rI   r>   rJ   rK   rL   rM   rN   r   r   r   rO   rP   rQ   )rU   c                 S   rV   r   rW   rY   r   r   r   r]      r^   z+test_multipage_metadata.<locals>.<dictcomp>r_   r`   ra   rb   rc   rd   re   )rf   rg   rh   r   r   r!   r,   ri   rj   rk   r#   r$   r   r"   rl   rm   rn   ro   rp   rq   rr   r   r   r   test_multipage_metadata   s@   
	

rz   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	|6}|j
d j}dD ]%\} t fdd|D d }|d usWJ |jd t|d kseJ q@W d    n1 spw   Y  W d    d S W d    d S 1 sw   Y  d S )NrG   &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AZURIrZ   aZfragmenttest_urlr   r   	<genexpr>   s   & z!test_text_urls.<locals>.<genexpr>r   H   rf   rg   r   figurer   r#   r$   r"   rl   rm   ZpagesZAnnotsnextZRectdecimalZDecimal)rG   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 T}|j|dd | j	|.}|j
d j}t fdd|D d }|d usEJ |jd tdd ksSJ W d    n1 s]w   Y  W d    d S W d    d S 1 suw   Y  d S )NrG   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     s   $ z%test_text_urls_tex.<locals>.<genexpr>r   z0.7r   r   )rG   r   r   r'   r   r   r   r   r   test_text_urls_tex   s$   

"r   c                  C   sB   t ttj} | t  W d    d S 1 sw   Y  d S r   )r   r   r6   devnullr"   r   r   )r'   r   r   r   test_pdfpages_fspath  s   "r   zhatching_legend.pdfc                  C   sX   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g d d	S )
z.Test for correct hatching on patches in legend)r   r   r}   r   ZgreenZXXXX)Z	facecolorZhatchZblue) r   r   r   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ogridZexpnanr   r   rB   Z
set_xticksZ
set_yticks)xr   ddr   r   r   r   r   test_grayscale_alpha  s   
r   r    )Zrerunsc              	   C   s   dd }|  tjd| dtd< t \}}|ddd t -}t	t
 |j|dd	 W d
   n1 s8w   Y  W d
   d
S W d
   d
S 1 sPw   Y  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encodingr;   )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   rf   raises
ValueErrorr"   )rs   r   r   r   Ztmpfiler   r   r   test_missing_psfont+  s   Pr   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@   rA   Zlinspace)Zfig_testZfig_refZax_testZax_refr   r   r   'test_pdf_eps_savefig_when_color_is_none;  s
    r   c                   C   sP   t jddd tt t jt dd W d   dS 1 s!w   Y  dS )z"Test failing latex subprocess callz$22_2_2$T)r   r'   r(   N)r   Zxlabelrf   r   RuntimeErrorr"   r#   r$   r   r   r   r   test_failing_latexE  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_rasterizedM  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   r1   r   r   r   test_kerningT  s   r   c                  C   s   t td} d}t| }|| tt| |}|| | }| }t|tdd | D ks6J t|t|k s@J |	 |	 ksJJ d S )Nzfonts/ttf/DejaVuSerif.ttfz%these should be subsetted! 1234567890c                 s   s    | ]}t |V  qd S r   )chr)rZ   keyr   r   r   r   l  s    z%test_glyphs_subset.<locals>.<genexpr>)
rX   r   r	   Zset_textr
   Zget_charmapsetkeysr/   Zget_num_glyphs)ZfpathcharsZ	nosubfontZsubfontZ	nosubcmapZsubcmapr   r   r   test_glyphs_subset\  s   

"r   )7ri   r   r#   r6   Zpathlibr   Ztempfiler   Znumpyr@   rf   Z
matplotlibrp   r   r   r   r   r   Zmatplotlib.cbookr   Zmatplotlib.ft2fontr	   Z#matplotlib.backends._backend_pdf_psr
   Zmatplotlib.backends.backend_pdfr   Zmatplotlib.testing.decoratorsr   r   ZmarkZskipifZneeds_usetexr   r&   r*   r2   r<   rF   rv   ry   rz   r   r   r   r   r   Zflakyr   Zstylecontextr   r   r   r   r   r   r   r   r   <module>   sb    
#%



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