o
    :aP                     @   s  d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
Z
d dlZd dlmZmZ d dlmZ d dlm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 Z&d	d
 Z'dd Z(dd Z)dd Z*dddie+dfdddde+dfdddde+dfdddie+dfdddde+dfdddde+dfgZ,g dZ-e
j.j/de,e-ddd Z0dd Z1d d! Z2d"d# Z3d$d% Z4d&d' Z5d(d) Z6e
j./d*e6d+d,d- Z7e
j./d.e6d/d0d1 Z8e
j./d2d3d4e9fd5d6e:d7d7fd8d9e9fd7ge9fgd:d; Z;d<d= Z<d>d? Z=e
j.j>ej?d@kdAdBdCdD Z@e
j.j>ej?d@ko:eA  dEdBdFdG ZBdS )H    N)Path)mock)cyclerCycler)_api_c_internal_utils)validate_boolvalidate_colorvalidate_colorlist_validate_color_or_linecolorvalidate_cyclervalidate_floatvalidate_fontweightvalidate_hatchvalidate_hist_binsvalidate_intvalidate_markeveryvalidate_stringlist_validate_linestyle_listify_validatorc                 C   s  t jddd t jddd t jd }t jd }t| d	 }|d
 t jd| id t jd | ks7J W d    n1 sAw   Y  t jd |ksOJ t j|d t jd dks_J W d    n1 siw   Y  t jd |kswJ t j|ddid t jd dksJ W d    n1 sw   Y  t jd |ksJ t ddidd }|  |  t | t jd dksJ d S )NtextF)usetexlines   )	linewidthtext.usetexlines.linewidthtest_rcparams.rczlines.linewidth: 33rc)fname!   ,   )r    r   c                   S   s   t jd dks	J d S )Nr   r"   mplrcParams r&   r&   @/usr/lib/python3/dist-packages/matplotlib/tests/test_rcparams.pyfunc;   s   ztest_rcparams.<locals>.func)r$   r   r%   r   
write_text
rc_contextZrc_file)tmpdirr   r   rcpathr(   r&   r&   r'   test_rcparams!   s0   




r-   c                  C   s~   t g ddddd} d }|t| ksJ d }|t| ks$J dd	gt| d
ks1J dgt| dks=J d S )N)zApple ChanceryZTextilezZapf ChanceryZcursivez
sans-serifZnormal   )font.cursivefont.familyzfont.weight	font.sizea  
RcParams({'font.cursive': ['Apple Chancery',
                           'Textile',
                           'Zapf Chancery',
                           'cursive'],
          'font.family': ['sans-serif'],
          'font.size': 12.0,
          'font.weight': 'normal'})z
font.cursive: ['Apple Chancery', 'Textile', 'Zapf Chancery', 'cursive']
font.family: ['sans-serif']
font.size: 12.0
font.weight: normalr/   r1   zi[vz]r0   Zfamily)r$   RcParamslstripreprstrsortedZfind_alllist)r   Zexpected_reprZexpected_strr&   r&   r'   test_RcParams_classG   s   
	r8   c               	   C   s   t ddi} ddi}tt- tjtdd | | W d    n1 s(w   Y  W d    d S W d    d S 1 s@w   Y  d S )Nfigure.figsize)      @*   r:   r;      validatematch)r$   r2   pytestraises
ValueErrorwarnsUserWarningupdate)r   Zbad_dictr&   r&   r'   test_rcparams_updateh   s   PrG   c                	   C   s|   t t/ t jtdd tddi W d    n1 sw   Y  W d    d S W d    d S 1 s7w   Y  d S )Nr>   r?   r9   r<   )rA   rB   rC   rD   rE   r$   r2   r&   r&   r&   r'   test_rcparams_initq   s
   PrH   c               	   C   sJ  t  G t  tj } | D ]	}| | tj|< qW d    n1 s%w   Y  t  ttj W d    n1 s?w   Y  W d    n1 sNw   Y  tt	 t
