U
    Fvfw[                     @   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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&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.ddddddgZ/ej0j1de.e/dd d! Z2d"d# Z3d$d% Z4d&d' Z5d(d) Z6d*d+ Z7d,d- Z8ej01d.e8d/d0d1 Z9ej01d2e8d3d4d5 Z:ej01d6d7d8e;fd9d:e<d;d;fd<d=e;fd;ge;fgd>d? Z=ej01d@dAdBe;fd9d:e<d;d;fd<d=e;fd;ge;fgdCdD Z>dEdF Z?dGdH Z@dIdJ ZAej0jBejCdKkdLdMdNdO ZDej0jBejCdKkoeE  dPdMdQdR ZFdSdT ZGdUdV ZHdS )W    N)Path)mock)cyclerCycler)_api_c_internal_utils)validate_boolvalidate_colorvalidate_colorlist_validate_color_or_linecolorvalidate_cyclervalidate_floatvalidate_fontstretchvalidate_fontweightvalidate_hatchvalidate_hist_binsvalidate_intvalidate_markeveryvalidate_stringlist_validate_linestyle_listify_validatorc              	   C   sR  t jddd t jddd t jd }t jd }t| d	 }|jd
dd t jd| id t jd | ksrtW 5 Q R X t jd |kstt j|d t jd dkstW 5 Q R X t jd |kstt j|ddid t jd dkstW 5 Q R X t jd |kstt ddidd }|  |  t | t jd dksNtd S )NtextF)usetexlines   )	linewidthtext.usetexlines.linewidthtest_rcparams.rczlines.linewidth: 33utf-8encodingrc)fname!   ,   )r$   r#   c                   S   s   t jd dkstd S )Nr   r&   )mplrcParamsAssertionError r*   r*   B/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_rcparams.pyfunc=   s    ztest_rcparams.<locals>.func)r'   r#   r(   r   
write_text
rc_contextr)   Zrc_file)tmpdirr   r   rcpathr,   r*   r*   r+   test_rcparams#   s*    



r1   c                  C   s   t ddddgdddd} d	 }|t| ks4td
 }|t| ksLtddgt| dksftdgt| dks~td S )NzApple ChanceryZTextilezZapf ChanceryZcursivez
sans-serif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: normalr4   r6   zi[vz]r5   family)	r'   RcParamslstripreprr)   strsortedZfind_alllist)r#   Zexpected_reprZexpected_strr*   r*   r+   test_RcParams_classI   s    	r>   c               	   C   s:   t ddi} ddi}tt | | W 5 Q R X d S )Nfigure.figsize)      @*   r@   rA      )r'   r8   pytestraises
ValueErrorupdate)r#   Zbad_dictr*   r*   r+   test_rcparams_updatej   s    rH   c                	   C   s(   t t tddi W 5 Q R X d S )Nr?   rB   )rD   rE   rF   r'   r8   r*   r*   r*   r+   test_rcparams_initr   s    rI   c               
   C   s   t  \ t ( tj } | D ]}| | tj|< q"W 5 Q R X t  ttj W 5 Q R X W 5 Q R X tt	 t
