U
    Âmœdx5  ã                   @   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j5 6d4¡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 |¡sÔt‚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sºt‚W 5 Q R X dtjd
< t	t
 ¡ ƒ�(}|j|dd� t|jjƒdksþt‚W 5 Q R X d S )Néûÿÿÿé   r&   r'   r   r"   )ZextentéÿÿÿÿTz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sÒt‚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sît‚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	s®t‚t|dd ƒd ksÂt‚|jd t |¡d ks€t‚q€W 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	s†t‚t|dd ƒd k	sšt‚|jd |jd t d¡ ks¼t‚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	sŠt‚|jd t d¡d ks¦t‚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 imageséþÿÿÿr'   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 s€t‚| 
¡ | 
¡ ks”t‚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   
þ#%


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