o
    tBh]!                     @   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-serifcmmi10Bitstream Vera Sans)rc
sans-seriffamilyz
cmmi10.ttf   i"     )r   r   r   r   namer   get_charmaplen)fontcmap r   y/var/www/html/riverr-enterprise-integrations-main/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   



"r3   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)r9   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   rB   factor)   r6         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   rA   )hinting_factor   d   abcg?)rtol)
r   r   r   clearset_sizeset_textget_width_heightnptestingassert_allclose)rC   r   font1expectedhinted_fontr   r   r    test_hinting_factorO   s   


rV   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   r9   r   ).0entryr   r   r    	<genexpr>e   s    z#test_utf16m_sfnt.<locals>.<genexpr>z#Couldn't find font to test against.iX  )nextr   r8   StopIterationpytestskipr)   )rX   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   )r2   figaxfmtr   r   r    test_find_ttco   s   
rm   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.ft2fontrn   	TypeErrorr   )r.   tmp_pathrn   r   r   r    test_find_invalidz   s   "rw   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   rW   r   font_test_filer   r    rY          z(test_user_fonts_linux.<locals>.<genexpr> already exists in system fontsfontsT)dirXDG_DATA_HOMEc                 3   rz   r{   r   r|   r}   r   r    rY      r   )r   anyr\   r]   joinensureshutilcopyfiler   __file__parentcontextsetenvrr   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.ry   c                 3   rz   r{   r   r|   r}   r   r    rY      r   z(test_user_fonts_win32.<locals>.<genexpr>r   r   c                 3   rz   r{   r   r|   r}   r   r    rY      r   )osenvirongetr\   xfailr   r   r]   r   makedirsr   r0   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 )Nrb   rd   )rf   rg   ri   r   close)_rj   rk   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   forkrD   )	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)rW   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)rf   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 )NrI   zDejaVu Sansg        )flags)waitr   r   r   rN   rr   )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)rW   r   )r   	threadingr   r    r      s    z#_test_threading.<locals>.<listcomp>)	r   rt   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   )4ior   r   r   r   pathlibr   r   r   r   r+   numpyrP   r\   r   r   r   r   r   r	   r
   r   r   r   r   
matplotlibr   rf   r   which
has_fclistr!   r&   r3   r?   markskipifrB   parametrizerV   r^   rm   rw   platformr   r   r   hasattrr   r   r   r   r   r   r   r    <module>   sH    0




