U
    d»{j³*  ã                   @   sô  d dl mZm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Zd dlZd dlZd dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlm Z!m"Z" e	 #d¡dk	Z$dd	„ Z%d
d„ Z&dd„ Z'dd„ Z(ej)j*e$ dd�dd„ ƒZ+ej) ,dddddg¡dd„ ƒZ-dd„ Z.dd„ Z/dd „ Z0d!d"„ Z1ej)j*ej2d#kd$d�d%d&„ ƒZ3d'd(„ Z4ej)j*ej2d)kd*d�d+d,„ ƒZ5d-d.„ Z6ej)j*e7ed/ƒ d0d�d1d2„ ƒZ8d3d4„ Z9d5d6„ Z:d7d8„ Z;d9d:„ Z<d;d<„ Z=ej)j*ej2d)kd=d�d>d?„ ƒZ>dS )@é    )ÚBytesIOÚStringION)ÚPath)ÚImage)ÚfindfontÚfindSystemFontsÚ	FontEntryÚFontPropertiesÚfontManagerÚ	json_dumpÚ	json_loadÚget_fontÚis_opentype_cff_fontÚMSUserFontDirectoriesÚ_get_fontconfig_fontsÚft2fontÚttfFontPropertyÚcbook)ÚpyplotÚ
rc_contextzfc-listc               	   C   st   t dddgid�� ttdgd�ƒ} W 5 Q R X t| ƒjdks@t‚t| ƒ} |  ¡ }t|ƒdks`t‚|d	 d
kspt‚d S )Núfont.sans-serifZcmmi10úBitstream Vera Sans)Úrcú
sans-serif©Úfamilyz
cmmi10.ttféƒ   i"  é   )	r   r   r	   r   ÚnameÚAssertionErrorr   Zget_charmapÚlen)ÚfontZcmap© r"   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/matplotlib/tests/test_font_manager.pyÚtest_font_priority   s    þ
r$   c                   C   sœ   dt  dd¡kst‚dt  dd¡ks(t‚dt  dd¡  k rLt  dd¡k sRn t‚dt  dd¡  k rvt  dd¡k s|n t‚t  dd¡t  dd¡ks˜t‚d S )Nr   ZregularÚboldi�  Únormal)r
   Zscore_weightr   r"   r"   r"   r#   Útest_score_weight&   s    
ÿ
ÿ

ÿr'   c              	   C   sˆ   t | dƒ}tt|ƒ t|ƒ}t ¡ �Z t dd¡ ddidddœdd	ifD ].}tf |Ž}tj|d
d�|j|d
d�ksJt	‚qJW 5 Q R X d S )Nzfontlist.jsonÚignorez findfont: Font family.*not foundr   ZSTIXGeneralr   i¼  )r   Úweightzno such font familyF)Zrebuild_if_missing)
r   r   r
   r   ÚwarningsÚcatch_warningsÚfilterwarningsr	   r   r   )ÚtmpdirÚpathÚcopyÚpropÚfpr"   r"   r#   Útest_json_serialization1   s    


þ
ÿr2   c               
   C   sn   d} t | ƒ ¡ rt| ƒst‚tjD ]F}d|jkr"t|jdƒ�}| d¡dk}W 5 Q R X |t|jƒks"t‚q"d S )Nz//usr/share/fonts/opentype/freefont/FreeMono.otfZotfÚrbé   s   OTTO)	r   Úexistsr   r   r
   ÚttflistÚfnameÚopenÚread)r7   ÚfÚfdÚresr"   r"   r#   Útest_otfA   s    

r=   zno fontconfig installed)Úreasonc                   C   s   t tƒ ƒdkst‚d S )Né   )r    r   r   r"   r"   r"   r#   Útest_get_fontconfig_fontsL   s    r@   Úfactoré   r4   é   é   c                 C   s†   t tdgd�ƒ}t|dd�}| ¡  | dd¡ | d¡ | ¡ }t|| d�}| ¡  | dd¡ | d¡ tjj	| ¡ |dd	� d S )
Nr   r   r?   )Zhinting_factoré   éd   Úabcgš™™™™™¹?)Zrtol)
r   r	   r   ÚclearZset_sizeÚset_textZget_width_heightÚnpZtestingZassert_allclose)rA   r!   Zfont1ÚexpectedZhinted_fontr"   r"   r#   Útest_hinting_factorQ   s    

ÿrL   c                  C   sJ   zt dd„ tjD ƒƒ} W n tk
r6   t d¡ Y nX | jdksFt‚d S )Nc                 s   s"   | ]}t |jƒjd kr|V  qdS )zseguisbi.ttfN)r   r7   r   )Ú.0Úentryr"   r"   r#   Ú	<genexpr>g   s    ÿz#test_utf16m_sfnt.<locals>.<genexpr>z0Couldn't find seguisbi.ttf font to test against.iX  )Únextr
   r6   ÚStopIterationÚpytestÚskipr)   r   )rN   r"   r"   r#   Útest_utf16m_sfntd   s
    rT   c                  C   sd   t dgd�} tt| ƒƒjdkr(t d¡ t ¡ \}}|jddd| d� dD ]}|j	t
ƒ |d	� qJd S )
NzWenQuanYi Zen Heir   zwqy-zenhei.ttcz"Font wqy-zenhei.ttc may be missingç      à?u   â¿“©Zfontproperties©ÚrawÚsvgÚpdfZps©Úformat©r	   r   r   r   rR   rS   ÚpltÚsubplotsÚtextÚsavefigr   )r1   ÚfigÚaxÚfmtr"   r"   r#   Útest_find_ttcq   s    
re   c                  C   sr   t ddgd�} tt| ƒƒj}|dkr6t d|› d�¡ t ¡ \}}|jddd| d	� d
D ]}|j	t
ƒ |d� qXd S )NzNoto Sans CJK SCzNoto Sans CJK JPr   )zNotoSansCJKsc-Regular.otfzNotoSansCJK-Regular.ttcz,Noto Sans CJK SC font may be missing (found ú)rU   u   Hello, ä½ å¥½rV   rW   r[   r]   )r1   r   rb   rc   rd   r"   r"   r#   Útest_find_noto{   s    rg   c              	   C   sª   t | ƒ}t t¡� t|d ƒ W 5 Q R X t t¡� tt|d ƒƒ W 5 Q R X t t¡� tt|d ƒƒ W 5 Q R X ddlm} tjt	dd�� |t
ƒ ƒ W 5 Q R X d S )Nznon-existent-font-name.ttfr   )ÚFT2Fontzpath or binary-mode file)Úmatch)r   rR   ÚraisesÚFileNotFoundErrorr   ÚstrÚbytesÚmatplotlib.ft2fontrh   Ú	TypeErrorr   )r-   Ztmp_pathrh   r"   r"   r#   Útest_find_invalid‡   s    rp   Úlinuxz
Linux onlyc              	      sº   d‰ t ƒ }t‡ fdd„|D ƒƒr0t ˆ › d�¡ |  d¡}|jdd� t tt	ƒj
ˆ  | ˆ ¡¡ | ¡ �>}| dt| ƒ¡ t ¡  t ƒ }t‡ fd	d„|D ƒƒs¤t‚W 5 Q R X t ¡  d S )
Númpltest.ttfc                 3   s   | ]}ˆ |kV  qd S ©Nr"   ©rM   r!   ©Zfont_test_filer"   r#   rO   Ÿ   s     z(test_user_fonts_linux.<locals>.<genexpr>ú already exists in system fontsÚfontsT)ÚdirÚXDG_DATA_HOMEc                 3   s   | ]}ˆ |kV  qd S rs   r"   rt   ru   r"   r#   rO   ­   s     )r   ÚanyrR   rS   ÚjoinZensureÚshutilÚcopyfiler   Ú__file__ÚparentÚcontextZsetenvrl   r   Úcache_clearr   )r-   Zmonkeypatchrw   Úuser_fonts_dirÚmr"   ru   r#   Útest_user_fonts_linux™   s    
ÿ
$r„   c               
      st   d‰ t tƒjˆ  } z0t | ¡ ‡ fdd„tjD ƒ\}tj |¡ W 5 ‡ fdd„tjD ƒ}|D ]}tj |¡ q\X dS )z/Smoke test that addfont() accepts pathlib.Path.rr   c                    s   g | ]}|j  ˆ ¡r|‘qS r"   ©r7   Úendswithrt   ru   r"   r#   Ú
<listcomp>½   s    ÿz(test_addfont_as_path.<locals>.<listcomp>c                    s   g | ]}|j  ˆ ¡r|‘qS r"   r…   rt   ru   r"   r#   r‡   ¹   s    ÿN)r   r~   r   r
   r6   ÚremoveZaddfont)r.   Z	to_remover!   Úaddedr"   ru   r#   Útest_addfont_as_path³   s    
rŠ   Úwin32zWindows onlyc                     sž   t j d¡s"t j d¡s"t d¡ d‰ tƒ } t‡ fdd„| D ƒƒrRt ˆ › d�¡ td }t  	|¡ t
 ttƒjˆ  |¡ tƒ } t‡ fd	d„| D ƒƒsšt‚d S )
NZAPPVEYORZTF_BUILDznThis test should only run on CI (appveyor or azure) as the developer's font directory should remain unchanged.rr   c                 3   s   | ]}ˆ |kV  qd S rs   r"   rt   ru   r"   r#   rO   Î   s     z(test_user_fonts_win32.<locals>.<genexpr>rv   r   c                 3   s   | ]}ˆ |kV  qd S rs   r"   rt   ru   r"   r#   rO   Ü   s     )ÚosÚenvironÚgetrR   Zxfailr   rz   rS   r   Úmakedirsr|   r/   r   r~   r   r   )rw   r‚   r"   ru   r#   Útest_user_fonts_win32Ã   s    

r�   c                 C   s(   t  ¡ \}}|jtƒ dd� t  ¡  d S )NrZ   r[   )r^   r_   ra   r   Úclose)Ú_rb   rc   r"   r"   r#   Ú_model_handlerß   s    r“   Úregister_at_forkz Cannot register at_fork handlersc               	   C   s>   t dƒ t d¡} | jdd��}| t tdƒ¡ W 5 Q R X d S )Nr   ÚforkrB   )Z	processes)r“   ÚmultiprocessingZget_contextZPoolÚmapÚrange)ÚctxÚpoolr"   r"   r#   Ú	test_forkå   s    
r›   c              	   C   sJ   dgt jd< |  d¡� tdƒ W 5 Q R X dd„ | jD ƒddgksFt‚d S )	Nzthis-font-does-not-existr   ÚWARNINGÚsansc                 S   s   g | ]}|  ¡ ‘qS r"   )Ú
getMessage)rM   Zrecr"   r"   r#   r‡   ò   s     z'test_missing_family.<locals>.<listcomp>zFfindfont: Font family ['sans'] not found. Falling back to DejaVu Sans.zufindfont: Generic family 'sans' not found because none of the following families were found: this-font-does-not-exist)r^   ZrcParamsZat_levelr   Úrecordsr   )Zcaplogr"   r"   r#   Útest_missing_familyî   s    ýr    c                     s~   dd l ‰ddlm‰  dd lm‰ d} ˆ | ¡‰‡ ‡‡fdd„‰‡‡fdd„t| ƒD ƒ}|D ]}| ¡  qZ|D ]}| ¡  qld S )Nr   )ÚLOAD_NO_HINTINGé
   c                    s>   ˆ  ¡  tdƒD ](}ˆ ˆ d¡¡}|jt| ƒdˆ d� qd S )NrF   zDejaVu Sansg        )Úflags)Úwaitr˜   r   r   rI   rl   )ÚnÚjr!   )r¡   ÚbÚfmr"   r#   Úbad_idea  s    z!_test_threading.<locals>.bad_ideac                    s$   g | ]}ˆj ˆ d |› �|fd�‘qS )Zbad_thread_)Útargetr   Úargs)ÚThread)rM   r¦   )r©   Ú	threadingr"   r#   r‡     s   ÿz#_test_threading.<locals>.<listcomp>)	r­   rn   r¡   Úmatplotlib.font_managerZfont_managerÚBarrierr˜   Ústartr{   )ÚNÚthreadsÚtr"   )r¡   r§   r©   r¨   r­   r#   Ú_test_threadingú   s    
þ
r´   c                  C   sL   t  d¡ dd l} t tjd|  t¡d g¡}|j	rHt  
d|j	› d�¡ d S )Nr­   r   z-cz
_test_threading()z2The subprocess returned with non-zero exit status Ú.)rR   ZimportorskipÚinspectÚ
subprocessÚrunÚsysÚ
executableÚ	getsourcer´   Ú
returncodeZfail)r¶   Úprocr"   r"   r#   Útest_fontcache_thread_safe  s    
ÿÿr¾   c                  C   sV   t dd�} |  ¡ }t t|ƒ¡}|jdks.t‚|jdks<t‚|  ¡ }| 	d¡sRt‚d S )Nú	font-name)r   r   z<img src="data:image/png;base64)
r   Z
_repr_png_r   r8   r   Úwidthr   ÚheightÚ_repr_html_Ú
startswith)ÚfontentZpngZimgÚhtmlr"   r"   r#   Útest_fontentry_dataclass!  s    
rÆ   c               	   C   s.   t  t¡� tddd�} |  ¡  W 5 Q R X d S )Nz/randomr¿   )r7   r   )rR   rj   rk   r   rÂ   )rÄ   r"   r"   r#   Ú%test_fontentry_dataclass_invalid_path-  s    rÇ   zLinux or OS onlyc            	      C   sº   dd„ dD ƒ} t | dd�}t dd�}g }|| D ]4}z"t |¡}t|ƒ}| |j¡ W q0   Y q0X q0ttt|ƒƒƒ}tt	 
¡ ƒ}t|ƒt|ƒks–t‚t|ƒt|ƒksªt‚||ks¶t‚d S )Nc                 S   s   g | ]}t  d |¡‘qS )rw   )r   Z_get_data_path)rM   Úsubdirr"   r"   r#   r‡   5  s     z'test_get_font_names.<locals>.<listcomp>)ÚttfrÉ   )Zfontext)r   r   rh   r   Úappendr   ÚsortedÚlistÚsetr
   Zget_font_namesr   r    )	Z	paths_mplZ	fonts_mplZfonts_systemZ	ttf_fontsr.   r!   r0   Zavailable_fontsZmpl_font_namesr"   r"   r#   Útest_get_font_names3  s     

rÎ   )?Úior   r   r–   rŒ   Úpathlibr   ZPILr   r|   r·   r¹   r*   ÚnumpyrJ   rR   r®   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Z
matplotlibr   r^   r   ÚwhichZ
has_fclistr$   r'   r2   r=   ÚmarkZskipifr@   ZparametrizerL   rT   re   rg   rp   Úplatformr„   rŠ   r�   r“   Úhasattrr›   r    r´   r¾   rÆ   rÇ   rÎ   r"   r"   r"   r#   Ú<module>   sT   @




ÿ
