
    Ng);                        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<ej#        $                    d6d7d8g          d9             Z=dS ):    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      ]/var/www/html/ai-engine/env/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 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_fontsrA   ,   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   r1   r5   r6   r2   r3   )r   r=   r>   get_pagecountr   r   r;   r<   )r5   r!   r"   s      r#   test_multipage_pagecountrD   <   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 titler5   r6   s	   startxrefr2   i@  )r=   r>   r   ranger   r   r   r<   getvaluecountlen)pdfior5   ir!   r"   ss         r#   test_multipage_properfinalizerN   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          j        t          j                  5  t	          |          5 }	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                                sJ | dz  }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   |                                sJ | dz  }t	          |d          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z  }t          j        t          j                  5  t	          |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   |                                sJ | d	z  }t	          |d          5 }|                    t          j                               d d d            n# 1 swxY w Y   |                                sJ d S )
Nza.pdfzb.pdfT)
keep_emptyzc.pdfFzd.pdfze.pdfzf.pdf)	r9   warnsmplMatplotlibDeprecationWarningr   existsr<   r   figure)tmp_pathfnr5   s      r#   test_multipage_keep_emptyrX   S   s    
G	B	c6	7	7  "                              99;; 
G	B	c6	7	7  RD)))-0                              99;; 
G	B	"	'	'	' 3              yy{{
 
G	B	" "CJLL!!!" " " " " " " " " " " " " " "99;; 
G	B	c6	7	7 " "RD)))"-0CJLL!!!" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 99;; 
G	B	"	'	'	' "3CJLL!!!" " " " " " " " " " " " " " "99;;s   AAAA	A	A	
AA AC/B=1C=C	CC	CCCDD D'FFFH!'H
>H!
H	H!H	H!!H%(H%'J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   r2   r3   r   r*   )r   r2   r   r2   )extent)r3   r*   r   r2   Tzimage.composite_imager5   r6   F)npmeshgridarangesinr   r   set_xlimimshowr   r   r=   r>   r<   rJ   _file_images)XYZr!   r"   r5   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)   r2   r*   )dtyperl   r   Tr   )resizer5   rU   )r7   dpiRGB)r9   importorskipr^   zerosuint8r`   r   r   rU   figimager=   r>   r<   PdfopenpagesimagesvaluesPdfImageindexedas_pil_imageasarrayconverttestingassert_array_equal)
rk   datar!   bufr5   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   r2   r   tzinfoTrueAuthorTitleSubjectKeywordsModDateTrappedr5   )metadatar7   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)r9   rq   setenvr   r   r;   rG   datetimetimezone	timedeltar=   r>   r<   ru   rv   docinfoitemsrR   __version__monkeypatchrk   r!   r"   mdr   r5   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'.)matchr5   foobarinvalid)r7   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   r9   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   r2   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   )r9   rq   r   r   r   r;   rG   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/r3   r2   figsize皙?ztest plain 123plain)urlg?ztest mathtext $123$mathtextr5   r6   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%   
QuadPointsr2   H   )r9   rq   r   rU   r   r=   r>   r<   ru   rv   rw   AnnotsnextgetattrRectdecimalDecimal)	rk   r!   fdr5   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   )r2   r2   r   r   N-   )rotationr   r5   r6   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>2  s3      ??qacgH&>&>&>&>&>&>??r%   r      z0.00001)r9   rq   r   rU   r   r=   r>   r<   ru   rv   rw   r   r   r   r   r   r   r   rk   r!   r   r5   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   r5   r6   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>M  s:      BBqacgH1A1A1A&A&A&A&A&A&ABBr%   r2   z0.7r   )r9   rq   r   rU   r   r=   r>   r<   ru   rv   rw   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   rU   )r5   s    r#   test_pdfpages_fspathr   T  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)r2   r3   r   r   greenXXXX)	facecolorhatchblue) r   r   r   N)r   rU   r   legend)r!   r   bs      r#   test_hatching_legendr   Y  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 imagesr3   r   nonegray_r)interpolationcmapN)	r^   ogridexpnanr   r   rc   
set_xticks
set_yticks)xr   ddr!   r"   s        r#   test_grayscale_alphar  d  s     8BqGR"W$%DAq	!Q$A+		B&BrBwKlnnGCIIbXI666MM"MM"r%   defaultr5   eps)
extensionsc           	      "   |                                  }|                                 |                    t          j        t          j        ddd                    dd           |                                 }|                                 d S )NrZ   r[   d   r   r  )c)add_subplotset_axis_offr;   r^   ra   linspace)fig_testfig_refax_testax_refs       r#   'test_pdf_eps_savefig_when_color_is_noner  p  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   r5   r6   N)r   xlabelr9   raisesRuntimeErrorr<   r=   r>   r   r%   r#   test_failing_latexr  z  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)
rasterizedr5   r6   )r   r   r;   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   rU   r   )r!   rM   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_charmaprJ   get_num_glyphs)fpathchars	nosubfontsubfont	nosubcmapsubcmaps         r#   test_glyphs_subsetr5    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 missingr4   r&      r.   r$  r5   r*   r)   333333?ffffff?"   There are 几个汉字 in between!fmr
   r   r	   r8   r9   r:   r   rcrU   r   fpr!   s     r#   test_multi_font_type3rD    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(   r8  r4   r&   r9  r:  r5   r+   r;  r<  r=  r>  r?  rB  s     r#   test_multi_font_type42rF    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-   r/   r0   r4   r9  r:  r<  r=  u   Привет мир!r5   r6   )r@  r
   r   r	   r8   r9   r:   r   rA  rU   r   r<   r=   r>   )family_name	file_namerC  r!   s       r#   test_otf_font_smokerK    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%   )>r   r   r=   r   pathlibr   numpyr^   r9   
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parametrizerA   rD   rN   rX   ri   r   r   r   r   r   r   r   r   r   r  stylecontextr  r  r"  r&  r5  rD  rF  rK  r   r%   r#   <module>r[     s9     				 				                         , + + + + + & & & & & & < < < < < < < < 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--, , .-	 
,( ( (	 	 	) ) )X+ + +&- - -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	@ 1?689 9
, 
,9 9
, 
, 
,r%   