U
    \	a)                     @   s<  d dl Z d dlmZ d dlZ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mZ d dlmZmZ d dlmZmZ d dlmZmZmZ edd \ZZejjed	 d
dZejjed ddZejjed ddZ ejjde	j!j"j#kddZ$i d fddZ%dd Z&ej'ddddddgdd Z(eej)dedgd d!d"d# Z*eejjed$ d%dej)ded&gd d!d'd( Z+eeej,d ej)dd)d* Z-eej,d ej)dd+d, Z.eej)ded-gd d!d.d/ Z/eej,d ej)dd0d1 Z0ej,d ej)dej'd2ej1de gd3ej1degd3ej1d	egd3gd4d5 Z2ej,d ej)dej'd2ej1de gd3ej1degd3ej1d	egd3gd6d7 Z3ed8d9 Z4ed:d; Z5ee$d<d= Z6ed>d? Z7ed@gdAej'dBdCej)ddDdE Z8dS )F    N)BytesIO)_has_tex_package_check_for_pgf)compare_imagesImageComparisonFailure)PdfPagescommon_texification)_image_directoriescheck_figures_equalimage_comparisonc                   C   s   dS )Nz
dummy func r   r   r   E/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/tests/test_backend_pgf.py<lambda>       r   xelatexzxelatex + pgf is required)reasonpdflatexzpdflatex + pgf is requiredlualatexzlualatex + pgf is requiredZepsz*This test needs a ghostscript installationc                 C   sb   t jt| }tj|f| t jtd|  }tt jt| | t	|||d}|r^t
|d S )Nzexpected_%stol)ospathjoin
result_dirpltsavefigshutilcopyfilebaseline_dirr   r   )fnamesavefig_kwargsr   actualexpectederrr   r   r   compare_figure   s    r$   c                  C   s   t   tddd} t | | d d t | d| d  d t jddgddgd	d
dd t dddddgdddddgd t jdgdgddd t jdddddd t jdddd t 	dd t 
dd d S )Nr            zb-zg>        g?z//Z	lightgrayZred)ZhatchZ	facecolorZ	edgecolor   g?bg?      ?ro)Z
markersizeu/   unicode (ü, °, µ) and math ($\mu_i = x_i^2$)right   )ZhaZfontsizez*sans-serif, blue, $\frac{\sqrt{x}}{y^2}$..
sans-serifZblue)familycolor)r   figurenpZlinspaceplotZfill_betweenfilltextZylabelxlimylim)xr   r   r   create_figure*   s&    "
  r;   zplain_text, escaped_text)zquad_sum: $\sum x_i^2$z'quad\_sum: \(\displaystyle \sum x_i^2\))no \$splits \$ herer<   )Zwith_underscoreszwith\_underscores)z% not a commentz\% not a comment)z^notz\^notc                 C   s   t | |kstd S )N)r   AssertionError)Z
plain_textZescaped_textr   r   r   test_common_texificationD   s    r>   pgfzpgf_xelatex.pdfdefault)stylec                  C   s    ddd} t j|  t  d S )NserifFfont.familypgf.rcfonts)mplrcParamsupdater;   )Z
rc_xelatexr   r   r   test_xelatexP   s
    rI   ucszneeds ucs.styzpgf_pdflatex.pdfc                  C   s:   t jdrtd ddddd} tj|  t  d S )NZAPPVEYORzBpdflatex test does not work on appveyor due to missing LaTeX fontsrB   Fr   z4\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc})rD   rE   pgf.texsystempgf.preamble)	r   environgetpytestZxfailrF   rG   rH   r;   )rc_pdflatexr   r   r   test_pdflatex[   s    
rQ   c               
   C   s   dddddddddd	d
ddddg} ddg}t | D ]r\}}t|Z dD ]0\}}|tjd krNt|sNtd| d qNt  td|d  || d W 5 Q R X q6d S )Nr0      g?
   Fr   )rD   	font.sizefigure.subplot.leftlines.markersizerE   rK   Z	monospaceg?r/   r   zG\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc}\usepackage{sfmath})rD   rT   rU   rV   rE   rK   rL      r   ))sfmathrX   )Zutf8xrJ   rL   zneeds z.styzpgf_rcupdate%d.pdfr%   r   )		enumeraterF   Z
rc_contextrG   r   rO   skipr;   r$   )Zrc_setsr   iZrc_setZ	substringpkgr   r   r   test_rcupdaten   s4    r]   c                   C   sR   t jddd tddgddg tdd tdd tjt dd	 d S )
NrB   FrC   r(   g}Ô%ITr   r%   pdfformat)	rF   rG   rH   r   r5   r8   r9   r   r   r   r   r   r   test_pathclip   s
    ra   zpgf_mixedmode.pdfc                  C   sP   t jddd tjddddddf \} }t|d | d  d d S )	NrB   FrC   r%   y              D@r'   T)rF   rG   rH   r4   Zogridr   ZpcolorZset_rasterized)YXr   r   r   test_mixedmode   s    re   c                  C   st   t jddd tdd\} \}}|td |td t  | 	| j
 }tdd|id	d
 d S )NrB   FrC   r%   r'      zpgf_bbox_inches.pdfbbox_inchesr   )r    r   )rF   rG   rH   r   subplotsr5   rangetight_layoutZget_window_extentZtransformedZdpi_scale_transinvertedr$   )figax1ax2Zbboxr   r   r   test_bbox_inches   s    
