o
    li-                     @   s  d dl mZmZ d dl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#m$Z% e
&dduZ'dd	 Z(d
d Z)dd Z*dd Z+ej,j-ej.dkpe' dddd Z/ej,0dg ddd Z1dd Z2dd Z3dd Z4dd  Z5ej,j-ej.d!kpe' d"dd#d$ Z6d%d& Z7ej,j-ej.dkd'dd(d) Z8d*d+ Z9ej,j-e:ed, d-dd.d/ Z;d0d1 Z<d2d3 Z=d4d5 Z>d6d7 Z?d8d9 Z@ej,j-ej.dkd:dd;d< ZAd=d> ZBd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_contextfigurez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/SoloSpeech/.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_serialization2   s   



"r9   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_otfB   s   

rE   win32zno fontconfig installed)reasonc                   C   s   t t dks	J d S )N   )r"   r   r%   r%   r%   r&   test_get_fontconfig_fontsM   s   rI   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   rH   )hinting_factor   d   abcg?)rtol)
r   r	   r   clearset_sizeset_textget_width_heightnptestingassert_allclose)rJ   r#   font1expectedhinted_fontr%   r%   r&   test_hinting_factorS   s   


r]   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>i   s    z#test_utf16m_sfnt.<locals>.<genexpr>z0Couldn't find seguisbi.ttf font to test against.iX  )nextr
   r>   StopIterationpytestskipr/   )r_   r%   r%   r&   test_utf16m_sfntf   s   re   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 wqy-zenhei.ttc may be missing      ?u   ⿓fontpropertiesrawsvgpdfpsformatr	   r   r   r    rc   rd   pltsubplotstextsavefigr   )r8   figaxfmtr%   r%   r&   test_find_ttcs   s   
rx   c                  C   sr   t ddgd} tt| j}|dvrtd| d t \}}|jddd| d	 d
D ]
}|j	t
 |d q,d 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 )rf   u   Hello, 你好rg   ri   rn   rp   )r8   r    ru   rv   rw   r%   r%   r&   test_find_noto}   s   rz   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font file or a binary-mode file)match)r   rc   raisesFileNotFoundErrorr   strbytesmatplotlib.ft2fontr{   	TypeErrorr   )r4   tmp_pathr{   r%   r%   r&   test_find_invalid   s   "r   linuxz$only Linux with fontconfig installedc                    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%   r^   r#   font_test_filer%   r&   r`          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&   r`      r   )r   anyrc   rd   joinensureshutilcopyfiler   __file__parentcontextsetenvr   r   cache_clear)r4   monkeypatchr   user_fonts_dirmr%   r   r&   test_user_fonts_linux   s    

r   c               
      s   d t tj  } z.t|   fddtjD \}tj| W  fddtjD }|D ]}tj| q-dS  fddtjD }|D ]}tj| qDw )z/Smoke test that addfont() accepts pathlib.Path.r   c                       g | ]
}|j  r|qS r%   r?   endswithr   r   r%   r&   
<listcomp>       

z(test_addfont_as_path.<locals>.<listcomp>c                    r   r%   r   r   r   r%   r&   r      r   N)r   r   r   r
   addfontr>   remove)r5   added	to_remover#   r%   r   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 sRJ d S )NAPPVEYOR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 workr   c                 3   r   r   r%   r   r   r%   r&   r`      r   z(test_user_fonts_win32.<locals>.<genexpr>r   r   c                 3   r   r   r%   r   r   r%   r&   r`      r   )osenvirongetrc   xfailr   r   rd   r   makedirsr   r6   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 )Nrl   rn   )rq   rr   rt   r   close)_ru   rv   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   forkrK   )	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)r^   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)rq   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 )NrP   zDejaVu Sansg        )flags)waitr   r   r   rU   r   )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)r^   r   )r   	threadingr%   r&   r     s    z#_test_threading.<locals>.<listcomp>)	r   r   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 .)rc   importorskipinspect
subprocessrunsys
executable	getsourcer   
returncodefail)r   procr%   r%   r&   test_fontcache_thread_safe  s   
r   c                  C   sV   t dd} |  }tt|}|jdksJ |jdksJ |  }|ds)J d S )N	font-name)r    r   z<img src="data:image/png;base64)	r   
_repr_png_r   r@   r   widthheight_repr_html_
startswith)fontentpngimghtmlr%   r%   r&   test_fontentry_dataclass$  s   
r   c                  C   sD   t t tddd} |   W d    d S 1 sw   Y  d S )Nz/randomr   )r?   r    )rc   r}   r~   r   r   )r   r%   r%   r&   %test_fontentry_dataclass_invalid_path0  s   
"r   zLinux or OS onlyc            	      C   s   dd dD } t | dd}t dd}g }|| D ]}zt|}t|}||j W q   Y qttt|}tt	
 }t|t|ksIJ t|t|ksSJ ||ksYJ d S )Nc                 S   s   g | ]}t d |qS )r   )r   _get_data_path)r^   subdirr%   r%   r&   r   8  s    z'test_get_font_names.<locals>.<listcomp>)ttfr   )fontext)r   r   r{   r   appendr    sortedlistsetr
   get_font_namesr"   )		paths_mpl	fonts_mplfonts_system	ttf_fontsr5   r#   r7   available_fontsmpl_font_namesr%   r%   r&   test_get_font_names6  s    

r  c                     sF   G dd d  fdd} |   t  D ]}t| r td qd S )Nc                   @   s   e Zd ZdS )z/test_donot_cache_tracebacks.<locals>.SomeObjectN)__name__
__module____qualname__r%   r%   r%   r&   
SomeObjectL  s    r	  c               	      s     } t  }| }|jddddd t 1}t  td |j|dd W d    n1 s3w   Y  W d    d S W d    d S 1 sKw   Y  d S )Nrf   aardvarkdoesnotexistr   r-   r   rn   )	mfigureFigurerr   rs   r   r1   r2   r3   rt   )xru   rv   outr	  r%   r&   innerO  s   

"z*test_donot_cache_tracebacks.<locals>.innerz#object from inner stack still alive)gcget_objects
isinstancerc   r   )r  objr%   r  r&   test_donot_cache_tracebacksJ  s   


r  )Cior   r   r  r   r   pathlibr   PILr   r   r   r   r1   numpyrW   rc   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   
matplotlibr   rq   r   r   r  which
has_fclistr'   r,   r9   rE   markskipifplatformrI   parametrizer]   re   rx   rz   r   r   r   r   r   hasattrr   r   r   r   r   r   r  r  r%   r%   r%   r&   <module>   sb    @






