
    ^j8                        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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 d dl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jX                  j[                  ddd e j                   ddd e j\                   e j^                  d                   dfg      d        Z0ejX                  j[                  dg d      d        Z1e(e%ejX                  je                  d      d                      Z3d Z4e(ejX                  je                  d       e#dgd      d                       Z5	  ejl                  d!      jn                   ed"      k  Z8e'ejX                  ju                   ed$       d%&      ejX                  ju                   ed'       d(&      ejX                  je                  d       e#d)gde8rd*nd +      d,                                    Z;e(e'ejx                  j{                  d      ejX                  je                  d      d-                             Z>e(ejx                  j{                  d      ejX                  je                  d      d.                      Z?e(ejX                  je                  d       e#d/gd      d0                      Z@e(ejx                  j{                  d      ejX                  je                  d      d1                      ZAejx                  j{                  d      ejX                  je                  d      ejX                  j[                  d2 ej                  d3e&g4       ej                  d5e'g4       ej                  d6e(g4      g      d7                      ZCejx                  j{                  d      ejX                  je                  d      ejX                  j[                  d2 ej                  d3e&g4       ej                  d5e'g4       ej                  d6e(g4      g      d8                      ZDe(d9        ZEe(d:        ZFe(d;        ZGe(e%d<               ZHe(ejX                  je                  d       e#d=gd>      d?                      ZIe(d@        ZJ e"dAgB      ejX                  j[                  dCdD      ejX                  je                  d      dE                      ZKejX                  je                  d      dF        ZLe(ejX                  ju                   edG       dH&      ejX                  je                  d       e#dIgdd#J      dK                             ZMy# ejr                  $ r d#Z8Y  w xY w)L    N)BytesIO)Path)parse)FontPropertiesfindfont)_has_tex_package_check_for_pgf)ImageComparisonFailure)compare_images)_metadata_to_strPdfPages)_image_directoriescheck_figures_equalimage_comparison)needs_ghostscriptneeds_pgf_lualatexneeds_pgf_pdflatexneeds_pgf_xelatexc                       y)Nz
dummy func r       l/var/www/ramen.bs-engineer-server.com/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   zkey, value, expected_str)AuthormezAuthor={me}ModDate        tzinfozModDate={D:19680801000000Z}c                 &    t        | |      |k(  sJ y )N)r   )keyvalueexpected_strs      r   test__metadata_to_strr8   (   s     C'<777r   r6   )zBackslashes, e.g. in \commandszfunny braces {}zand square brackets]c                 |    t        j                  t        d      5  t        d|        d d d        y # 1 sw Y   y xY w)Nz value must not contain the chars)matchTitle)pytestraises
ValueErrorr   )r6   s    r   test__metadata_to_str_errorr?   2   s2     
z)K	L )%() ) )s   2;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   r1   )r!   figuretextr   r"   seekimreadall)tmp_pathfigbufts       r   test_tex_special_charsrO   <   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   r1         zb-zg>        g?z//	lightgrayred)hatch	facecolor	edgecolor)   rY   皙?rZ   rY   )rR   r[   r   rR   bg?rB   rorY   )
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)rb   clip_on)r!   rF   nplinspaceplotfill_betweenfillrG   ylabelxlimylim)xs    r   create_figurerq   I   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updaterq   )
rc_xelatexs    r   test_xelatexr~   f   s(     ")!&(JLL
#Or   gsz9.50Ttype1eczneeds type1ec.sty)reasonucszneeds ucs.styzpgf_pdflatex.pdfgQk'@)rs   r   c                  d    ddddd} t         j                  j                  |        t                y )Nru   Fpdflatexz4\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc})rw   rx   pgf.texsystempgf.preamblery   )rc_pdflatexs    r   test_pdflatexr   x   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)Nrc      g?
   Fxelatex)rw   	font.sizefigure.subplot.leftlines.markersizerx   r   	monospaceg?r`   r   zG\usepackage[utf8x]{inputenc}\usepackage[T1]{fontenc}\usepackage{sfmath})rw   r   r   r   rx   r   r   r   gffffff*@))sfmathr   )utf8xr   r   zneeds z.stypgf_rcupdater1   .pdfr   )
_old_gs_version	enumeraterz   
rc_contextr{   r   r<   skiprq   r+   )rc_setsr   irc_set	substringpkgs         r   test_rcupdater      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,ru   Frv   r1   rR   r   rS   g}Ô%ITi  )sizer`   ir   )binsrangelogpdfrD   )rh   randomseedrz   r{   r|   r!   subplotsrj   set_xlimset_ylimscatterhistnormal
set_xscaler"   r   )rL   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 )	Nru   Frv   r1   y              D@rR   T)rz   r{   r|   rh   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 )Nru   Frv   r1   rR      zpgf_bbox_inches.pdfbbox_inchesr   )r'   r   )rz   r{   r|   r!   r   rj   r   tight_layoutget_window_extenttransformeddpi_scale_transinvertedr+   )rL   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)marksr   r   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)Nru   F)rw   rx   r   r   )rY   rR   figsize	pdfpages_r   r-   Multipage PDF with pgf	Test pagetest,pdf,multipager/   r0   r1   r   r2   Unknownr,   r;   SubjectKeywordsr.   TrappedmetadatarY   )rz   r{   r|   r!   r   rj   r   r   r   r   r   r    datetimetimezone	timedeltar   r"   get_pagecount)	r   r   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0r   r   r-   r   r   r   r/   r0   r1   r   r2   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setenvrz   r{   r|   r!   r   rj   r   r   r   r   r   r   r   r    r   r"   Pdfopendocinfoitemsstrpop__version__)monkeypatchr   r   rL   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!   rF   )rK   fnr   s      r   test_multipage_keep_emptyr   8  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!   rF   suptitler<   r=   r>   r"   r   )rL   s    r   test_tex_restart_after_errorr   G  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   r1   rR   rY   r   r@   tight)rD   rE   r   )r!   r   imshowr"   r   )rL   r   s     r   test_bbox_inches_tightr   S  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 )NrC   r@   T)rD   rE   transparentr   ).rY   )r   r!   rF   r"   rH   rI   rJ   )rM   rN   s     r   test_png_transparencyr  Z  sZ     )CJJLUEtLHHQK

