
    (?e8                     D   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 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j#        $                    dddg          ej#        $                    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 Z/e!d             Z0d  Z1 ed!g          d"             Z2 ed#g          d$             Z3e
j4        5                    d%           ed&d'g(          d)                         Z6e!d*             Z7d+ Z8 ed,g          d-             Z9d. Z: ed/gd01          d2             Z; ed3gd41          d5             Z<dS )6    N)Path)pyplotrcParamsfont_manager)_get_data_path)FT2Font)findfontFontProperties)get_glyphs_subset)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                    \  }}|                    d           |                    dd| ddd           |                    dd           d S )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      Alib/python3.11/site-packages/matplotlib/tests/test_backend_pdf.pytest_use14corefontsr$      s    %)H!"*H]H[#.-H"#H"D lnnGCLLCDDDGGCd&     JJscJ"""""    zfontname, fontfile)DejaVu SanszDejaVuSans.ttf)WenQuanYi Zen Heiwqy-zenhei.ttcfonttype   *   c                    t          t          t          | g                              j        |k    rt	          j        d| d           |t          d<   t          j                    \  }}|	                    g d           |
                    d|            |                    t          j                    d	           d S )
NfamilyzFont z may be missingz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_fontsr?   ,   s     H^H:6667788=II7H777888'H^lnnGCGGIIILLHL---KK
UK+++++r%   c                     t          t          j                              5 } |                                 dk    sJ t	          j                    \  }}|                    g d           |                    | d           |                                 dk    sJ |                                  |                                 dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr   r/   r3   r4   r0   r1   )r   r;   r<   get_pagecountr   r   r9   r:   )r3   r!   r"   s      r#   test_multipage_pagecountrB   <   s   	"*,,		 (3  ""a'''',..R
			C&&&  ""a''''  ""a'''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   B'CCCc                     t          j                    } t          |           5 }t          d          D ]D}t	          j                    \  }}|                    d           |                    |d           E	 d d d            n# 1 swxY w Y   |                                 }|	                    d          dk    sJ t          |          dk     sJ d S )N
   zThis is a long titler3   r4   s	   startxrefr0   i@  )r;   r<   r   ranger   r   r   r:   getvaluecountlen)pdfior3   ir!   r"   ss         r#   test_multipage_properfinalizerL   G   s   JLLE	% +Cr 	+ 	+AlnnGCLL/000KKEK****	++ + + + + + + + + + + + + + +
 	A77<  A%%%%q66E>>>>>>s   ABB	B	c                    t          j        |            t          j        t          j                  5  t          d          5 }	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t           j                            d          sJ t          j        t          j                  5  t          dd          5 }	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t           j                            d          sJ t          dd          5 }	 d d d            n# 1 swxY w Y   t           j                            d          rJ t          d          5 }|	                    t          j                               d d d            n# 1 swxY w Y   t           j                            d          sJ t          j        t          j                  5  t          dd          5 }|	                    t          j                               d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t           j                            d          sJ t          d	d          5 }|	                    t          j                               d d d            n# 1 swxY w Y   t           j                            d	          sJ d S )
Nza.pdfzb.pdfT)
keep_emptyzc.pdfFzd.pdfze.pdfzf.pdf)oschdirr7   warnsmplMatplotlibDeprecationWarningr   pathexistsr:   r   figure)tmp_pathr3   s     r#   test_multipage_keep_emptyrX   S   s   HX
 
c6	7	7  '9J9J c                             7>>'""""" 
c6	7	7  W...25                              7>>'""""" 
'e	,	,	,               w~~g&&&&&
 
