U
    Fvf.                     @   sn  d dl Z d dlmZ d dlZd dlZd dlZd dlm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 d dlmZmZm Z m!Z! ed	d
 \Z"Z#i d fddZ$e
j%&ddddgdd Z'e!e
j%(ddd Z)dd Z*e!e
j%(dedgdddd Z+ze,dj-e	dk Z.W n ej/k
rd   dZ.Y nX e e
j%j0ed  d!d"e
j%(ded#gde.rd$nd d%d&d' Z1e!e ej23de
j%(dd(d) Z4e!ej23de
j%(dd*d+ Z5e!e
j%(ded,gddd-d. Z6e!ej23de
j%(dd/d0 Z7ej23de
j%(de
j%&d1e
j8d2egd3e
j8d4e gd3e
j8d5e!gd3gd6d7 Z9ej23de
j%(de
j%&d1e
j8d2egd3e
j8d4e gd3e
j8d5e!gd3gd8d9 Z:e!d:d; Z;e!d<d= Z<e!ed>d? Z=e!d@dA Z>edBgdCe
j%&dDdEe
j%(ddFdG Z?e
j%(ddHdI Z@dS )J    N)BytesIO)parse)_has_tex_package_check_for_pgf)compare_imagesImageComparisonFailure)PdfPages_tex_escape)_image_directoriescheck_figures_equalimage_comparison)needs_ghostscriptneeds_pgf_lualatexneeds_pgf_pdflatexneeds_pgf_xelatexc                   C   s   dS )Nz
dummy func r   r   r   E/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_backend_pgf.py<lambda>       r   c                 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%   zplain_text, escaped_text)zquad_sum: $\sum x_i^2$z&quad_sum: \(\displaystyle \sum x_i^2\))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_tex_escape$   s    r'   pgfc                 C   s(   t  }|ddd || d  d S )N      ?z
_^ $a_b^c$ztest.pdf)r   figuretextr   )Ztmp_pathfigr   r   r   test_tex_special_chars-   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?r)   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   r*   npZlinspaceplotZfill_betweenfillr+   ZylabelZxlimZylim)xr   r   r   create_figure5   s&    "
  r?   z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   Zgsz9.50Tucszneeds ucs.sty)reasonzpgf_pdflatex.pdfgffffff'@)rA   r   c                  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   Fpdflatexz4\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_pdflatexb   s    
rS   c               
   C   s   dddddddddd	d
ddddg} t r2ddgnddg}t| D ]v\}}t|^ dD ]0\}}|tjd krZt|sZtd| d qZt  t	d|d  d|| d W 5 Q R X qBd S )Nr8      g?
   Fxelatex)rD   	font.sizefigure.subplot.leftlines.markersizerE   rM   Z	monospaceg?r7   rL   zG\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc}\usepackage{sfmath})rD   rW   rX   rY   rE   rM   rN   r   gffffff*@))sfmathrZ   )Zutf8xrJ   rN   zneeds z.styZpgf_rcupdater.   .pdfr   )
