
    Ng/                        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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.        /                    ej0        dk    pe) d          d             Z1ej.        2                    dg d          d             Z3d Z4d Z5d Z6d Z7ej.        /                    ej0        dk    pe) d          d             Z8d Z9ej.        /                    ej0        dk    d          d             Z:d Z;ej.        /                     e<ed           d           d!             Z=d" Z>d# Z?d$ Z@d% ZAd& ZBd' ZCej.        /                    ej0        dk    d(          d)             ZDd* ZEd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      ^/var/www/html/ai-engine/env/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@   2   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   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   r1   r2   r*   test_get_fontconfig_fontsrR   L   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   R   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>h   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   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$   ro   rp   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****+ +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                 H    g | ]}|j                                       |S r1   rG   endswithr   s     r*   
<listcomp>z(test_addfont_as_path.<locals>.<listcomp>   s=     : : :4Z((88:$ : : :r2   c                 H    g | ]}|j                                       |S r1   r   r   s     r*   r   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                     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 )NrZ   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====	> 	>r2   c                 H    g | ]}                     d | |f          S )bad_thread_)targetr$   args)Thread)rj   r   r   	threadings     r*   r   z#_test_threading.<locals>.<listcomp>	  sI        	/@Q/@/@tLL  r2   )	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
   					  	 r2   c                  Z    t          j        d           t          t          d           d S )Nr   r   )timeout)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  1  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  =  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>E  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&  C  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*   
SomeObjectr)  Y  s        r2   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 )Nrs   aardvarkdoesnotexistr    r5   rw   r{   )	mfigureFigurer   r   r   r9   r:   r;   r   )xr   r   outr-  s       r*   innerz*test_donot_cache_tracebacks.<locals>.inner\  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)r5  objr-  s     @r*   test_donot_cache_tracebacksr;  W  s           / / / / / 
EGGG~ ? ?c:&& 	?K=>>>? ?r2   )Fior   r   r6  r   r   pathlibr   PILr   r   r  r9   numpyra   ro   r   r   r   r	   r
   r   r   r   r   r   r   r   r   
matplotlibr   r   r   r~   r   r   r1  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;  r1   r2   r*   <module>rI     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 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=  ? ?+ +? ?+	 	 	  47 7 7  ,	? 	? 	?   CLG+4FGG- - HG-&? ? ? ? ?r2   