3AfIN!!!r   zttc_pgf.pdfmpl20c            	         t        dg      } t        t        |             j                  dk7  rt	        j
                  d       ddd}t        j                  dddi| t        j                  d	t        |      d
z  f      j                  t        |            }t        |j                         |      D ]/  \  }}|j                  dd| dt        j                   |dd       1 y )NzWenQuanYi Zen Hei)re   zwqy-zenhei.ttcz"Font wqy-zenhei.ttc may be missingzWenQuanYi Zen Hei Mono)rc   r   r         rR   r   rB   z: center)fonthorizontalalignmentverticalalignment)r  )r   r   r   namer<   r   r!   rcrF   len
subfigureszipvaluesrG   stringascii_uppercase)fpfontsfigsr  rL   s        r   test_ttc_outputr  d  s     
 34	5BHRL"2289.=UVEFF$$e$::q#e*q.12==c%jID. K	ccdV2f&<&<%=>T%- 	 	KK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-existrw   rB   zhello, worldr@   r   z/Ignoring unknown font: this-font-does-not-exist)	at_levelrz   r{   r!   figtextr"   r   records
getMessage)caplogrs     r   test_unknown_fontr  u  s    		# -&@]#BN+GIe,- = &A0A0 0 0 0	- -A0s   A
B3BBr   )
extensions	texsystem)r   r   r   c                     t        |      st        j                  |dz          |t        j                  d<   | j                  ddd       |j                  ddd       y )Nz + pgf is requiredr   rB   z$-1$u   $−1$)r	   r<   r   rz   r{   rG   )fig_testfig_refr!  s      r   test_minus_signs_with_texr%    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)rY   rY   r   Fr   r1   r   r   *   )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_onrj   set_sketch_paramsr   r"   getvaluedecode)rL   r   handlefdrM   baselines         r   test_sketch_paramsr4    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)rs   remove_textc                      t         j                  j                  dddd       t        j                          t        j
                  g d       t        j
                  g d       t        j                          y )Nr   Fz\usepackage{unicode-math})r   rx   r   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)rz   r{   r|   r!   rF   rj   legendr   r   r   test_document_font_sizer9    s`     LL"4 
 JJLHHR$ HHRP JJLr   )Nr   ior   r   pathlibr   r#   r  numpyrh   packaging.versionr   parse_versionr<   
matplotlibrz   matplotlib.pyplotpyplotr!   matplotlib.font_managerr   r   matplotlib.testingr   r	   matplotlib.testing.exceptionsr
   matplotlib.testing.comparer   matplotlib.backends.backend_pgfr   r   matplotlib.testing.decoratorsr   r   r   matplotlib.testing._markersr   r   r   r   r%   r    r+   markparametrizer   r   r8   r?   rE   rO   rq   r~   _get_executable_infoversionr   ExecutableNotFoundErrorskipifr   rs   contextr   r   r   r   paramr   r   r   r   r   r  r  r  r%  r4  r9  r   r   r   <module>rQ     s     	     4    < ? @ 5 F? ? 
 ..BC j *, * 3#XtQ*;(*;*;<NH<N<Nq<Q*RS"$6 88  # 
)
)
 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 "  " U=/1K 2  K 0 0 (&IJU.  K ). U 6 ((1I   U/0	tT U  s	 "" Os   #%U4 4V	V	