a
    ëÝEb./  ã                   @   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mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ e
jjed
ƒ dd�Ze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!„ Z)ed"d#„ ƒZ*d$d%„ Z+ed&gƒd'd(„ ƒZ,ed)gƒd*d+„ ƒZ-e
jj.d,d-�ed.d/„ ƒƒZ/ej0 1d0¡ed1d2gd3�d4d5„ ƒƒZ2ed6d7„ ƒZ3d8d9„ Z4ed:gƒd;d<„ ƒZ5d=d>„ Z6dS )?é    N)ÚPath)ÚNamedTemporaryFile)ÚdvireadÚpyplotÚcheckdep_usetexÚrcParams)Ú_get_data_path)ÚFT2Font)Úget_glyphs_subset)ÚPdfPages)Úcheck_figures_equalÚimage_comparisonTz"This test needs a TeX installation)Úreasonz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.sizeZ	Helveticazfont.sans-serifr   z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=Trueç      à?ÚcenterÚbottomé   )ZhorizontalalignmentZverticalalignmentZfontsize)Z	linewidth)r   ÚpltÚsubplotsÚ	set_titleÚtextZaxhline)r   ÚfigÚax© r   úa/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/matplotlib/tests/test_backend_pdf.pyÚtest_use14corefonts   s    

þr   c                  C   s4   dt d< t ¡ \} }| g d¢¡ |  t ¡ ¡ d S )Né*   zpdf.fonttype©é   é   é   )r   r   r   ÚplotÚsavefigÚioÚBytesIO©r   r   r   r   r   Útest_type42.   s    r'   c                  C   s�   t t ¡ ƒ�p} |  ¡ dksJ ‚t ¡ \}}| g d¢¡ |j| dd� |  ¡ dksVJ ‚|  ¡  |  ¡ dksnJ ‚W d   ƒ n1 s‚0    Y  d S )Nr   r   Úpdf©Úformatr   r    )r   r$   r%   Zget_pagecountr   r   r"   r#   )r(   r   r   r   r   r   Útest_multipage_pagecount6   s    r+   c                  C   s�   t  ¡ } t| ƒ�B}tdƒD ](}t ¡ \}}| d¡ |j|dd� qW d   ƒ n1 sX0    Y  |  ¡ }| 	d¡dks|J ‚t
|ƒdk sŒJ ‚d S )Né
   zThis is a long titler(   r)   s	   startxrefr   i@œ  )r$   r%   r   Úranger   r   r   r#   ÚgetvalueÚcountÚlen)Zpdfior(   Úir   r   Úsr   r   r   Útest_multipage_properfinalizeA   s    

