
    g
9                     @   d dl 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	Z
d dl	mZ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 d dlmZ d d	lmZ d d
lmZm Z  d dl!m"Z"  e dg      d        Z#ejH                  jK                  dddg      ejH                  jK                  dddg      d               Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0e"d        Z1d  Z2 e d!g      d"        Z3 e d#g      d$        Z4e
jj                  jm                  d%       ed&d'g(      d)               Z7e"d*        Z8d+ Z9 e d,g      d-        Z:d. Z; e d/gd01      d2        Z< e d3gd41      d5        Z=ejH                  jK                  d6d7d8g      d9        Z> e d:g      d;        Z?y)<    N)Path)pyplotrcParamsfont_manager)_get_data_path)FT2Font)findfontFontProperties)get_glyphs_subsetfont_as_file)PdfPages)	Rectangle)check_figures_equalimage_comparison)needs_usetexzpdf_use14corefonts.pdfc                     dt         d<   dt         d<   dt         d<   dgt         d<   d	t         d
<   d} t        j                         \  }}|j                  d       |j	                  dd| ddd       |j                  dd       y )NTzpdf.use14corefontsz
sans-serifzfont.family   z	font.size	Helveticazfont.sans-serifr   pdf.compressionu   A three-line text positioned just above a blue line
and containing some French characters and the euro symbol:
"Merci pépé pour les 10 €"z0Test PDF backend with option use14corefonts=Trueg      ?centerbottom   )horizontalalignmentverticalalignmentfontsize)	linewidth)r   pltsubplots	set_titletextaxhline)r    figaxs      ^/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/tests/test_backend_pdf.pytest_use14corefontsr%      s    %)H!"*H]H[#.-H"#H"D llnGCLLCDGGCd&   JJscJ"    zfontname, fontfile)DejaVu SanszDejaVuSans.ttf)WenQuanYi Zen Heiwqy-zenhei.ttcfonttype   *   c                 d   t        t        t        | g                  j                  |k7  rt	        j
                  d| d       |t        d<   t        j                         \  }}|j                  g d       |j                  d|        |j                  t        j                         d	       y )
NfamilyFont  may be missingpdf.fonttype      r+   z
Axes Title)fontpdfformat)r   r	   r
   namepytestskipr   r   r   plotr   savefigioBytesIO)fontnamefontfiler*   r"   r#   s        r$   test_embed_fontsrC   ,   s     H^H:678==IeH<78'H^llnGCGGILLHL-KK

