
    G8c.                        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	       \  Z"Z#i d fd
Z$e
jJ                  jM                  dg d      d        Z'e!e
jJ                  jQ                  d      d               Z)d Z*e!e
jJ                  jQ                  d       edgd      d                      Z+	  ejX                  d      jZ                   e	d      k  Z.e e
jJ                  ja                   ed       d      e
jJ                  jQ                  d       edgde.rdnd       d                             Z1e!e ejd                  jg                  d      e
jJ                  jQ                  d      d                             Z4e!ejd                  jg                  d      e
jJ                  jQ                  d      d                       Z5e!e
jJ                  jQ                  d       ed!gd      d"                      Z6e!ejd                  jg                  d      e
jJ                  jQ                  d      d#                      Z7ejd                  jg                  d      e
jJ                  jQ                  d      e
jJ                  jM                  d$ e
jp                  d%eg&       e
jp                  d'e g&       e
jp                  d(e!g&      g      d)                      Z9ejd                  jg                  d      e
jJ                  jQ                  d      e
jJ                  jM                  d$ e
jp                  d%eg&       e
jp                  d'e g&       e
jp                  d(e!g&      g      d*                      Z:e!d+        Z;e!d,        Z<e!ed-               Z=e!d.        Z> ed/g0      e
jJ                  jM                  d1d2      e
jJ                  jQ                  d      d3                      Z?e
jJ                  jQ                  d      d4        Z@y# ej^                  $ r dZ.Y Aw xY w)5    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                       y)Nz
dummy func r       C/usr/lib/python3/dist-packages/matplotlib/tests/test_backend_pgf.py<lambda>r      s    r   c                 l   t         j                  j                  t        |       }t	        j
                  |fi | t         j                  j                  t        d| z        }t        j                  t         j                  j                  t        |       |       t        |||      }|rt        |      y )Nzexpected_%stol)ospathjoin
result_dirpltsavefigshutilcopyfilebaseline_dirr   r   )fnamesavefig_kwargsr   actualexpectederrs         r   compare_figurer(      s~    WW\\*e,FKK).)ww||J(=>H
OOBGGLLu5x@
6s
3C
$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                 $    t        |       |k(  sJ y )N)r
   )
plain_textescaped_texts     r   test_tex_escaper,   $   s     z"l222r   pgfc                 z    t        j                         }|j                  ddd       |j                  | dz         y )N      ?z
_^ $a_b^c$ztest.pdf)r   figuretextr   )tmp_pathfigs     r   test_tex_special_charsr4   -   s0     **,CHHR\"KK:%&r   c                  ,   t        j                          t        j                  ddd      } t        j                  | | dz  d       t        j                  | d| dz  z
  d       t        j
                  ddgddgd	d
d       t        j                  g dg dd       t        j                  dgdgdd       t        j                  ddddd       t        j                  ddd       t        j                  dd       t        j                  dd       y )Nr            zb-zg>        g?z//	lightgrayred)hatch	facecolor	edgecolor)   r?   皙?r@   r?   )r8   rA   r   r8   bg?r/   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   r0   nplinspaceplotfill_betweenfillr1   ylabelxlimylim)xs    r   create_figurerV   5   s    JJL
Aq"A HHQQ HHQAqD$ b"XBxt{$&HH 137 HHcUSE4A.HHS#I"&JJ="&2 HHQNHHQNr   zpgf_xelatex.pdfdefault)stylec                  `    ddd} t         j                  j                  |        t                y )NserifFfont.familypgf.rcfonts)mplrcParamsupdaterV   )
rc_xelatexs    r   test_xelatexrb   P   s(     ")!&(JLL
#Or   gsz9.50Tucszneeds ucs.sty)reasonzpgf_pdflatex.pdfgffffff'@)rX   r   c                      t         j                  j                  d      rt        j                  d       ddddd} t
        j                  j                  |        t                y )NAPPVEYORzBpdflatex test does not work on appveyor due to missing LaTeX fontsrZ   Fpdflatexz4\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc})r\   r]   pgf.texsystempgf.preamble)	r   environgetpytestxfailr^   r_   r`   rV   )rc_pdflatexs    r   test_pdflatexrp   b   sW     
zz~~j! # 	$ #*"'$.%@BK
 LL$Or   c            	         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 ]  \  }}t        j                  |      5  dD ]@  \  }}|t        j                  d   v st        |      r(t        j                  d| d       B t                t        d|dz    d||          d d d         y # 1 sw Y   xY w)NrI      g?
   Fxelatex)r\   	font.sizefigure.subplot.leftlines.markersizer]   ri   	monospaceg?rF   rh   zG\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc}\usepackage{sfmath})r\   ru   rv   rw   r]   ri   rj   r   gffffff*@))sfmathry   )utf8xrd   rj   zneeds z.stypgf_rcupdater6   .pdfr   )
_old_gs_version	enumerater^   
rc_contextr_   r   rm   skiprV   r(   )rc_setsr   irc_set	substringpkgs         r   test_rcupdater   v   s    
  ,')$&$!*,  +')$&$!+"8:;G '1d)QFCw' C	6^^F# 	C"J 4	3n!== 0 5KK&T 234 O\!a%53q6B	C 	CC	C 	Cs   B:'B:3<B::C	c                  <   t         j                  j                  d       t        j                  j                  ddd       t        j                  dd      \  } }|d   j                  dd	gdd	g       |d   j                  dd       |d   j                  dd       |d   j                  ddgddg       |d   j                  t         j                  j                  d
      dddg       |d   j                  d       | j                  t!               d       y )Ni!N,rZ   Fr[   r6   r8   r   r9   g}Ô%ITi  )sizerF   irs   )binsrangelogpdfformat)rM   randomseedr^   r_   r`   r   subplotsrO   set_xlimset_ylimscatterhistnormal
