o
    gZ!                     @   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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%e0ed' d(dd)d* Z1d+d, Z2d-d. Z3d/d0 Z4dS )1    )BytesIOStringION)Path)findfontfindSystemFontsFontPropertiesfontManager	json_dump	json_loadget_fontget_fontconfig_fontsis_opentype_cff_fontMSUserFontDirectories_call_fc_list)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-serifcmmi10Bitstream Vera Sans)rc
sans-seriffamilyz
cmmi10.ttf   i"     )r   r   r   r   namer   get_charmaplen)fontcmap r    `/home/ubuntu/cloudmapper/venv/lib/python3.10/site-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   regularboldi  normal)r   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   STIXGeneralr   i  )r   weightzno such font familyF)rebuild_if_missingr    )	r   r	   r   r
   warningscatch_warningsfilterwarningsr   r   )tmpdirpathcopypropfpr    r    r!   test_json_serialization/   s   



"r4   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.otfotfrb   s   OTTO)r   existsr   r   ttflistfnameopenread)r:   ffdresr    r    r!   test_otf?   s   

r@   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   rC   factor)   r7         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   rB   )hinting_factor   d   abcg?)rtol)
r   r   r   clearset_sizeset_textget_width_heightnptestingassert_allclose)rD   r   font1expectedhinted_fontr    r    r!   test_hinting_factorO   s   


rW   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   r9   StopIterationpytestskipr*   )rY   r    r    r!   test_utf16m_sfntb   s   r_   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   ⿓)fontproperties)rawsvgpdfpsformat)r   r   r   r   r]   r^   pltsubplotstextsavefigr   )r3   figaxfmtr    r    r!   test_find_ttco   s   
rn   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   r]   raisesFileNotFoundErrorr   strbytesmatplotlib.ft2fontro   	TypeErrorr   )r/   tmp_pathro   r    r    r!   test_find_invalidz   s   "rx   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    rX   r   font_test_filer    r!   rZ          z(test_user_fonts_linux.<locals>.<genexpr> already exists in system fontsfontsT)dirXDG_DATA_HOMEc                 3   r{   r|   r    r}   r~   r    r!   rZ      r   )r   anyr]   r^   joinensureshutilcopyfiler   __file__parentcontextsetenvrs   r   cache_clear)r/   monkeypatchr   user_fonts_dirmr    r~   r!   test_user_fonts_linux   s    

r   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 )
NAPPVEYORTF_BUILDznThis test should only run on CI (appveyor or azure) as the developer's font directory should remain unchanged.rz   c                 3   r{   r|   r    r}   r~   r    r!   rZ      r   z(test_user_fonts_win32.<locals>.<genexpr>r   r   c                 3   r{   r|   r    r}   r~   r    r!   rZ      r   )osenvirongetr]   xfailr   r   r^   r   makedirsr   r1   r   r   r   )r   r   r    r~   r!   test_user_fonts_win32   s   

r   c                 C   s(   t  \}}|jt dd t   d S )Nrc   re   )rg   rh   rj   r   close)_rk   rl   r    r    r!   _model_handler   s   r   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   forkrE   )	processes)r   multiprocessingget_contextPoolmaprange)ctx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   WARNINGsansc                 S   s   g | ]}|  qS r    )
getMessage)rX   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)rg   rcParamsat_levelr   records)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 )NrJ   zDejaVu Sansg        )flags)waitr   r   r   rO   rs   )njr   )r   bfmr    r!   bad_idea   s
   z!_test_threading.<locals>.bad_ideac                    s$   g | ]}j  d | |fdqS )bad_thread_)targetr   args)Thread)rX   r   )r   	threadingr    r!   r      s    z#_test_threading.<locals>.<listcomp>)	r   ru   r   matplotlib.font_managerfont_managerBarrierr   startr   )N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 .)r]   importorskipinspect
subprocessrunsys
executable	getsourcer   
returncodefail)r   procr    r    r!   test_fontcache_thread_safe   s   
r   )5ior   r   r   r   pathlibr   r   r   r   r,   numpyrQ   r]   r   r   r   r   r   r	   r
   r   r   r   r   r   
matplotlibr   rg   r   which
has_fclistr"   r'   r4   r@   markskipifrC   parametrizerW   r_   rn   rx   platformr   r   r   hasattrr   r   r   r   r    r    r    r!   <module>   sH    4