d  W d    n1 sgw   Y  tt	* t  dtjd< W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )NTzsvg.fonttype)r   Z'suppress_matplotlib_deprecation_warningr$   r*   r%   copyZdeepcopyrA   rB   rC   r   )Z_copykeyr&   r&   r'   test_Bug_2543w   s,   





"rK   ZfacecolorrZinherit)rL   zaxes.facecolorgZedge)rL   zaxes.edgecolor)zsame facecolorzinherited facecolordifferent facecolorzsame edgecolorzinherited edgecolorrO   zcolor_type, param_dict, target)Zidsc                 C   s   | d|d|  d< d|  d}t|' t \}}|jtddd | }t|j	| |ks5J W d    d S 1 s@w   Y  d S )NrL   zlegend.Zget_   test)Zlabel)
popr$   r*   pltsubplotsZplotrangeZlegendgetattrZlegendPatch)Z
color_typeZ
param_dicttargetZget_func_axZlegr&   r&   r'   test_legend_colors   s   "rZ   c                  C   4   dt jd< t jddgddg} |  dksJ d S )NrM   zlines.markerfacecolorr=      )r$   r%   r   Line2DZget_markerfacecolorZlnr&   r&   r'   test_mfc_rcparams      
r_   c                  C   r[   )NrM   zlines.markeredgecolorr=   r\   )r$   r%   r   r]   Zget_markeredgecolorr^   r&   r&   r'   test_mec_rcparams   r`   ra   c                  C   s4   dt jd< t \} }|d}| dksJ d S )NrM   zaxes.titlecolorZTitle)r$   r%   rS   rT   Z	set_titleZ	get_color)rX   rY   titler&   r&   r'   test_axes_titlecolor_rcparams   s   