'		 "cCJLL!!!" " " " " " " " " " " " " " "7>>'""""" 
c6	7	7 " "W..."25CJLL!!!" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 7>>'""""" 
'e	,	,	, "CJLL!!!" " " " " " " " " " " " " " "7>>'"""""""s   A(AA(A	A(A	A((A,/A,2C)CC)C	C)C	C))C-0C-&D44D8;D8/'F""F&)F&,I>'H1%I1H5	5I8H5	9III'J88J<?J<c                  |   t          j        t          j        ddd          t          j        ddd                    \  } }t          j        |dz            }t	          j                    \  }}|                    dd           |                    |g d           |                    |d d d	         g d
           dt          j        d<   t          t          j                              5 }|                    |d           t          |j        j                  dk    sJ 	 d d d            n# 1 swxY w Y   dt          j        d<   t          t          j                              5 }|                    |d           t          |j        j                  dk    sJ 	 d d d            d S # 1 swxY w Y   d S )N   r0   r1   r   r*   )r   r0   r   r0   )extent)r1   r*   r   r0   Tzimage.composite_imager3   r4   F)npmeshgridarangesinr   r   set_xlimimshowr   r   r;   r<   r:   rH   _file_images)XYZr!   r"   r3   s         r#   test_composite_imageri   {   s    ;ryQ**BIb!Q,?,?@@DAq
qAvAlnnGCKK1IIaI%%%IIa"glllI+++,0CL()	"*,,		 +3C&&&39$%%*****+ + + + + + + + + + + + + + + -2CL()	"*,,		 +3C&&&39$%%*****+ + + + + + + + + + + + + + + + + +s$   .7D22D69D6,7F11F58F5c                     t          j        d          } t          j        dt          j                  }t          j        d          |d d ddf<   dt          d<   t          j                    }|	                    |d           t          j                    }|                    |d	d
           | j                            |          5 }|j        \  }|j                                        \  }|                     |          }|j        sJ |                                }t          j        |                    d                    }	d d d            n# 1 swxY w Y   t          j                            ||	           d S )Npikepdf)   r0   r*   )dtyperl   r   Tr   )resizer3   rV   )r5   dpiRGB)r7   importorskipr^   zerosuint8r`   r   r   rV   figimager;   r<   r:   PdfopenpagesimagesvaluesPdfImageindexedas_pil_imageasarrayconverttestingassert_array_equal)
rk   datar!   bufr3   pageimage	pdf_image	pil_imagergbs
             r#   test_indexed_imager      s   !),,G8Krx000DIcNNDAqM"&H
*,,CLLdL###
*,,CKKExK000			#		 3#	##%%$$U++	    **,,	j**511223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 J!!$,,,,,s   
A>EEEc                    t          j        d          }|                     dd           t          j                    \  }}|                    t          d                     ddddt          j        d	d
dt          j        t          j	        d                              dd}t          j                    }|                    ||d           |j                            |          5 }d |j                                        D             }d d d            n# 1 swxY w Y   |dddt"          j         ddddt"          j         dddd	k    sJ d S )Nrk   SOURCE_DATE_EPOCH0r[   meMultipage PDF	Test pagetest,pdf,multipage  r   r0   r   tzinfoTrueAuthorTitleSubjectKeywordsModDateTrappedr3   )metadatar5   c                 4    i | ]\  }}|t          |          S  str.0kvs      r#   
<dictcomp>z)test_savefig_metadata.<locals>.<dictcomp>   $    :::da3q66:::r%   D:19700101000000ZMatplotlib v, https://matplotlib.orgD:19680801000000ZMatplotlib pdf backend v/True	z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez	/Producerz/Subjectz/Titlez/Trapped)r7   rq   setenvr   r   r9   rE   datetimetimezone	timedeltar;   r<   r:   ru   rv   docinfoitemsrR   __version__monkeypatchrk   r!   r"   mdr   r3   infos           r#   test_savefig_metadatar      s   !),,G*C000lnnGCGGE!HH  ($!Qx01CA1F1FGGI I I
 
B *,,CKKbK///			#		 ;#::ck&7&7&9&9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ,L3?LLL)'AAA!
 
 
 
 
 
 
 
