U
    mdx5                     @   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   Z/home/sam/Atlas/atlas_env/lib/python3.8/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   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meshgridZ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    $ 

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 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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>   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-   importorskipsetenvr   r   r/   r7   datetimetimezone	timedeltar1   r2   r0   Pdfopendocinfoitemsmpl__version__r4   ZmonkeypatchrR   r   r   mdbufr)   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+   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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 )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      s      z+test_multipage_metadata.<locals>.<dictcomp>rl   rm   rn   ro   rp   rq   rr   )r-   rs   rt   r   r   r/   r7   ru   rv   rw   r1   r2   r   r0   rx   ry   rz   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 )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>   s      z!test_text_urls.<locals>.<genexpr>
QuadPointsr&   H   )r-   rs   r   figurer   r1   r2   r0   rx   ry   pagesAnnotsnextr4   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	|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 )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     s      z)test_text_rotated_urls.<locals>.<genexpr>r      z0.00001)r-   rs   r   r   r   r1   r2   r0   rx   ry   r   r   r   r4   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 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 )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   )  s      z%test_text_urls_tex.<locals>.<genexpr>r&   z0.7r   )r-   rs   r   r   r   r1   r2   r0   rx   ry   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   r   )r)   r   r   r   test_pdfpages_fspath0  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   r   r   Z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_offr/   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   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_latexV  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_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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)rh   keyr   r   r   r   }  s     z%test_glyphs_subset.<locals>.<genexpr>)rf   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_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   )>ru   r   r1   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parametrizer3   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   
#%


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