d  W 5 Q R X tt	$ t  dtjd< W 5 Q R X W 5 Q R X d S )NTzsvg.fonttype)r   Z'suppress_matplotlib_deprecation_warningr'   r.   r(   copydeepcopyrD   rE   rF   r   )Z_copykeyr*   r*   r+   test_Bug_2543w   s    



 
rM   facecolorrZinherit)rO   zaxes.facecolorgZedge)rO   axes.edgecolorzsame facecolorzinherited facecolorzdifferent facecolorzsame edgecolorzinherited edgecolorzcolor_type, param_dict, target)idsc              	   C   sx   | d|d|  d< d|  d}t|B t \}}|jtddd | }t|j	| |ksjt
W 5 Q R X d S )NrO   zlegend.get_   test)label)popr'   r.   pltsubplotsZplotrangeZlegendgetattrZlegendPatchr)   )Z
color_typeZ
param_dicttargetZget_func_axZlegr*   r*   r+   test_legend_colors   s    r`   c                  C   s4   dt jd< t jddgddg} |  dks0td S )NrP   zlines.markerfacecolorrC      )r'   r(   r   Line2DZget_markerfacecolorr)   lnr*   r*   r+   test_mfc_rcparams   s    
re   c                  C   s4   dt jd< t jddgddg} |  dks0td S )NrP   zlines.markeredgecolorrC   ra   )r'   r(   r   rb   Zget_markeredgecolorr)   rc   r*   r*   r+   test_mec_rcparams   s    
rf   c                  C   s4   dt jd< t \} }|d}| dks0td S )NrP   zaxes.titlecolorZTitle)r'   r(   rY   rZ   	set_titleZ	get_colorr)   )r^   r_   titler*   r*   r+   test_axes_titlecolor_rcparams   s    

ri   c              	   C   sX   t | d }|jddd tjddd t|dd	}W 5 Q R X |d
dksTtd S )Nr   ztimezone: UTCr   r    zlocale.getpreferredencodingz	UTF-32-BE)Zreturn_valueTFtimezoneUTC)r   r-   r   patchr'   Zrc_params_from_filegetr)   )r/   r0   r#   r*   r*   r+   test_Issue_1713   s
    rn   c                  C   s   dD ]} | t jd< qd S )N)
ZpngZjpegZtiffrawZrgbappmZsgiZbmpZpbmsvgzanimation.frame_format)r'   r(   )fmtr*   r*   r+   test_animation_frame_formats   s    rs   c              !   c   s  t dd dD dd dD 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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'dd(d)g fd*td!d"td+ddd(g 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d/t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td>dd(d)gtftd!d?d@dAgtffd
tdBdCtfdDtfdEtffd
tdFd@dAdgfd@dAdgd@dAdgfdGd@gfddAdHgdAdHgftddIdIgtdIddIggtddIdIgdIddIggftddIdIgdIddIggtddIdIgdIddIggffdJtffd
tdKdLtfdMtfdNtfdOtfdPtffd
tdQdRtfdStffd
tdTdUdVdWddd(gfddd(gddd(gftdXtdXffdtffd
tdYdZd[d\d]ddd(gddd(gftdtd dd ftddd(tddd(ffd^tfddd_gtfddd(gtfdddgtfd`tfdatfdbtfdctfddtfdetfdftfdgtfdhtfditfdetfdtft tffd
tdjdkdldmdndodpdqdrdsdtdudvdwdxdygdIdxdzgffddd(d/gdId{d|d}d~gffdIddgfdIddgffd	ddgfd	ddgfffdtfdtfddtfddd(gtfdxtfdddgftfd ddgftfdddd(gftfddgdftff	d
f}|D ]V}|d }| r|d D ]\}}|||fV  q~n |d D ]\}}|||fV  qqdd S )Nc                 s   s   | ]}|d fV  qdS )TNr*   .0r^   r*   r*   r+   	<genexpr>   s     z/generate_validator_testcases.<locals>.<genexpr>)tyyesontrue1rC   Tc                 s   s   | ]}|d fV  qdS )FNr*   rt   r*   r*   r+   rv      s     )fnnoofffalse0r   Fc                 s   s   | ]}|t fV  qd S NrF   rt   r*   r*   r+   rv      s   aardvarkra   )	validatorsuccessfail za,babz
aardvark, zaardvark, ,)r   r   rC   )r~   c                 s   s   | ]}|d dgfV  qdS )rC   ra   Nr*   rt   r*   r*   r+   rv      s   z1, 2      ?      @)rC   ra   c                 s   s   | ]}|t fV  qd S r   r   rt   r*   r*   r+   rv      s   )r   r   rC   rC   ra   rU   c                 s   s   | ]}|d dgfV  qdS )r   r   Nr*   rt   r*   r*   r+   rv      s   z1.5, 2.5)r   r   c                 s   s   | ]}|t fV  qd S r   r   rt   r*   r*   r+   rv      s   )r   r   r   r   Nzcycler("color", "rgb")rO   ZrgbZ	linestyle---zW(cycler("color", ["r", "g", "b"]) +
                          cycler("mew", [2, 3, 5]))ZmarkeredgewidthrU      zcycler(c='rgb', lw=[1, 2, 3])r   z5cycler('c', 'rgb') * cycler('linestyle', ['-', '--'])Zls)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wakaZC1rP   rQ   ))--|r   )\oOr   )/+*/.xr   r   r   z--_   Xzr,g,bzr, ,Zbluer   Zfish)
Nonenoner   r   )ZAABBCCz#AABBCC)ZAABBCC00z	#AABBCC00)tab:bluer   )C12r   )z	(0, 1, 0))              ?r   )r   rC   r   r   )z(0, 1, 0, 1))r   r   r   r   )r   rC   r   rC   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   linemarker)autor   )fdr   )10
   z1, 2, 3   )NNrC   rC   皙?r   )r   r   )r   r   r   333333?)r   皙?r   )r   ra   rU   )rC   r   r   )rC   r   )r   rC   abc)rC   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   )rC   rU   gGz?i  g     |@r   g       @g      @g      @s   dottedr   zutf-16r   r   r   )r   r   iternparraysetrF   r   r   r   r   r   r   r
   r	   r   r   Zaranger   slice	TypeErrorobjectr   encode)ZvalidZvalidation_testsZvalidator_dictr   argr]   Z
error_typer*   r*   r+   generate_validator_testcases   s   




 	
 6		       Tr   zvalidator, arg, targetTc                 C   sT   | |}t |tjr$tj|| n,t |ts<||ksPtnt|t|ksPtd S r   )
