U
    \	aL                     @   s  d dl mZ 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.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/e8d0d1d2 Z9ej01d3e8d4d5d6 Z:ej01d7d8d9e;fd:d;e<d<d<fd=d>e;fd<ge;fgd?d@ Z=dAdB Z>dCdD Z?ej0j@ejAdEkdFdGdHdI ZBej0j@ejAdEkoeC  dJdGdKdL ZDdS )M    )OrderedDictN)Path)mock)cyclerCycler)_api_c_internal_utils)validate_boolvalidate_bool_maybe_nonevalidate_colorvalidate_colorlistvalidate_cyclervalidate_floatvalidate_fontweightvalidate_hatchvalidate_hist_binsvalidate_intvalidate_markeveryvalidate_stringlist_validate_linestyle_listify_validatorc              	   C   sN  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snt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sJt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td S )Nr   r#   )mplrcParamsAssertionError r'   r'   B/tmp/pip-unpacked-wheel-wjyw_3jo/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*    




r.   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: normalr1   r3   zi[vz]r2   family)	r$   RcParamslstripreprr&   strsortedZfind_alllist)r    Zexpected_reprZexpected_strr'   r'   r(   test_RcParams_classH   s    	r;   c               
   C   sT   t ddi} ddi}tt* tjtdd | | W 5 Q R X W 5 Q R X d S )Nfigure.figsize)      @*   r=   r>      validatematch)r$   r5   pytestraises
ValueErrorwarnsUserWarningupdate)r    Zbad_dictr'   r'   r(   test_rcparams_updatei   s    rJ   c                
   C   sB   t t. t jtdd tddi W 5 Q R X W 5 Q R X d S )NrA   rB   r<   r?   )rD   rE   rF   rG   rH   r$   r5   r'   r'   r'   r(   test_rcparams_initr   s    rK   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 td d kspttdd kstt	
t td 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 )NnoneZblahTzsvg.fonttype)r   Z'suppress_matplotlib_deprecation_warningr$   r+   r%   copydeepcopyr
   r&   rD   rE   rF   r	   )Z_copykeyr'   r'   r(   test_Bug_2543x   s     




rP   facecolorrZinherit)rR   zaxes.facecolorgZedge)rR   z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 )NrR   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    rb   c                  C   s4   dt jd< t jddgddg} |  dks0td S )NrS   zlines.markerfacecolorr@      )r$   r%   r   Line2DZget_markerfacecolorr&   lnr'   r'   r(   test_mfc_rcparams   s    
rg   c                  C   s4   dt jd< t jddgddg} |  dks0td S )NrS   zlines.markeredgecolorr@   rc   )r$   r%   r   rd   Zget_markeredgecolorr&   re   r'   r'   r(   test_mec_rcparams   s    
rh   c                  C   s4   dt jd< t \} }|d}| dks0td S )NrS   zaxes.titlecolorZTitle)r$   r%   r[   r\   	set_titleZ	get_colorr&   )r`   ra   titler'   r'   r(   test_axes_titlecolor_rcparams   s    

rk   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: UTCz	UTF-32-BE)encodingzlocale.getpreferredencoding)Zreturn_valueTFtimezoneUTC)r   r*   r   patchr$   Zrc_params_from_filegetr&   )r,   r-   r    r'   r'   r(   test_Issue_1713   s
    rq   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    rv   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d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d0td)dd+gffd1tfd2tfd3tfd4tfd5tfd6tfd7tfd8tfd9tfd:tftd;dd*d+gtftd#d<d=d>gtffd
td?d@tfdAtfdBtffd
tdCd=d>dgfd=d>dgd=d>dgfdDd=gfdd>dEgd>dEgftddFdFgtdFddFggtddFdFgdFddFggftddFdFgdFddFggtddFdFgdFddFggffdGtffd
tdHdItfdJtfdKtfdLtfdMtffd
tdNdOdPdQddd*gfddd*gddd*gftdRtdRffdtffd
tdSdTdUdVdWd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dXtfdddYgtfddd*gtfdddgtfdZtfd[tfd\tfd]tfd^tfd_tfd`tfdatfdbtfdctfd_tfdtft tffd
tdddedfdgdhdidjdkdldmdndodpdqdrdsgdFdrdtgffddd*d1gdFdudvdwdxgffdFddgfdFddgffd	ddgfd	ddgfffdtfdytfdzd{tfddd*gtfdrt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| }| rt|d} D ]\}}|||fV  qZn |d~ D ]\}}|||fV  q|q@d 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1r@   Tc                 s   s   | ]}|d fV  qdS )FNr'   rw   r'   r'   r(   ry      s     )fnnoofffalse0r   Fc                 s   s   | ]}|t fV  qd S NrF   rw   r'   r'   r(   ry      s   aardvarkrc   )	validatorsuccessfail za,babz
aardvark, zaardvark, ,)r   r   )r@   rc   r   2r@   )r   c                 s   s   | ]}|d dgfV  qdS )r@   rc   Nr'   rw   r'   r'   r(   ry      s   z1, 2      ?      @c                 s   s   | ]}|t fV  qd S r   r   rw   r'   r'   r(   ry      s   )r   r   r@   r@   rc   rW   c                 s   s   | ]}|d dgfV  qdS )r   r   Nr'   rw   r'   r'   r(   ry      s   z1.5, 2.5)r   r   c                 s   s   | ]}|t fV  qd S r   r   rw   r'   r'   r(   ry      s   )r   r   r   r   Nzcycler("color", "rgb")rR   ZrgbZ	linestyle---zW(cycler("color", ["r", "g", "b"]) +
                          cycler("mew", [2, 3, 5]))ZmarkeredgewidthrW      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])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C1rS   rT   ))--|r   )\oOr   )/+*/.xr   r   r   z--_   Xzr,g,bzr, ,Zbluer   Zfish)