s   +$DD"Dc                  $   t          j                    \  } }t          j        t          d          5  |                     t          j                    dddi           d d d            n# 1 swxY w Y   t          j        t          d          5  |                     t          j                    ddd	i           d d d            n# 1 swxY w Y   t          j        t          d
          5  |                     t          j                    dddi           d d d            n# 1 swxY w Y   t          j        t          d          5  |                     t          j                    dddi           d d d            d S # 1 swxY w Y   d S )Nz#Unknown infodict keyword: 'foobar'.)matchr3   foobarinvalid)r5   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   r7   rQ   UserWarningr:   r;   r<   r!   r"   s     r#   test_invalid_metadatar      s   lnnGC	kA
C 
C 
C P PBJLL(I9NOOOP P P P P P P P P P P P P P P 
kC
E 
E 
E 8 8BJLL'6 	 	8 	8 	88 8 8 8 8 8 8 8 8 8 8 8 8 8 8
 
kE
G 
G 
G M MBJLL)U9KLLLM M M M M M M M M M M M M M M 
k)B	C	C	C J JBJLL'4IIIJ J J J J J J J J J J J J J J J J JsG   ,A**A.1A.,CCC.,D&&D*-D*,FF	F	c                     t          j        d          }|                     dd           t          j                    \  }}|                    t          d                     ddddt          j        d	d
dt          j        t          j	        d                              dd}t          j                    }t          ||          5 }|                    |           |                    |           d d d            n# 1 swxY w Y   |j                            |          5 }d |j                                        D             }d d d            n# 1 swxY w Y   |dddt$          j         ddddt$          j         dddd	k    sJ d S )Nrk   r   r   r[   r   r   r   r   r   r   r0   r   r   r   r   )r   c                 4    i | ]\  }}|t          |          S r   r   r   s      r#   r   z+test_multipage_metadata.<locals>.<dictcomp>   r   r%   r   r   r   r   r   r   r   )r7   rq   r   r   r   r9   rE   r   r   r   r;   r<   r   r:   ru   rv   r   r   rR   r   r   s           r#   test_multipage_metadatar      s$   !),,G*C000lnnGCGGE!HH  ($!Qx01CA1F1FGGI I I
 
B *,,C	#	#	#	# sCC               
		#		 ;#::ck&7&7&9&9:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ,L3?LLL)'AAA!
 
 
 
 
 
 
 
s$   
+DDD&$EEEc                     t          j        d          } dt          j        d          }|                    ddd d           |                    dd	d
 d           t          j                    5 }|                    |d           | j        	                    |          5 }|j
        d         j        }dD ]a\  }t          fd|D             d           }|J t          |dd           J |j        d         t          j        |          dz  k    sJ b	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nrk   &https://test_text_urls.matplotlib.org/r1   r0   figsize皙?ztest plain 123plain)urlg?ztest mathtext $123$mathtextr3   r4   r   ))z0.1r   )z0.4r   c              3   D   K   | ]}|j         j          k    |V  d S NAURI)r   afragmenttest_urls     r#   	<genexpr>z!test_text_urls.<locals>.<genexpr>  s<      MM1!#'5L(5L5L*L*LQ*L*L*L*LMMr%   
QuadPointsr0   H   )r7   rq   r   rV   r   r;   r<   r:   ru   rv   rw   AnnotsnextgetattrRectdecimalDecimal)	rk   r!   fdr3   annotsyannotr   r   s	          @@r#   test_text_urlsr     s(   !),,G7H
*V
$
$
$CHHS#'-?-?-?H@@@HHS#,X2G2G2GHHHH	 @Bu%%%[b!! 	@SYq\(F  G @ @8MMMMMMMM  (((ulD99AAAz!}(:(:R(??????@	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s7   92E+A7D/#E/D3	3E6D3	7EEEc                  p   t          j        d          } dt          j        d          }|                    dddd            t          j                    5 }|                    |d	
           | 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            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nrk   r   )r0   r0   r   r   N-   )rotationr   r3   r4   r   c              3   >   K   | ]}|j         j         k    |V  d S r   r   r   r   r   s     r#   r   z)test_text_rotated_urls.<locals>.<genexpr>.  s3      ??qacgH&>&>&>&>&>&>??r%   r      z0.00001)r7   rq   r   rV   r   r;   r<   r:   ru   rv   rw   r   r   r   r   r   r   r   rk   r!   r   r3   r   r   r   s         @r#   test_text_rotated_urlsr     s   !),,G7H