rc   c                 C   sl   t | d }|jddd tjddd t|dd}W d    n1 s&w   Y  |d	d
ks4J d S )Nr   ztimezone: UTCz	UTF-32-BE)encodingzlocale.getpreferredencoding)Zreturn_valueTFtimezoneZUTC)r   r)   r   Zpatchr$   Zrc_params_from_fileget)r+   r,   r   r&   r&   r'   test_Issue_1713   s   rg   c                  C   s   dD ]} | t jd< qd S )N)
ZpngZjpegZtiffrawZrgbaZppmZsgiZbmpZpbmZsvgzanimation.frame_formatr#   )Zfmtr&   r&   r'   test_animation_frame_formats   s   ri   c              !   c   s   t g dd dD dd dD R dd ddd	g fD d
tdg fdddgfddgfddgfddgfddgddgfdddgftddgddgftddgddgff	t tfdtfdtjftddgtjffd
t	t
dddd dddgddgdtdfD dd dD d
t	tdddd dddgddgdtdfD dd dD d
td td!d"ftd#d$d%gtd#d$d%gfd&td!d"td'g d( fd)td!d"td*g d+ fd,td!d"td#d$d%g ftd-d$d%gtd#d$d%gftdd.gd/td'dd.gffd0tfd1tfd2tfd3tfd4tfd5tfd6tfd7tfd8tfd9tfd:tfd;tfd<tfd=tfd>tftd?g d@tftd!g dAtffd
tdBdCtfdDtfdEtffd
tdFg dGfg dGg dGfdHdIgfg dJdKdLgftg dMtg dNgtg dMg dNgftg dMg dNgtg dMg dNgffdOtffd
tdPdQtfdRtfdStfdTtfdUtffd
tdVdWtfdXtffd
tdYdZd[d\g d+fg d+g d+ftd]td]ffdtffd
td^d_d`dadbg d+g d+ftdtd dd ftdddctdddcffd+tfg ddtfg detfg dftfdgtfdhtfditfdjtfdktfdltfdmtfdntfdotfdptfdltfdtft tffd
tdqdrdsdtdudvdwdxdydzd{d|d}d~ddgdddgffg ddg dffdddgfdddgffd	ddgfd	ddgfffdtfdtfddtfg d+tfdtfdddgftfd ddgftfdg d+ftfddgdftff	d
f}|D ],}|d }| r|d D ]\}}|||fV  qq|d D ]\}}|||fV  qĐqd S )Nc                 s       | ]}|d fV  qdS )TNr&   .0rX   r&   r&   r'   	<genexpr>       z/generate_validator_testcases.<locals>.<genexpr>)tyZyesZontrue1r=   Tc                 s   rj   )FNr&   rk   r&   r&   r'   rm      rn   )fnnoZoffZfalse0r   Fc                 s       | ]}|t fV  qd S NrC   rk   r&   r&   r'   rm          aardvarkr\   )	validatorsuccessfail za,babz
aardvark, zaardvark, ,)r   r   r=   )r=   r\   )rt   c                 s       | ]	}|d dgfV  qdS )r=   r\   Nr&   rk   r&   r&   r'   rm          z1, 2      ?      @c                 s   rw   rx   ry   rk   r&   r&   r'   rm      rz   )r{   r   r=   r=   r\   rP   c                 s   r   )r   r   Nr&   rk   r&   r&   r'   rm      r   z1.5, 2.5)r   r   c                 s   rw   rx   ry   rk   r&   r&   r'   rm      rz   )r{   r   r   rx   Nzcycler("color", "rgb")rL   ZrgbZ	linestyle---zW(cycler("color", ["r", "g", "b"]) +
                          cycler("mew", [2, 3, 5]))Zmarkeredgewidth)r\   rP      zcycler(c='rgb', lw=[1, 2, 3])r   r   z5cycler('c', 'rgb') * cycler('linestyle', ['-', '--'])Zlsr   )Zmew   zcycler("bleh, [])zCycler("linewidth", [1, 2, 3])z1cycler('c', [j.__class__(j) for j in ['r', 'b']])z2cycler('c', [j. __class__(j) for j in ['r', 'b']])z2cycler('c', [j.	__class__(j) for j in ['r', 'b']])z2cycler('c', [j.__class__(j) for j in ['r', 'b']])z9cycler('c', [j.__class__(j).lower() for j in ['r', 'b']])z1 + 2zos.system("echo Gotcha")z	import osz9def badjuju(a): return a; badjuju(cycler("color", "rgb"))zcycler("waka", [1, 2, 3])zcycler(c=[1, 2, 3])zcycler(lw=['a', 'b', 'c'])Zwaka)r=   rP   r   )ZC1rM   rN   ))--|r   )\oOr   )/+*/.xr   r   r   z--_   Xzr,g,b)rM   rN   r   zr, ,rM   )r   rN   bluerN   r   )r=   r   r   r   r=   r   Zfish)
Nonenoner   r   )ZAABBCCz#AABBCC)ZAABBCC00z	#AABBCC00)tab:bluer   )C12r   )z	(0, 1, 0))              ?r   )r   r   )z(0, 1, 0, 1))r   r   r   r   )r   r=   r   r=   r   ztab:verybluez(0, 1)z(0, 1, 0, 1, 0)z(0, 1, none)z(0, 1, "0.5")))	linecolorr   )markerfacecolorr   )Zmfcr   )markeredgecolorr   )Zmecr   lineZmarker)autor   )fdr   )Z10
   z1, 2, 3   )NNr=   r=   皙?r   )r   r   )r   r   rP   )r=   r\   333333?)r   r\   rP   )r=   r\   r   )r   皙?r   )r   r\   rP   )r=   r   r   )r=   r   )r   r=   abc)r=   r   )r   r   r   )r   r   )r   r   )solidr   )r   r   )dashedr   )-.r   )dashdotr   ):r   )dottedr   r   ) r   r   r   )ZDoTtEdr   )z1, 3)r   )r=   rP   gGz?i  r   g     |@)r=   r\   rP   r   )r   g       @g      @g      @s   dottedr   zutf-16r}   r~   r   )r   r   iternparraysetrC   r   ZMatplotlibDeprecationWarningr   r   r   r   r   r   r
   r	   r   r   Zaranger   slice	TypeErrorobjectr   encode)ZvalidZvalidation_testsZvalidator_dictr}   argrW   Z
error_typer&   r&   r'   generate_validator_testcases   s  






	
6
	
	



  Vr   zvalidator, arg, targetTc                 C   sX   | |}t |tjrtj|| d S t |ts ||ksJ d S t|t|ks*J d S rx   )
isinstancer   ZndarrayZtestingZassert_equalr   r7   )r}   r   rW   resr&   r&   r'   test_validator_valid  s   
r   zvalidator, arg, exception_typeFc                 C   s8   t | | | W d    d S 1 sw   Y  d S rx   )rA   rB   )r}   r   Zexception_typer&   r&   r'   test_validator_invalid  s   
"r   zweight, parsed_weight)boldr   ZBOLD)d   r   )Z100r   r   )g4@   z20.6c                 C   sT   |t u r tt  t|  W d    d S 1 sw   Y  d S t| |ks(J d S rx   )rC   rA   rB   r   )ZweightZparsed_weightr&   r&   r'   test_validate_fontweight  s
   
"r   c                  C   s2   dd t jD } | D ]}tt j| tsJ q
d S )Nc                 S   s   g | ]}d |v r|qS )Zkeymapr&   )rl   kr&   r&   r'   
<listcomp>  s    z test_keymaps.<locals>.<listcomp>)r$   r%   r   r7   )Zkey_listr   r&   r&   r'   test_keymaps  s   r   c                
   C   s   t jddidI t jd du sJ tt! t jdddd W d    n1 s,w   Y  W d    n1 s;w   Y  t jd du sIJ W d    d S 1 sTw   Y  d S )Nr   Fr   T)r   z	test.blah)r$   r*   r%   rA   rB   KeyErrorr&   r&   r&   r'   test_rcparams_reset_after_fail  s   "r   Zlinuxz
Linux only)reasonc                 C   sj   i t jdddt| d}ttj tjtj	ddg|dtj
d W d    d S 1 s.w   Y  d S )Nr   )ZDISPLAYZWAYLAND_DISPLAY
MPLBACKENDMPLCONFIGDIR-czBimport matplotlib;matplotlib.use('tkagg');import matplotlib.pyplotT)envcheckstderr)osenvironr5   rA   rB   
subprocessZCalledProcessErrorrunsys
executableZDEVNULL)r+   r   r&   r&   r'   test_backend_fallback_headless  s   "r   Zheadlessc                 C   sR   t d i tjdt| d}tjtjddg|dd}|	 
 dks'J d S )	NZtkinterr   )r   r   r   a  import matplotlib as mpl; sentinel = mpl.rcsetup._auto_backend_sentinel; assert mpl.RcParams({'backend': sentinel})['backend'] == sentinel; assert dict.__getitem__(mpl.rcParams, 'backend') == sentinel; import matplotlib.pyplot; print(matplotlib.get_backend())T)r   Zuniversal_newlinesZagg)rA   Zimportorskipr   r   r5   r   Zcheck_outputr   r   striplower)r+   r   Zbackendr&   r&   r'   test_backend_fallback_headful  s   
r   )CrI   r   Zpathlibr   r   r   Zunittestr   r   r   rA   Z
matplotlibr$   r   r   Zmatplotlib.pyplotZpyplotrS   Zmatplotlib.colorsZcolorsZmcolorsZnumpyr   Zmatplotlib.rcsetupr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r-   r8   rG   rH   rK   Zto_rgbaZlegend_color_testsZlegend_color_test_idsZmarkZparametrizerZ   r_   ra   rc   rg   ri   r   r   r   rC   r   r   r   r   Zskipifplatformr   Zdisplay_is_validr   r&   r&   r&   r'   <module>   s    @&!	





	 a



