a
    s=ic*                     @   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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 Z0dd Z1ej)j*ej2d kd!dd"d# Z3d$d% Z4ej)j*ej2d&kd'dd(d) Z5d*d+ Z6ej)j*e7ed, d-dd.d/ Z8d0d1 Z9d2d3 Z:d4d5 Z;d6d7 Z<d8d9 Z=ej)j*ej2d&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   s   t dddgid  ttdgd} W d    n1 s80    Y  t| jdksTJ t| } |  }t|dkstJ |d	 d
ksJ d S )Nfont.sans-serifZcmmi10Bitstream Vera Sans)rc
sans-seriffamilyz
cmmi10.ttf   i"     )r   r   r	   r   namer   Zget_charmaplen)fontZcmap r!   s/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/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 rLt ddk sRn J dt dd  k rvt ddk s|n J t ddt ddksJ d S )Nr   Zregularboldi  normal)r
   Zscore_weightr!   r!   r!   r"   test_score_weight&   s    



r&   c                 C   s   t | d}tt| t|}t h tdd ddiddddd	ifD ]2}tf i |}tj|d
d|j|d
dksJJ qJW d    n1 s0    Y  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   )tmpdirpathcopypropfpr!   r!   r"   test_json_serialization1   s    


r1   c               	   C   s   d} t |  rt| sJ tjD ]Z}d|jv r"t|jd}|ddk}W d    n1 s`0    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)r6   ffdresr!   r!   r"   test_otfA   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_fontsL   s    r?   factor)   r3         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)r@   r    Zfont1expectedZhinted_fontr!   r!   r"   test_hinting_factorQ   s    

rL   c                  C   sH   zt dd tjD } W n ty4   td Y n0 | jdksDJ d S )Nc                 s   s"   | ]}t |jjd kr|V  qdS )zseguisbi.ttfN)r   r6   r   ).0entryr!   r!   r"   	<genexpr>g   s   z#test_utf16m_sfnt.<locals>.<genexpr>z0Couldn't find seguisbi.ttf font to test against.iX  )nextr
   r5   StopIterationpytestskipr(   )rN   r!   r!   r"   test_utf16m_sfntd   s
    rT   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   rR   rS   pltsubplotstextsavefigr   )r0   figaxfmtr!   r!   r"   test_find_ttcq   s    
re   c                  C   sr   t ddgd} tt| j}|dv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 )rU   u   Hello, 你好rV   rW   r[   r]   )r0   r   rb   rc   rd   r!   r!   r"   test_find_noto{   s    rg   c                 C   s   t | }tt t|d  W d    n1 s40    Y  tt  tt|d  W d    n1 sn0    Y  tt  tt|d  W d    n1 s0    Y  ddlm} tjt	dd |t
  W d    n1 s0    Y  d S )Nznon-existent-font-name.ttfr   )FT2Fontzpath or binary-mode file)match)r   rR   raisesFileNotFoundErrorr   strbytesmatplotlib.ft2fontrh   	TypeErrorr   )r,   Ztmp_pathrh   r!   r!   r"   test_find_invalid   s    *..rp   linuxz
Linux onlyc                    s   d t  }t fdd|D r0t  d | d}|jdd ttt	j
  |  | H}|dt|  t  t  }t fd	d|D sJ W d    n1 s0    Y  t  d S )
Nmpltest.ttfc                 3   s   | ]} |v V  qd S Nr!   rM   r    Zfont_test_filer!   r"   rO          z(test_user_fonts_linux.<locals>.<genexpr> already exists in system fontsfontsT)dirXDG_DATA_HOMEc                 3   s   | ]} |v V  qd S rs   r!   rt   ru   r!   r"   rO      rv   )r   anyrR   rS   joinensureshutilcopyfiler   __file__parentcontextZsetenvrl   r   cache_clear)r,   Zmonkeypatchrx   user_fonts_dirmr!   ru   r"   test_user_fonts_linux   s    