set_xscaler   r   )r3   axss     r   test_pathclipr      s     IINN8LLFG||Aq!HCFKKUb%[)FOOAqFOOAqFNNAq6Aq6"FKK		  d +"S"IKFFeKK	%K(r   zpgf_mixedmode.pdfc                      t         j                  j                  ddd       t        j                  ddddddf   \  } }t        j                  |dz  | dz  z         j                  d       y )	NrZ   Fr[   r6   y              D@r8   T)r^   r_   r`   rM   ogridr   pcolorset_rasterized)YXs     r   test_mixedmoder      sa     LLFG88BqHb3h&'DAqJJq!tad{**40r   c                     t         j                  j                  ddd       t        j                  dd      \  } \  }}|j                  t        d             |j                  t        d             t        j                          |j                         j                  | j                  j                               }t        dd|id	
       y )NrZ   Fr[   r6   r8      zpgf_bbox_inches.pdfbbox_inchesr   )r$   r   )r^   r_   r`   r   r   rO   r   tight_layoutget_window_extenttransformeddpi_scale_transinvertedr(   )r3   ax1ax2bboxs       r   test_bbox_inchesr      s     LLFGll1a(OC#sHHU1XHHU1X  "..s/B/B/K/K/MND(-9Nr   systemlualatex)marksrh   rt   c                    dd| d}t         j                  j                  |       t        j                         \  }}|j                  t        d             |j                          t        j                  d      \  }}|j                  t        d             |j                          t        j                  j                  t        d|  d      }d	d
ddt        j                  dddt        j                  t        j                  d                  dd}t        ||      5 }|j!                  |       |j!                  |       |j!                  |       |j#                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)NrZ   F)r\   r]   ri   r   )r?   r8   figsize	pdfpages_r|   meMultipage PDF with pgf	Test pagetest,pdf,multipage     r6   r   tzinfoUnknownAuthorTitleSubjectKeywordsModDateTrappedmetadatar?   )r^   r_   r`   r   r   rO   r   r   r   r   r   r   datetimetimezone	timedeltar	   r   get_pagecount)	r   ro   fig1r   fig2r   r   mdr   s	            r   test_pdf_pagesr      s@    K
 LL$ID#HHU1XV,ID#HHU1X77<<
