
    g2                     	   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 d dlmZ d dl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!ee
jJ                  jM                  d      d                      Z'd Z(e!e
jJ                  jM                  d       edgd      d                      Z)	  ejT                  d      jV                   e	d      k  Z,e e
jJ                  j]                   ed       d      e
jJ                  j]                   ed       d      e
jJ                  jM                  d       edgde,rdnd       d                                    Z/e!e ej`                  jc                  d      e
jJ                  jM                  d      d                             Z2e!ej`                  jc                  d      e
jJ                  jM                  d      d                       Z3e!e
jJ                  jM                  d       ed!gd      d"                      Z4e!ej`                  jc                  d      e
jJ                  jM                  d      d#                      Z5ej`                  jc                  d      e
jJ                  jM                  d      e
jJ                  jm                  d$ e
jn                  d%eg&       e
jn                  d'e g&       e
jn                  d(e!g&      g      d)                      Z8ej`                  jc                  d      e
jJ                  jM                  d      e
jJ                  jm                  d$ e
jn                  d%eg&       e
jn                  d'e g&       e
jn                  d(e!g&      g      d*                      Z9e!d+        Z:e!d,        Z;e!d-        Z<e!ed.               Z=e!d/        Z> ed0g1      e
jJ                  jm                  d2d3      e
jJ                  jM                  d      d4                      Z?e
jJ                  jM                  d      d5        Z@e!e
jJ                  j]                   ed6       d7      e
jJ                  jM                  d       ed8gdd9      d:                             ZAy# ejZ                  $ r dZ,Y w xY w);    N)BytesIO)parse)_has_tex_package_check_for_pgf)ImageComparisonFailure)compare_images)PdfPages)_image_directoriescheck_figures_equalimage_comparison)needs_ghostscriptneeds_pgf_lualatexneeds_pgf_pdflatexneeds_pgf_xelatexc                       y)Nz
dummy func r       ^/var/www/dash_apps/app1/venv/lib/python3.12/site-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   pgfc                    t        j                         }|j                  ddd       t               }|j	                  |dd       |j                  d       t        j                  |      }|dk(  j                         rJ y )N      ?z%_^ $a_b^c$pngr(   )formatbackendr      )r   figuretextr   r   seekimreadall)tmp_pathfigbufts       r   test_tex_special_charsr8   %   se     **,CHHR]#
)CKKE5K1HHQK

3AQ||~~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ddd       t        j                  dd       t        j                  dd       y ) Nr   r.         zb-zg>        g?z//	lightgrayred)hatch	facecolor	edgecolor)   rB   皙?rC   rB   )r;   rD   r   r;   bg?r*   rorB   )
markersizeu/   unicode (ü, °, §) and math ($\mu_i = x_i^2$)right   )hafontsizez*sans-serif, blue, $\frac{\sqrt{x}}{y^2}$..
sans-serifblue)familycolorz2should be clipped as default clip_box is Axes bboxT)rK   clip_on)r   r/   nplinspaceplotfill_betweenfillr0   ylabelxlimylim)xs    r   create_figurerZ   2   s    JJL
Aq"A HHQQ HHQAqD$ b"XBxt{$&HH 137 HHcUSE4A.HHS#W"&JJ="&2HHQG$( 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updaterZ   )
rc_xelatexs    r   test_xelatexrg   O   s(     ")!&(JLL
#Or   gsz9.50Ttype1eczneeds type1ec.sty)reasonucszneeds ucs.styzpgf_pdflatex.pdfgQk'@)r\   r   c                  d    ddddd} t         j                  j                  |        t                y )Nr^   Fpdflatexz4\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc})r`   ra   pgf.texsystempgf.preamblerb   )rc_pdflatexs    r   test_pdflatexrq   a   s4     #*"'$.%@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)NrL      g?
   Fxelatex)r`   	font.sizefigure.subplot.leftlines.markersizera   rn   	monospaceg?rI   rm   zG\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc}\usepackage{sfmath})r`   rv   rw   rx   ra   rn   ro   r   gffffff*@))sfmathrz   )utf8xrk   ro   zneeds z.stypgf_rcupdater.   .pdfr   )
