o
    :a]!                     @   s  d dl mZm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
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 d dlmZmZ eddu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g ddd Z'dd Z(dd Z)dd Z*ej#j$e	j+dkdddd  Z,ej#j$e	j+d!kd"dd#d$ Z-d%d& Z.ej#j$e/ed' d(dd)d* Z0d+d, Z1d-d. Z2d/d0 Z3dS )1    )BytesIOStringION)Path)
findfontfindSystemFontsFontPropertiesfontManager	json_dump	json_loadget_fontis_opentype_cff_fontMSUserFontDirectories_get_fontconfig_fonts)pyplot
rc_contextzfc-listc                  C   s   t dddgid ttdgd} W d    n1 sw   Y  t| jdks*J t| } |  }t|dks:J |d	 d
ksBJ d S )Nfont.sans-serifZcmmi10Bitstream Vera Sans)Zrc
sans-seriffamilyz
cmmi10.ttf   i"     )r   r   r   r   namer   Zget_charmaplen)fontZcmap r   D/usr/lib/python3/dist-packages/matplotlib/tests/test_font_manager.pytest_font_priority   s   
r   c                   C   s   dt ddks
J dt ddksJ dt dd  k r't ddk s*J  J dt dd  k r=t ddk s@J  J t ddt ddksNJ d S )Nr   ZregularZboldi  Znormal)r   Zscore_weightr   r   r   r   test_score_weight$   s   



r   c                 C   s   t | d}tt| t|}t 5 tdd ddiddddd	ifD ]}tdi |}tj|d
d|j|d
dks>J q%W d    d S 1 sJw   Y  d S )Nzfontlist.jsonignorez findfont: Font family.*not foundr   ZSTIXGeneralr   i  )r   weightzno such font familyF)Zrebuild_if_missingr   )	r   r	   r   r
   warningscatch_warningsfilterwarningsr   r   )tmpdirpathcopyZpropfpr   r   r   test_json_serialization/   s   



"r(   c               	   C   s   d} t |  rt| sJ tjD ]-}d|jv r>t|jd}|ddk}W d    n1 s0w   Y  |t|jks>J qd S )Nz//usr/share/fonts/opentype/freefont/FreeMono.otfZotfrb   s   OTTO)r   existsr   r   ttflistfnameopenread)r-   ffdresr   r   r   test_otf?   s   

r3   zno fontconfig installed)reasonc                   C   s   t t dks	J d S )N   )r   r   r   r   r   r   test_get_fontconfig_fontsJ   s   r6   factor)   r*         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   r5   )Zhinting_factor   d   abcg?)Zrtol)
r   r   r   clearZset_sizeset_textZget_width_heightnpZtestingZassert_allclose)r7   r   Zfont1ZexpectedZhinted_fontr   r   r   test_hinting_factorO   s   


rA   c                  C   sJ   zt dd tjD } W n ty   td Y d S w | jdks#J d S )Nc                 s   s$    | ]}t |jjd kr|V  qdS )zseguisbi.ttfN)r   r-   r   ).0entryr   r   r   	<genexpr>e   s    z#test_utf16m_sfnt.<locals>.<genexpr>z#Couldn't find font to test against.iX  )nextr   r,   StopIterationpytestskipr    )rC   r   r   r   test_utf16m_sfntb   s   rI   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	 q%d S )
NzWenQuanYi Zen Heir   zwqy-zenhei.ttczFont may be missingg      ?u   ⿓)Zfontproperties)rawZsvgpdfZpsformat)r   r   r   r   rG   rH   pltsubplotstextsavefigr   )r'   figaxZfmtr   r   r   test_find_ttco   s   
rT   c                 C   s   t | }tt t|d  W d    n1 sw   Y  tt tt|d  W d    n1 s7w   Y  tt tt|d  W d    n1 sTw   Y  ddlm} tjt	dd |t
  W d    d S 1 sww   Y  d S )Nznon-existent-font-name.ttfr   )FT2Fontzpath or binary-mode file)match)r   rG   ZraisesFileNotFoundErrorr   strbytesmatplotlib.ft2fontrU   	TypeErrorr   )r$   Ztmp_pathrU   r   r   r   test_find_invalidz   s   "r\   Zlinuxz
