
    (?e-                     v   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%  e
j&        d          duZ'd Z(d	 Z)d
 Z*d Z+ej,        -                    ej.        dk    pe' d          d             Z/ej,        0                    dg d          d             Z1d Z2d Z3d Z4d Z5ej,        -                    ej.        dk    pe' d          d             Z6d Z7ej,        -                    ej.        dk    d          d             Z8d Z9ej,        -                     e:ed           d          d              Z;d! Z<d" Z=d# Z>d$ Z?d% Z@ej,        -                    ej.        dk    d&          d'             ZAd( 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ttfFontProperty)cbookft2fontpyplot
rc_contextfigurez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      Blib/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_weightr1   &   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#../ / / / / /r0   c                    t          | d          }t          t          |           t          |          }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_missingr/   )	r   r   r   r   warningscatch_warningsfilterwarningsr
   r   )tmpdirpathcopypropfps        r(   test_json_serializationr?   1   sW    ((Dk4   T??D		 	"	" 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"B88B<?B<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)rF   ffdress       r(   test_otfrL   A   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   r/   r0   r(   test_get_fontconfig_fontsrQ   L   s*     $&&''!++++++r0   factor)   rC         c                    t          t          dg                    }t          |d          }|                                 |                    dd           |                    d           |                                }t          ||           }|                                 |                    dd           |                    d           t          j        	                    |                                |d	           d S )
Nr   r   rP   )hinting_factor   d   abcg?)rtol)
r   r
   r   clearset_sizeset_textget_width_heightnptestingassert_allclose)rR   r&   font1expectedhinted_fonts        r(   test_hinting_factorrf   R   s    N<.999::DT!,,,E	KKMMM	NN2s	NN5%%''H4777KS!!!J{;;==x$'  ) ) ) ) )r0   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   rF   r"   ).0entrys     r(   	<genexpr>z#test_utf16m_sfnt.<locals>.<genexpr>h   sI       B BuU[))..@@ @@@@B Br0   iX  z0Couldn't find seguisbi.ttf font to test against.)nextr   rE   r5   StopIterationpytestskip)rj   s    r(   test_utf16m_sfntrp   e   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"   rn   ro   pltsubplotstextsavefigr   )r>   figaxfmts       r(   test_find_ttcr   r   s    	 34	5	5	5BHRLL"2228999lnnGCGGB/GCCC* + +GIIc****+ +r0   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 )rr   u   Hello, 你好rs   ru   rz   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****+ +r0   c                    t          |           }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)r   rn   raisesFileNotFoundErrorr   strbytesmatplotlib.ft2fontr   	TypeErrorr   )r:   tmp_pathr   s      r(   test_find_invalidr      sB   F||H	(	)	) : :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  

                 sG   AAA, BBB< C((C,/C,D99D= 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 Nr/   ri   r&   font_test_files     r(   rk   z(test_user_fonts_linux.<locals>.<genexpr>   (      
4
4d>T!
4
4
4
4
4
4r0    already exists in system fontsfontsT)dirXDG_DATA_HOMEc              3       K   | ]}|v V  	d S r   r/   r   s     r(   rk   z(test_user_fonts_linux.<locals>.<genexpr>   s(      <<d>T)<<<<<<r0   )r   anyrn   ro   joinensureshutilcopyfiler   __file__parentcontextsetenvr   r   cache_clear)r:   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                 H    g | ]}|j                                       |S r/   rF   endswithr   s     r(   
<listcomp>z(test_addfont_as_path.<locals>.<listcomp>   s=     : : :4Z((88:$ : : :r0   c                 H    g | ]}|j                                       |S r/   r   r   s     r(   r   z(test_addfont_as_path.<locals>.<listcomp>   s=     = = =d
++N;;=T = = =r0   N)r   r   r   r   addfontrE   remove)r;   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   r/   r   s     r(   rk   z(test_user_fonts_win32.<locals>.<genexpr>   r   r0   r   r   c              3       K   | ]}|v V  	d S r   r/   r   s     r(   rk   z(test_user_fonts_win32.<locals>.<genexpr>   s(      88$~%888888r0   )osenvirongetrn   xfailr   r   ro   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8r0   c                     t          j                    \  }}|                    t                      d           t          j                     d S )Nrx   rz   )r}   r~   r   r   close)_r   r   s      r(   _model_handlerr      s:    lnnGCKK		%K(((IKKKKKr0   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   forkrS   )	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 r/   )
getMessage)ri   recs     r(   r   z'test_missing_family.<locals>.<listcomp>   s"    777CNN777r0   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                     dd l ddlm dd lm d}                     |           fdfdt          |           D             }|D ]}|                                 |D ]}|                                 d S )Nr   )LOAD_NO_HINTING
   c                                                       t          d          D ]O}                                        d                    }|                    t          |           d           Pd S )NrY   zDejaVu Sansg        )flags)waitr   r   r   r^   r   )njr&   r   bfms      r(   bad_ideaz!_test_threading.<locals>.bad_idea  sm    	s 	> 	>A;;r{{=99::DMM#a&&#_M====	> 	>r0   c                 H    g | ]}                     d | |f          S )bad_thread_)targetr"   args)Thread)ri   r   r   	threadings     r(   r   z#_test_threading.<locals>.<listcomp>
  sI        	/@Q/@/@tLL  r0   )	r   r   r   matplotlib.font_managerfont_managerBarrierr   startr   )Nthreadstr   r   r   r   r   s      @@@@@r(   _test_threadingr      s    222222((((((
A!A> > > > > > >    q  G
   					  	 r0   c                      t          j        d           dd l} t          j        t
          j        d|                     t                    dz   g          }|j	        rt          j
        d|j	         d           d S d S )Nr   r   z-cz
_test_threading()z2The subprocess returned with non-zero exit status .)rn   importorskipinspect
subprocessrunsys
executable	getsourcer   
returncodefail)r   procs     r(   test_fontcache_thread_safer    s    
$$$NNN>				?	+	+.C	C	E D  + ** * * 	+ 	+ 	+ 	+ 	++ +r0   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   rG   r   widthheight_repr_html_
startswith)fontentpngimghtmls       r(   test_fontentry_dataclassr  #  s    [)))G




C
*WS\\
"
"C9q====:>>>>  D??=>>>>>>>r0   c                      t          j        t                    5  t          dd          } |                                  d d d            d S # 1 swxY w Y   d S )Nz/randomr  )rF   r"   )rn   r   r   r	   r
  )r  s    r(   %test_fontentry_dataclass_invalid_pathr  /  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)ri   subdirs     r(   r   z'test_get_font_names.<locals>.<listcomp>7  s%    MMM6%gv66MMMr0   )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%  5  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__r/   r0   r(   
SomeObjectr(  K  s        r0   r,  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 )Nrr   aardvarkdoesnotexistr   r3   rv   rz   )	mfigureFigurer~   r   r   r7   r8   r9   r   )xr   r   outr,  s       r(   innerz*test_donot_cache_tracebacks.<locals>.innerN  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
isinstancern   r  )r4  objr,  s     @r(   test_donot_cache_tracebacksr9  I  s           / / / / / 
EGGG~ ? ?c:&& 	?K=>>>? ?r0   )Cior   r   r5  r   r   pathlibr   PILr   r   r   r   r7   numpyr`   rn   r   r   r   r	   r
   r   r   r   r   r   r   r   r   
matplotlibr   r   r   r}   r   r   r0  which
has_fclistr)   r1   r?   rL   markskipifplatformrQ   parametrizerf   rp   r   r   r   r   r   r   r   hasattrr   r   r   r  r  r  r%  r9  r/   r0   r(   <module>rF     s                   				     				                  



      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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=  ? ?+ +? ?+	 	 	  4
+ 
+ 
+	? 	? 	?   CLG+4FGG- - HG-&? ? ? ? ?r0   