*V
$
$
$CHHS#sR]H;;;	 @Bu%%%[b!! 	@SYq\(F ????F??? E $$$5,55AAA:a="W_Y%?%??@ @ @ @ @	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s7   2D+A9DD+D	D+D	D++D/2D/c                  8   t          j        d          } dt          j        d          }|                    dddd d	
           t          j                    5 }|                    |d           | j        	                    |          5 }|j
        d         j        }t          fd|D             d           }|J |j        d         t          j        d          dz  k    sJ 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nrk   r   r   r   r   gffffff?ztest tex $123$Ttex)usetexr   r3   r4   r   c              3   B   K   | ]}|j         j         d k    |V  dS )r   Nr   r   s     r#   r   z%test_text_urls_tex.<locals>.<genexpr>I  s:      BBqacgH1A1A1A&A&A&A&A&A&ABBr%   r0   z0.7r   )r7   rq   r   rV   r   r;   r<   r:   ru   rv   rw   r   r   r   r   r   r   s         @r#   test_text_urls_texr   7  s   !),,G7H
*V
$
$
$CHHS#'X:J:J:JHKKK	 @Bu%%%[b!! 
	@SYq\(F BBBBFBBB E $$$:a=GOE$:$:R$??????
	@ 
	@ 
	@ 
	@ 
	@ 
	@ 
	@ 
	@ 
	@ 
	@ 
	@ 
	@ 
	@ 
	@ 
	@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s7   2DAC7+D7C;	;D>C;	?DDDc                      t          t          t          j                            5 } |                     t          j                               d d d            d S # 1 swxY w Y   d S r   )r   r   rO   devnullr:   r   rV   )r3   s    r#   test_pdfpages_fspathr   P  s    	$rz""	#	# "sCJLL!!!" " " " " " " " " " " " " " " " " "s   'A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          }|                     ||||gg d           d	S )
