
    P/Ph
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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 Z0e"d             Z1d  Z2 e d!g          d"             Z3 e d#g          d$             Z4e
j5        6                    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j$        %                    d6d7d8g          d9             Z> e d:g          d;             Z?dS )<    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                    \  }}|                    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      a/var/www/html/test/jupyter/venv/lib/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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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   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'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 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   JLLE	% +Cr 	+ 	+AlnnGCLL/000KKEK****	++ + + + + + + + + + + + + + +
 	A77<  A%%%%q66E>>>>>>s   ABB	B	c                 \   | dz  }t          |          5 }	 d d d            n# 1 swxY w Y   |                                rJ | dz  }t          |          5 }|                    t          j                               d d d            n# 1 swxY w Y   |                                sJ d S )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	" "CJLL!!!" " " " " " " " " " " " " " "99;;s   #'''BBB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   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   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)   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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 )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   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)r;   ro   setenvr   r   r=   rI   datetimetimezone	timedeltar?   r@   r>   rs   rt   docinfoitemsmpl__version__monkeypatchri   r"   r#   mdr   r7   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'.)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   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 )Nri   r   r   rY   r   r   r   r   r   r   r4   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   )r;   ro   r   r   r   r=   rI   r   r   r   r?   r@   r   r>   rs   rt   r   r   r   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 )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   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&   
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      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 )Nri   r   )r4   r4   r   r   N-   )rotationr   r7   r8   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)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]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 )Nri   r   r   r   r   gffffff?ztest tex $123$Ttex)usetexr   r7   r8   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>/  s:      BBqacgH1A1A1A&A&A&A&A&A&ABBr&   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#'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   osdevnullr>   r   rS   )r7   s    r$   test_pdfpages_fspathr   6  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)r4   r5   r   r   greenXXXX)	facecolorhatchblue) r   r   r   N)r   rS   r   legend)r"   r   bs      r$   test_hatching_legendr   ;  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 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     8BqGR"W$%DAq	!Q$A+		B&BrBwKlnnGCIIbXI666MM"MM"r&   defaultr7   eps)
extensionsc           	      "   |                                  }|                                 |                    t          j        t          j        ddd                    dd           |                                 }|                                 d S )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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   r7   r8   N)r   xlabelr;   raisesRuntimeErrorr>   r?   r@   r   r&   r$   test_failing_latexr  \  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)
rasterizedr7   r8   )r   r   r=   r>   r?   r@   r   s     r$   test_empty_rasterizedr"  d  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      ?rY   )sizeg      ?   )r   rS   r    )r"   rO   s     r$   test_kerningr&  k  sL    
*,,C!AHHQQQHHHQQRH     r&   c                  P   t          t          d                    } d}t          |           }|                    |           t	          | |          5 }t          t          |                    }d d d            n# 1 swxY w Y   |                    |           |                                }|                                }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   r   get_charmaprL   get_num_glyphs)fpathchars	nosubfontsubsetsubfont	nosubcmapsubcmaps          r$   test_glyphs_subsetr6  s  sc   :;;<<E3E Iu 
5%	(	( 0F,v..//0 0 0 0 0 0 0 0 0 0 0 0 0 0 0U%%''I!!##G U844G4444444 w<<#i..(((( !!##y'?'?'A'AAAAAAAs   A<<B B 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 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_type3rE    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)   r9  r6   r'   r:  r;  r7   r,   r<  r=  r>  r?  r@  rC  s     r$   test_multi_font_type42rG    s    		#6"7	8	8	8BBKOO!%555)***F6=*=>RHHHHF52
*,,CHHT5>?????r&   zfamily_name, file_name)z	Noto SanszNotoSans-Regular.otf)FreeMonozFreeMono.otfc                    t          j        | g          }t          t          j        |                    j        |k    rt          j        d|  d           t          j        d| gd           t          j	                    }|
                    ddd	           |                    t          j                    d
           d S )Nr.   r0   r1   r6   r:  r;  r=  r>  u   Привет мир!r7   r8   )rA  r
   r   r	   r:   r;   r<   r   rB  rS   r    r>   r?   r@   )family_name	file_namerD  r"   s       r$   test_otf_font_smokerL    s    
 
	;-	0	0	0BBKOO!Y..8K888999F6;-b1111
*,,CHHT50111KK
UK+++++r&   ztruetype-conversion.pdfc                 "   dt           j        d<   t          j                    \  }}|                    dddt          t                                        d          d           |                    g            |	                    g            d S )Nr+   r2   r   ABCDEzmpltest.ttfP   )r6   r   )
r   r   r   r   r    r   __file__	with_namer  r	  )recwarnr"   r#   s      r$   test_truetype_conversionrS    s     $%CL lnnGCGGAq'h))-882  G G GMM"MM"r&   )@r   r   r?   r   pathlibr   numpyr\   r;   
matplotlibr   r   r   r   r   rA  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&  r6  rE  rG  rL  rS  r   r&   r$   <module>rc     si     				 				                         , + + + + + & & & & & & < < < < < < < < O O O O O O O O 4 4 4 4 4 4 ( ( ( ( ( ( O O O O O O O O 4 4 4 4 4 4 +,--# # .-#& -%+0   aW--, , .-	 
,( ( (	 	 	  + + +&- - -0     FJ J J(" " "J@ @ @6@ @ @4 @ @ @0" " "
 ()**/ / +*/ ()**  +* 9///  0/  0 0 0, , , =/""! ! #"!B B B4 )*444	@ 	@ 54	@ *+555	@ 	@ 65	@ 1?689 9
, 
,9 9
, ,-..  /.  r&   