.r3   c               	   C   sÜ  t dd��R} t| ƒ�}|jjj}W d   ƒ n1 s40    Y  tj |¡sNJ ‚W d   ƒ n1 sb0    Y  t |¡ t|dd��}W d   ƒ n1 s˜0    Y  tj |¡r²J ‚t	 
¡ \}}| g d¢¡ t dd��^} t| ƒ�"}|jjj}| ¡  W d   ƒ n1 �s
0    Y  tj |¡�s&J ‚W d   ƒ n1 �s<0    Y  t |¡ t dd��b} t| dd��"}|jjj}| ¡  W d   ƒ n1 �s’0    Y  tj |¡�s®J ‚W d   ƒ n1 �sÄ0    Y  t |¡ d S )NF)Údelete)Z
keep_emptyr   )r   r   Ú_fileÚfhÚnameÚosÚpathÚexistsÚremover   r   r"   r#   )Útmpr(   Úfilenamer   r   r   r   r   Útest_multipage_keep_emptyM   s,    
(.


(2

(2r>   c                  C   s0  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
 ¡ ƒ�2}|j|dd� t|jjƒdks²J ‚W d   ƒ n1 sÆ0    Y  dtjd< t	t
 ¡ ƒ�4}|j|dd� t|jjƒdk�sJ ‚W d   ƒ n1 �s"0    Y  d S )Néûÿÿÿé   r   r    r   r!   )r   r   r   r   )Zextentéÿÿÿÿ)r    r!   r   r   Tzimage.composite_imager(   r)   F)ÚnpZmeshgridZarangeÚsinr   r   Zset_xlimÚimshowr   r   r$   r%   r#   r0   r5   Z_images)ÚXÚYÚZr   r   r(   r   r   r   Útest_composite_imagel   s    $
2
rH   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 sª0    Y  |dddtj› d�dddtj› �ddddœ	ksæJ ‚d S )NÚpikepdfÚSOURCE_DATE_EPOCHÚ0r@   ÚmeúMultipage PDFú	Test pageútest,pdf,multipageé°  r   r   r   ©ÚtzinfoÚTrue©ZAuthorÚTitleÚSubjectZKeywordsÚModDateÚTrappedr(   )Úmetadatar*   c                 S   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)ÚpytestÚimportorskipÚsetenvr   r   r"   r-   ÚdatetimeÚtimezoneÚ	timedeltar$   r%   r#   ÚPdfÚopenÚdocinfoÚitemsÚmplÚ__version__©ÚmonkeypatchrI   r   r   ÚmdÚbufr(   Úinfor   r   r   Útest_savefig_metadata   s8    
ÿù	2
÷rz   c                  C   s*  t  ¡ \} }tjtdd��( | jt ¡ dddid� W d   ƒ n1 sH0    Y  tjtdd��( | jt ¡ ddd	id� W d   ƒ n1 sŽ0    Y  tjtd
d��( | jt ¡ dddid� W d   ƒ n1 sÔ0    Y  tjtdd��( | jt ¡ dddid� W d   ƒ n1 �s0    Y  d S )Nz#Unknown infodict keyword: 'foobar'.)Úmatchr(   ZfoobarÚinvalid)r*   rY   z%not an instance of datetime.datetime.rW   z
1968-08-01z'not one of {"True", "False", "Unknown"}rX   Zfooznot an instance of str.rU   iÒ  )r   r   ri   ZwarnsÚUserWarningr#   r$   r%   r&   r   r   r   Útest_invalid_metadata¢   s"    ÿ6ÿÿ$ÿ6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 sš0    Y  |j |¡�$}dd„ |j ¡ D ƒ}W d   ƒ n1 sÚ0    Y  |dddtj› d�dddtj› �ddddœ	k�sJ ‚d S )NrI   rJ   rK   r@   rL   rM   rN   rO   rP   r   r   r   rQ   rS   rT   )rY   c                 S   s   i | ]\}}|t |ƒ“qS r   rZ   r\   r   r   r   r`   Ì   ra   z+test_multipage_metadata.<locals>.<dictcomp>rb   rc   rd   re   rf   rg   rh   )ri   rj   rk   r   r   r"   r-   rl   rm   rn   r$   r%   r   r#   ro   rp   rq   rr   rs   rt   ru   r   r   r   Útest_multipage_metadata¶   s<    
ÿù	
(2
÷r   c               	      s  t  d¡} d‰tjdd�}|jdddˆ› d�d� |jdd	d
ˆ› d�d� t ¡ �¦}|j|dd� | j 	|¡�l}|j
d j}dD ]J\}‰ t‡ ‡fdd„|D ƒd ƒ}|d us®J ‚|jd t |¡d ks€J ‚q€W d   ƒ n1 sà0    Y  W d   ƒ n1 sþ0    Y  d S )NrI   ú&https://test_text_urls.matplotlib.org/©r    r   ©Zfigsizeçš™™™™™¹?ztest plain 123Úplain)Úurlgš™™™™™Ù?ztest mathtext $123$Úmathtextr(   r)   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>î   ra   z!test_text_urls.<locals>.<genexpr>r   éH   ©ri   rj   r   Úfigurer   r$   r%   r#   ro   rp   ZpagesZAnnotsÚnextZRectÚdecimalÚDecimal)rI   r   Úfdr(   Ú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	�d
� t ¡ �–}|j|dd� | j 	|¡�\}|j
d j}t‡ fdd„|D ƒd ƒ}|d usŠJ ‚|jd t d¡d ks¦J ‚W d   ƒ n1 sº0    Y  W d   ƒ n1 sØ0    Y  d S )NrI   r€   r�   r‚   rƒ   gffffffæ?ztest tex $123$TÚtex)Úusetexr…   r(   r)   r   c                 3   s$   | ]}|j jˆ › d �kr|V  qdS )rœ   Nrˆ   r‹   ©r�   r   r   r�     ra   z%test_text_urls_tex.<locals>.<genexpr>r   z0.7r‘   r’   )rI   r   r—   r(   r˜   rš   r   rž   r   Útest_text_urls_texõ   s    

þrŸ   c                  C   s@   t ttjƒƒ�} |  t ¡ ¡ W d   ƒ n1 s20    Y  d S r‡   )r   r   r8   Údevnullr#   r   r“   )r(   r   r   r   Útest_pdfpages_fspath  s    r¡   zhatching_legend.pdfc                  C   sX   t jdd�} t jddgddddd�}t j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   ÚgreenZXXXX)Z	facecolorZhatchÚblue)Ú r¤   r¤   r¤   N)r   r“   Z	RectangleZlegend)r   rŒ   Úbr   r   r   Útest_hatching_legend  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 imageséþÿÿÿr    rƒ   ÚnoneZgray_r)ÚinterpolationZcmapN)	rB   ZogridÚexpÚnanr   r   rD   Z
set_xticksZ
set_yticks)Úxr™   Úddr   r   r   r   r   Útest_grayscale_alpha  s    
r®   r!   )Zrerunsc              	   C   sœ   dd„ }|   tjd|¡ dtd< t ¡ \}}| ddd¡ tƒ �H}t 	t
¡� |j|dd	� W d
  ƒ n1 sp0    Y  W d
  ƒ n1 sŽ0    Y  d
