o
    li8                     @   s  d dl Z d dlZd dlZd dlZd dlm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d Z$e
j%&dddge
j%&dddgdd Z'dd Z(dd Z)dd Z*dd Z+d d! Z,d"d# Z-d$d% Z.d&d' Z/d(d) Z0d*d+ Z1e#d,d- Z2d.d/ Z3e!d0gd1d2 Z4e!d3gd4d5 Z5ej67d6e d7d8gd9d:d; Z8e#d<d= Z9d>d? Z:e!d@gdAdB Z;dCdD Z<e!dEgdFdGdHdI Z=e!dJgdKdGdLdM Z>dS )N    N)Path)NamedTemporaryFile)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                  C   sl   dt d< dt d< dt d< dgt d< d	t d
< d} t \}}|d |jdd| dddd |j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ax r"   _/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/matplotlib/tests/test_backend_pdf.pytest_use14corefonts   s   

r$   zfontname, fontfile)DejaVu SanszDejaVuSans.ttf)WenQuanYi Zen Heiwqy-zenhei.ttcfonttype   *   c                 C   sr   t tt| gdj|krtd| d |td< t \}}|	g d |j
d| d |jt d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!   r"   r"   r#   test_embed_fonts-   s   r=   c                  C   s   t t 9} |  dksJ t \}}|g d |j| dd |  dks+J |   |  dks7J W d    d S 1 sBw   Y  d S )Nr   r-   r1   r2   r.   r/   )r   r9   r:   get_pagecountr   r   r7   r8   )r1   r    r!   r"   r"   r#   test_multipage_pagecount=   s   "r?   c                  C   s   t  } t| !}tdD ]}t \}}|d |j|dd qW d    n1 s,w   Y  |  }|	ddks>J t
|dk sFJ d S )N
   zThis is a long titler1   r2   s	   startxrefr.   i@  )r9   r:   r   ranger   r   r   r8   getvaluecountlen)pdfior1   ir    r!   sr"   r"   r#   test_multipage_properfinalizeH   s   

rH   c               	   C   s  t dd)} t| }|jjj}W d    n1 sw   Y  tj|s'J W d    n1 s1w   Y  t| t|dd}W d    n1 sLw   Y  tj|rYJ t	
 \}}|g d t dd-} t| }|jjj}|  W d    n1 sw   Y  tj|sJ W d    n1 sw   Y  t| t dd/} t| dd}|jjj}|  W d    n1 sw   Y  tj|sJ W d    n1 sw   Y  t| d S )NF)delete)
keep_emptyr-   )r   r   _filefhr4   ospathexistsremover   r   r7   r8   )tmpr1   filenamer    r!   r"   r"   r#   test_multipage_keep_emptyT   s:   







rS   c                  C   s.  t t dddt ddd\} }t |d }t \}}|dd |j|g dd |j|d d d	 g d
d dtjd< t	t
 }|j|dd t|jjdksYJ W d    n1 scw   Y  dtjd< t	t
 }|j|dd t|jjdksJ W d    d S 1 sw   Y  d S )N   r.   r/   r   r)   )r   r.   r   r.   )extent)r/   r)   r   r.   Tzimage.composite_imager1   r2   F)npmeshgridarangesinr   r   set_xlimimshowr   r   r9   r:   r8   rD   rK   _images)XYZr    r!   r1   r"   r"   r#   test_composite_images   s    $

"rb   c            
      C   s   t d} tjdtjd}td|d d ddf< dtd< t }|j	|dd t
 }|j|d	d
d | j|(}|j\}|j \}| |}|jsOJ | }t|d}	W d    n1 sew   Y  tj||	 d S )Npikepdf)   r.   r)   )dtyperd   r   Tr   )resizer1   figure)r3   dpiRGB)r5   importorskiprX   zerosuint8rZ   r   r   rg   figimager9   r:   r8   PdfopenpagesimagesvaluesPdfImageindexedas_pil_imageasarrayconverttestingassert_array_equal)
rc   datar    bufr1   pageimage	pdf_image	pil_imagergbr"   r"   r#   test_indexed_image   s"   


