
    g87                        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
jR                  d      duZ*d	 Z+d
 Z,d Z-d Z.ej^                  ja                  ejb                  dk(  xs e* d      d        Z2ej^                  jg                  dg d      d        Z4d Z5d Z6d Z7d Z8ej^                  ja                  ejb                  dk7  xs e* d      d        Z9d Z:ej^                  ja                  ejb                  dk7  d      d        Z;d Z<ej^                  ja                   e=ed       d       d!        Z>d" Z?d# Z@d$ ZAd% ZBd& ZCd' ZDej^                  ja                  ejb                  dk(  d(      d)        ZEd* ZFd+ ZGy),    )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                     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)rc
sans-seriffamilyz
cmmi10.ttf   i"     )r   r   r
   r   namer   get_charmaplen)fontfilefontcmaps      _/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/tests/test_font_manager.pytest_font_priorityr+      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boldi  normal)r   score_weight     r*   test_score_weightr3   (   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 /r2   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 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   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                  N   d} t        |       j                         rt        |       sJ t        j                  D ]^  }d|j
                  v st        |j
                  d      5 }|j                  d      dk(  }d d d        t        |j
                        k(  r^J  y # 1 sw Y   &xY w)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AGGaggt$ ,ggajG+,.qww7777	8, ,s   !BB$	win32zno fontconfig installed)reasonc                  4    t        t                     dkD  sJ y )N   )r&   r   r1   r2   r*   test_get_fontconfig_fontsrR   M   s     $&'!+++r2   factor)   rD         c                    t        t        dg            }t        |d      }|j                          |j	                  dd       |j                  d       |j                         }t        ||       }|j                          |j	                  dd       |j                  d       t        j                  j                  |j                         |d	       y )
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:DT!,E	KKM	NN2s	NN5%%'H47KS!JJ{;;=x$'  )r2   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   rG   r$   ).0entrys     r*   	<genexpr>z#test_utf16m_sfnt.<locals>.<genexpr>i   s0      BuU[[)...@  Bs   .0iX  z0Couldn't find seguisbi.ttf font to test against.)nextr   rF   r7   StopIterationpytestskip)rk   s    r*   test_utf16m_sfntrq   f   sZ    	# B(;(; B B ||s"""  HFGHs    4 AAc                  &   t        dg      } t        t        |             j                  dk7  rt	        j
                  d       t        j                         \  }}|j                  ddd|        dD ]  }|j                  t               |	        y )
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   sz    	 34	5BHRL"2289llnGCGGB/GC* +GIc*+r2   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 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	HB""DKKB4&JKllnGCGGCobG9* +GIc*+r2   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        ddlm} t        j                  t        d      5   |t                      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# 1 sw Y   y xY w)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      s    	(	) :889: 
(	) ?X <<=>? 
(	) Ax">>?@A +	y(I	J 
 : :? ?A A
 s/   C
C*C6DC'*C36C?Dlinuxz$only Linux with fontconfig installedc                 L   dt               }t        fd|D              rt        j                   d       | j	                  d      }|j                  d       t        j                  t        t              j                  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Nr1   rj   r(   font_test_files     r*   rl   z(test_user_fonts_linux.<locals>.<genexpr>        
4d>T!
4    already exists in system fontsfontsT)dirXDG_DATA_HOMEc              3   &   K   | ]  }|v  
 y wr   r1   r   s     r*   rl   z(test_user_fonts_linux.<locals>.<genexpr>   s     <d>T)<r   )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

4e
44~&&EFG [[)Nd#
OODN))N:"''79 
			 =!	#f+.))+!<e<<<<= %%'= =s   ,ADD#c                  z   dt        t              j                  z  } 	 t        j                  |        fdt        j
                  D        \  }t        j
                  j                  |       t        j
                  D cg c]  }|j                  j                        r|! }}|D ]!  }t        j
                  j                  |       # y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   c              3   X   K   | ]!  }|j                   j                        r| # y wr   )rG   endswithr   s     r*   rl   z'test_addfont_as_path.<locals>.<genexpr>   s*      :4ZZ((8  :s   '*N)	r   r   r   r   addfontrF   removerG   r   )pathaddedr(   	to_remover   s       @r*   test_addfont_as_pathr      s   "N>  >1D	-D!:;#6#6 :""5)&1&9&9 =d

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