isinstancer   ZndarrayZtestingZassert_equalr   r)   r=   )r   r   r]   resr*   r*   r+   test_validator_valid  s    
r   zvalidator, arg, exception_typeFc              	   C   s"   t | | | W 5 Q R X d S r   )rD   rE   )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   s<   |t kr(tt  t|  W 5 Q R X nt| |ks8td S r   )rF   rD   rE   r   r)   )ZweightZparsed_weightr*   r*   r+   test_validate_fontweight  s    r   zstretch, parsed_stretch)expandedr   ZEXPANDEDc              	   C   s<   |t kr(tt  t|  W 5 Q R X nt| |ks8td S r   )rF   rD   rE   r   r)   )ZstretchZparsed_stretchr*   r*   r+   test_validate_fontstretch  s    r   c                  C   s2   dd t jD } | D ]}tt j| tstqd S )Nc                 S   s   g | ]}d |kr|qS )Zkeymapr*   )ru   kr*   r*   r+   
<listcomp>  s      z test_keymaps.<locals>.<listcomp>)r'   r(   r   r=   r)   )Zkey_listr   r*   r*   r+   test_keymaps  s    r   c                	   C   sF   t jd dkstt   dt jd< W 5 Q R X t jd dksBtd S )Nbackendzmodule://aardvark)r'   r(   r)   r.   r*   r*   r*   r+   test_no_backend_reset_rccontext  s    
r   c                   C   sx   t jddid^ t jd dks$ttt$ t jdddd W 5 Q R X W 5 Q R X t jd dksjtW 5 Q R X d S )Nr   Fr"   T)r   z	test.blah)r'   r.   r(   r)   rD   rE   KeyErrorr*   r*   r*   r+   test_rcparams_reset_after_fail  s    r   linuxz
Linux only)reasonc              	   C   sP   t jdddt| d}ttj" tjtj	ddg|dtj
d W 5 Q R X d S )Nr   )ZDISPLAYZWAYLAND_DISPLAY
MPLBACKENDMPLCONFIGDIR-cz^import matplotlib;matplotlib.use('tkagg');import matplotlib.pyplot;matplotlib.pyplot.plot(42);T)envcheckstderr)osenvironr;   rD   rE   
subprocessCalledProcessErrorrunsys
executableDEVNULL)r/   r   r*   r*   r+   test_backend_fallback_headless  s        r   Zheadlessc                 C   sN   t d tjdt| d}tjtjddg|dd}|	 
 dksJtd S )	Ntkinterr   )r   r   r   zimport matplotlib as mpl; sentinel = mpl.rcsetup._auto_backend_sentinel; assert mpl.RcParams({'backend': sentinel})['backend'] == sentinel; assert mpl.rcParams._get('backend') == sentinel; import matplotlib.pyplot; print(matplotlib.get_backend())T)r   universal_newlinesZagg)rD   Zimportorskipr   r   r;   r   check_outputr   r   striplowerr)   )r/   r   r   r*   r*   r+   test_backend_fallback_headful  s    
 r   c              	   C   s  |  tjddddd dd f ttj" tjd tjd d ksJtW 5 Q R X ttj dtjd< W 5 Q R X tjd dkst|  tj	d	d
 ttj tjd	 tjd kstW 5 Q R X ttj dtjd	< W 5 Q R X tjd dkst|  tj	dd ttj tjd d ks.tW 5 Q R X |  tj
dd ttj dtjd< W 5 Q R X tjd dks~td tjd< tjtj  d S )Nzpatch.linewidth0.0zaxes.linewidthc                 S   s   d|  S Nra   r*   )oldr*   r*   r+   <lambda>+      z"test_deprecation.<locals>.<lambda>c                 S   s   | d S r   r*   )newr*   r*   r+   r   +  r   ra   rC   zpatch.edgecolor)r   rR   rR   z#abcdzpatch.force_edgecolor)r   Nzsvg.hashsalt)r   Zfoobar)setitemr'   Z_deprecated_maprD   Zwarnsr   ZMatplotlibDeprecationWarningr(   r)   Z_deprecated_ignore_mapZ_deprecated_remain_as_nonerG   rJ   )Zmonkeypatchr*   r*   r+   test_deprecation(  sR        
r   c               	   C   s@   d} |  d}t jtt|d td| i W 5 Q R X d S )N)g?gffffff?z% is not a valid value for legend.loc;)matchz
legend.loc)rD   rE   rF   reescaper'   r8   )valueZ	match_strr*   r*   r+   test_rcparams_legend_locQ  s    
r   )IrJ   r   pathlibr   r   r   r   Zunittestr   r   r   rD   Z
matplotlibr'   r   r   Zmatplotlib.pyplotZpyplotrY   Zmatplotlib.colorscolorsZmcolorsZnumpyr   Zmatplotlib.rcsetupr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r1   r>   rH   rI   rM   Zto_rgbaZlegend_color_testsZlegend_color_test_idsmarkZparametrizer`   re   rf   ri   rn   rs   r   r   r   rF   r   r   r   r   r   r   Zskipifplatformr   Zdisplay_is_validr   r   r   r*   r*   r*   r+   <module>   s   D&!




	 _





)