ro   system)Zmarksc           	      C   s   dd| d}t j| t \}}|td |  tjdd\}}|td |  tj	
td|  d}d	d
ddtjdddttdddd}t||d4}|| || || | dkstW 5 Q R X d S )NrB   F)rD   rE   rK   rf   )r)   r'   )ZfigsizeZ	pdfpages_.pdfmeMultipage PDF with pgf	Test pagetest,pdf,multipage     r%   r   tzinfoUnknownZAuthorZTitleSubjectZKeywordsZModDateZTrappedmetadatar)   )rF   rG   rH   r   rh   r5   ri   rj   r   r   r   r   datetimetimezone	timedeltar   r   Zget_pagecountr=   )	rp   rP   Zfig1rm   Zfig2rn   r   mdr^   r   r   r   test_pdf_pages   s:    	   



r   c           
      C   sN  t d}| dd tjd|i t \}}|t	d dddd	t
j
d
ddt
t
dddd}tjtd| d}t||d}|| W 5 Q R X |j|}dd |j D }W 5 Q R X d|kr|d= d|kr|d= |d}	|	dtj ks |dkrd|	ks t|dddtj dd	dddd d!ksJtd S )"NpikepdfSOURCE_DATE_EPOCH0rK   rf   rr   rs   rt   ru   rv   rw   r%   r   rx   Truer{   Zpdfpages_meta_check_rq   r}   c                 S   s   i | ]\}}|t |qS r   )str).0kvr   r   r   
<dictcomp>   s      z1test_pdf_pages_metadata_check.<locals>.<dictcomp>z/PTEX.FullBannerz/PTEX.Fullbannerz	/ProducerzMatplotlib pgf backend vr   ZLuaTeXzD:19700101000000ZzMatplotlib vz, https://matplotlib.orgzD:19680801000000Zz/True)z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez/Subjectz/Titlez/Trapped)rO   ZimportorskipZsetenvrF   rG   rH   r   rh   r5   ri   r   r   r   r   r   r   r   r   r   ZPdfopenZdocinfoitemspop__version__r=   )
Zmonkeypatchrp   r   rl   axr   r   r^   infoZproducerr   r   r   test_pdf_pages_metadata_check   sT    

   	
r   c               	   C   s^   t  } | d tt | jt dd W 5 Q R X t  } | d | jt dd d S )Nz\oopsr?   r_   z
this is ok)r   r3   ZsuptitlerO   Zraises
ValueErrorr   r   )rl   r   r   r   test_tex_restart_after_error  s    

r   c                  C   s:   t  \} }|ddgddgg | jt dddd d S )	Nr   r%   r'   r)   r^   r?   Ztight)r`   backendrg   )r   rh   Zimshowr   r   rl   r   r   r   r   test_bbox_inches_tight!  s    r   c                  C   s"   t  \} }| jt ddd d S )NZpngr?   )r`   r   )r   rh   r   r   r   r   r   r   test_png(  s    r   c              	   C   sZ   |  d. dtjd< tddd tjt dd W 5 Q R X dd	d
 | jD ksVtd S )NWARNINGzthis-font-does-not-existrD   r,   zhello, worldr?   r_   z/Ignoring unknown font: this-font-does-not-existc                 S   s   g | ]}|  qS r   )
getMessage)r   rr   r   r   
<listcomp>6  s    z%test_unknown_font.<locals>.<listcomp>)	Zat_levelrF   rG   r   Zfigtextr   r   recordsr=   )Zcaplogr   r   r   test_unknown_font0  s    
r   r^   )
extensions	texsystem)r   r   r   c                 C   s@   t |st|d  |tjd< | ddd |ddd d S )Nz + pgf is requiredrK   r,   z$-1$u   $−1$)r   rO   rZ   rF   rG   r7   )Zfig_testZfig_refr   r   r   r   test_minus_signs_with_tex:  s
    
r   )9r   ior   r   r   Znumpyr4   rO   Z
matplotlibrF   Zmatplotlib.pyplotZpyplotr   Zmatplotlib.testingr   r   Zmatplotlib.testing.comparer   r   Zmatplotlib.backends.backend_pgfr   r   Zmatplotlib.testing.decoratorsr	   r
   r   r   r   markZskipifZneeds_xelatexZneeds_pdflatexZneeds_lualatexZtestingcompare	converterZneeds_ghostscriptr$   r;   Zparametrizer>   r   rI   rQ   rA   r]   ra   re   ro   paramr   r   r   r   r   r   r   r   r   r   r   <module>   s   






	




#

2


	

