
    P/Ph87                        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 d dlmZm Z m!Z"m#Z#m$Z% d dl&m'Z'm(Z(  e
j)        d          duZ*d	 Z+d
 Z,d Z-d Z.ej/        0                    ej1        dk    pe* d          d             Z2ej/        3                    dg d          d             Z4d Z5d Z6d Z7d Z8ej/        0                    ej1        dk    pe* d          d             Z9d Z:ej/        0                    ej1        dk    d          d             Z;d Z<ej/        0                     e=ed           d           d!             Z>d" Z?d# Z@d$ ZAd% ZBd& ZCd' ZDej/        0                    ej1        dk    d(          d)             ZEd* ZFd+ ZGdS ),    )BytesIOStringION)Path)Image)findfontfindSystemFonts	FontEntryFontPropertiesfontManager	json_dump	json_loadget_fontis_opentype_cff_fontMSUserFontDirectories_get_fontconfig_fontsttfFontProperty)cbookft2fontpyplot
rc_contextfigure)subprocess_run_helpersubprocess_run_for_testingzfc-listc                  Z   t          dddgi          5  t          t          dg                    } d d d            n# 1 swxY w Y   t          |           j        dk    sJ t          |           }|                                }t          |          dk    sJ |d	         d
k    sJ 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)fontfilefontcmaps      b/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/matplotlib/tests/test_font_manager.pytest_font_priorityr+      s   	,-/ 
0 
0 
0 C C N<.AAABBC C C C C C C C C C C C C C C >>,.... HDDt99:s   A  AAc                     dt          j        dd          k    sJ dt          j        dd          k    sJ dt          j        dd          cxk     rt          j        dd          k     sn J dt          j        dd          cxk     rt          j        dd          k     sn J t          j        dd          t          j        dd          k    sJ d S )Nr   regularboldi  normal)r   score_weight     r*   test_score_weightr3   (   s$   (I>>>>>>(888888(c22 7 7 7 7$Xv667 7 7 7 7 7(9== 7 7 7 7$Xv667 7 7 7 7 7$Xy99$S#../ / / / / /r2   c                 v   t          t          | dz             t          | dz            }t          j                    5  t          j        dd           ddiddddd	ifD ]?}t          di |}t          j        |d
          |                    |d
          k    sJ @	 d d d            d S # 1 swxY w Y   d S )Nzfontlist.jsonignorez findfont: Font family.*not foundr!   STIXGeneralr   i  )r!   weightzno such font familyF)rebuild_if_missingr1   )r   r   r   warningscatch_warningsfilterwarningsr
   r   )tmp_pathcopypropfps       r*   test_json_serializationr@   3   sT    k8o5666X/00D		 	"	" A A*LMMM. 5EE 568 	A 	AD  ''$''B(FFFMM"M??@ @ @ @ @		AA A A A A A A A A A A A A A A A A As   A"B..B25B2c                  ^   d} t          |                                           rt          |           sJ t          j        D ]k}d|j        v r`t          |j        d          5 }|                    d          dk    }d d d            n# 1 swxY w Y   |t          |j                  k    sJ ld S )Nz//usr/share/fonts/opentype/freefont/FreeMono.otfotfrb   s   OTTO)r   existsr   r   ttflistfnameopenread)rG   ffdress       r*   test_otfrM   B   s    =EE{{ +#E*****  8 8AGagt$$ ,ggajjG+, , , , , , , , , , , , , , ,.qw777777	8 8s   !BB	B	win32zno fontconfig installed)reasonc                  H    t          t                                dk    sJ d S )N   )r&   r   r1   r2   r*   test_get_fontconfig_fontsrR   M   s*     $&&''!++++++r2   factor)   rD         c                    t          t          dg                    }t          |d          }|                                 |                    dd           |                    d           |                                }t          ||           }|                                 |                    dd           |                    d           t          j        	                    |                                |d	           d S )
Nr   r    rQ   )hinting_factor   d   abcg?)rtol)
r   r
   r   clearset_sizeset_textget_width_heightnptestingassert_allclose)rS   r(   font1expectedhinted_fonts        r*   test_hinting_factorrg   S   s    N<.999::DT!,,,E	KKMMM	NN2s	NN5%%''H4777KS!!!J{;;==x$'  ) ) ) ) )r2   c                      	 t          d t          j        D                       } | j        dk    sJ d S # t          $ r t          j        d           Y d S w xY w)Nc              3   T   K   | ]#}t          |j                  j        d k    |V  $dS )zseguisbi.ttfN)r   rG   r$   ).0entrys     r*   	<genexpr>z#test_utf16m_sfnt.<locals>.<genexpr>i   sI       B BuU[))..@@ @@@@B Br2   iX  z0Couldn't find seguisbi.ttf font to test against.)nextr   rF   r7   StopIterationpytestskip)rk   s    r*   test_utf16m_sfntrq   f   s    	# B B(; B B B B B |s""""""  H H HFGGGGGGHs   #4 AAc                  H   t          dg          } t          t          |                     j        dk    rt	          j        d           t          j                    \  }}|                    ddd|            dD ]%}|	                    t                      |	           &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$   ro   rp   pltsubplotstextsavefigr   )r?   figaxfmts       r*   test_find_ttcr   s   s    	 34	5	5	5BHRLL"2228999lnnGCGGB/GCCC* + +GIIc****+ +r2   c                  R   t          ddg          } t          t          |                     j        }|dvrt	          j        d| d           t          j                    \  }}|                    ddd| 	           d
D ]%}|	                    t                      |           &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 )rs   u   Hello, 你好rt   rv   r{   r}   )r?   r$   r   r   r   s        r*   test_find_notor   }   s    	 24FG	H	H	HB"DKKKJ4JJJKKKlnnGCGGCobG999* + +GIIc****+ +r2   c                 n   t          j        t                    5  t          | dz             d d d            n# 1 swxY w Y   t          j        t                    5  t          t	          | dz                       d d d            n# 1 swxY w Y   t          j        t                    5  t          t          | dz                       d d d            n# 1 swxY w Y   ddlm} t          j        t          d          5   |t                                 d d d            d S # 1 swxY w Y   d S )Nznon-existent-font-name.ttfr   )FT2Fontzfont file or a binary-mode file)match)
ro   raisesFileNotFoundErrorr   strbytesmatplotlib.ft2fontr   	TypeErrorr   )r<   r   s     r*   test_find_invalidr      s7   	(	)	) : :88999: : : : : : : : : : : : : : : 
(	)	) ? ?X <<==>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
(	)	) A Ax">>??@@@A A A A A A A A A A A A A A A +*****	y(I	J	J	J  

                 sC   9= = B		BB- CC CD**D.1D.linuxz$only Linux with fontconfig installedc                    dt                      }t          fd|D                       rt          j         d           |                     d          }|                    d           t          j        t          t                    j
        z  |                                         |                                5 }|                    dt          |                      t          j                     t                      }t          fd|D                       sJ 	 d d d            n# 1 swxY w Y   t          j                     d S )	Nmpltest.ttfc              3       K   | ]}|v V  	d S Nr1   rj   r(   font_test_files     r*   rl   z(test_user_fonts_linux.<locals>.<genexpr>   (      
4
4d>T!
4
4
4
4
4
4r2    already exists in system fontsfontsT)dirXDG_DATA_HOMEc              3       K   | ]}|v V  	d S r   r1   r   s     r*   rl   z(test_user_fonts_linux.<locals>.<genexpr>   s(      <<d>T)<<<<<<r2   )r   anyro   rp   joinensureshutilcopyfiler   __file__parentcontextsetenvr   r   cache_clear)tmpdirmonkeypatchr   user_fonts_dirmr   s        @r*   test_user_fonts_linuxr      s    #N E

4
4
4
4e
4
4
444 H~FFFGGG [[))Nd###
ODNN)N:"''779 9 9 
				 =!	#f++...)+++!!<<<<e<<<<<<<<<= = = = = = = = = = = = = = = %'''''s   A"D44D8;D8c                     dt          t                    j        z  } 	 t          j        |            fdt          j        D             \  }t          j                            |           fdt          j        D             }|D ]!}t          j                            |           "dS # fdt          j        D             }|D ]!}t          j                            |           "w xY w)z/Smoke test that addfont() accepts pathlib.Path.r   c              3   P   K   | ] }|j                                       |V  !d S r   rG   endswithr   s     r*   rl   z'test_addfont_as_path.<locals>.<genexpr>   sK       : :4Z((88:$ : : : : : :r2   c                 H    g | ]}|j                                       |S r1   r   r   s     r*   
<listcomp>z(test_addfont_as_path.<locals>.<listcomp>   s=     = = =d
++N;;=T = = =r2   N)r   r   r   r   addfontrF   remove)pathadded	to_remover(   r   s       @r*   test_addfont_as_pathr      s-   "N>> >1D	-D!!!: : : :;#6 : : :""5)))= = = =k&9 = = =	 	- 	-D&&t,,,,	- 	-= = = =k&9 = = =	 	- 	-D&&t,,,,	-s   AB, ,>C*zWindows onlyc                  N   t           j                            d          s3t           j                            d          st          j        d           t          j        d           dt                      } t          fd| D                       rt          j         d           t          d         }t          j	        |           t          j        t          t                    j        z  |           t                      } t          fd	| D                       sJ 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       K   | ]}|v V  	d S r   r1   r   s     r*   rl   z(test_user_fonts_win32.<locals>.<genexpr>   r   r2   r   r   c              3       K   | ]}|v V  	d S r   r1   r   s     r*   rl   z(test_user_fonts_win32.<locals>.<genexpr>   s(      88$~%888888r2   )osenvirongetro   xfailr   r   rp   r   makedirsr   r=   r   r   r   )r   r   r   s     @r*   test_user_fonts_win32r      s%   JNN:&& #"*..*D*D # " 	# 	# 	# LGHHH"N E

4
4
4
4e
4
4
444 H~FFFGGG*1-N K KX%6GGG E8888%8888888888r2   c                     t          j                    \  }}|                    t                      d           t          j                     d S )Nry   r{   )r~   r   r   r   close)_r   r   s      r*   _model_handlerr      s:    lnnGCKK		%K(((IKKKKKr2   register_at_forkz Cannot register at_fork handlersc                      t          d           t          j        d          } |                     d          5 }|                    t           t          d                     d d d            d S # 1 swxY w Y   d S )Nr   forkrT   )	processes)r   multiprocessingget_contextPoolmaprange)ctxpools     r*   	test_forkr      s     1

%f
-
-C	A		 +$q***+ + + + + + + + + + + + + + + + + +s   )A00A47A4c                     dgt           j        d<   |                     d          5  t          d           d d d            n# 1 swxY w Y   d | j        D             ddgk    sJ d S )Nzthis-font-does-not-existr   WARNINGsansc                 6    g | ]}|                                 S r1   )
getMessage)rj   recs     r*   r   z'test_missing_family.<locals>.<listcomp>   s"    777CNN777r2   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~   rcParamsat_levelr   records)caplogs    r*   test_missing_familyr      s    'A&BCL"#		#	#                77777	'	B<      s   AA	Ac                  f   dd l ddlm dd lm d } | _        d}                    |          fdfdt          |          D             }|D ]}|                                 |D ];}|	                    d           |
                                rt          d	          <d S )
Nr   )	LoadFlagsc                      t          d          )Nzerror in thread!)RuntimeError)argss    r*   loud_excepthookz(_test_threading.<locals>.loud_excepthook  s    -...r2   
   c                                          d           t          d          D ]T}                                        d                    }|                    t          |           dj                   Ud S )N   timeoutrZ   zDejaVu Sansg        )flags)waitr   r   r   r_   r   
NO_HINTING)njr(   r   bfms      r*   bad_ideaz!_test_threading.<locals>.bad_idea	  s{    	qs 	C 	CA;;r{{=99::DMM#a&&#Y-AMBBBB	C 	Cr2   c                 H    g | ]}                     d | |f          S )bad_thread_)targetr$   r   )Thread)rj   r   r   	threadings     r*   r   z#_test_threading.<locals>.<listcomp>  sI        	/@Q/@/@tLL  r2   	   r   zthread failed to join)r   r   r   matplotlib.font_managerfont_manager
excepthookBarrierr   startr   is_aliver   )	r   Nthreadstr   r   r   r   r   s	       @@@@@r*   _test_threadingr     s6   ,,,,,,((((((/ / / +I
A!AC C C C C C C    q  G
   					 8 8	q::<< 	86777	88 8r2   c                  Z    t          j        d           t          t          d           d S )Nr   r   r   )ro   importorskipr   r  r1   r2   r*   test_fontcache_thread_safer    s,    
$$$/2666666r2   c                 ~    t          t          j        ddgi t          j        dt          |           id          }d S )Nz-czlimport matplotlib;import os;p = matplotlib.get_cachedir();os.chmod(p, 0o555);import matplotlib.font_manager;MPLCONFIGDIRT)envcheck)r   sys
executabler   r   r   )r<   procs     r*   test_lockfilefailurer  #  sM     &N.	
 :rz9>3x==99  DDDr2   c                     t          d          } |                                 }t          j        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   rH   r   widthheight_repr_html_
startswith)fontentpngimghtmls       r*   test_fontentry_dataclassr  9  s    [)))G




C
*WS\\
"
"C9q====:>>>>  D??=>>>>>>>r2   c                      t          j        t                    5  t          dd          } |                                  d d d            d S # 1 swxY w Y   d S )Nz/randomr  )rG   r$   )ro   r   r   r	   r  )r  s    r*   %test_fontentry_dataclass_invalid_pathr  E  s    	(	)	)  )+>>>                 s   &AAAzLinux or OS onlyc                  :   d dD             } t          | d          }t          d          }g }||z   D ]P}	 t          j        |          }t          |          }|                    |j                   A# t          $ r Y Mw xY wt          t          t          |                              }t          t          j                              }t          |          t          |          k    sJ t          |          t          |          k    sJ ||k    sJ d S )Nc                 8    g | ]}t          j        d |          S )r   )r   _get_data_path)rj   subdirs     r*   r   z'test_get_font_names.<locals>.<listcomp>M  s%    MMM6%gv66MMMr2   )ttfr!  )fontext)r   r   r   r   appendr$   	Exceptionsortedlistsetr   get_font_namesr&   )		paths_mpl	fonts_mplfonts_system	ttf_fontsr   r(   r>   available_fontsmpl_font_namess	            r*   test_get_font_namesr/  K  s4   MMWMMMI	5999I"5111LIL(  	?4((D"4((DTY'''' 	 	 	D	T#i..1122OK68899N3~#6#666663~#6#66666n,,,,,,s   =A66
BBc                       G d d          fd}  |              t          j                    D ]&}t          |          rt          j        d           'd S )Nc                       e Zd ZdS )/test_donot_cache_tracebacks.<locals>.SomeObjectN)__name__
__module____qualname__r1   r2   r*   
SomeObjectr2  a  s        r2   r6  c                                  } t          j                    }|                                }|                    dddd           t	                      5 }t          j                    5  t          j        d           |                    |d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nrs   aardvarkdoesnotexistr    r5   rw   r{   )	mfigureFigurer   r   r   r9   r:   r;   r   )xr   r   outr6  s       r*   innerz*test_donot_cache_tracebacks.<locals>.innerd  s8   JLLn\\^^RN;;;YY 	/#(** / /'111C.../ / / / / / / / / / / / / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s6   B>.,B&B>&B*	*B>-B*	.B>>CCz#object from inner stack still alive)gcget_objects
isinstancero   fail)r>  objr6  s     @r*   test_donot_cache_tracebacksrD  _  s           / / / / / 
EGGG~ ? ?c:&& 	?K=>>>? ?r2   c                  J   t          j        t          j                  5  t	          dd           ddd           n# 1 swxY w Y   t          j        t          j                  5  t	          dd           ddd           n# 1 swxY w Y   t          j        t          j                  5  t	          dg           ddd           n# 1 swxY w Y   t	          dd           t	          d           t	          d           t	          d           t	          d           dS )	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.
    TimesitalicNr   )size)r!   styler    z"serif-24:style=oblique:weight=bold)ro   warnsmplMatplotlibDeprecationWarningr
   r1   r2   r*   $test_fontproperties_init_deprecationrM  u  s    
c6	7	7 * *w)))* * * * * * * * * * * * * * * 
c6	7	7 ) )wR(((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 
c6	7	7 " "y!!!" " " " " " " " " " " " " " "
 '2222'""""77888 >??????s3   <A A %BB
B,C		CC)Hior   r   r?  r   r   pathlibr   PILr   r   r  r9   numpyra   ro   
matplotlibrK  r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r~   r   r   r:  matplotlib.testingr   r   which
has_fclistr+   r3   r@   rM   markskipifplatformrR   parametrizerg   rq   r   r   r   r   r   r   r   hasattrr   r   r  r  r  r  r  r/  rD  rM  r1   r2   r*   <module>r[     sD                   				     				              



          C C C C C C C C C C C C C C C C C C C C C C C C C C C C T S S S S S S S S S S S S S P P P P P P P P V\)$$D0
  0 0 0A A A8 8 8 CLG+=:~4  6 6, ,6 6, <<<00) ) 10)$
# 
# 
#+ + +	+ 	+ 	+  " CLG+=:~A  C C( (C C(2- - -  CLG+NCC9 9 DC96   $6777=  ? ?+ +? ?+	 	 	8 8 8B7 7 7  ,	? 	? 	?   CLG+4FGG- - HG-&? ? ?,$@ $@ $@ $@ $@r2   