UK+r&   c                     t        t        j                               5 } | j                         dk(  sJ t	        j
                         \  }}|j                  g d       |j                  | d       | j                         dk(  sJ | j                          | j                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   r3   r7   r8   r4   r5   )r   r?   r@   get_pagecountr   r   r=   r>   )r7   r"   r#   s      r$   test_multipage_pagecountrF   <   s    	"**,	 (3  "a''',,.R
	C&  "a'''  "a'''( ( (s   BB55B>c                  p   t        j                         } t        |       5 }t        d      D ]=  }t	        j
                         \  }}|j                  d       |j                  |d       ? 	 d d d        | j                         }|j                  d      dk(  sJ t        |      dk  sJ y # 1 sw Y   @xY w)N
   zThis is a long titler7   r8   s	   startxrefr4   i@  )r?   r@   r   ranger   r   r   r>   getvaluecountlen)pdfior7   ir"   r#   ss         r$   test_multipage_properfinalizerP   G   s    JJLE	% +Cr 	+AllnGCLL/0KKEK*	++
 	A77< A%%%q6E>>+ +s   AB,,B5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   figure)tmp_pathfnr7   s      r$   test_multipage_keep_emptyrV   S   s    	G	B	" yy{? 
G	B	" "CJJL!"99;; " "s   A<$B<BBc                  `   t        j                  t        j                  ddd      t        j                  ddd            \  } }t        j                  |dz        }t	        j
                         \  }}|j                  dd       |j                  |g d       |j                  |d d d	   g d
       dt        j                  d<   t        t        j                               5 }|j                  |d       t        |j                  j                        dk(  sJ 	 d d d        dt        j                  d<   t        t        j                               5 }|j                  |d       t        |j                  j                        dk(  sJ 	 d d d        y # 1 sw Y   {xY w# 1 sw Y   y xY w)N   r4   r5   r   r+   )r   r4   r   r4   )extent)r5   r+   r   r4   Tzimage.composite_imager7   r8   F)npmeshgridarangesinr   r   set_xlimimshowr   r   r?   r@   r>   rL   _file_images)XYZr"   r#   r7   s         r$   test_composite_imagerg   a   sQ    ;;ryyQ*BIIb!Q,?@DAq
qAvAllnGCKK1IIaI%IIa"glI+,0CLL()	"**,	 +3C&399$$%***+ -2CLL()	"**,	 +3C&399$$%***+ +	+ ++ +s   %8F8F$F!$F-c                     t        j                  d      } t        j                  dt        j                        }t        j
                  d      |d d ddf<   dt        d<   t        j                         }|j                  |d       t        j                         }|j                  |d	d
       | j                  j                  |      5 }|j                  \  }|j                   j#                         \  }| j%                  |      }|j&                  sJ |j)                         }t        j*                  |j-                  d            }	d d d        t        j.                  j1                  |	       y # 1 sw Y   *xY w)Npikepdf)   r4   r+   )dtyperj   r   Tr   )resizer7   rS   )r9   dpiRGB)r;   importorskipr\   zerosuint8r^   r   r   rS   figimager?   r@   r>   PdfopenpagesimagesvaluesPdfImageindexedas_pil_imageasarrayconverttestingassert_array_equal)
ri   datar"   bufr7   pageimage	pdf_image	pil_imagergbs
             r$   test_indexed_imager   t   s$   !!),G88Krxx0DIIcNDAqM"&H
**,CLLdL#
**,CKKExK0			#	 3#		##%$$U+	    **,	jj**5123 JJ!!$,3 3s   A>E22E;c                    t        j                  d      }| j                  dd       t        j                         \  }}|j                  t        d             ddddt        j                  d	d
dt        j                  t        j                  d                  dd}t        j                         }|j                  ||d       |j                  j                  |      5 }|j                  j!                         D ci c]  \  }}|t#        |       }	}}d d d        	dddt$        j&                   ddddt$        j&                   dddd	k(  sJ y c c}}w # 1 sw Y   DxY w)Nri   SOURCE_DATE_EPOCH0rY   meMultipage PDF	Test pagetest,pdf,multipage  r   r4   r   tzinfoTrueAuthorTitleSubjectKeywordsModDateTrappedr7   )metadatar9   D:19700101000000ZMatplotlib v, https://matplotlib.orgD:19680801000000ZMatplotlib pdf backend v/True	z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez	/Producerz/Subjectz/Titlez/Trapped)r;   ro   setenvr   r   r=   rI   datetimetimezone	timedeltar?   r@   r>   rs   rt   docinfoitemsstrmpl__version__
monkeypatchri   r"   r#   mdr   r7   kvinfos
             r$   test_savefig_metadatar      sP   !!),G*C0llnGCGGE!H  ($$!Qx001C1CA1FGI
B **,CKKbK/			#	 ;#&)kk&7&7&9:da3q6	::; ,"3??"33KL)'//@A!
 
 
 
 ;; ;s   "E EEEE%c                     t        j                         \  } }t        j                  t        d      5  | j                  t        j                         dddi       d d d        t        j                  t        d      5  | j                  t        j                         ddd	i       d d d        t        j                  t        d
      5  | j                  t        j                         dddi       d d d        t        j                  t        d      5  | j                  t        j                         dddi       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   y xY w)Nz#Unknown infodict keyword: 'foobar'.)matchr7   foobarinvalid)r9   r   z%not an instance of datetime.datetime.r   z
1968-08-01z'not one of {"True", "False", "Unknown"}r   fooznot an instance of str.r   i  )r   r   r;   warnsUserWarningr>   r?   r@   r"   r#   s     r$   test_invalid_metadatar      s;   llnGC	kA
C PBJJL(I9NOP 
kC
E 8BJJL'6 	 	88
 
kE
G MBJJL)U9KLM 
k)B	C JBJJL'4IJ JP P8 8
M MJ Js/   )E	?)E)E!)E-	EE!E*-E6c                 0   t        j                  d      }| j                  dd       t        j                         \  }}|j                  t        d             ddddt        j                  d	d
dt        j                  t        j                  d                  dd}t        j                         }t        ||      5 }|j                  |       |j                  |       d d d        |j                  j                  |      5 }|j                   j#                         D ci c]  \  }}|t%        |       }	}}d d d        	dddt&        j(                   ddddt&        j(                   dddd	k(  sJ y # 1 sw Y   xY wc c}}w # 1 sw Y   PxY w)Nri   r   r   rY   r   r   r   r   r   r   r4   r   r   r   r   )r   r   r   r   r   r   r   r   )r;   ro   r   r   r   r=   rI   r   r   r   r?   r@   r   r>   rs   rt   r   r   r   r   r   r   s
             r$   test_multipage_metadatar      sx   !!),G*C0llnGCGGE!H  ($$!Qx001C1CA1FGI
B **,C	#	# sCC 
		#	 ;#&)kk&7&7&9:da3q6	::; ,"3??"33KL)'//@A!
 
 
 
 
 ;; ;s*    #E:F$F:F:FFFc                     t        j                  d      } dt        j                  d      }|j	                  ddd d       |j	                  dd	d
 d       t        j                         5 }|j                  |d       | j                  j                  |      5 }|j                  d   j                  }dD ]X  \  }t        fd|D        d       }|J t        |dd       J |j                  d   t        j                   |      dz  k(  rXJ  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nri   &https://test_text_urls.matplotlib.org/r5   r4   figsize皙?ztest plain 123plain)urlg?ztest mathtext $123$mathtextr7   r8   r   ))z0.1r   )z0.4r   c              3   ^   K   | ]$  }|j                   j                    k(  s!| & y wNAURI).0afragmenttest_urls     r$   	<genexpr>z!test_text_urls.<locals>.<genexpr>   s)     M1!##''z(5L*LQMs   "--
QuadPointsr4   H   )r;   ro   r   rS   r    r?   r@   r>   rs   rt   ru   AnnotsnextgetattrRectdecimalDecimal)	ri   r"   fdr7   annotsyannotr   r   s	          @@r$   test_text_urlsr      sL   !!),G7H
**V
$CHHS#'z-?H@HHS#,XJh2GHH	 @Bu%[[b! 	@SYYq\((F  G @8MM (((ulD9AAAzz!}(:R(????@	@@ @	@ 	@@ @s+   4/D8#A3D,D,D8,D5	1D88Ec                  X   t        j                  d      } dt        j                  d      }|j	                  dddd        t        j                         5 }|j                  |d	
       | j                  j                  |      5 }|j                  d   j                  }t        fd|D        d       }|J t        |dd       J |j                  d   |j                  d   t!        j"                  d      z
  k(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nri   r   )r4   r4   r   r   N-   )rotationr   r7   r8   r   c              3   X   K   | ]!  }|j                   j                   k(  s| # y wr   r   r   r   r   s     r$   r   z)test_text_rotated_urls.<locals>.<genexpr>  s"     ?qaccggH:&>?s   **r      z0.00001)r;   ro   r   rS   r    r?   r@   r>   rs   rt   ru   r   r   r   r   r   r   r   ri   r"   r   r7   r   r   r   s         @r$   test_text_rotated_urlsr     s+   !!),G7H
**V
$CHHS#sRzH;	 @Bu%[[b! 	@SYYq\((F ?F?E $$$5,5AAA::a="W__Y%??@ @ @	@@ @	@ 	@@ @s%   /D 	A9DD D	D  D)c                  $   t        j                  d      } dt        j                  d      }|j	                  dddd d	
       t        j                         5 }|j                  |d       | j                  j                  |      5 }|j                  d   j                  }t        fd|D        d       }|J |j                  d   t        j                  d      dz  k(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nri   r   r   r   r   gffffff?ztest tex $123$Ttex)usetexr   r7   r8   r   c              3   \   K   | ]#  }|j                   j                   d k(  s | % yw)r   Nr   r   s     r$   r   z%test_text_urls_tex.<locals>.<genexpr>/  s'     BqaccggH:S1A&ABs   !,,r4   z0.7r   )r;   ro   r   rS   r    r?   r@   r>   rs   rt   ru   r   r   r   r   r   r   s         @r$   test_text_urls_texr     s   !!),G7H
**V
$CHHS#'XJc:JHK	 @Bu%[[b! 
	@SYYq\((F BFBE $$$::a=GOOE$:R$????
	@@ @
	@ 
	@@ @s%   /DAC:)D:D	?DDc                      t        t        t        j                              5 } | j	                  t        j                                d d d        y # 1 sw Y   y xY wr   )r   r   osdevnullr>   r   rS   )r7   s    r$   test_pdfpages_fspathr   6  s<    	$rzz"	# "sCJJL!" " "s   $AAzhatching_legend.pdfc                      t        j                  d      } t        ddgdddd      }t        ddgdddd      }| j                  ||||gg d       y	)
z.Test for correct hatching on patches in legend)r4   r5   r   r   greenXXXX)	facecolorhatchblue) r   r   r   N)r   rS   r   legend)r"   r   bs      r$   test_hatching_legendr   ;  sU     **V
$C1a&!Q'@A1a&!Q&?AJJ1a|-.r&   zgrayscale_alpha.pdfc                  D   t         j                  ddddddf   \  } }t        j                  | dz  |dz  z          }t         j                  ||dk  <   t	        j
                         \  }}|j                  |dd       |j                  g        |j                  g        y)z9Masking images with NaN did not work for grayscale imagesr5   r   nonegray_r)interpolationcmapN)	r\   ogridexpnanr   r   ra   
set_xticks
set_yticks)xr   ddr"   r#   s        r$   test_grayscale_alphar  F  s     88BqGR"W$%DAq	!Q$A+	B&&BrBwKllnGCIIbXI6MM"MM"r&   defaultr7   eps)
extensionsc           	          | j                         }|j                          |j                  t        j                  t        j
                  ddd            dd       |j                         }|j                          y )NrX   rY   d   r   r   )c)add_subplotset_axis_offr=   r\   r_   linspace)fig_testfig_refax_testax_refs       r$   'test_pdf_eps_savefig_when_color_is_noner  R  s`     ""$GLLB3/0#L@  "F
r&   c                      t        j                  dd       t        j                  t              5  t        j
                  t        j                         d       ddd       y# 1 sw Y   yxY w)z"Test failing latex subprocess callz$22_2_2$T)r   r7   r8   N)r   xlabelr;   raisesRuntimeErrorr>   r?   r@    r&   r$   test_failing_latexr  \  sG     JJz$'	|	$ 0BJJL/0 0 0s   *A$$A-c                      t        j                         \  } }|j                  g g d       | j                  t	        j
                         d       y )NT)
rasterizedr7   r8   )r   r   r=   r>   r?   r@   r   s     r$   test_empty_rasterizedr  d  s9    llnGCGGBtG$KK

UK+r&   zkerning.pdfc                      t        j                         } d}| j                  dd|d       | j                  dd|d       y )Nu   AVAVAVAVAVAVAVAV€AAVVr   g      ?rY   )sizeg      ?   )r   rS   r    )r"   rO   s     r$   test_kerningr   k  s:    
**,C!AHHQQQHHHQQRH r&   c                     t        t        d            } d}t        |       }|j                  |       t	        | |      5 }t        t        |            }d d d        j                  |       |j                         }|j                         }h ||D ch c]  }t        |       c}k(  sJ t        |      t        |      k  sJ |j                         |j                         k(  sJ y # 1 sw Y   xY wc c}w )Nzfonts/ttf/DejaVuSerif.ttfz%these should be subsetted! 1234567890)
r   r   r   set_textr   r   get_charmapchrrL   get_num_glyphs)fpathchars	nosubfontsubsetsubfont	nosubcmapsubcmapkeys           r$   test_glyphs_subsetr.  s  s    :;<E3E Iu 
5%	( 0F,v./0U%%'I!!#G U8G4SC4444 w<#i.((( !!#y'?'?'AAAA0 0 5s   C*C6*C3zmulti_font_type3.pdfgffffff@)tolc                  b   t        j                  dg      } t        t        j                  |             j                  dk7  rt        j                  d       t        j                  dddgd       t        j                  d	d
       t        j                         }|j                  ddd       y )Nr(   r.   r)   Font may be missingr6   r'      r/   r  r7   r+   r*   333333?ffffff?"   There are 几个汉字 in between!fmr
   r   r	   r:   r;   r<   r   rcrS   r    fpr"   s     r$   test_multi_font_type3r=    s    			#6"7	8BBKKO!!%55)*FF6=*=>RHFF51
**,CHHT5>?r&   zmulti_font_type42.pdfg@c                  b   t        j                  dg      } t        t        j                  |             j                  dk7  rt        j                  d       t        j                  dddgd       t        j                  d	d
       t        j                         }|j                  ddd       y )Nr(   r.   r)   r1  r6   r'   r2  r3  r7   r,   r4  r5  r6  r7  r8  r;  s     r$   test_multi_font_type42r?    s    			#6"7	8BBKKO!!%55)*FF6=*=>RHFF52
**,CHHT5>?r&   zfamily_name, file_name)z	Noto SanszNotoSans-Regular.otf)FreeMonozFreeMono.otfc                    t        j                  | g      }t        t        j                  |            j                  |k7  rt        j                  d|  d       t        j                  d| gd       t        j                         }|j                  ddd	       |j                  t        j                         d
       y )Nr.   r0   r1   r6   r2  r3  r5  r6  u   Привет мир!r7   r8   )r9  r
   r   r	   r:   r;   r<   r   r:  rS   r    r>   r?   r@   )family_name	file_namer<  r"   s       r$   test_otf_font_smokerD    s    
 
		;-	0BBKKO!!Y.eK=89FF6;-b1
**,CHHT501KK

UK+r&   ztruetype-conversion.pdfc                     dt         j                  d<   t        j                         \  }}|j	                  dddt        t              j                  d      d       |j                  g        |j                  g        y )Nr+   r2   r   ABCDEzmpltest.ttfP   )r6   r   )
r   r   r   r   r    r   __file__	with_namer  r  )recwarnr"   r#   s      r$   test_truetype_conversionrK    se     $%CLL llnGCGGAq'h))-82  GMM"MM"r&   )@r   r   r?   r   pathlibr   numpyr\   r;   
matplotlibr   r   r   r   r   r9  matplotlib.cbookr   matplotlib.ft2fontr   matplotlib.font_managerr	   r
   #matplotlib.backends._backend_pdf_psr   r   matplotlib.backends.backend_pdfr   matplotlib.patchesr   matplotlib.testing.decoratorsr   r   matplotlib.testing._markersr   r%   markparametrizerC   rF   rP   rV   rg   r   r   r   r   r   r   r   r   r   r  stylecontextr  r  r  r   r.  r=  r?  rD  rK  r  r&   r$   <module>r[     s8     	 	      , & < O 4 ( O 4 +,-# .#& -%+0  aW-, .	
,(	+&-0 FJ("J@6@4 @ @0"
 ()*/ +/ ()* + 9/ 0  0 0, =/"! #!B4 )*4	@ 5	@ *+5	@ 6	@ 1?689
,9
, ,-. /r&   