r   c                 C   s   t d}| dd t \}}|td ddddtjd	d
dtt	dddd}t
 }|j||dd |j|}dd |j D }W d    n1 sUw   Y  |dddtj ddddtj dddd	kssJ d S )Nrc   SOURCE_DATE_EPOCH0rU   meMultipage PDF	Test pagetest,pdf,multipage  r   r.   r   tzinfoTrueAuthorTitleSubjectKeywordsModDateTrappedr1   )metadatar3   c                 S      i | ]	\}}|t |qS r"   str.0kvr"   r"   r#   
<dictcomp>       z)test_savefig_metadata.<locals>.<dictcomp>D:19700101000000ZMatplotlib v, https://matplotlib.orgD:19680801000000ZMatplotlib pdf backend v/True	z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez	/Producerz/Subjectz/Titlez/Trapped)r5   rj   setenvr   r   r7   rA   datetimetimezone	timedeltar9   r:   r8   rn   ro   docinfoitemsmpl__version__monkeypatchrc   r    r!   mdr{   r1   infor"   r"   r#   test_savefig_metadata   s:   
	
r   c                  C   s*  t  \} }tjtdd | jt dddid W d    n1 s$w   Y  tjtdd | jt ddd	id W d    n1 sGw   Y  tjtd
d | jt dddid W d    n1 sjw   Y  tjtdd | jt dddid W d    d S 1 sw   Y  d S )Nz#Unknown infodict keyword: 'foobar'.)matchr1   foobarinvalid)r3   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   r5   warnsUserWarningr8   r9   r:   r    r!   r"   r"   r#   test_invalid_metadata   s*   "r   c                 C   s  t d}| dd t \}}|td ddddtjd	d
dtt	dddd}t
 }t||d}|| || W d    n1 sMw   Y  |j|}dd |j D }W d    n1 smw   Y  |dddtj ddddtj dddd	ksJ d S )Nrc   r   r   rU   r   r   r   r   r   r   r.   r   r   r   r   )r   c                 S   r   r"   r   r   r"   r"   r#   r      r   z+test_multipage_metadata.<locals>.<dictcomp>r   r   r   r   r   r   r   )r5   rj   r   r   r   r7   rA   r   r   r   r9   r:   r   r8   rn   ro   r   r   r   r   r   r"   r"   r#   test_multipage_metadata   s@   
	

r   c               	      s2  t d} dtjdd}|jddd dd |jdd	d
 dd t f}|j|dd | j	|@}|j
d j}dD ]/\} t fdd|D d }|d usWJ t|dd d u saJ |jd t|d ksoJ q@W d    n1 szw   Y  W d    d S W d    d S 1 sw   Y  d S )Nrc   &https://test_text_urls.matplotlib.org/r/   r.   figsize皙?ztest plain 123plain)urlg?ztest mathtext $123$mathtextr1   r2   r   ))z0.1r   )z0.4r   c                 3   s(    | ]}|j j   kr|V  qd S NAURIr   afragmenttest_urlr"   r#   	<genexpr>  s   & z!test_text_urls.<locals>.<genexpr>
QuadPointsr.   H   )r5   rj   r   rg   r   r9   r:   r8   rn   ro   rp   AnnotsnextgetattrRectdecimalDecimal)rc   r    fdr1   annotsyannotr"   r   r#   test_text_urls   s,   

"r   c               	      s  t d} d tjdd}|jdddd  d t a}|j|d	d
 | j	|;}|j
d j}t fdd|D d }|d usCJ t|dd d usMJ |jd |jd td ks^J W d    n1 shw   Y  W d    d S W d    d S 1 sw   Y  d S )Nrc   r   )r.   r.   r   r   N-   )rotationr   r1   r2   r   c                 3   s"    | ]}|j j  kr|V  qd S r   r   r   r   r"   r#   r   &  s     z)test_text_rotated_urls.<locals>.<genexpr>r      z0.00001)r5   rj   r   rg   r   r9   r:   r8   rn   ro   rp   r   r   r   r   r   r   r   rc   r    r   r1   r   r   r"   r   r#   test_text_rotated_urls  s*   


"r   c               	      s   t d} d tjdd}|jdddd  d	d
 t T}|j|dd | j	|.}|j
