o
    iP(                     @   s  d dl Z d dlm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
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 edd	 \ZZd
d 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"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)e!ej(ded#gdd d$d% Z*e e!ejje#  d&d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d.d/ Z/ej+dej(dej&d0ej0de"gd1ej0de!gd1ej0de gd1gd2d3 Z1ej+dej(dej&d0ej0de"gd1ej0de!gd1ej0de gd1gd4d5 Z2e d6d7 Z3e d8d9 Z4dS ):    N)BytesIO)Path)TemporaryDirectory)compare_imagesImageComparisonFailure)image_comparison_image_directories)PdfPagescommon_texificationc                   C   s   dS )Nz
dummy func r   r   r   \/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/matplotlib/tests/test_backend_pgf.py<lambda>   s    r   c              
   C   s   t  :}t|d}|d ztj| dt|g|tjtjd W n ttjfy3   Y W d    dS w 	 W d    dS 1 s@w   Y  d S )Nztest.texz
            \documentclass{minimal}
            \usepackage{pgf}
            \begin{document}
            \typeout{pgfversion=\pgfversion}
            \makeatletter
            \@@end
        z-halt-on-error)cwdstdoutstderrFT)	r   r   
write_text
subprocess
check_callstrDEVNULLOSErrorCalledProcessError)	texsystemtmpdirtex_pathr   r   r   	check_for   s   


$r   xelatexzxelatex + pgf is required)reasonpdflatexzpdflatex + pgf is requiredlualatexzlualatex + pgf is requiredc                   C   s$   t dotjddgtjdjdkS )N	kpsewhichz
sfmath.sty)r   r   )shutilwhichr   runPIPE
returncoder   r   r   r   _has_sfmath1   s   

r&   c                 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savefigr!   copyfilebaseline_dirr   r   )fnamesavefig_kwargsr(   actualexpectederrr   r   r   compare_figure7   s   r6   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//	lightgrayred)hatch	facecolor	edgecolor)   r@   皙?rA   r@   )r9   rB   r   r9   bg?g      ?ror@   )
markersizeu/   unicode (ü, °, µ) and math ($\mu_i = x_i^2$)right   )hafontsizez*sans-serif, blue, $\frac{\sqrt{x}}{y^2}$..
sans-serifblue)familycolor)r-   figurenplinspaceplotfill_betweenfilltextylabelxlimylim)xr   r   r   create_figureB   s"   
rY   zplain_text, escaped_text))zquad_sum: $\sum x_i^2$z'quad\_sum: \(\displaystyle \sum x_i^2\))no \$splits \$ hererZ   )with_underscoreszwith\_underscores)z% not a commentz\% not a comment)z^notz\^notc                 C   s   t | |ksJ d S )N)r
   )
plain_textescaped_textr   r   r   test_common_texification\   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updaterY   
rc_xelatexr   r   r   test_xelatexh   s
   
rk   zpgf_pdflatex.pdfc                  C   s<   t jddrtd ddddd} tj|  t  d S )NAPPVEYORFzBpdflatex test does not work on appveyor due to missing LaTeX fontsrb   r   z4\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc})rd   re   pgf.texsystempgf.preamble)	r)   environgetpytestxfailrf   rg   rh   rY   )rc_pdflatexr   r   r   test_pdflatexs   s   

rt   zneeds sfmath.styc               	   C   s   dddddddddd	d
ddddg} ddg}t | D ](\}}t| t  td|d  || d W d    n1 s>w   Y  qd S )NrJ      g?
   Fr   )rd   	font.sizefigure.subplot.leftlines.markersizere   rm   	monospaceg?rG   r   zG\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc}\usepackage{sfmath})rd   rw   rx   ry   re   rm   rn      r   zpgf_rcupdate%d.pdfr7   r'   )	enumeraterf   
rc_contextrY   r6   )rc_setsr(   irc_setr   r   r   test_rcupdate   s0   r   c                  C   sb   ddd} t j|  t  tddgddg tdd tdd tt	j
td d S )	Nrb   Frc   r:   g}Ô%ITr   r7   zpgf_pathclip.pdf)rf   rg   rh   r-   rN   rQ   rV   rW   r.   r)   r*   r+   r,   ri   r   r   r   test_pathclip   s   r   zpgf_mixedmode.pdfc                  C   s\   ddd} t j|  tjddddddf \}}t  t|d |d  d d S )	Nrb   Frc   r7                 D@r9   T)	rf   rg   rh   rO   ogridr-   rN   pcolorset_rasterized)rj   YXr   r   r   test_mixedmode   s    r   c                  C   s   ddd} t j|  tjddddddf \}}t }|d}|t	d |d	}|t	d t
  | |j }td
d|idd d S )Nrb   Frc   r   r7   r   y      z   zpgf_bbox_inches.pdfbbox_inchesr   )r2   r(   )rf   rg   rh   rO   r   r-   rN   add_subplotrQ   rangetight_layoutget_window_extenttransformeddpi_scale_transinvertedr6   )rj   r   r   figax1ax2bboxr   r   r   test_bbox_inches   s   



r   system)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 )Nrb   F)rd   re   rm   r   )r@   r9   )figsize	pdfpages_.pdfmeMultipage PDF with pgf	Test pagetest,pdf,multipage     r7   r   tzinfoUnknownAuthorTitleSubjectKeywordsModDateTrappedmetadatar@   )rf   rg   rh   r-   subplotsrQ   r   r   r)   r*   r+   r,   datetimetimezone	timedeltar	   r.   get_pagecount)	r   rs   fig1r   fig2r   r*   mdpdfr   r   r   test_pdf_pages   s6   	



"r   c           	      C   sJ  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dtj dd	ddtj dddd	ksJ d S )NpikepdfSOURCE_DATE_EPOCH0rm   r   r   r   r   r   r   r   r7   r   r   Truer   pdfpages_meta_check_r   r   c                 S   s   i | ]	\}}|t |qS r   )r   ).0kvr   r   r   
<dictcomp>   s    z1test_pdf_pages_metadata_check.<locals>.<dictcomp>z/PTEX.FullBannerz/PTEX.FullbannerzD:19700101000000ZzMatplotlib vz, https://matplotlib.orgzD:19680801000000ZzMatplotlib pgf backend vz/True)	z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez	/Producerz/Subjectz/Titlez/Trapped)rq   importorskipsetenvrf   rg   rh   r-   r   rQ   r   r   r   r   r)   r*   r+   r,   r	   r.   Pdfopendocinfoitems__version__)	monkeypatchr   r   r   axr   r*   r   infor   r   r   test_pdf_pages_metadata_check   sH   

	
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\oopsr_   )formatz
this is ok)r-   rN   suptitlerq   raises
ValueErrorr.   r   )r   r   r   r   test_tex_restart_after_error5  s   

r   c                 C   s@   t  \}}|ddgddgg |jtj| dddd d S )	Nr   r7   r9   r@   ztest.pdfr_   tight)backendr   )r-   r   imshowr.   r)   r*   r+   )r   r   r   r   r   r   test_bbox_inches_tightA  s
   
r   )5r   ior   r)   pathlibr   r!   r   tempfiler   numpyrO   rq   
matplotlibrf   matplotlib.pyplotpyplotr-   matplotlib.testing.comparer   r   matplotlib.testing.decoratorsr   r   matplotlib.backends.backend_pgfr	   r
   r0   r,   r   markskipifneeds_xelatexneeds_pdflatexneeds_lualatexr&   r6   rY   parametrizer^   r   rk   rt   ra   r   r   r   r   paramr   r   r   r   r   r   r   r   <module>   s    












#
.