8r   c               
      s   d t tj  } zZt|   fddtjD \}tj| W  fddtjD }|D ]}tj| qZn, fddtjD }|D ]}tj| q0 dS )z/Smoke test that addfont() accepts pathlib.Path.rr   c                    s   g | ]}|j  r|qS r!   r6   endswithrt   ru   r!   r"   
<listcomp>   s   z(test_addfont_as_path.<locals>.<listcomp>c                    s   g | ]}|j  r|qS r!   r   rt   ru   r!   r"   r      s   N)r   r   r   r
   Zaddfontr5   remove)r-   added	to_remover    r!   ru   r"   test_addfont_as_path   s    
r   win32zWindows onlyc                     s   t jds"t jds"td d t } t fdd| D rRt  d td }t 	| t
ttj  | t } t fd	d| D sJ d S )
NZAPPVEYORZTF_BUILDznThis test should only run on CI (appveyor or azure) as the developer's font directory should remain unchanged.rr   c                 3   s   | ]} |v V  qd S rs   r!   rt   ru   r!   r"   rO      rv   z(test_user_fonts_win32.<locals>.<genexpr>rw   r   c                 3   s   | ]} |v V  qd S rs   r!   rt   ru   r!   r"   rO      rv   )osenvirongetrR   Zxfailr   r{   rS   r   makedirsr~   r.   r   r   r   )rx   r   r!   ru   r"   test_user_fonts_win32   s    

r   c                 C   s(   t  \}}|jt dd t   d S )NrZ   r[   )r^   r_   ra   r   close)_rb   rc   r!   r!   r"   _model_handler   s    r   register_at_forkz Cannot register at_fork handlersc                  C   sR   t d td} | jdd }|t td W d    n1 sD0    Y  d S )Nr   forkrA   )	processes)r   multiprocessingZget_contextZ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 s40    Y  dd | jD ddgksZJ d S )	Nzthis-font-does-not-existr   WARNINGsansc                 S   s   g | ]}|  qS r!   )
getMessage)rM   Zrecr!   r!   r"   r      rv   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   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 ]}|  qZ|D ]}|  qld S )Nr   )LOAD_NO_HINTING
   c                    s>      tdD ](}d}|jt| d d qd S )NrE   zDejaVu Sansg        )flags)waitr   r   r   rH   rl   )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)rM   r   )r   	threadingr!   r"   r     s   z#_test_threading.<locals>.<listcomp>)	r   rn   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 .)rR   Z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sRJ d S )N	font-name)r   r   z<img src="data:image/png;base64)	r   
_repr_png_r   r7   r   widthheight_repr_html_
startswith)fontentZpngZimghtmlr!   r!   r"   test_fontentry_dataclass!  s    
r   c                  C   sB   t t$ tddd} |   W d    n1 s40    Y  d S )Nz/randomr   )r6   r   )rR   rj   rk   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 q00 q0ttt|}tt	
 }t|t|ksJ t|t|ksJ ||ksJ d S )Nc                 S   s   g | ]}t d |qS )rx   )r   Z_get_data_path)rM   subdirr!   r!   r"   r   5  rv   z'test_get_font_names.<locals>.<listcomp>)ttfr   )Zfontext)r   r   rh   r   appendr   sortedlistsetr
   Zget_font_namesr   )	Z	paths_mplZ	fonts_mplZfonts_systemZ	ttf_fontsr-   r    r/   Zavailable_fontsZmpl_font_namesr!   r!   r"   test_get_font_names3  s     

r   )?ior   r   r   r   pathlibr   ZPILr   r~   r   r   r)   numpyrI   rR   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   Z
matplotlibr   r^   r   whichZ
has_fclistr#   r&   r1   r<   markZskipifr?   ZparametrizerL   rT   re   rg   rp   platformr   r   r   r   hasattrr   r   r   r   r   r   r   r!   r!   r!   r"   <module>   sT   @





