U
    Âmœdq+  ã                   @   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j+dkpúe$ dd�dd„ ƒZ,ej) -dddddg¡dd„ ƒZ.dd„ Z/dd„ Z0d d!„ Z1d"d#„ Z2ej)j*ej+d$k�p^e$ d%d�d&d'„ ƒZ3d(d)„ Z4ej)j*ej+d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j+d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"   ú[/home/sam/Atlas/atlas_env/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=   Úwin32z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    rA   Ú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ÚnpÚtestingZassert_allclose)rB   r!   Zfont1ÚexpectedZhinted_fontr"   r"   r#   Útest_hinting_factorR   s    

ÿrN   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>h   s    ÿz#test_utf16m_sfnt.<locals>.<genexpr>z0Couldn't find seguisbi.ttf font to test against.iX  )Únextr
   r6   ÚStopIterationÚpytestÚskipr)   r   )rP   r"   r"   r#   Útest_utf16m_sfnte   s
    rV   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   rT   rU   ÚpltÚsubplotsÚtextÚsavefigr   )r1   ÚfigÚaxÚfmtr"   r"   r#   Útest_find_ttcr   s    
rg   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 ú)rW   u   Hello, ä½ å¥½rX   rY   r]   r_   )r1   r   rd   re   rf   r"   r"   r#   Útest_find_noto|   s    ri   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font file or a binary-mode file)Úmatch)r   rT   ÚraisesÚFileNotFoundErrorr   ÚstrÚbytesÚmatplotlib.ft2fontrj   Ú	TypeErrorr   )r-   Ztmp_pathrj   r"   r"   r#   Útest_find_invalidˆ   s    rr   Úlinuxz$only Linux with fontconfig installedc              	      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"   ©rO   r!   ©Zfont_test_filer"   r#   rQ   ¡   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 ru   r"   rv   rw   r"   r#   rQ   ¯   s     )r   ÚanyrT   rU   ÚjoinZensureÚshutilÚcopyfiler   Ú__file__ÚparentÚcontextZsetenvrn   r   Úcache_clearr   )r-   Zmonkeypatchry   Úuser_fonts_dirÚmr"   rw   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.rt   c                    s   g | ]}|j  ˆ ¡r|‘qS r"   ©r7   Úendswithrv   rw   r"   r#   Ú
<listcomp>¿   s    ÿz(test_addfont_as_path.<locals>.<listcomp>c                    s   g | ]}|j  ˆ ¡r|‘qS r"   r‡   rv   rw   r"   r#   r‰   »   s    ÿN)r   r€   r�   r
   r6   ÚremoveZaddfont)r.   Z	to_remover!   Úaddedr"   rw   r#   Útest_addfont_as_pathµ   s    
rŒ   zWindows onlyc                     s¨   t j d¡s"t j d¡s"t d¡ t d¡ d‰ tƒ } t‡ fdd„| D ƒƒr\t ˆ › 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.z4We need to update the registry for this test to workrt   c                 3   s   | ]}ˆ |kV  qd S ru   r"   rv   rw   r"   r#   rQ   Ð   s     z(test_user_fonts_win32.<locals>.<genexpr>rx   r   c                 3   s   | ]}ˆ |kV  qd S ru   r"   rv   rw   r"   r#   rQ   Þ   s     )ÚosÚenvironÚgetrT   Zxfailr   r|   rU   r   Úmakedirsr~   r/   r   r€   r�   r   )ry   r„   r"   rw   r#   Útest_user_fonts_win32Å   s    


r‘   c                 C   s(   t  ¡ \}}|jtƒ dd� t  ¡  d S )Nr\   r]   )r`   ra   rc   r   Úclose)Ú_rd   re   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   ÚforkrC   )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)rO   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 )NrG   zDejaVu Sansg        )Úflags)Úwaitr™   r   r   rJ   rn   )Ú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)rO   r§   )rª   Ú	threadingr"   r#   r‰   
  s   ÿz#_test_threading.<locals>.<listcomp>)	r®   rp   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 Ú.)rT   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   )rT   rl   rm   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 )ry   )r   Z_get_data_path)rO   Úsubdirr"   r"   r#   r‰   7  s     z'test_get_font_names.<locals>.<listcomp>)ÚttfrÊ   )Zfontext)r   r   rj   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_names5  s     

rÏ   )?Úior   r   r—   r�   Úpathlibr   ZPILr   r~   r¸   rº   r*   ÚnumpyrK   rT   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skipifÚplatformrA   ZparametrizerN   rV   rg   ri   rr   r†   rŒ   r‘   r”   Úhasattrrœ   r¡   rµ   r¿   rÇ   rÈ   rÏ   r"   r"   r"   r#   Ú<module>   s\   @ÿ


ÿ

ÿ
