U
    md.                     @   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   Z/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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)
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	lightgray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-serifblue)familycolor)r   r+   npZlinspaceplotZfill_betweenfillr,   ZylabelZxlimZylim)xr   r   r   create_figure5   s&    "
  rB   zpgf_xelatex.pdfdefault)stylec                  C   s    ddd} t j|  t  d S )NserifFfont.familypgf.rcfonts)mplrcParamsupdaterB   )Z
rc_xelatexr   r   r   test_xelatexP   s
    rL   gsz9.50Tucszneeds ucs.sty)reasonzpgf_pdflatex.pdfgffffff'@)rD   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 fontsrE   Fpdflatexz4\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc})rG   rH   pgf.texsystempgf.preamble)	r   environgetpytestZxfailrI   rJ   rK   rB   )rc_pdflatexr   r   r   test_pdflatexb   s    
rW   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 )Nr:      g?
   Fxelatex)rG   	font.sizefigure.subplot.leftlines.markersizerH   rQ   Z	monospaceg?r9   rP   zG\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc}\usepackage{sfmath})rG   r[   r\   r]   rH   rQ   rR   r   gffffff*@))sfmathr^   )Zutf8xrN   rR   zneeds z.styZpgf_rcupdater/   .pdfr   )
_old_gs_version	enumeraterI   Z
rc_contextrJ   r   rU   skiprB   r%   )Zrc_setsr   iZrc_setZ	substringpkgr   r   r   test_rcupdatev   s4    re   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,rE   FrF   r/   r1   r   r2   g}Ô%ITi  )sizer9   irY   )Zbinsrangelogpdfformat)r>   randomseedrI   rJ   rK   r   subplotsr?   Zset_xlimZset_ylimZscatterhistnormalZ
set_xscaler   r   )r-   Zaxsr   r   r   test_pathclip   s    "rq   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 )	NrE   FrF   r/   y              D@r1   T)rI   rJ   rK   r>   Zogridr   ZpcolorZset_rasterized)YXr   r   r   test_mixedmode   s    ru   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 )NrE   FrF   r/   r1      zpgf_bbox_inches.pdfbbox_inchesr   )r!   r   )rI   rJ   rK   r   rn   r?   rg   tight_layoutZget_window_extentZtransformedZdpi_scale_transinvertedr%   )r-   ax1ax2Zbboxr   r   r   test_bbox_inches   s    
r|   systemlualatex)ZmarksrP   rZ   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 )NrE   F)rG   rH   rQ   rv   )r4   r1   ZfigsizeZ	pdfpages_r_   meMultipage PDF with pgf	Test pagetest,pdf,multipage     r/   r   tzinfoUnknownAuthorZTitleSubjectKeywordsZModDateZTrappedmetadatar4   )rI   rJ   rK   r   rn   r?   rg   rx   r   r   r   r   datetimetimezone	timedeltar   r   Zget_pagecountr&   )	r}   rV   Zfig1rz   Zfig2r{   r   mdri   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0rQ   rv   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 vr~   ZLuaTeXzD:19700101000000ZzMatplotlib vz, https://matplotlib.orgzD:19680801000000Zz/True)z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez/Subjectz/Titlez/Trapped)rU   ZimportorskipZsetenvrI   rJ   rK   r   rn   r?   rg   r   r   r   r   r   r   r   r   r   ZPdfopenZdocinfoitemspop__version__r&   )
Zmonkeypatchr}   r   r-   axr   r   ri   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)   rj   z
this is ok)r   r+   ZsuptitlerU   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/   r1   r4   ri   r)   Ztight)rk   backendrw   )r   rn   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)rk   r   transparentr   ).r4   )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-existrG   r*   zhello, worldr)   rj   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_levelrI   rJ   r   Zfigtextr   r   recordsr&   )Zcaplogr   r   r   test_unknown_fontB  s    
r   ri   )
extensions	texsystem)rP   rZ   r~   c                 C   s@   t |st|d  |tjd< | ddd |ddd d S )Nz + pgf is requiredrQ   r*   z$-1$u   $−1$)r   rU   rb   rI   rJ   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)r4   r4   r   Fr   r/   rv   rX   *   )scalelengthZ
randomnessr)   rj   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   rn   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   numpyr>   Zpackaging.versionr   parse_versionrU   Z
matplotlibrI   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.   rB   rL   Z_get_executable_infoversionr`   ZExecutableNotFoundErrorZskipifrW   rD   contextre   rq   ru   r|   paramr   r   r   r   r   r   r   r   r   r   r   r   <module>   s   













#

2


	


