a
    s=icx5                     @   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) Z0e#d*d+ Z1d,d- Z2e!d.gd/d0 Z3e!d1gd2d3 Z4ej56d4e d5d6gd7d8d9 Z7e#d:d; Z8d<d= Z9e!d>gd?d@ Z:dAdB Z;e!dCgdDdEdFdG Z<e!dHgdIdEdJdK Z=dS )L    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   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   )ZhorizontalalignmentZverticalalignmentZfontsize)Z	linewidth)r   pltsubplots	set_titletextZaxhline)r   figax r   r/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/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   sr   t tt| gdj|kr,td| d |td< t \}}|	g d |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 p} |  dksJ t \}}|g d |j| dd |  dksVJ |   |  dksnJ W d    n1 s0    Y  d S )Nr   r&   r*   r+   r'   r(   )r   r2   r3   Zget_pagecountr   r   r0   r1   )r*   r   r   r   r   r   test_multipage_pagecount=   s    r5   c                  C   s   t  } t| B}tdD ](}t \}}|d |j|dd qW d    n1 sX0    Y  |  }|	ddks|J t
|dk sJ d S )N
   zThis is a long titler*   r+   s	   startxrefr'   i@  )r2   r3   r   ranger   r   r   r1   getvaluecountlen)Zpdfior*   ir   r   sr   r   r   test_multipage_properfinalizeH   s    

.r=   c               	   C   s  t ddR} t| }|jjj}W d    n1 s40    Y  tj|sNJ W d    n1 sb0    Y  t| t|dd}W d    n1 s0    Y  tj|rJ t	
 \}}|g d t dd^} t| "}|jjj}|  W d    n1 s
0    Y  tj|s&J W d    n1 s<0    Y  t| t ddb} t| dd"}|jjj}|  W d    n1 s0    Y  tj|sJ W d    n1 s0    Y  t| d S )NF)delete)Z
keep_emptyr&   )r   r   _filefhr-   ospathexistsremover   r   r0   r1   )tmpr*   filenamer   r   r   r   r   test_multipage_keep_emptyT   s,    
(.


(2

(2rG   c                  C   s0  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
 2}|j|dd t|jjdksJ W d    n1 s0    Y  dtjd< t	t
 4}|j|dd t|jjdksJ W d    n1 s"0    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   r2   r3   r1   r:   r?   Z_images)XYZr   r   r*   r   r   r   test_composite_images   s    $
2
rQ   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 s0    Y  |dddtj ddddtj dddd	ksJ d S )NpikepdfSOURCE_DATE_EPOCH0rI   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>       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.   importorskipsetenvr   r   r0   r7   datetimetimezone	timedeltar2   r3   r1   Pdfopendocinfoitemsmpl__version__ZmonkeypatchrR   r   r   mdbufr*   infor   r   r   test_savefig_metadata   s8    
	2
r   c                  C   s*  t  \} }tjtdd( | jt dddid W d    n1 sH0    Y  tjtdd( | jt ddd	id W d    n1 s0    Y  tjtd
d( | jt dddid W d    n1 s0    Y  tjtdd( | jt dddid W d    n1 s0    Y  d S )Nz#Unknown infodict keyword: 'foobar'.)matchr*   Zfoobarinvalid)r,   rd   z%not an instance of datetime.datetime.rb   z
1968-08-01z'not one of {"True", "False", "Unknown"}rc   Zfooznot an instance of str.r_   i  )r   r   r.   ZwarnsUserWarningr1   r2   r3   r   r   r   r   r   test_invalid_metadata   s"    6$6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 d    n1 s0    Y  |j|$}dd |j D }W d    n1 s0    Y  |dddtj ddddtj dddd	ksJ d S )NrR   rS   rT   rI   rU   rV   rW   rX   rY   r   r'   r   rZ   r\   r]   )rd   c                 S   s   i | ]\}}|t |qS r   re   rg   r   r   r   rk      rl   z+test_multipage_metadata.<locals>.<dictcomp>rm   rn   ro   rp   rq   rr   rs   )r.   rt   ru   r   r   r0   r7   rv   rw   rx   r2   r3   r   r1   ry   rz   r{   r|   r}   r~   r   r   r   r   test_multipage_metadata   s<    
	
(2
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	|}|j
d j}dD ]^\} t fdd|D d }|d usJ t|dd d u sJ |jd t|d ksJ qW d    n1 s0    Y  W d    n1 s0    Y  d S )NrR   &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rh   afragmenttest_urlr   r   	<genexpr>   rl   z!test_text_urls.<locals>.<genexpr>
QuadPointsr'   H   )r.   rt   r   figurer   r2   r3   r1   ry   rz   pagesAnnotsnextgetattrRectdecimalDecimal)rR   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	|v}|j
d j}t fdd|D d }|d usJ t|dd d usJ |jd |jd td ksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )NrR   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     rl   z)test_text_rotated_urls.<locals>.<genexpr>r      z0.00001)r.   rt   r   r   r   r2   r3   r1   ry   rz   r   r   r   r   r   r   r   r   rR   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 }|j|dd | j	|\}|j
d j}t fdd|D d }|d usJ |jd tdd ksJ W d    n1 s0    Y  W d    n1 s0    Y  d S )NrR   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   )  rl   z%test_text_urls_tex.<locals>.<genexpr>r'   z0.7r   )r.   rt   r   r   r   r2   r3   r1   ry   rz   r   r   r   r   r   r   r   r   r   r   test_text_urls_tex  s    

r   c                  C   s@   t ttj} | t  W d    n1 s20    Y  d S r   )r   r   rA   devnullr1   r   r   )r*   r   r   r   test_pdfpages_fspath0  s    r   zhatching_legend.pdfc                  C   sT   t jdd} tddgddddd}t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   greenZXXXX)Z	facecolorZhatchblue) r   r   r   N)r   r   r   legend)r   r   br   r   r   test_hatching_legend5  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   rM   Z
set_xticksZ
set_yticks)xr   ddr   r   r   r   r   test_grayscale_alpha@  s    
r   defaultr*   Zeps)
extensionsc                 C   sD   |   }|  |jttdddddd |  }|  d S )NrH   rI   d   rj   r   )c)Zadd_subplotZset_axis_offr0   rK   rL   Zlinspace)Zfig_testZfig_refZax_testZax_refr   r   r   'test_pdf_eps_savefig_when_color_is_noneL  s
     r   c                   C   sN   t jddd tt" t jt dd W d   n1 s@0    Y  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_latexV  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_rasterized^  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   r   r   )r   r<   r   r   r   test_kerninge  s    r   c                  C   s   t td} d}t| }|| tt| |}|| | }| }t|tdd | D kslJ t|t|k sJ |	 |	 ksJ d S )Nzfonts/ttf/DejaVuSerif.ttfz%these should be subsetted! 1234567890c                 s   s   | ]}t |V  qd S r   )chr)rh   keyr   r   r   r   }  rl   z%test_glyphs_subset.<locals>.<genexpr>)
rf   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_subsetm  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   rcr   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   )>rv   r   r2   rA   pathlibr   tempfiler   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parametrizer4   r5   r=   rG   rQ   r   r   r   r   r   r   r   r   r   stylecontextr   r   r   r   r   r   r   r   r   r   r   <module>   sl   
#%


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