_old_gs_version	enumeraterc   
rc_contextrd   r   pytestskiprZ   r'   )rc_setsr   irc_set	substringpkgs         r   test_rcupdater   r   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,r^   Fr_   r.   r;   r   r<   g}Ô%ITi  )sizerI   irt   )binsrangelogpdfr,   )rQ   randomseedrc   rd   re   r   subplotsrS   set_xlimset_ylimscatterhistnormal
set_xscaler   r   )r5   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 )	Nr^   Fr_   r.   y              D@r;   T)rc   rd   re   rQ   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 )Nr^   Fr_   r.   r;      zpgf_bbox_inches.pdfbbox_inchesr   )r#   r   )rc   rd   re   r   r   rS   r   tight_layoutget_window_extenttransformeddpi_scale_transinvertedr'   )r5   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)marksrm   ru   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)Nr^   F)r`   ra   rn   r   )rB   r;   figsize	pdfpages_r}   meMultipage PDF with pgf	Test pagetest,pdf,multipage     r.   r   tzinfoUnknownAuthorTitleSubjectKeywordsModDateTrappedmetadatarB   )rc   rd   re   r   r   rS   r   r   r   r   r   r   datetimetimezone	timedeltar	   r   get_pagecount)	r   rp   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0rn   r   r   r   r   r   r   r   r.   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)r   importorskipsetenvrc   rd   re   r   r   rS   r   r   r   r   r   r   r   r   r	   r   Pdfopendocinfoitemsstrpop__version__)monkeypatchr   r   r5   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                 (   | dz  }t        |      5 }	 d d d        |j                         rJ | dz  }t        |      5 }|j                  t        j                                d d d        |j                         sJ y # 1 sw Y   jxY w# 1 sw Y   (xY w)Nza.pdfzb.pdf)r	   existsr   r   r/   )r4   fnr   s      r   test_multipage_keep_emptyr   !  s     
G	B	" yy{? 
G	B	" "CJJL!"99;; " "s   A<$B<BB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   r/   suptitler   raises
ValueErrorr   r   )r5   s    r   test_tex_restart_after_errorr   0  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   r.   r;   rB   r   r(   tight)r,   r-   r   )r   r   imshowr   r   )r5   r   s     r   test_bbox_inches_tightr   <  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 )Nr+   r(   T)r,   r-   transparentr   ).rB   )r   r   r/   r   r1   r2   r3   )r6   r7   s     r   test_png_transparencyr   C  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_levelrc   rd   r   figtextr   r   records
getMessage)caplogrs     r   test_unknown_fontr   M  s    		# -&@]#BN+GIe,- = &A0A0 0 0 0	- -A0s   A
B3BBr   )
extensions	texsystem)rm   ru   r   c                     t        |      st        j                  |dz          |t        j                  d<   | j                  ddd       |j                  ddd       y )Nz + pgf is requiredrn   r*   z$-1$u   $−1$)r   r   r   rc   rd   r0   )fig_testfig_refr  s      r   test_minus_signs_with_texr  W  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)rB   rB   r   Fr   r.   r   rs   *   )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_onrS   set_sketch_paramsr   r   getvaluedecode)r5   r   handlefdr6   baselines         r   test_sketch_paramsr  b  s    ll6*GCMM"MM"OOEggq!foGF
1RB?	 %bBu%kkm""$%H s??% %s    2CCzunicode-mathzneeds unicode-math.styzpgf_document_font_size.pdf)r\   remove_textc                      t         j                  j                  dddd       t        j                          t        j
                  g d       t        j
                  g d       t        j                          y )Nru   Fz\usepackage{unicode-math})rn   ra   ro   zM$this is a very very very long math label a \times b + 10^{-3}$ and some text)labelz:\normalsize the document font size is \the\fontdimen6\font)rc   rd   re   r   r/   rS   legendr   r   r   test_document_font_sizer  ~  s`     LL"4 
 JJLHHR$ HHRP JJLr   )Br   ior   r   r   numpyrQ   packaging.versionr   parse_versionr   
matplotlibrc   matplotlib.pyplotpyplotr   matplotlib.testingr   r   matplotlib.testing.exceptionsr   matplotlib.testing.comparer   matplotlib.backends.backend_pgfr	   matplotlib.testing.decoratorsr
   r   r   matplotlib.testing._markersr   r   r   r   r!   r   r'   markr-   r8   rZ   rg   _get_executable_infoversionr~   ExecutableNotFoundErrorskipifrq   r\   contextr   r   r   r   parametrizeparamr   r   r   r   r   r   r   r  r  r  r   r   r   <module>r/     s2     	   4    ? @ 5 4? ? 
 ..BC j *, * U   : U$%Y7 8     &..v1FF  (33<OP(//HU%&i.eA77  I Q  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 6 ((1I   U/0	tT U  Q	 "" Os   %R- -SS