ixt$<=D)($$!Qx001C1CA1FGI
B 
$	$ (DDD  "a'''( ( (s   %A	E88Fc                    t        j                  d      }| j                  dd       t        j                  j                  d|i       t        j                         \  }}|j                  t        d             dddd	t        j                  d
ddt        j                  t        j                  d                  dd}t        j                  j                  t         d| d      }t#        ||      5 }|j%                  |       d d d        |j&                  j)                  |      5 }|j*                  j-                         D 	ci c]  \  }}	|t/        |	       }
}}	d d d        d
v r|
d= d|
v r|
d= |
j1                  d      }|dt        j2                   k(  s|dk(  rd|v sJ |
dddt        j2                   dd	dddddk(  sJ y # 1 sw Y   xY wc c}	}w # 1 sw Y   ~xY w) NpikepdfSOURCE_DATE_EPOCH0ri   r   r   r   r   r   r   r   r6   r   r   Truer   pdfpages_meta_check_r|   r   z/PTEX.FullBannerz/PTEX.Fullbannerz	/ProducerzMatplotlib pgf backend vr   LuaTeXzD:19700101000000ZzMatplotlib vz, https://matplotlib.orgzD:19680801000000Zz/True)z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez/Subjectz/Titlez/Trapped)rm   importorskipsetenvr^   r_   r`   r   r   rO   r   r   r   r   r   r   r   r   r	   r   Pdfopendocinfoitemsstrpop__version__)monkeypatchr   r   r3   axr   r   r   kvinfoproducers               r   test_pdf_pages_metadata_checkr      s    !!),G*C0LL&12llnGCGGE!H )($$!Qx001C1CA1FGI
B 77<<
&:6($$GHD	$	$ C 
		$	 ;3&)kk&7&7&9:da3q6	::; T!#$T!#$ xx$H1#//1BCCj X%9; ; ,"3??"33KL)'*	 	 	 	#  ;; ;s*   5G*GGGGGG'c                  `   t        j                         } | j                  d       t        j                  t
              5  | j                  t               d       d d d        t        j                         } | j                  d       | j                  t               d       y # 1 sw Y   JxY w)Nz\oopsr-   r   z
this is ok)r   r0   suptitlerm   raises
ValueErrorr   r   )r3   s    r   test_tex_restart_after_errorr   %  sw    
**,CLL	z	" -GIe,- **,CLLKK	%K(- -s   B$$B-c                      t        j                         \  } }|j                  ddgddgg       | j                  t	               ddd       y )	Nr   r6   r8   r?   r   r-   tight)r   backendr   )r   r   imshowr   r   )r3   r   s     r   test_bbox_inches_tightr   1  s@    llnGCII1v1vKK	%GKLr   c                      t               } t        j                         j                  | ddd       | j	                  d       t        j
                  |       }|d   dk(  j                         sJ y )Npngr-   T)r   r   transparentr   ).r?   )r   r   r0   r   seekimreadall)bufts     r   test_png_transparencyr   8  sZ     )CJJLUEtLHHQK

3AfIN!!!r   c                 D   | j                  d      5  dt        j                  d<   t        j                  ddd       t        j
                  t               d       d d d        d| j                  D cg c]  }|j                          c}v sJ y # 1 sw Y   6xY wc c}w )	NWARNINGzthis-font-does-not-existr\   r/   zhello, worldr-   r   z/Ignoring unknown font: this-font-does-not-exist)	at_levelr^   r_   r   figtextr   r   records
getMessage)caplogrs     r   test_unknown_fontr  B  s    		# -&@]#BN+GIe,- = &A0A0 0 0 0	- -A0s   A
B3BBr   )
extensions	texsystem)rh   rt   r   c                     t        |      st        j                  |dz          |t        j                  d<   | j                  ddd       |j                  ddd       y )Nz + pgf is requiredri   r/   z$-1$u   $−1$)r   rm   r   r^   r_   r1   )fig_testfig_refr  s      r   test_minus_signs_with_texr  L  sM     )$I 445$-CLL!MM"b&!LLR,-r   c                     t        j                  d      \  } }|j                  g        |j                  g        |j	                  d       |j                  ddg      \  }|j                  ddd	       t               5 }| j                  |d
       |j                         j                         }d d d        d}|v sJ y # 1 sw Y   xY w)N)r?   r?   r   Fr   r6   r   rr   *   )scalelength
randomnessr-   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   
set_xticks
set_yticksset_frame_onrO   set_sketch_paramsr   r   getvaluedecode)r3   r   handlefdr   baselines         r   test_sketch_paramsr  W  s    ll6*GCMM"MM"OOEggq!foGF
1RB?	 %bBu%kkm""$%H s??% %s    2CC)Ar   ior   r   r    numpyrM   packaging.versionr   parse_versionrm   
matplotlibr^   matplotlib.pyplotpyplotr   matplotlib.testingr   r   matplotlib.testing.comparer   r   matplotlib.backends.backend_pgfr	   r
   matplotlib.testing.decoratorsr   r   r   matplotlib.testing._markersr   r   r   r   r"   r   r(   markparametrizer,   r   r4   rV   rb   _get_executable_infoversionr}   ExecutableNotFoundErrorskipifrp   rX   contextr   r   r   r   paramr   r   r   r   r   r  r  r  r   r   r   <module>r+     s     	   4    ? M A? ? 
 ..BC j *, * 3 6 
3
3 U'  '6 U$%Y7 8     &..v1FF  (//HU%&i-d166  I 
 9UC    C8 9U)   )" U&'y91 :  1 9U    9UFLL$6#78FLL$6#78FLL#4"56$ 
 (   (F 9UFLL$6#78FLL$6#78FLL#4"56$ 
/  /d ) ) M M "  " 0 0 (&IJU.  K ). U w "" Os   -%P? ?QQ