Linux onlyc                    s   d t  }t fdd|D rt  d | d}|jdd ttt	j
  |  | $}|dt|  t  t  }t fd	d|D sRJ W d    n1 s\w   Y  t  d S )
Nmpltest.ttfc                 3       | ]} |v V  qd S Nr   rB   r   Zfont_test_filer   r   rD          z(test_user_fonts_linux.<locals>.<genexpr> already exists in system fontsfontsT)dirZXDG_DATA_HOMEc                 3   r^   r_   r   r`   ra   r   r   rD      rb   )r   anyrG   rH   joinZensureshutilcopyfiler   __file__parentcontextZsetenvrX   r   cache_clear)r$   Zmonkeypatchrd   user_fonts_dirmr   ra   r   test_user_fonts_linux   s    

rp   win32zWindows onlyc                     s   t jdst jds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 sMJ d S )
NZAPPVEYORZTF_BUILDznThis test should only run on CI (appveyor or azure) as the developer's font directory should remain unchanged.r]   c                 3   r^   r_   r   r`   ra   r   r   rD      rb   z(test_user_fonts_win32.<locals>.<genexpr>rc   r   c                 3   r^   r_   r   r`   ra   r   r   rD      rb   )osenvirongetrG   Zxfailr   rf   rH   r   makedirsrh   r&   r   rj   rk   )rd   rn   r   ra   r   test_user_fonts_win32   s   

rv   c                 C   s(   t  \}}|jt dd t   d S )NrK   rL   )rN   rO   rQ   r   close)_rR   rS   r   r   r   _model_handler   s   ry   register_at_forkz Cannot register at_fork handlersc                  C   sT   t d td} | jdd}|t td W d    d S 1 s#w   Y  d S )Nr   forkr8   )Z	processes)ry   multiprocessingZget_contextZPoolmaprange)ctxZpoolr   r   r   	test_fork   s
   
"r   c                 C   s^   dgt jd< | d td W d    n1 sw   Y  dd | jD ddgks-J d S )	Nzthis-font-does-not-existr   ZWARNINGZsansc                 S   s   g | ]}|  qS r   )Z
getMessage)rB   Zrecr   r   r   
<listcomp>   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)rN   ZrcParamsZat_levelr   Zrecords)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 ]}|  q-|D ]}|  q6d S )Nr   )LOAD_NO_HINTING
   c                    s>      tdD ]}d}|jt| d d qd S )Nr<   zDejaVu Sansg        )flags)waitr~   r   r   r?   rX   )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)ZThread)rB   r   )r   	threadingr   r   r      s    z#_test_threading.<locals>.<listcomp>)	r   rZ   r   matplotlib.font_managerZfont_managerZBarrierr~   startrg   )NZthreadstr   )r   r   r   r   r   r   _test_threading   s   


r   c                  C   sP   t d dd l} ttjd| td g}|j	r&t 
d|j	 d d S d S )Nr   r   z-cz
_test_threading()z2The subprocess returned with non-zero exit status .)rG   Zimportorskipinspect
subprocessrunsys
executableZ	getsourcer   
returncodeZfail)r   procr   r   r   test_fontcache_thread_safe   s   
r   )4ior   r   r|   rr   Zpathlibr   rh   r   r   r!   Znumpyr@   rG   r   r   r   r   r   r	   r
   r   r   r   r   Z
matplotlibr   rN   r   whichZ
has_fclistr   r   r(   r3   ZmarkZskipifr6   ZparametrizerA   rI   rT   r\   platformrp   rv   ry   hasattrr   r   r   r   r   r   r   r   <module>   sH    0




