
    ^jY                        d dl 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mZmZ d dlZd dlm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"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	k7  xr  e	j^                  d
      duZ0d Z1d Z2d Z3d Z4d Z5ejl                  jo                  e
j\                  dk(  xs e0 d      d        Z8d Z9d Z:d Z;d Z<d Z=ejl                  jo                  e
j\                  dk7  xs e0 d      d        Z>d Z?ejl                  jo                  e
j\                  dk7  d      d        Z@d ZAejl                  jo                  e
j\                  d	k(  d       ejl                  jo                   eBed!       d"      ejl                  j                  d#      ejl                  j                  d$      d%                             ZDd& ZEd' ZFd( ZGd) ZHd* ZId+ ZJejl                  jo                  e
j\                  dk(  d,      d-        ZKd. ZLejl                  j                  d/g d0      d1        ZNd2 ZOd3 ZPd4 ZQd5 ZRd6 ZSd7 ZTy)8    )BytesION)Path)Image)	MagicMockpatch)findfontfindSystemFonts	FontEntryFontPathFontPropertiesfontManager	json_dump	json_loadget_fontis_opentype_cff_fontMSUserFontDirectoriesttfFontProperty_get_font_alt_names_get_fontconfig_fonts_normalize_weight)cbookft2fontpyplot
rc_contextfigure)subprocess_run_helpersubprocess_run_for_testing
emscriptenzfc-listc                     t        dd      } t        dd      }t        |       dk(  sJ t        |       dk(  sJ | j                  dk(  sJ | j                  dk(  sJ t        j                  t        d      5  d| _        d d d        t        j                  t        d      5  d| _        d d d        | dk(  sJ | t        dd      k(  sJ | | k  sJ | | k\  sJ | |k7  sJ | |k  sJ | |k  sJ || kD  sJ || k\  sJ | ddd	i}| |v sJ ||    dk(  sJ |t        dd         dk(  sJ ||vsJ d|vsJ t        dd
      |vsJ y # 1 sw Y   xY w# 1 sw Y   xY w)Nfoo{   iA  zFontPath('foo', 123)zhas no setter)matchbar      r   )r   strreprpath
face_indexpytestraisesAttributeError)fpfp2ds      m/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/matplotlib/tests/test_font_manager.pytest_font_pathr1      s   	%	B
5#
Cr7e8----77e==C	~_	= 	~_	=  ;;%%%%%8O88O8998O8998O8"99	QqA7N7R5A::XeS!"a'''a<<>>E1Q&&&+  s   6E!EE
Ec                     t        dddgi      5  t        t        dg            } d d d        t               j                  dk(  sJ t        |       }|j                         }t        |      dk(  sJ |d	   d
k(  sJ y # 1 sw Y   YxY w)Nfont.sans-serifcmmi10Bitstream Vera Sans)rcz
sans-seriffamilyz
cmmi10.ttf   i"     )r   r   r   r   namer   get_charmaplen)fontfilefontcmaps      r0   test_font_priorityrA   =   s    	,-/ 
0 C N<.ABC >,... HDDt9:C Cs   B  B	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J  J dt        j                  dd      cxk  rt        j                  dd      k  sJ  J t        j                  dd      t        j                  dd      k(  sJ y )Nr   regularbold  normal)r   score_weight     r0   test_score_weightrJ   K   s    ((I>>>>((8888((c2 7$$Xv67 8 7 8 7((9= 7$$Xv67 8 7 8 7$$Xy9$$S#./ 0 /rI   c                 X   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
      |j                  |d
      k(  r:J  	 d d d        y # 1 sw Y   y xY w)Nzfontlist.jsonignorez findfont: Font family.*not foundr8   STIXGeneralr5     r8   weightzno such font familyF)rebuild_if_missingrH   )r   r   r   warningscatch_warningsfilterwarningsr   r   )tmp_pathcopypropr-   s       r0   test_json_serializationrX   V   s     k8o56X/0D		 	 	" A*LM. 5E 568 	AD  '$'B((FMM"M?@ A @		AA A As   AB B  B)c                  2   d} t        |       j                         r:t        j                  t        j
                        5  t        |       sJ 	 d d d        t        j                  D ]  }d|j                  v st        |j                  d      5 }|j                  d      dk(  }d d d        t        j                  t        j
                        5  t        |j                        k(  sJ 	 d d d         y # 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   xY w)Nz//usr/share/fonts/opentype/freefont/FreeMono.otfotfrb   s   OTTO)r   existsr*   warnsmplMatplotlibDeprecationWarningr   r   ttflistfnameopenread)rb   ffdress       r0   test_otfrh   e   s    =EE{\\#::; 	/'...	/   <AGGaggt$ ,ggajG+,c>>? <2177;;;;< <	<	/ 	/, ,< <s#   C5DD5C>D
	D	win32zno fontconfig installed)reasonc                  4    t        t                     dkD  sJ y )Nr$   )r=   r   rH   rI   r0   test_get_fontconfig_fontsrl   r   s     $&'!+++rI   c                      	 t        d t        j                  D              } | j                  dk(  sJ y # t        $ r t        j                  d       Y y w xY w)Nc              3   d   K   | ](  }t        |j                        j                  d k(  r| * yw)zseguisbi.ttfN)r   rb   r;   ).0entrys     r0   	<genexpr>z#test_utf16m_sfnt.<locals>.<genexpr>{   s0      BuU[[)...@  Bs   .0X  z0Couldn't find seguisbi.ttf font to test against.)nextr   ra   rP   StopIterationr*   skip)rp   s    r0   test_utf16m_sfntrv   x   sZ    	# B(;(; B B ||s"""  HFGHs    4 AAc                  V   t        dg      } t        |       }t        |      j                  dk7  rt	        j
                  d       dD ]  }t        t        |g      d      }|j                  |j                  k(  sJ |j                  |j                  k7  sJ t        |      }|j                  |j                  k(  sJ |j                  |j                  k(  rJ  t        j                         \  }}|j                  ddd	| 
       dD ]  }|j                  t               |        y )NzWenQuanYi Zen Heir7   zwqy-zenhei.ttcz"Font wqy-zenhei.ttc may be missing)zWenQuanYi Zen Hei MonozWenQuanYi Zen Hei SharpFfallback_to_default      ?u   ⿓fontpropertiesrawsvgpdfpsformat)r   r   r   r;   r*   ru   r(   r)   r   rb   pltsubplotstextsavefigr   )r-   fontpathr;   subfontpathsubfontfigaxfmts           r0   test_find_ttcr      s   	 34	5B|HH~..89E <~dV<RWX8==000%%)<)<<<<;'}} 0 0000!![%;%;;;;< llnGCGGB/GC* +GIc*+rI   c                  2   t        ddg      } t        t        |             j                  }|dvrt	        j
                  d| d       t        j                         \  }}|j                  ddd| 	       d
D ]  }|j                  t               |        y )NzNoto Sans CJK SCzNoto Sans CJK JPr7   )zNotoSansCJKsc-Regular.otfzNotoSansCJK-Regular.ttcz,Noto Sans CJK SC font may be missing (found )rz   u   Hello, 你好r{   r}   r   )r   r   r   r;   r*   ru   r   r   r   r   r   )r-   r;   r   r   r   s        r0   test_find_notor      s    	 24FG	HB""DKKB4&JKllnGCGGCobG9* +GIc*+rI   c                      G d d      } t        d      }t        j                  |      }t        |      }|j                  |k(  sJ t        |      }|j                  |k(  sJ t         | |            }|j                  |k(  sJ t         | |            }|j                  |k(  sJ t        t        |d            }|j                  |k(  sJ t        || | |       | |      g      }|j                  |k(  sJ y )Nc                       e Zd Zd Zd Zy)&test_find_valid.<locals>.PathLikeClassc                     || _         y Nfilename)selfr   s     r0   __init__z/test_find_valid.<locals>.PathLikeClass.__init__   s	    $DMrI   c                     | j                   S r   r   )r   s    r0   
__fspath__z1test_find_valid.<locals>.PathLikeClass.__fspath__   s    == rI   N)__name__
__module____qualname__r   r   rH   rI   r0   PathLikeClassr      s    	%	!rI   r   DejaVu Sansr   )r   osfsencoder   rb   r   )r   file_str
file_bytesr?   s       r0   test_find_validr      s    ! ! &HX&JHD::!!!JD::###M(+,D::!!!M*-.D::###HXq)*D::!!! Xz"8,mJ.GI JD::!!!rI   c                    t        j                  t              5  t        | dz         d d d        t        j                  t              5  t        t	        | dz               d d d        t        j                  t              5  t        t        | dz               d d d        y # 1 sw Y   |xY w# 1 sw Y   OxY w# 1 sw Y   y xY w)Nznon-existent-font-name.ttf)r*   r+   FileNotFoundErrorr   r&   bytes)rU   s    r0   test_find_invalidr      s    	(	) :889: 
(	) ?X <<=>? 
(	) Ax">>?@A A: :? ?A As#   B$
B0B<$B-0B9<Clinuxz$only Linux with fontconfig installedc                 R   dt               }t        fd|D              rt        j                   d       | j	                  d      }|j                  d       t        j                  t        t              j                  dz  z  |j	                               |j                         5 }|j                  dt        |              t        j                          t               }t        fd	|D              sJ 	 d d d        t        j                          y # 1 sw Y   xY w)
Nmpltest.ttfc              3   &   K   | ]  }|v  
 y wr   rH   ro   r?   font_test_files     r0   rq   z(test_user_fonts_linux.<locals>.<genexpr>        
4d>T!
4    already exists in system fontsfontsT)dirdataXDG_DATA_HOMEc              3   &   K   | ]  }|v  
 y wr   rH   r   s     r0   rq   z(test_user_fonts_linux.<locals>.<genexpr>   s     <d>T)<r   )r	   anyr*   ru   joinensureshutilcopyfiler   __file__parentcontextsetenvr&   r   cache_clear)tmpdirmonkeypatchr   user_fonts_dirmr   s        @r0   test_user_fonts_linuxr      s     #N E

4e
44~&&EFG [[)Nd#
OODN))F2^C"''79 
			 =!	#f+.))+!<e<<<<= %%'= =s   /ADD&c                    dt        t              j                  dz  z  }	 t        j                  |       t        j
                  d      t        |d      k(  sJ | j                         5 }t        j                  t              5  |j                  dd       t        j
                  dd       d	d	d	       d	d	d	       fd
t        j                  D        \  }t        j                  j                  |       t        j                  D cg c]  }|j                  j                        r|! }}|D ]!  }t        j                  j                  |       # y	# 1 sw Y   xY w# 1 sw Y   xY wc c}w # t        j                  D cg c]  }|j                  j                        r|! nc c}w }}|D ]!  }t        j                  j                  |       # w xY w)z/Smoke test that addfont() accepts pathlib.Path.r   r   zmpltest:weight=500r   MPL_IGNORE_SYSTEM_FONTStrueFrx   Nc              3   X   K   | ]!  }|j                   j                        r| # y wr   )rb   endswithr   s     r0   rq   z'test_addfont_as_path.<locals>.<genexpr>   s*      :4ZZ((8  :s   '*)r   r   r   r   addfontr   r   r   r*   r+   
ValueErrorr   ra   removerb   r   )r   r(   r   addedr?   	to_remover   s         @r0   test_addfont_as_pathr      s   "N>  6)N:D-D!##$89XdA=NNNN  " 	Raz)B 	RHH.7  !55Q	R 	R:;#6#6 :""5)&1&9&9 =d

++N;  =	 = 	-D&&t,	-	R 	R 	R 	R=k&9&9 =d

++N;  = =	 = 	-D&&t,	-sO   A	E7 -E&*E1E&9AE7 $E2E#	E&&E/+E7 7G
$F/./GzWindows onlyc                  (   t         j                  j                  d      s4t         j                  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                  d	z  z  |       t               } t        fd
| D              sJ y )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  
 y wr   rH   r   s     r0   rq   z(test_user_fonts_win32.<locals>.<genexpr>  r   r   r   r   r   c              3   &   K   | ]  }|v  
 y wr   rH   r   s     r0   rq   z(test_user_fonts_win32.<locals>.<genexpr>  s     8$~%8r   )r   environgetr*   xfailr	   r   ru   r   makedirsr   rV   r   r   r   )r   r   r   s     @r0   test_user_fonts_win32r      s    JJNN:&"**..*D " 	# LLGH"N E

4e
44~&&EFG*1-N KK KKX%%.?P E8%8888rI   c                     t        j                         \  }}|j                  t               d       t        j                          y )Nr   r   )r   r   r   r   close)_r   r   s      r0   _model_handlerr     s,    llnGCKK	%K(IIKrI   z(emscripten does not support subprocessesregister_at_forkz Cannot register at_fork handlersz2ignore:.*multi-threaded.*fork.*:DeprecationWarningz.ignore:.*multi-threaded.*fork.*:RuntimeWarningc                      t        d       t        j                  d      } | j                  d      5 }|j	                  t         t        d             d d d        y # 1 sw Y   y xY w)Nr   forkr%   )	processes)r   multiprocessingget_contextPoolmaprange)ctxpools     r0   	test_forkr     sS     1

%
%f
-C	A	 +$q*+ + +s    AA%c                     dgt         j                  d<   | j                  d      5  t        d       d d d        | j                  D cg c]  }|j                          c}ddgk(  sJ y # 1 sw Y   9xY wc c}w )Nzthis-font-does-not-existr3   WARNINGsanszFfindfont: 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
getMessage)caplogrecs     r0   test_missing_familyr   +  sw    'A&BCLL"#		# (.7CNN7	'	B<    7s   A*A6*A3c                  n  	 dd l } ddlm dd lm	 d }|| _        d}| j                  |      	fd}t        |      D cg c]  }| j                  |d| |f       }}|D ]  }|j                           |D ]/  }|j                  d	       |j                         s&t        d
       y c c}w )Nr   )	LoadFlagsc                     t        d      )Nzerror in thread!)RuntimeError)argss    r0   loud_excepthookz(_test_threading.<locals>.loud_excepthook<  s    -..rI   
   c                     j                  d       t        d      D ]I  }j                  j                  d            }|j	                  t        |       dj                         K y )N   timeoutd   r   g        )flags)waitr   r   r   set_textr&   
NO_HINTING)njr?   r   bfms      r0   bad_ideaz!_test_threading.<locals>.bad_ideaD  sY    	qs 	CA;;r{{=9:DMM#a&#Y-A-AMB	CrI   bad_thread_)targetr;   r   	   r   zthread failed to join)	threadingmatplotlib.ft2fontr   matplotlib.font_managerfont_manager
excepthookBarrierr   Threadstartr   is_aliver   )
r  r   Nr  r  threadstr   r	  r
  s
          @@@r0   _test_threadingr  7  s    ,(/ +I
A!AC q 	QC/@tLG 
  		  8	q::<6778s   B2c                  P    t        j                  d       t        t        d       y )Nr  r   r   )r*   importorskipr   r  rH   rI   r0   test_fontcache_thread_safer  X  s    
$/26rI   c                 |    t        t        j                  ddgi t        j                  dt        |       id      }y )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&   )rU   procs     r0   test_lockfilefailurer&  ^  s>     &NN.	
 :rzz9>3x=9DrI   c                     t        d      } | j                         }t        j                  t	        |            }|j
                  dkD  sJ |j                  dkD  sJ | j                         }|j                  d      sJ y )N	font-name)r;   r   z<img src="data:image/png;base64)	r
   
_repr_png_r   rc   r   widthheight_repr_html_
startswith)fontentpngimghtmls       r0   test_fontentry_dataclassr2  t  sm    [)G



C
**WS\
"C99q==::>> D??=>>>rI   c                      t        j                  t              5  t        dd      } | j	                          d d d        y # 1 sw Y   y xY w)Nz/randomr(  )rb   r;   )r*   r+   r   r
   r,  )r.  s    r0   %test_fontentry_dataclass_invalid_pathr4    s<    	(	) )+>  s   AA
zLinux or OS onlyc                  8   dD  cg c]  } t        j                  d|        }} t        |d      }t        d      }t               }||z   D ]  }	 t	        j
                  |      }t        |      }|j                  |j                         t        d|j                        D ]?  }t	        j
                  ||      }t        |      }|j                  |j                         A  |t        t        j                               k  sJ y c c} w # t        $ r Y w xY w)N)ttfr   r6  )fontextr$   )r)   )r   _get_data_pathr	   setr   FT2Fontr   addr;   r   	num_faces	Exceptionr   get_font_names)	subdir	paths_mpl	fonts_mplfonts_system	ttf_fontsr(   r?   rW   r)   s	            r0   test_get_font_namesrD    s    ELM6%%gv6MIM	59I"51LIL( 
		??4(D"4(DMM$))$#At~~6 )
t
C&t,dii()
 K6689999% N  		s   DBD	DDc           
         d}d}g |ddj                  d      g |ddj                  d      g |dd	j                  d      g |dd
j                  d      i}t               }||j                  _        t	        |d      dgk(  sJ t	        |d      dgk(  sJ g |ddj                  d      g |ddj                  d      g |ddj                  d      i}t               }||j                  _        t	        |d      dgk(  sJ g |ddj                  d      g |ddj                  d      i}t               }||j                  _        t	        |d      g k(  sJ t               }	t
        |	j                  _        t	        |	d      g k(  sJ t        | dz        }
t        |
dddddd      }t        d|      5  t        d|      5  t        j                  j                  t        j                        }g |_        g |_        t               |_        t               |j                  _        |j#                  |
       ddd       ddd       j                  D cg c]  }|j$                   }}|ddgk(  sJ |j                  d   }|j&                  dk(  sJ |j(                  |j(                  k(  sJ |j*                  |j*                  k(  sJ y# 1 sw Y   xY w# 1 sw Y   xY wc c}w )aM  
    Fonts that advertise different family names across platforms or name IDs
    should be registered under all of those names so users can address the font
    by any of them.

    Two real-world patterns are covered:

    - **MS platform ID 1 differs from Mac platform ID 1** (e.g. Ubuntu Light):
      FreeType returns the Mac ID 1 value as ``family_name``; the MS ID 1
      value ("Ubuntu Light") is an equally valid name that users expect to work.
    - **Name ID 16 (Typographic Family) differs from ID 1** (older fonts):
      some fonts store a broader family name in ID 16.
    )r$   r   r      r$   i	  r$   Test Familyzlatin-1Test Family Light	utf-16-ber%   LightRegular)rI  rE   )rH  ,     zfake.ttfrF   rM  scalable)rb   r;   stylevariantrP   stretchsizez'matplotlib.font_manager.ft2font.FT2Font)return_valuez'matplotlib.font_manager.ttfFontPropertyNrE   )encoder   get_sfntrT  r   r   side_effectr&   r
   r   fm_modFontManager__new__ra   afmlist_findfont_cachedr   r   r;   rP   rP  rb   )rU   mac_keyms_keyubuntu_style_sfnt	fake_font	id16_sfntfake_font_id16	same_sfntfake_font_samefake_font_no_sfnt	fake_pathprimary_entryfm_instanceenames	alt_entrys                   r0   test_addfont_alternative_namesrl    s<    GF 	'1}++I6&1*11+>'1w~~i0&1y''4	 I&7I#y-8=W<XXXXy*=>C    	'1,,Y7&1,,[9&2+22;?I
 [N+4N(
$	%& & & 	'1}++I6&1}++K8I [N+4N(~}=CCC "-7*0-@BFFFHz)*IIM$,h%((MM 
8%
' 	'	8)
+	' ((001C1CD  '0{$3<;$$0I&	' 	' )001QVV1E1]$78888##A&Is"""??m11111??m11111!	' 	' 	' 	' 2s+   K(A5K	K('K4K%	!K((K1zsubfam,expected))Thinr  )
ExtraLight   )
UltraLightro  )	DemiLight^  )	SemiLightrr  )rK  rM  )Booki|  )rL  rE   )NormalrE   )Medium  )DemiBoldrr   )Demirr   )SemiBoldrr   )	ExtraBold   )	SuperBoldr|  )	UltraBoldr|  )BoldrN   )
UltraBlack  )
SuperBlackr  )
ExtraBlackr  )Ultrar  )Black  )Heavyr  ) rE   c                     d}t               }g |ddj                  d      g |d| j                  d      i|j                  _        t	        |d      }|d|fgk(  sJ y)zD_get_font_alt_names derives weight from the paired subfamily string.rF  r$   z
Family AltrJ  r%   FamilyN)r   rU  rV  rT  r   )subfamexpectedr^  r`  results        r0   #test_alt_name_weight_from_subfamilyr    sr    8 FI&!l))+6&!fmmK0'I# !H5F|X.////rI   c                       G d d      fd}  |         t        j                         D ]$  }t        |      st        j                  d       & y )Nc                       e Zd Zy)/test_donot_cache_tracebacks.<locals>.SomeObjectN)r   r   r   rH   rI   r0   
SomeObjectr    s    rI   r  c                  f           } t        j                         }|j                         }|j                  dddd       t	               5 }t        j                         5  t        j                  d       |j                  |d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nrz   aardvarkdoesnotexistr7   rL   r~   r   )	mfigureFigurer   r   r   rR   rS   rT   r   )xr   r   outr  s       r0   innerz*test_donot_cache_tracebacks.<locals>.inner  s    Lnn\\^RN;Y 	/#((* /''1C./	/ 	// /	/ 	/s$   B'!)B
B'B$	 B''B0z#object from inner stack still alive)gcget_objects
isinstancer*   fail)r  objr  s     @r0   test_donot_cache_tracebacksr    sF     / 
G~~ ?c:&KK=>?rI   c                     t        j                  t        j                        5  t	        dd       ddd       t        j                  t        j                        5  t	        dd       ddd       t        j                  t        j                        5  t	        dg       ddd       t	        dd       t	        d       t	        d       t	        d       t	        d       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w)	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   )rS  )r8   rP  r7   z"serif-24:style=oblique:weight=bold)r*   r^   r_   r`   r   rH   rI   r0   $test_fontproperties_init_deprecationr  .  s     
c66	7 *w)* 
c66	7 )wR() 
c66	7 "y!"
 '2'"778 >?7* *) )" "s#   C&C2C>&C/2C;>Dc                  V   t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d	      dk(  sJ t        d
      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        j                  t              5  t        d       d d d        y # 1 sw Y   y xY w)NrM  
ultralightr  lightro  rF   rE   rC   bookmediumrw  romansemiboldrr   demibolddemirD   rN   heavyr|  z
extra boldblackr  invalid)r   r*   r+   KeyErrorrH   rI   r0   test_normalize_weightsr  U  sH   S!S(((\*c111W%,,,X&#---Y'3...V$+++X&#---W%,,,Z(C///Z(C///V$+++V$+++W%,,,\*c111W%,,,	x	  %)$% % %s   
DD(c                     t        t        dgd             | j                  D cg c]  }|j                   }}d|v sJ y c c}w )Nr   i  rO   z8findfont: Failed to find font weight 750, now using 700.)r   r   r   message)r   r   logss      r0   test_font_match_warningr  i  sA    ^M?3?@#)>>2CCKK2D2EMMM 3s   Ac                      t               } t        |       j                  d      sJ | j                  d       t        |       j                  d      sJ y )NDejaVuSans.ttfrD   DejaVuSans-Bold.ttf)r   r   r   
set_weight)r-   s    r0   ,test_mutable_fontproperty_cache_invalidationr  o  sH    		BB<  !1222MM&B<  !6777rI   c                      dt         j                  d<   t        d      j                  d      sJ dt         j                  d<   t        d      j                  d      sJ y )NrF   zfont.weightr   r  rD   r  )r_   r   r   r   rH   rI   r0   ,test_fontproperty_default_cache_invalidationr  v  sR    "*CLLM"++,<==="(CLLM"++,ABBBrI   )Uior   r  r   r   pathlibr   PILr   r   r#  rR   r*   unittest.mockr   r   
matplotlibr_   r  r  rX  r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  matplotlib.testingr   r   platformwhich
has_fclistr1   rA   rJ   rX   rh   markskipifrl   rv   r   r   r   r   r   r   r   r   hasattrrT   r   r   r  r  r&  r2  r4  rD  rl  parametrizer  r  r  r  r  r  r  rH   rI   r0   <module>r     s    	  	    
   *  (. . . . .
 T S P \\\)Qlfll9.ET.Q
'@0A
< CLLG+=:~4  6,6,
#+&	+"8	A CLLG+=:~A  C(C(2-( CLLG+NC9 D96 CLLL0E  G$677=  ? PQLM+ N R?G+	8B7,	? CLLG+4FG: H:,R2j * - 4	054	0?,$@N%(N8CrI   