S )z:An error is raised if a TeX font lacks a Type-1 equivalentc                  _   s   t jddd d d d�S )NZtexfontz	Some Font)ZtexnameZpsnameZeffectsÚencodingr=   )r   ZPsFont)ÚargsÚkwargsr   r   r   Úpsfont/  s    ÿz#test_missing_psfont.<locals>.psfontÚ__getitem__Tztext.usetexr   Zhellor(   r)   N)Úsetattrr   Z
PsfontsMapr   r   r   r   r   ri   ÚraisesÚ
ValueErrorr#   )rv   r²   r   r   Ztmpfiler   r   r   Útest_missing_psfont+  s    r·   Údefaultr(   Zeps)Ú
extensionsc                 C   sD   |   ¡ }| ¡  |jt t ddd¡¡ddd� |  ¡ }| ¡  d S )Nr?   r@   éd   r_   r¨   )Úc)Zadd_subplotZset_axis_offr"   rB   rC   Zlinspace)Zfig_testZfig_refZax_testZax_refr   r   r   Ú'test_pdf_eps_savefig_when_color_is_none;  s
     r¼   c                   C   sN   t jddd� t t¡�" t jt ¡ dd� W d  ƒ n1 s@0    Y  dS )z"Test failing latex subprocess callz$22_2_2$T)r�   r(   r)   N)r   Zxlabelri   rµ   ÚRuntimeErrorr#   r$   r%   r   r   r   r   Útest_failing_latexE  s    r¾   c                  C   s2   t  ¡ \} }|jg g dd� | jt ¡ dd� d S )NT)Z
rasterizedr(   r)   )r   r   r"   r#   r$   r%   r&   r   r   r   Útest_empty_rasterizedM  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      Ð?r@   )Úsizeg      è?é   )r   r“   r   )r   r2   r   r   r   Útest_kerningT  s    rÂ   c                  C   s˜   t tdƒƒ} d}t| ƒ}| |¡ tt| |ƒƒ}| |¡ | ¡ }| ¡ }t|ƒtdd„ | ¡ D ƒƒkslJ ‚t|ƒt|ƒk s€J ‚| 	¡ | 	¡ ks”J ‚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�   l  ra   z%test_glyphs_subset.<locals>.<genexpr>)
r[   r   r	   Zset_textr
   Zget_charmapÚsetÚkeysr0   Zget_num_glyphs)ZfpathÚcharsZ	nosubfontZsubfontZ	nosubcmapZsubcmapr   r   r   Útest_glyphs_subset\  s    

"rÈ   )7rl   r•   r$   r8   Úpathlibr   Útempfiler   ÚnumpyrB   ri   Z
matplotlibrs   r   r   r   r   r   Zmatplotlib.cbookr   Zmatplotlib.ft2fontr	   Z#matplotlib.backends._backend_pdf_psr
   Zmatplotlib.backends.backend_pdfr   Zmatplotlib.testing.decoratorsr   r   ÚmarkZskipifZneeds_usetexr   r'   r+   r3   r>   rH   rz   r~   r   r›   rŸ   r¡   r¦   r®   Zflakyr·   ÚstyleÚcontextr¼   r¾   r¿   rÂ   rÈ   r   r   r   r   Ú<module>   s`   þ
#%


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