_old_gs_version	enumeraterF   Z
rc_contextrG   r   rQ   skipr?   r%   )Zrc_setsr   iZrc_setZ	substringpkgr   r   r   test_rcupdatev   s4    ra   c                  C   s   t jd tjddd tdd\} }|d dd	gdd	g |d 	dd |d 
dd |d ddgddg |d jt jjd
ddddgd |d d | jt dd d S )Ni!N,rB   FrC   r.   r0   r   r1   g}Ô%ITi  )sizer7   irU   )Zbinsrangelogpdfformat)r;   randomseedrF   rG   rH   r   subplotsr<   Zset_xlimZset_ylimZscatterhistnormalZ
set_xscaler   r   )r,   Zaxsr   r   r   test_pathclip   s    "rm   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@r0   T)rF   rG   rH   r;   Zogridr   ZpcolorZset_rasterized)YXr   r   r   test_mixedmode   s    rq   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.   r0      zpgf_bbox_inches.pdfbbox_inchesr   )r!   r   )rF   rG   rH   r   rj   r<   rc   tight_layoutZget_window_extentZtransformedZdpi_scale_transinvertedr%   )r,   ax1ax2Zbboxr   r   r   test_bbox_inches   s    
rx   systemlualatex)ZmarksrL   rV   c           	      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   rM   rr   )r2   r0   ZfigsizeZ	pdfpages_r[   meMultipage PDF with pgf	Test pagetest,pdf,multipage     r.   r   tzinfoUnknownZAuthorZTitleSubjectZKeywordsZModDateZTrappedmetadatar2   )rF   rG   rH   r   rj   r<   rc   rt   r   r   r   r   datetimetimezone	timedeltar   r   Zget_pagecountr&   )	ry   rR   Zfig1rv   Zfig2rw   r   mdre   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0rM   rr   r|   r}   r~   r   r   r   r.   r   r   Truer   Zpdfpages_meta_check_r[   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 vrz   ZLuaTeXzD:19700101000000ZzMatplotlib vz, https://matplotlib.orgzD:19680801000000Zz/True)z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez/Subjectz/Titlez/Trapped)rQ   ZimportorskipZsetenvrF   rG   rH   r   rj   r<   rc   r   r   r   r   r   r   r   r   r   ZPdfopenZdocinfoitemspop__version__r&   )
Zmonkeypatchry   r   r,   axr   r   re   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(   rf   z
this is ok)r   r*   ZsuptitlerQ   Zraises
ValueErrorr   r   )r,   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.   r0   r2   re   r(   Ztight)rg   backendrs   )r   rj   Zimshowr   r   )r,   r   r   r   r   test_bbox_inches_tight1  s    r   c                  C   sH   t  } t j| dddd | d t| }|d dk sDtd S )NZpngr(   T)rg   r   Ztransparentr   ).r2   )r   r   r*   r   seekZimreadallr&   )buftr   r   r   test_png_transparency8  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(   rf   z/Ignoring unknown font: this-font-does-not-existc                 S   s   g | ]}|  qS r   )
getMessage)r   rr   r   r   
<listcomp>H  s    z%test_unknown_font.<locals>.<listcomp>)	Zat_levelrF   rG   r   Zfigtextr   r   recordsr&   )Zcaplogr   r   r   test_unknown_fontB  s    
r   re   )
extensions	texsystem)rL   rV   rz   c                 C   s@   t |st|d  |tjd< | ddd |ddd d S )Nz + pgf is requiredrM   r)   z$-1$u   $−1$)r   rQ   r^   rF   rG   r+   )Zfig_testZfig_refr   r   r   r   test_minus_signs_with_texL  s
    
r   c               	   C   s   t jdd\} }|g  |g  |d |ddg\}|jdddd	 t  }| j|d
d |	 
 }W 5 Q R X d}||kstd S )N)r2   r2   r{   Fr   r.   rr   rT   *   )ZscalelengthZ
randomnessr(   rf   aR  \pgfpathmoveto{\pgfqpoint{0.375000in}{0.300000in}}%
\pgfpathlineto{\pgfqpoint{2.700000in}{2.700000in}}%
\usepgfmodule{decorations}%
\usepgflibrary{decorations.pathmorphing}%
\pgfkeys{/pgf/decoration/.cd, segment length = 0.150000in, amplitude = 0.100000in}%
\pgfmathsetseed{42}%
\pgfdecoratecurrentpath{random steps}%
\pgfusepath{stroke}%)r   rj   Z
set_xticksZ
set_yticksZset_frame_onr<   Zset_sketch_paramsr   r   getvaluedecoder&   )r,   r   handlefdr   Zbaseliner   r   r   test_sketch_paramsW  s    


r   )Ar   ior   r   r   Znumpyr;   Zpackaging.versionr   parse_versionrQ   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   Zmatplotlib.testing._markersr   r   r   r   r   r   r%   markZparametrizer'   r   r-   r?   rI   Z_get_executable_infoversionr\   ZExecutableNotFoundErrorZskipifrS   rA   contextra   rm   rq   rx   paramr   r   r   r   r   r   r   r   r   r   r   r   <module>   s   













#

2


	