d j}t fdd|D d }|d usEJ |jd tdd ksSJ W d    n1 s]w   Y  W d    d S W d    d S 1 suw   Y  d S )Nrc   r   r   r   r   gffffff?ztest tex $123$Ttex)usetexr   r1   r2   r   c                 3   s&    | ]}|j j  d kr|V  qdS )r   Nr   r   r   r"   r#   r   A  s   $ z%test_text_urls_tex.<locals>.<genexpr>r.   z0.7r   )r5   rj   r   rg   r   r9   r:   r8   rn   ro   rp   r   r   r   r   r   r   r"   r   r#   test_text_urls_tex/  s$   

"r   c                  C   sB   t ttj} | t  W d    d S 1 sw   Y  d S r   )r   r   rM   devnullr8   r   rg   )r1   r"   r"   r#   test_pdfpages_fspathH  s   "r   zhatching_legend.pdfc                  C   sT   t jdd} tddgddddd}tddgddddd}| ||||gg d d	S )
z.Test for correct hatching on patches in legend)r.   r/   r   r   greenXXXX)	facecolorhatchblue) r   r   r   N)r   rg   r   legend)r    r   br"   r"   r#   test_hatching_legendM  s   r   zgrayscale_alpha.pdfc                  C   sx   t jddddddf \} }t | d |d   }t j||dk < t \}}|j|ddd |g  |g  dS )z9Masking images with NaN did not work for grayscale imagesr/   r   nonegray_r)interpolationcmapN)	rX   ogridexpnanr   r   r]   
set_xticks
set_yticks)xr   ddr    r!   r"   r"   r#   test_grayscale_alphaX  s   
r   defaultr1   eps)
extensionsc                 C   sD   |   }|  |jttdddddd |  }|  d S )NrT   rU   d   r   r   )c)add_subplotset_axis_offr7   rX   r[   linspace)fig_testfig_refax_testax_refr"   r"   r#   'test_pdf_eps_savefig_when_color_is_noned  s
    r  c                   C   sP   t jddd tt t jt dd W d   dS 1 s!w   Y  dS )z"Test failing latex subprocess callz$22_2_2$T)r   r1   r2   N)r   xlabelr5   raisesRuntimeErrorr8   r9   r:   r"   r"   r"   r#   test_failing_latexn  s   "r  c                  C   s2   t  \} }|jg g dd | jt dd d S )NT)
rasterizedr1   r2   )r   r   r7   r8   r9   r:   r   r"   r"   r#   test_empty_rasterizedv  s   r  zkerning.pdfc                  C   s4   t  } d}| jdd|dd | jdd|dd d S )Nu   AVAVAVAVAVAVAVAV€AAVVr   g      ?rU   )sizeg      ?   )r   rg   r   )r    rG   r"   r"   r#   test_kerning}  s   r  c                  C   s   t td} d}t| }|| tt| |}|| | }| }t|tdd | D ks6J t|t|k s@J |	 |	 ksJJ d S )Nzfonts/ttf/DejaVuSerif.ttfz%these should be subsetted! 1234567890c                 s   s    | ]}t |V  qd S r   )chr)r   keyr"   r"   r#   r     s    z%test_glyphs_subset.<locals>.<genexpr>)
r   r   r   set_textr   get_charmapsetkeysrD   get_num_glyphs)fpathchars	nosubfontsubfont	nosubcmapsubcmapr"   r"   r#   test_glyphs_subset  s   

"r  zmulti_font_type3.pdfgffffff@)tolc                  C   h   t jdgd} tt | jdkrtd tjdddgdd tjd	d
d t	 }|
ddd d S )Nr&   r+   r'   Font may be missingr0   r%      r,   r  r1   r)   r(   333333?ffffff?"   There are 几个汉字 in between!fmr
   r   r	   r4   r5   r6   r   rcrg   r   fpr    r"   r"   r#   test_multi_font_type3     
r-  zmulti_font_type42.pdfg@c                  C   r   )Nr&   r+   r'   r!  r0   r%   r"  r#  r1   r*   r$  r%  r&  r'  r(  r+  r"   r"   r#   test_multi_font_type42  r.  r/  )?r   r   r9   rM   pathlibr   tempfiler   numpyrX   r5   
matplotlibr   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=   r?   rH   rS   rb   r   r   r   r   r   r   r   r   r   r   stylecontextr  r  r  r  r  r-  r/  r"   r"   r"   r#   <module>   sp    
#%