++N;  = =	 = 	-D&&t,	-s   AC $CD:'$D/D: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                  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   r1   r   s     r*   rl   z(test_user_fonts_win32.<locals>.<genexpr>   r   r   r   r   c              3   &   K   | ]  }|v  
 y wr   r1   r   s     r*   rl   z(test_user_fonts_win32.<locals>.<genexpr>   s     8$~%8r   )osenvirongetro   xfailr   r   rp   r   makedirsr   r=   r   r   r   )r   r   r   s     @r*   test_user_fonts_win32r      s    JJNN:&"**..*D " 	# LLGH"N E

4e
44~&&EFG*1-N KK KKX%%6G E8%8888r2   c                     t        j                         \  }}|j                  t               d       t        j                          y )Nry   r{   )r~   r   r   r   close)_r   r   s      r*   _model_handlerr      s,    llnGCKK	%K(IIKr2   register_at_forkz Cannot register at_fork handlersc                      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   forkrT   )	processes)r   multiprocessingget_contextPoolmaprange)ctxpools     r*   	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-existr   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     r*   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    r*   loud_excepthookz(_test_threading.<locals>.loud_excepthook  s    -..r2   
   c                     j                  d       t        d      D ]I  }j                  j                  d            }|j	                  t        |       dj                         K y )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	  sY    	qs 	CA;;r{{=9:DMM#a&#Y-A-AMB	Cr2   bad_thread_)targetr$   r   	   r   zthread failed to join)	threadingr   r   matplotlib.font_managerfont_manager
excepthookBarrierr   Threadstartr   is_aliver   )
r   r   Nr   r   threadstr   r   r   s
          @@@r*   _test_threadingr      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   )ro   importorskipr   r   r1   r2   r*   test_fontcache_thread_safer    s    
$/26r2   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   )r<   procs     r*   test_lockfilefailurer
  #  s>     &NN.	
 :rzz9>3x=9Dr2   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   rH   r   widthheight_repr_html_
startswith)fontentpngimghtmls       r*   test_fontentry_dataclassr  9  sm    [)G



C
**WS\
"C99q==::>> D??=>>>r2   c                      t        j                  t              5  t        dd      } | j	                          d d d        y # 1 sw Y   y xY w)Nz/randomr  )rG   r$   )ro   r   r   r	   r  )r  s    r*   %test_fontentry_dataclass_invalid_pathr  E  s<    	(	) )+>  s   AA
zLinux or OS onlyc                     dD  cg c]  } t        j                  d|        }} t        |d      }t        d      }g }||z   D ]>  }	 t        j                  |      }t        |      }|j                  |j                         @ t        t        t        |                  }t        t        j                               }	t        |      t        |	      k(  sJ t        |      t        |	      k(  sJ ||	k(  sJ y c c} w # t        $ r Y w xY w)N)ttfr   r  )fontext)r   _get_data_pathr   r   r   r   appendr$   	Exceptionsortedlistsetr   get_font_namesr&   )
subdir	paths_mpl	fonts_mplfonts_system	ttf_fontsr   r(   r>   available_fontsmpl_font_namess
             r*   test_get_font_namesr*  K  s    ELM6%%gv6MIM	59I"51LIL( 	??4(D"4(DTYY'	 T#i.12OK6689N3~#66663~#6666n,,, N  		s   C9;C>>	D
	D
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)__name__
__module____qualname__r1   r2   r*   
SomeObjectr-  a  s    r2   r1  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)Nrs   aardvarkdoesnotexistr    r5   rw   r{   )	mfigureFigurer   r   r   r9   r:   r;   r   )xr   r   outr1  s       r*   innerz*test_donot_cache_tracebacks.<locals>.innerd  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
isinstancero   fail)r9  objr1  s     @r*   test_donot_cache_tracebacksr?  _  sF     / 
G~~ ?c:&KK=>?r2   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   )size)r!   styler    z"serif-24:style=oblique:weight=bold)ro   warnsmplMatplotlibDeprecationWarningr
   r1   r2   r*   $test_fontproperties_init_deprecationrH  u  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)Hior   r   r:  r   r   pathlibr   PILr   r   r  r9   numpyra   ro   
matplotlibrF  r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r~   r   r   r5  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*  r?  rH  r1   r2   r*   <module>rV     s     	  	    
    C C C C T S P V\\)$D0
0A8 CLLG+=:~4  6,6, <0) 1)$
#+	+" CLLG+=:~A  C(C(2-  CLLG+NC9 D96 $677=  ?+?+	8B7,	? CLLG+4FG- H-&?,$@r2   