rL i87ddlmZmZddlZddlZddlZddlmZddlm Z ddl Z ddl Z ddl Z ddl ZddlZddlZddlmZmZmZmZmZmZmZmZmZmZmZmZddlmZm Z m!Z"m#Z#m$Z%ddl&m'Z'm(Z(e jRdduZ*d Z+d Z,d Z-d Z.ej^jae jbd k(xse* ddZ2ej^jgdgddZ4dZ5dZ6dZ7dZ8ej^jae jbdk7xse* ddZ9dZ:ej^jae jbd k7ddZ;dZd"Z?d#Z@d$ZAd%ZBd&ZCd'ZDej^jae jbd k(d(d)ZEd*ZFd+ZGy),)BytesIOStringION)Path)Image) findfontfindSystemFonts FontEntryFontProperties fontManager json_dump json_loadget_fontis_opentype_cff_fontMSUserFontDirectories_get_fontconfig_fontsttfFontProperty)cbookft2fontpyplot rc_contextfigure)subprocess_run_helpersubprocess_run_for_testingzfc-listctdddgi5ttdg}dddtjdk(sJt |}|j }t|dk(sJ|d d k(sJy#1swYYxYw) Nfont.sans-serifcmmi10Bitstream Vera Sans)rc sans-seriffamilyz cmmi10.ttfi")rrr rnamer get_charmaplen)fontfilefontcmaps h/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/matplotlib/tests/test_font_manager.pytest_font_priorityr+s   , -/ 0CN<.ABC >  , .. . H D    D t9   :  CCs BB cdtjddk(sJdtjddk(sJdtjddcxkrtjddksJJdtjddcxkrtjddksJJtjddtjddk(sJy)Nrregularboldinormal)r score_weightr*test_score_weightr3(s ((I> >> > ((8 88 8 ((c2 7  $ $Xv 6 78 78 7 ((9= 7  $ $Xv 6 78 78 7  $ $Xy 9  $ $S# . /0 /r2cXtt|dz t|dz }tj5tj ddddiddddd ifD]:}t d i|}tj|d |j|d k(r:J dddy#1swYyxYw) Nz fontlist.jsonignorez findfont: Font family.*not foundr! STIXGeneralri)r!weightzno such font familyF)rebuild_if_missingr1)r r r warningscatch_warningsfilterwarningsr r)tmp_pathcopypropfps r*test_json_serializationr@3sk8o56 X/ 0D  "A*LM . 5E 568 AD '$'B((FMM"M?@ A@  AAAAsAB B  B)cNd}t|jr t|sJtjD]^}d|j vst |j d5}|jddk(}dddt|j k(r^Jy#1swY&xYw)Nz//usr/share/fonts/opentype/freefont/FreeMono.otfotfrbsOTTO)rexistsrr ttflistfnameopenread)rGffdress r*test_otfrMBs =E E{#E***  8 AGG aggt$ ,ggajG+ ,.qww77 77 8 , ,s !BB$ win32zno fontconfig installed)reasonc4ttdkDsJy)N)r&rr1r2r*test_get_fontconfig_fontsrRMs $& '! ++ +r2factor)rDcttdg}t|d}|j|j dd|j d|j }t||}|j|j dd|j dtjj|j |d y) Nrr rQ)hinting_factor dabcg?)rtol) rr rclearset_sizeset_textget_width_heightnptestingassert_allclose)rSr(font1expected hinted_fonts r*test_hinting_factorrgSs N<.9 :D T! ,E KKM NN2s NN5%%'H47KS!JJ{;;=x$')r2c tdtjD}|jdk(sJy#t$rt j dYywxYw)Nc3dK|](}t|jjdk(r|*yw)z seguisbi.ttfN)rrGr$).0entrys r* z#test_utf16m_sfnt..is0BuU[[)...@Bs.0iXz0Couldn't find seguisbi.ttf font to test against.)nextr rFr7 StopIterationpytestskip)rks r*test_utf16m_sfntrqfsZ #B (;(;BB||s""" H FGHs 4AAc&tdg}tt|jdk7rt j dt j\}}|jddd|dD]}|jt| y) NzWenQuanYi Zen Heir zwqy-zenhei.ttcz"Font wqy-zenhei.ttc may be missing?u⿓fontpropertiesrawsvgpdfpsformat r rrr$rorppltsubplotstextsavefigr)r?figaxfmts r* test_find_ttcrssz  34 5B HRL"22 89llnGCGGB/GC*+ GIc *+r2c2tddg}tt|j}|dvrt j d|dt j\}}|jddd| d D]}|jt| y) NzNoto Sans CJK SCzNoto Sans CJK JPr )zNotoSansCJKsc-Regular.otfzNotoSansCJK-Regular.ttcz,Noto Sans CJK SC font may be missing (found )rsu Hello, 你好rtrvr{r})r?r$rrrs r*test_find_notor}s  24FG HB   " "D KK B4&JKllnGCGGCobG9*+ GIc *+r2ctjt5t|dz dddtjt5tt |dz dddtjt5tt |dz dddddlm}tjtd5|tdddy#1swYxYw#1swYxYw#1swY\xYw#1swYyxYw)Nznon-existent-font-name.ttfr)FT2Fontzfont file or a binary-mode file)match) roraisesFileNotFoundErrorrstrbytesmatplotlib.ft2fontr TypeErrorr)r<rs r*test_find_invalidrs ( ):889: ( )?X <<=>? ( )Ax">>?@A+ y(I J ::??AA s/C C*C6DC'*C36C?D linuxz$only Linux with fontconfig installedcLdt}tfd|Drtjd|j d}|j dt jttjz |j |j5}|jdt|tjt}tfd|DsJ dddtjy#1swYxYw) N mpltest.ttfc3&K|]}|v ywNr1rjr(font_test_files r*rlz(test_user_fonts_linux.. 4d>T ! 4 already exists in system fontsfontsT)dir XDG_DATA_HOMEc3&K|]}|v ywrr1rs r*rlz(test_user_fonts_linux..sT).s*:4ZZ((8:s'*N) rrrr addfontrFremoverGr)pathaddedr( to_removers @r*test_addfont_as_pathrs"N > > 1D -D!:;#6#6:""5)&1&9&9=d ++N;= = -D    & &t , -=k&9&9=d ++N;== = -D    & &t , -sAC$CD:'$D  /D:z Windows onlyc"tjjds4tjjdstjdtjddt }t fd|Drtjdtd}tj|tjttjz |t }t fd |DsJy) NAPPVEYORTF_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 workrc3&K|]}|v ywrr1rs r*rlz(test_user_fonts_win32..rrrrc3&K|]}|v ywrr1rs r*rlz(test_user_fonts_win32..s8$~%8r)osenvirongetroxfailrrrprmakedirsrr=rrr)rrrs @r*test_user_fonts_win32rs JJNN: &"**..*D " # LLGH"N  E 4e 44 ~&&EFG*1-NKK KKX%%6G  E 8%8 88 8r2ctj\}}|jtdtjy)Nryr{)r~rrrclose)_rrs r*_model_handlerrs,llnGCKK %K(IIKr2register_at_forkz Cannot register at_fork handlersctdtjd}|jd5}|j tt ddddy#1swYyxYw)NrforkrT) processes)rmultiprocessing get_contextPoolmaprange)ctxpools r* test_forkrsS1  % %f -C A +$ q*+++s AA%cdgtjd<|jd5tdddd|jDcgc]}|j c}ddgk(sJy#1swY9xYwcc}w)Nzthis-font-does-not-existrWARNINGsanszFfindfont: 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~rcParamsat_levelrrecords getMessage)caplogrecs r*test_missing_familyrsw'A&BCLL"#  #(. 7CNN  7 ' B<   7s A*A6*A3cn ddl}ddlmddlm d}||_d}|j | fd}t|Dcgc]}|j|d||f}}|D]}|j|D]/}|jd |js&td ycc}w) Nr) LoadFlagsctd)Nzerror in thread!) RuntimeError)argss r*loud_excepthookz(_test_threading..loud_excepthooks-..r2 cjdtdD]I}jjd}|j t |dj Ky)NtimeoutrZz DejaVu Sansg)flags)waitrrrr_r NO_HINTING)njr(rbfms r*bad_ideaz!_test_threading..bad_idea sY qs CA;;r{{=9:D MM#a&#Y-A-AM B Cr2 bad_thread_)targetr$r rzthread failed to join) threadingrrmatplotlib.font_manager font_manager excepthookBarrierrThreadstartris_aliver) rrNrrthreadstrrrs @@@r*_test_threadingrs,(/+I A!ACq  QC/@tLG   8 q ::<67 78sB2cPtjdttdy)Nrrr)ro importorskiprrr1r2r*test_fontcache_thread_safers  $/26r2c|ttjddgitjdt |id}y)Nz-czlimport matplotlib;import os;p = matplotlib.get_cachedir();os.chmod(p, 0o555);import matplotlib.font_manager; MPLCONFIGDIRT)envcheck)rsys executablerrr)r<procs r*test_lockfilefailurer #s> & NN  .  :rzz 9>3x= 9 Dr2ctd}|j}tjt |}|j dkDsJ|j dkDsJ|j}|jdsJy)N font-name)r$rz>    D ??= >> >r2ctjt5tdd}|j dddy#1swYyxYw)Nz/randomr )rGr$)rorrr r)rs r*%test_fontentry_dataclass_invalid_pathrEs< ( ))+>s AA zLinux or OS onlycdDcgc]}tjd|}}t|d}td}g}||zD]>} tj|}t |}|j |j@ttt|}ttj} t|t| k(sJt|t| k(sJ|| k(sJycc}w#t$rYwxYw)N)ttfrr)fontext)r_get_data_pathrrrrappendr$ Exceptionsortedlistsetr get_font_namesr&) subdir paths_mpl fonts_mpl fonts_system ttf_fontsrr(r>available_fontsmpl_font_namess r*test_get_font_namesr*KsELM6%%gv6MIM 59I"51LIL( ??4(D"4(D   TYY ' T#i.12OK6689N  3~#6 66 6  3~#6 66 6 n ,, ,N   sC9;C>> D  D cGddfd}|tjD]$}t|stjd&y)Nc eZdZy)/test_donot_cache_tracebacks..SomeObjectN)__name__ __module__ __qualname__r1r2r* SomeObjectr-as r2r1cf}tj}|j}|jddddt 5}t j 5t jd|j|dddddddy#1swYxYw#1swYyxYw)Nrsaardvark doesnotexistr r5rwr{) mfigureFigurerrrr9r:r;r)xrroutr1s r*innerz*test_donot_cache_tracebacks..innerds Lnn \\^ RN; Y /#((* /''1 C . / / / / / / /s$ B'!)B B'B$ B''B0z#object from inner stack still alive)gc get_objects isinstancerofail)r9objr1s @r*test_donot_cache_tracebacksr?_sF  / G~~? c: & KK= >?r2ctjtj5t dddddtjtj5t dddddtjtj5t dgdddt ddt dt dt dt dy#1swYxYw#1swYxYw#1swY]xYw) aS Test the deprecated API of FontProperties.__init__. The deprecation does not change behavior, it only adds a deprecation warning via a decorator. Therefore, the purpose of this test is limited to check which calls do and do not issue deprecation warnings. Behavior is still tested via the existing regular tests. TimesitalicNr)size)r!styler z"serif-24:style=oblique:weight=bold)rowarnsmplMatplotlibDeprecationWarningr r1r2r*$test_fontproperties_init_deprecationrHus c66 7*w)* c66 7)wR() c66 7"y!" '2'"778>?7**))""s# C&C2 C>&C/2C;>D)Hiorrr:rrpathlibrPILrrrr9numpyraro matplotlibrFrrrr r r r r rrrrrrrrr~rrr5matplotlib.testingrrwhich has_fclistr+r3r@rMmarkskipifplatformrR parametrizergrqrrrrrrrhasattrrrrrr rrr*r?rHr1r2r*rVs    CCCCTSPV\\) $D 0  0 A8CLLG+=:~46,6,<0)1)$ #+ +"CLLG+=:~AC(C(2 - CLLG+NC9D96 $677=?+?+ 8B7 , ? CLLG+4FG-H-&?,$@r2