NonerL   rL   rL   )ZAABBCCz#AABBCC)ZAABBCC00z	#AABBCC00)tab:bluer   )C12r   )z	(0, 1, 0))              ?r   )r   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"))autor   )fdr   )10
   z1, 2, 3   )NNr@   r@   皙?r   )r   r   )r   r   r   333333?)r   皙?r   )r   rc   rW   )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@   rW   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   Zaranger   slice	TypeErrorobjectr   encode)ZvalidZvalidation_testsZvalidator_dictr   argr_   Z
error_typer'   r'   r(   generate_validator_testcases   s   




 	
 +		       ?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   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'   )rx   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   sz   t jddid` t jd dks$ttt& t jtddgd W 5 Q R X W 5 Q R X t jd dksltW 5 Q R X d S )Nr   Fr   )r   T)z	test.blahT)r$   r+   r%   r&   rD   rE   KeyErrorr   r'   r'   r'   r(   test_rcparams_reset_after_fail  s    r   linuxz
Linux only)reasonc              	   C   sL   t jdddt| d}ttj tjtj	ddg|dd W 5 Q R X d S )Nr   )ZDISPLAYZWAYLAND_DISPLAY
MPLBACKENDMPLCONFIGDIR-czBimport matplotlib;matplotlib.use('tkagg');import matplotlib.pyplotT)envcheck)
osenvironr8   rD   rE   
subprocessCalledProcessErrorrunsys
executable)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   z9import matplotlib.pyplot; print(matplotlib.get_backend())T)r   universal_newlinesZagg)rD   Zimportorskipr   r   r8   r   check_outputr   r   striplowerr&   )r,   r   backendr'   r'   r(   test_backend_fallback_headful  s    
 r   )Ecollectionsr   rM   r   pathlibr   r   r   Zunittestr   r   r   rD   Z
matplotlibr$   r   r   Zmatplotlib.pyplotZpyplotr[   Zmatplotlib.colorscolorsZmcolorsZnumpyr   Zmatplotlib.rcsetupr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r.   r;   rJ   rK   rP   Zto_rgbaZlegend_color_testsZlegend_color_test_idsmarkZparametrizerb   rg   rh   rk   rq   rv   r   r   r   rF   r   r   r   r   Zskipifplatformr   Zdisplay_is_validr   r'   r'   r'   r(   <module>   s   @&!	



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