
    G8c"+                     p   d dl mZm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mZmZ d dlm Z!m"Z"  e	jF                  d      duZ$d Z%d	 Z&d
 Z'd Z(ejR                  jU                  ejV                  dk(  xs e$ d      d        Z,ejR                  j[                  dg d      d        Z.d Z/d Z0d Z1d Z2ejR                  jU                  ejV                  dk7  xs e$ d      d        Z3d Z4ejR                  jU                  ejV                  dk7  d      d        Z5d Z6ejR                  jU                   e7ed       d      d         Z8d! Z9d" Z:d# Z;d$ Z<d% Z=ejR                  jU                  ejV                  dk(  d&      d'        Z>y)(    )BytesIOStringION)Path)Image)findfontfindSystemFonts	FontEntryFontPropertiesfontManager	json_dump	json_loadget_fontis_opentype_cff_fontMSUserFontDirectories_get_fontconfig_fontsft2fontttfFontPropertycbook)pyplot
rc_contextz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)fontcmaps     D/usr/lib/python3/dist-packages/matplotlib/tests/test_font_manager.pytest_font_priorityr'      s    	,-/ 
0 ? |n=>? :??l*** D>DDt9:? ?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_weightr/   &   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 /r.   c                 d   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
      |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_missingr-   )	r   r   r   r   warningscatch_warningsfilterwarningsr
   r   )tmpdirpathcopypropfps        r&   test_json_serializationr=   1   s     (Dk4 T?D		 	 	" 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)rD   ffdress       r&   test_otfrJ   A   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   r-   r.   r&   test_get_fontconfig_fontsrO   L   s     $&'!+++r.   factor)   rA         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   rN   )hinting_factor   d   abcg?)rtol)
r   r
   r   clearset_sizeset_textget_width_heightnptestingassert_allclose)rP   r$   font1expectedhinted_fonts        r&   test_hinting_factorrd   R   s    N<.9:DT!,E	KKM	NN2s	NN5%%'H47KS!JJ{;;=x$'  )r.   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   rD   r!   ).0entrys     r&   	<genexpr>z#test_utf16m_sfnt.<locals>.<genexpr>h   s0      BuU[[)...@  Bs   .0iX  z0Couldn't find seguisbi.ttf font to test against.)nextr   rC   r3   StopIterationpytestskip)rh   s    r&   test_utf16m_sfntrn   e   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!   rl   rm   pltsubplotstextsavefigr   )r<   figaxfmts       r&   test_find_ttcr   r   sz    	 34	5BHRL"2289llnGCGGB/GC* +GIc*+r.   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 )rp   u   Hello, 你好rq   rs   rx   rz   )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*+r.   c                 2   t        |       }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path or binary-mode file)match)r   rl   raisesFileNotFoundErrorr   strbytesmatplotlib.ft2fontr   	TypeErrorr   )r8   tmp_pathr   s      r&   test_find_invalidr      s    F|H	(	) :889: 
(	) ?X <<=>? 
(	) Ax">>?@A +	y(B	C 
 : :? ?A A
 s/   C)C5DD)C25C>D
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Nr-   rg   r$   font_test_files     r&   ri   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   r-   r   s     r&   ri   z(test_user_fonts_linux.<locals>.<genexpr>   s     <d>T)<r   )r   anyrl   rm   joinensureshutilcopyfiler   __file__parentcontextsetenvr   r   cache_clear)r8   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                     d} t        t              j                  | z  }	 t        j                  |       t        j
                  D cg c]  }|j                  j                  |       r|! c}\  }t        j
                  j                  |       t        j
                  D cg c]  }|j                  j                  |       r|! }}|D ]!  }t        j
                  j                  |       # yc c}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   N)	r   r   r   r   addfontrC   rD   endswithremove)r   r9   r$   added	to_removes        r&   test_addfont_as_pathr      s1   "N>  >1D	-D!#.#6#6 :4ZZ((8  :""5)&1&9&9 =d

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

++N;  = =	 = 	-D&&t,	-s/   'C8 $C.+$C8 !$C3.C8 8E$D0//EzWindows onlyc                     t         j                  j                  d      s4t         j                  j                  d      s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.r   c              3   &   K   | ]  }|v  
 y wr   r-   r   s     r&   ri   z(test_user_fonts_win32.<locals>.<genexpr>   r   r   r   r   c              3   &   K   | ]  }|v  
 y wr   r-   r   s     r&   ri   z(test_user_fonts_win32.<locals>.<genexpr>   s     8$~%8r   )osenvirongetrl   xfailr   r   rm   r   makedirsr   r:   r   r   r   )r   r   r   s     @r&   test_user_fonts_win32r      s    JJNN:&"**..*D " 	# #N E

4e
44~&&EFG*1-N KK KKX%%6G E8%8888r.   c                     t        j                         \  }}|j                  t               d       t        j                          y )Nrv   rx   )r{   r|   r~   r   close)_r   r   s      r&   _model_handlerr      s,    llnGCKK	%K(IIKr.   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   forkrQ   )	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                      dd l } ddlm dd lm d}| j                  |      fd}t        |      D cg c]  }| j                  |d| |f       }}|D ]  }|j                           |D ]  }|j                           y c c}w )Nr   )LOAD_NO_HINTING
   c                     j                          t        d      D ]?  }j                  j                  d            }|j	                  t        |       d       A y )NrW   zDejaVu Sansg        )flags)waitr   r   r   r\   r   )njr$   r   bfms      r&   bad_ideaz!_test_threading.<locals>.bad_idea  sL    	s 	>A;;r{{=9:DMM#a&#_M=	>r.   bad_thread_)targetr!   args)
	threadingr   r   matplotlib.font_managerfont_managerBarrierr   Threadstartr   )	r   Nr   r   threadstr   r   r   s	         @@@r&   _test_threadingr      s    2(
A!A> q 	QC/@tLG 
  		  	s   Bc                     t        j                  d       dd l} t        j                  t
        j                  d| j                  t              dz   g      }|j                  r$t        j                  d|j                   d       y y )Nr   r   z-cz
_test_threading()z2The subprocess returned with non-zero exit status .)rl   importorskipinspect
subprocessrunsys
executable	getsourcer   
returncodefail)r   procs     r&   test_fontcache_thread_safer     sr    
$>>				?	+.C	C	ED H'q* 	+ r.   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   rE   r   widthheight_repr_html_
startswith)fontentpngimghtmls       r&   test_fontentry_dataclassr	  #  sm    [)G



C
**WS\
"C99q==::>> D??=>>>r.   c                      t        j                  t              5  t        dd      } | j	                          d d d        y # 1 sw Y   y xY w)Nz/randomr   )rD   r!   )rl   r   r   r	   r  )r  s    r&   %test_fontentry_dataclass_invalid_pathr  /  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 #  Y xY w)N)ttfr   r  )fontext)r   _get_data_pathr   r   r   r   appendr!   sortedlistsetr   get_font_namesr#   )
subdir	paths_mpl	fonts_mplfonts_system	ttf_fontsr9   r$   r;   available_fontsmpl_font_namess
             r&   test_get_font_namesr  5  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)?ior   r   r   r   pathlibr   PILr   r   r   r   r5   numpyr^   rl   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   
matplotlibr   r{   r   which
has_fclistr'   r/   r=   rJ   markskipifplatformrO   parametrizerd   rn   r   r   r   r   r   r   r   hasattrr   r   r   r   r	  r  r  r-   r.   r&   <module>r)     s      	     
      
 1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=  ?+?+	4
+	? CLLG+4FG- H-r.   