z.Test for correct hatching on patches in legend)r0   r1   r   r   greenXXXX)	facecolorhatchblue) r   r   r   N)r   rV   r   legend)r!   r   bs      r#   test_hatching_legendr   U  sw     *V
$
$
$C1a&!Q'@@@A1a&!Q&???AJJ1a|---.....r%   zgrayscale_alpha.pdfc                  R   t           j        ddddddf         \  } }t          j        | dz  |dz  z              }t           j        ||dk     <   t	          j                    \  }}|                    |dd           |                    g            |                    g            dS )z9Masking images with NaN did not work for grayscale imagesr1   r   nonegray_r)interpolationcmapN)	r^   ogridexpnanr   r   rc   
set_xticks
set_yticks)xr   ddr!   r"   s        r#   test_grayscale_alphar  `  s     8BqGR"W$%DAq	!Q$A+		B&BrBwKlnnGCIIbXI666MM"MM"r%   defaultr3   eps)
extensionsc           	      "   |                                  }|                                 |                    t          j        t          j        ddd                    dd           |                                 }|                                 d S )NrZ   r[   d   r   r   )c)add_subplotset_axis_offr9   r^   ra   linspace)fig_testfig_refax_testax_refs       r#   'test_pdf_eps_savefig_when_color_is_noner  l  s     ""$$GLLB3//00#L@@@  ""F
r%   c                      t          j        dd           t          j        t                    5  t          j        t          j                    d           ddd           dS # 1 swxY w Y   dS )z"Test failing latex subprocess callz$22_2_2$T)r   r3   r4   N)r   xlabelr7   raisesRuntimeErrorr:   r;   r<   r   r%   r#   test_failing_latexr  v  s     Jz$''''	|	$	$ 0 0BJLL////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   (A%%A),A)c                      t          j                    \  } }|                    g g d           |                     t	          j                    d           d S )NT)
rasterizedr3   r4   )r   r   r9   r:   r;   r<   r   s     r#   test_empty_rasterizedr!  ~  sK    lnnGCGGBtG$$$KK
UK+++++r%   zkerning.pdfc                      t          j                    } d}|                     dd|d           |                     dd|d           d S )Nu   AVAVAVAVAVAVAVAV€AAVVr   g      ?r[   )sizeg      ?   )r   rV   r   )r!   rK   s     r#   test_kerningr%    sL    
*,,C!AHHQQQHHHQQRH     r%   c                     t          t          d                    } d}t          |           }|                    |           t          t	          | |                    }|                    |           |                                }|                                }h |d |D             k    sJ t          |          t          |          k     sJ |                                |                                k    sJ d S )Nzfonts/ttf/DejaVuSerif.ttfz%these should be subsetted! 1234567890c                 ,    h | ]}t          |          S r   )chr)r   keys     r#   	<setcomp>z%test_glyphs_subset.<locals>.<setcomp>  s    444SC444r%   )r   r   r   set_textr   get_charmaprH   get_num_glyphs)fpathchars	nosubfontsubfont	nosubcmapsubcmaps         r#   test_glyphs_subsetr4    s   :;;<<E3E Iu 'u5566GU%%''I!!##G U844G4444444 w<<#i..(((( !!##y'?'?'A'AAAAAAAr%   zmulti_font_type3.pdfgffffff@)tolc                  `   t          j        dg          } t          t          j        |                     j        dk    rt          j        d           t          j        dddgd           t          j        d	d
           t          j	                    }|
                    ddd           d S )Nr'   r-   r(   Font may be missingr2   r&      r.   r#  r3   r*   r)   333333?ffffff?"   There are 几个汉字 in between!fmr
   r   r	   r6   r7   r8   r   rcrV   r   fpr!   s     r#   test_multi_font_type3rC    s    		#6"7	8	8	8BBKOO!%555)***F6=*=>RHHHHF51
*,,CHHT5>?????r%   zmulti_font_type42.pdfg@c                  `   t          j        dg          } t          t          j        |                     j        dk    rt          j        d           t          j        dddgd           t          j        d	d
           t          j	                    }|
                    ddd           d S )Nr'   r-   r(   r7  r2   r&   r8  r9  r3   r+   r:  r;  r<  r=  r>  rA  s     r#   test_multi_font_type42rE    s    		#6"7	8	8	8BBKOO!%555)***F6=*=>RHHHHF52
*,,CHHT5>?????r%   )=r   r   r;   rO   pathlibr   numpyr^   r7   
matplotlibrR   r   r   r   r   r?  matplotlib.cbookr   matplotlib.ft2fontr   matplotlib.font_managerr	   r
   #matplotlib.backends._backend_pdf_psr   matplotlib.backends.backend_pdfr   matplotlib.patchesr   matplotlib.testing.decoratorsr   r   matplotlib.testing._markersr   r$   markparametrizer?   rB   rL   rX   ri   r   r   r   r   r   r   r   r   r   r  stylecontextr  r  r!  r%  r4  rC  rE  r   r%   r#   <module>rU     s     				 				                         , + + + + + & & & & & & < < < < < < < < A A A A A A 4 4 4 4 4 4 ( ( ( ( ( ( O O O O O O O O 4 4 4 4 4 4 +,--# # .-#& -%+0   aW--, , .-	 
,( ( (	 	 	%# %# %#P+ + +&- - -0     FJ J J(" " "J@ @ @6@ @ @4 @ @ @0" " "
 ()**/ / +*/ ()**  +* 9///  0/  0 0 0, , , =/""! ! #"!B B B2 )*444	@ 	@ 54	@ *+555	@ 	@ 65	@ 	@ 	@r%   