o
    :ap/                     @   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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 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&vddZ'i d fddZ(dd Z)e
j*dg ddd Z+e!e
j,dedgdddd  Z-ze.d!j/e	d"k Z0W n ej1y   d#Z0Y nw e"e
jj ed$ d%de
j,ded&gde0rd'nd d(d)d* Z2e!e"ej34de
j,dd+d, Z5e!ej34de
j,dd-d. Z6e!e
j,ded/gddd0d1 Z7e!ej34de
j,dd2d3 Z8ej34de
j,de
j*d4e
j9de#gd5e
j9de"gd5e
j9d
e!gd5gd6d7 Z:ej34de
j,de
j*d4e
j9de#gd5e
j9de"gd5e
j9d
e!gd5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 ZAdS )J    N)BytesIO)parse)_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   C/usr/lib/python3/dist-packages/matplotlib/tests/test_backend_pgf.py<lambda>   s    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   sf   t jt| }tj|fi | t jtd|  }tt jt| | t	|||d}|r1t
|d S )Nzexpected_%stol)ospathjoin
result_dirpltsavefigshutilcopyfilebaseline_dirr   r   )fnamesavefig_kwargsr   ZactualZ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 g dg d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)   r'   皙?r(   r'   )r%   r)   r   r%   bg?      ?ror'   )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)ZfamilyZcolor)r   figurenpZlinspaceplotZfill_betweenfilltextZylabelZxlimZylim)xr   r   r   create_figure+   s"   
r6   zplain_text, escaped_text))zquad_sum: $\sum x_i^2$z'quad\_sum: \(\displaystyle \sum x_i^2\))no \$splits \$ herer7   )Zwith_underscoreszwith\_underscores)z% not a commentz\% not a comment)z^notz\^notc                 C   s   t | |ksJ d S )N)r	   )Z
plain_textZescaped_textr   r   r   test_common_texificationE   s   r8   pgfzpgf_xelatex.pdfdefault)stylec                  C   s    ddd} t j|  t  d S )NserifFfont.familypgf.rcfonts)mplrcParamsupdater6   )Z
rc_xelatexr   r   r   test_xelatexQ   s
   
rC   Zgsz9.50Tucszneeds ucs.styzpgf_pdflatex.pdfgffffff'@)r;   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 fontsr<   Fr   z4\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc})r>   r?   pgf.texsystempgf.preamble)	r   environgetpytestZxfailr@   rA   rB   r6   )rc_pdflatexr   r   r   test_pdflatexc   s   

rK   c               	   C   s   dddddddddd	d
ddddg} t rddgnddg}t| D ]E\}}t|4 dD ]\}}|tjd v rEt|sEtd| d q-t  t	d|d  d|| d W d    n1 saw   Y  q!d S )Nr/      g?
   Fr   )r>   	font.sizefigure.subplot.leftlines.markersizer?   rE   Z	monospaceg?r.   r   zG\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc}\usepackage{sfmath})r>   rN   rO   rP   r?   rE   rF   r   gffffff*@))sfmathrQ   )Zutf8xrD   rF   zneeds z.styZpgf_rcupdater#   .pdfr   )
_old_gs_version	enumerater@   Z
rc_contextrA   r   rI   skipr6   r"   )Zrc_setsr   iZrc_setZ	substringZpkgr   r   r   test_rcupdatew   s<   rW   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,r<   Fr=   r#   r%   r   r&   g}Ô%ITi  )sizer.   irM   )Zbinsrangelogpdfformat)r1   ZrandomZseedr@   rA   rB   r   subplotsr2   Zset_xlimZset_ylimZscatterZhistZnormalZ
set_xscaler   r   )figZaxsr   r   r   test_pathclip   s   "r`   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 )	Nr<   Fr=   r#   y              D@r%   T)r@   rA   rB   r1   Zogridr   ZpcolorZset_rasterized)YXr   r   r   test_mixedmode   s    rd   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 )Nr<   Fr=   r#   r%      zpgf_bbox_inches.pdfbbox_inchesr   )r    r   )r@   rA   rB   r   r^   r2   rY   tight_layoutZget_window_extentZtransformedZdpi_scale_transinvertedr"   )r_   ax1ax2Zbboxr   r   r   test_bbox_inches   s   

rk   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 }|| || || | dksoJ W d    d S 1 szw   Y  d S )Nr<   F)r>   r?   rE   re   )r'   r%   ZfigsizeZ	pdfpages_rR   meMultipage PDF with pgf	Test pagetest,pdf,multipage     r#   r   ZtzinfoZUnknownZAuthorZTitleZSubjectZKeywordsZModDateZTrappedZmetadatar'   )r@   rA   rB   r   r^   r2   rY   rg   r   r   r   r   datetimetimezone	timedeltar   r   Zget_pagecount)	rl   rJ   Zfig1ri   Zfig2rj   r   mdr[   r   r   r   test_pdf_pages   s6   	



"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 d    n1 sWw   Y  |j|}dd |j D }W d    n1 sww   Y  d|v r|d= d|v r|d= |d}	|	dtj ks|dkrd|	v sJ |dddtj dd	dddd d!ksJ d S )"NpikepdfSOURCE_DATE_EPOCH0rE   re   rn   ro   rp   rq   rr   rs   r#   r   rt   Trueru   Zpdfpages_meta_check_rR   rv   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)rI   ZimportorskipZsetenvr@   rA   rB   r   r^   r2   rY   rw   rx   ry   r   r   r   r   r   r   ZPdfopenZdocinfoitemspop__version__)
Zmonkeypatchrl   r|   r_   axrz   r   r[   infoZproducerr   r   r   test_pdf_pages_metadata_check   sR   

	
r   c                  C   sr   t  } | d tt | jt dd W d    n1 s!w   Y  t  } | d | jt dd d S )Nz\oopsr9   r\   z
this is ok)r   r0   ZsuptitlerI   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#   r%   r'   r[   r9   Ztight)r]   backendrf   )r   r^   Zimshowr   r   r_   r   r   r   r   test_bbox_inches_tight2  s   r   c                  C   s"   t  \} }| jt ddd d S )NZpngr9   )r]   r   )r   r^   r   r   r   r   r   r   test_png9  s   r   c                 C   sn   |  d dtjd< tddd tjt dd W d    n1 s$w   Y  dd	d
 | jD v s5J d S )NZWARNINGzthis-font-does-not-existr>   r+   zhello, worldr9   r\   z/Ignoring unknown font: this-font-does-not-existc                 S   s   g | ]}|  qS r   )Z
getMessage)r   rr   r   r   
<listcomp>G  s    z%test_unknown_font.<locals>.<listcomp>)Zat_levelr@   rA   r   Zfigtextr   r   Zrecords)Zcaplogr   r   r   test_unknown_fontA  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 requiredrE   r+   z$-1$u   $−1$)r   rI   rU   r@   rA   r4   )Zfig_testZfig_refr   r   r   r   test_minus_signs_with_texK  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 d    n1 sBw   Y  d}||v sOJ d S )N)r'   r'   rm   Fr   r#   re   rL   *   )ZscalelengthZ
randomnessr9   r\   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   r^   Z
set_xticksZ
set_yticksZset_frame_onr2   Zset_sketch_paramsr   r   getvaluedecode)r_   r   ZhandlefdbufZbaseliner   r   r   test_sketch_paramsV  s   


r   )Brw   ior   r   r   Znumpyr1   Zpackaging.versionr   Zparse_versionrI   Z
matplotlibr@   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   ZmarkZskipifZneeds_xelatexZneeds_pdflatexZneeds_lualatexZtestingZcompareZ	converterZneeds_ghostscriptr"   r6   Zparametrizer8   r   rC   Z_get_executable_infoversionrS   ZExecutableNotFoundErrorrK   r;   contextrW   r`   rd   rk   Zparamr{   r   r   r   r   r   r   r   r   r   r   r   <module>   s    













#
2



	

