U
    Cvf                    @  s  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 d dlmZm	Z	m
Z
mZ d dl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mZ d dlmZ d d	lmZ d d
l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+m,Z, edZ-z d dl.Z/d dl0m1Z2 d dl3Z3W n e4k
r6   Y nX zd dl5Z5W n e4k
rZ   Y nX ej6dd Z7ej8ddddd Z9ej:j;ej:j<dddd Z=dd Z>dd Z?dd Z@dd ZAdd!d"ZBd#d$ ZCe+G d%d& d&ZDG d'd( d(eDZEG d)d* d*eDZFG d+d, d,eDZGG d-d. d.eDZHe+G d/d0 d0ZIe+G d1d2 d2ZJG d3d4 d4ZKej:jLG d5d6 d6eKeDZMej:jLG d7d8 d8eKeDZNG d9d: d:eKeDZOG d;d< d<eDZPej:jLG d=d> d>eKeDZQG d?d@ d@eKeDZRG dAdB dBeDZSej:TdCG dDdE dEeDZUej:TdCG dFdG dGeDZVej:TdCG dHdI dIeDZWe+G dJdK dKeDZXe+G dLdM dMeDZYe+G dNdO dOeDZZG dPdQ dQeDZ[ej:TdRe*ej:j\e- dSdG dTdU dUeDZ]e*ej:j\e-dVdG dWdX dXeDZ^e+G dYdZ dZZ_e+ej:`d[d\d]d^gd_d`dadbZae+ej:`d[d\dcgd_d`dddeZbe+d_d`dfdgZce+dhdi Zde+ej:`djdkdldmdngejedodddpi djdqejedrdddpdsdtidudqejeddvddpi dkdqejeddwddpdsdtidxdqejeddvd dpi dydqejeddvdzdpi d{dqejeddvd|dpi d}dqejeddddi dmdqejeddddpi d~dqejeddddpdsdtiddqg
dddddd_dddZfe+e)ej:`djdkdlgejedodddjdqejeddvddkdqejeddvd dydqejedddd~dqgdddd_dddZge+d_d`ddZhe+d_d`ddZie+ej:`ddddddddgd_d`ddZje+d_d`ddZke+ej:`dejeg ddqejed ddqgej:`ddddd^d]ddcd\ddg
ddd_dddZle+d_d`ddZmdS )    )annotationsN)copydatetime)AnyCallableHashableLiteral)	DataArrayDataset)module_available)_infer_interval_breaks)_infer_meta_data)_assert_valid_xy_build_discrete_cmap_color_palette_determine_cmap_params
_maybe_gcaget_axislabel_from_attrs)assert_array_equalassert_equalrequires_cartopyrequires_cftimerequires_matplotlibrequires_seabornZnc_time_axisc               	   o  s   z
dV  W 5 t d X dS )zCcontext manager which autocloses a figure (even if the test failed)allNpltclose)argskwargs r"   :/tmp/pip-unpacked-wheel-h316xyqg/xarray/tests/test_plot.pyfigure_context7   s    
r$   functionT)Zscopeautousec                  c  s*   dV  t t } | r&td|  ddS )aH  meta-test to ensure all figures are closed at the end of a test

    Notes:  Scope is kept to module (only invoke this function once per test
    module) else tests cannot be run in parallel (locally). Disadvantage: only
    catches one open figure per run. May still give a false positive if tests
    are run in parallel.
    Nz!tests did not close all figures (z figures open))lenr   Zget_fignumsRuntimeError)Z	open_figsr"   r"   r#   test_all_figures_closedA   s    	
r)   zmaybe flakyreasonc                   C  s   dd t  tjjD S )z2
    Return the set of all text in the figure
    c                 S  s   h | ]}|  qS r"   get_text.0tr"   r"   r#   	<setcomp>Y   s     ztext_in_fig.<locals>.<setcomp>)r   gcffindobjmpltextTextr"   r"   r"   r#   text_in_figS   s    r7   c                   C  s   t  tjjS N)r   r2   r3   r4   collectionsQuadMeshr"   r"   r"   r#   find_possible_colorbars\   s    r;   c                 C  s4   dd | tjjD }|D ]}| |kr dS qdS )zA
    Return True if a substring is found anywhere in an axes
    c                 S  s   h | ]}|  qS r"   r,   r.   r"   r"   r#   r1   e   s     z$substring_in_axes.<locals>.<setcomp>TF)r3   r4   r5   r6   )	substringaxalltxttxtr"   r"   r#   substring_in_axesa   s
    r@   c                   s2   dd | tjjD } fdd|D }t|S )zE
    Return True if a substring is not found anywhere in an axes
    c                 S  s   h | ]}|  qS r"   r,   r.   r"   r"   r#   r1   p   s     z(substring_not_in_axes.<locals>.<setcomp>c                   s   g | ]} |kqS r"   r"   r/   r?   r<   r"   r#   
<listcomp>q   s     z)substring_not_in_axes.<locals>.<listcomp>)r3   r4   r5   r6   r   )r<   r=   r>   checkr"   rB   r#   substring_not_in_axesl   s    rE   c                 C  sF   | tjj}g }|D ]&}| |kr|t|| |k qt|S )zd
    Return True if the specified text in an axes
    has the property assigned to property_str
    )	r3   r4   r5   r6   r-   appendr   Zgetpr   )propertyZproperty_strZ
target_txtr=   r>   rD   r0   r"   r"   r#   property_in_axes_textu   s    rH      c                 C  s    t j||t| d}|| S )z^
    Make an array with desired shape using np.linspace

    shape is a tuple like (2, 3)
    num)nplinspacemathprodreshape)shapestartstopar"   r"   r#   
easy_array   s    rU   c                 C  s"   | j dkr| j S | j S d S )NZvertical)Zorientationr=   
get_ylabel
get_xlabel)colorbarr"   r"   r#   get_colorbar_label   s    

rY   c                   @  sB   e Zd Zejdddd ZdddZejjdd	 Z	d
d Z
dS )PlotTestCaseTr&   c                 c  s   d V  t d d S )Nr   r   selfr"   r"   r#   setup   s    zPlotTestCase.setupNc                 C  s4   t jd|d\}}||d d |d  s0td S )N   )Zncols
subplot_kwr   r=   )r   subplotshas_dataAssertionError)r]   
plotmethodr`   figaxsr"   r"   r#   pass_in_axis   s    zPlotTestCase.pass_in_axisc                 C  s$   |  t  tjj}t|dkS Nr   )r   gcar3   r4   image	AxesImager'   )r]   re   Zimagesr"   r"   r#   imshow_called   s    zPlotTestCase.imshow_calledc                 C  s$   |  t  tjj}t|dkS ri   )r   rj   r3   r4   r9   PathCollectionr'   )r]   re   pathsr"   r"   r#   contourf_called   s    zPlotTestCase.contourf_called)N)__name__
__module____qualname__pytestfixturer^   rh   markslowrm   rp   r"   r"   r"   r#   rZ      s   



rZ   c                   @  s  e Zd ZejddddddZddddZddd	d
ZddddZddddZ	ddddZ
ddddZddddZddddZddddZddddZddddZddddZdddd Zddd!d"Zddd#d$Zddd%d&Zddd'd(Zejjddd)d*Zddd+d,Zddd-d.Zddd/d0Zddd1d2Zddd3d4Zddd5d6Zddd7d8Z ddd9d:Z!ddd;d<Z"ddd=d>Z#ddd?d@Z$ejjej%dAdddBdCZ&ejjdddDdEZ'ejjdddFdGZ(ejjej%dAdddHdIZ)dddJdKZ*dddLdMZ+dddNdOZ,dddPdQZ-ej.dRdSdddTdUZ/dVS )WTestPlotTr[   Nonereturnc                 C  s   t td| _d S Nr_         r
   rU   darrayr\   r"   r"   r#   setup_array   s    zTestPlot.setup_arrayc                 C  s0   ddl m} tj|kstt| jj|s,td S )Nr   )DataArrayPlotAccessor)xarray.plot.accessorr   r
   plotrd   
isinstancer   )r]   r   r"   r"   r#   test_accessor   s    zTestPlot.test_accessorc                 C  s  | j  }dt|kstd|_dt|ks0td|_d|jd< d|jd< d	|jd
< dt|ksdt|jd dt|kst|jd d	t|kstd|jd< |jd
 dt|kst|jd dt|kstd}t|d|_t||kstd S )N r   0rT   a_unitsunitsa_long_name	long_nameZa_standard_nameZstandard_namea_long_name [a_units]za_standard_name [a_units]za [a_units]z3$Ra_s = \mathrm{mean}(\epsilon_k) / \mu M^2_\infty$)r   )r   r   r   rd   nameattrspopdict)r]   daZlong_latex_namer"   r"   r#   test_label_from_attrs   s*    




zTestPlot.test_label_from_attrsc              	   C  s   | j d d ddf   tjtdd" | j d d ddf jdd W 5 Q R X tjtdd" | j d d ddf d   W 5 Q R X d S )Nr   zx must be one of None, 'dim_0'matchdim_1x
complex128              ?)r   r   rt   raises
ValueError	TypeErrorr\   r"   r"   r#   test1d   s
    &zTestPlot.test1dc                 C  s&   t j| jd d ddf td  d S )Nr   dtypexrZ	ones_liker   boolr   r\   r"   r"   r#   test_1d_bool   s    zTestPlot.test_1d_boolc           
   	   C  s   t d}tt |dg|gdd}d d gd dgdd gg}tdd\}}t|D ]"\}\}}|j|||j| d qRt	j
tdd	 |jddd
 W 5 Q R X d}	t	j
td|	 d	 |jdd W 5 Q R X t	j
td|	 d	 |jdd W 5 Q R X d S )N
   zfdimscoordsr   r~   rI   r   yr=   zCannot specify bothr   r   r   zmust be one of None, 'z'x r   y r   )rL   aranger
   cosr   rb   	enumerater   flatrt   r   r   )
r]   r   r   xyr   r=   Zaar   r   	error_msgr"   r"   r#   test_1d_x_y_kw   s    
zTestPlot.test_1d_x_y_kwc              
   C  s   t jtddtdtdfdtddfdd}|jddgd}dD ](}|j|dd	 }t| || j	 qHdD ](}|j|d
d	 }t|
 || j	 qvd S )N   r   r   rT   br   r   rT   r   r   r   r   )r   r
   rL   r   r   	set_indexr   r   	get_xdatavalues	get_ydata)r]   r   r   hr   r"   r"   r#   test_multiindex_level_as_coord   s     z'TestPlot.test_multiindex_level_as_coordc              
   C  s   t dtddgdgdgtddgfdgtddgfd	d
}|jjddd }t| |jd j |j d }t| |jd j d S )NIr      r0   皙?皙?d      )r0   V)r   datar   r   r   r   r   )	r
   rL   arrayr   liner   r   r   r   )r]   currentr   r"   r"   r#   test_infer_line_data  s    zTestPlot.test_infer_line_datac                 C  s   t jddgdgd}t jddgdgd}t jtdd	gd
dggddg||dd}|jdddd }t| |jd j |jdddd }t|	 |jd j d S )Nr   r   r   r   r   r      r0   r   rI   r   	   )r   time)r   r   r   r   r   huer   r   )
r   r
   rL   r   r   r   r   r   r   r   )r]   Zx_coordZt_coordr   r   r"   r"   r#   test_line_plot_along_1d_coord  s    z&TestPlot.test_line_plot_along_1d_coordc              	   C  sP   t jtddgddggddgd}tjtdd	 |jdd
d W 5 Q R X d S )Nr   rI   r   r   r   r0   r   zhue must be one ofr   Zwrong_coordr   )r   r
   rL   r   rt   r   r   r   r]   r   r"   r"   r#   test_line_plot_wrong_hue*  s    z!TestPlot.test_line_plot_wrong_huec              	   C  s*  t jtdd$ | jd d d d df j  W 5 Q R X | jd d d d df jjdd | jd d d d df jjdd | jd d d d df jjdd | jd d d d df jjddd	 | jd d d d df jjddd
 t jtdd, | jd d d d df jjdddd W 5 Q R X d S )Nr   r   r   r   r   r   r   dim_0r   r   ZCannotr   r   r   rt   r   r   r   r   r   r\   r"   r"   r#   test_2d_line3  s    ("""$$zTestPlot.test_2d_linec                 C  s   | j d d d d df jjddd t  r4tt  | j d d d d df jjddd t  sptt   	 dkstd S )Nr   r   F)r   
add_legendTr   )
r   r   r   r   rj   
get_legendrd   cla	get_titler-   r\   r"   r"   r#   test_2d_line_accepts_legend_kw@  s    $$z'TestPlot.test_2d_line_accepts_legend_kwc                 C  sx   | j d d d d df jjdd t  dks6tt  | j d d d d df jjdd t  dksttd S )Nr   r   r   r   )r   r   r   r   rj   rW   rd   r   r\   r"   r"   r#   test_2d_line_accepts_x_kwI  s
    ""z"TestPlot.test_2d_line_accepts_x_kwc                 C  s   | j d d d d df jjdd t    dks>tt	  | j d d d d df jjdd t    dkstd S )Nr   r   r   r   )
r   r   r   r   rj   r   r   r-   rd   r   r\   r"   r"   r#   test_2d_line_accepts_hue_kwP  s
    ""z$TestPlot.test_2d_line_accepts_hue_kwc              	   C  s   t t dddt ddd\}}||d 7 }||d 7 }tjt ddddd	gd
|fd
|fdd}t & |jj	dd	d}t
|dkstW 5 Q R X t & |jj	ddd}t
|dkstW 5 Q R X tjtdd |jj	ddd W 5 Q R X d S )Nir   r   r      r   r   r   r   r   r   )latlonr   r   r   z&For 2D inputs, hue must be a dimensionr   r   )rL   meshgridrM   r   r
   r   rP   r$   r   r   r'   rd   rt   r   r   )r]   r   r   r   hdlr"   r"   r#   test_2d_coords_line_plotW  s     $z!TestPlot.test_2d_coords_line_plotc                 C  sx   t d}t d}tj||dd}|j|j |j|j fD ]4}|j|d}|j|j |d< |d jjddd	 q>d S )
Nr   r   r   r   r   vr   r   r   )	rL   r   r   r   r   r   Zassign_coordsr   r   )r]   r   r   dsr   r"   r"   r#   2test_2d_coord_line_plot_coords_transpose_invariantl  s    

z;TestPlot.test_2d_coord_line_plot_coords_transpose_invariantc                 C  s   t td}|  d S )N)rI   r   )r
   rU   r   r]   rT   r"   r"   r#   test_2d_before_squeezew  s    zTestPlot.test_2d_before_squeezec                 C  s*   |  | jd d d d df jjs&td S ri   )rm   r   r   imshowrd   r\   r"   r"   r#   test2d_uniform_calls_imshow{  s    z$TestPlot.test2d_uniform_calls_imshowc                 C  s>   | j d d d d df }dddg|jd< | |jjs:td S )Nr   r_   rI   Y   r   )r   r   rp   r   contourfrd   r   r"   r"   r#    test2d_nonuniform_calls_contourf~  s    z)TestPlot.test2d_nonuniform_calls_contourfc              
   C  sb   d}t |}tt |ddgddg|ftdd|d dd}|jjddd	 |jjddd	 d S )
N)r   r   r   r   r   rI   )depthr   r   r   r   )rU   r
   rL   rM   r   r   )r]   szr   rT   r"   r"   r#   !test2d_1d_2d_coordinates_contourf  s    z*TestPlot.test2d_1d_2d_coordinates_contourfc                 C  s   d}t t |t |\}}tt||fddgddg|fddg|fdd}dD ]T\}}|jj||d}| d j}t j	|d d	 dd
d\}	}
t 
|
dksTtqTd S )Nr   r   r   x2dy2dr   )r   r   )r   r   )r   r   )r   r   )r   r   r   )r   r   r   r   T)axisZreturn_countsrI   )rL   r   r   r
   rU   r   
pcolormesh	get_pathsverticesuniquer   rd   )r]   r   r   r   rT   r   r   pr   _Zunique_countsr"   r"   r#   #test2d_1d_2d_coordinates_pcolormesh  s    

z,TestPlot.test2d_1d_2d_coordinates_pcolormeshc                 C  s   t tdddgd}tjj}|jjt|ddd}t|	t
jt
jgd |t
jt
jgd  |	t
j |t
j kst|	t
j|t
jkstd S )	Nr   r   r   r   r   r   ?)cmapvminvmaxr   )r
   rU   r4   cmviridisr   r   r   r   r
  rL   mamasked_invalidnaninfrd   r]   rT   r
  plr"   r"   r#   test_contourf_cmap_set  s    
zTestPlot.test_contourf_cmap_setc                 C  s@  t tdddgd}ttjj}|d t|tj	
tjgd tjtj	
tjgd ksht|d |tj tjtj kst|d |tjtjtj kst|jjt|d	}t|tj	
tjgd |tj	
tjgd  |tj |tj ks t|tj|tjks<td S )
Nr  r   r   r  wr   rgr
  )r
   rU   r   r4   r  r  Zset_badrL   r   r  r  r  rd   Z	set_underr  Zset_overr   r   r   r
  r  r"   r"   r#   *test_contourf_cmap_set_with_bad_under_over  s&    

 
 z3TestPlot.test_contourf_cmap_set_with_bad_under_overc                 C  s   | j   d S r8   )r   r   r\   r"   r"   r#   test3d  s    zTestPlot.test3dc                 C  s   |  | jj d S r8   )rh   r   r   r\   r"   r"   r#   test_can_pass_in_axis  s    zTestPlot.test_can_pass_in_axisc              	   C  sX  t dddgtddg t dddddgtddd	d
g t tjdddtdd ttjddd ttdtd\}}|dd dd f |d dd df  d }|dd dd f |d dd df  d }t|dd}t|dd}t|dd}t|dd}tj	|| tj	|| t
t ttdddgdd W 5 Q R X d S )N            ?      ?r   rI   g      @      #@g      %@r   r   Z20000101r   periods   r   r~      r   r   r_   r   T)Zcheck_monotonic)r   r   pd
date_rangerL   Ztimedelta64r   r   testingassert_allclosert   r   r   r   )r]   ZxrefZyrefZcxcyr   r   r"   r"   r#   test__infer_interval_breaks  s(     ,,z$TestPlot.test__infer_interval_breaksc                 C  s   t ddd}dt ddd }t jt|dd	| t ddd}t d
dd}t ||\}}t dt ddd gd }t|ddd}t|ddd}t j|| dS )zU
        Check if interval breaks are defined in the logspace if scale="log"
        r~   r   r   g            @r   logscaler      r#  rI   )r   r0  r   N)rL   logspacerM   r(  r)  r   r   Zvstack)r]   r   Zexpected_interval_breaksr   r"   r"   r#   $test__infer_interval_breaks_logscale
  s    
 z-TestPlot.test__infer_interval_breaks_logscalec              	   C  sd   t ddd}tt t|dd W 5 Q R X t ddd}tt t|dd W 5 Q R X dS )	z[
        Check error is raised when passing non-positive coordinates with logscale
        r   r   r$  r.  r/  r1  r2  N)rL   rM   rt   r   r   r   )r]   r   r"   r"   r#   3test__infer_interval_breaks_logscale_invalid_coords  s    z<TestPlot.test__infer_interval_breaks_logscale_invalid_coordsc              
   C  s   t dddddgdddd	d
gdddddgdddddgg}t dddddgdddddgdd d!d"d#gd$d%d&d'd(gg}t |d) |d)  }t|d*d*|fd*|fd+d,}|jd-d.d/ t }| st|jd.d-d/ t }| std S )0NgHzG0@g{Gz2@gGz3@g
ףp=3@gY2@gR<@gQ>@g{G?@gGz?@gQ^>@g33333C@g(\"E@gHzE@gzGE@gGzE@g(\BI@g\(J@gfffffFK@g     @K@gHzJ@gQ_g\(l\g{G:Yg(\Vg(\Rgq=
ף(`gHz\g(\bYgGzUgq=
ףPRg33333`g     ]gp=
דYg{GUgq=
ףQg33333;ag(\?^gRYgRQUgHzPr_   r   )r   r   r   r   r   r   )	rL   r   sqrtr
   r   r   rj   rc   rd   )r]   r   r   r   r   r=   r"   r"   r#   test_geo_data+  s4    zTestPlot.test_geo_datac                 C  sZ   d}d}t jd|d}tt||fd|fdt|fgd}|  t }| sVt	d S )Nr~   r   
2000-01-01r!  r   r   r   )
r&  r'  r
   rU   ranger   r   rj   rc   rd   )r]   ZnrowZncolr   rT   r=   r"   r"   r#   test_datetime_dimensionK  s    
 z TestPlot.test_datetime_dimensionignore:tight_layout cannotc              	   C  s   t d}t|dddgd}td|jd< |jdddddd	}t|jjddg |jjD ]}|	 sVt
qVtjtd
d |jdddt d W 5 Q R X tjtd
d  |d jdddt d W 5 Q R X d S )Nr      r   r   r   r   r  abcdr_   cool)r   r   colcol_wrapr
  [Ff]acetr   r   r   r@  r=   r   )rU   r
   listr   r   r   rg   rQ   r   rc   rd   rt   r   r   r   rj   r]   rT   dr  r=   r"   r"   r#   test_convenient_facetgridV  s     z"TestPlot.test_convenient_facetgridc              	   C  sv   t d}t|dddgd}td|jd< |jdddddtd	d
d}|jjD ]$}| dd t	j
d	ksLtqLd S )Nr<  r   r   r   r  r>  r_   r?  r  )Z	facecolor)r   r   r@  rA  r
  subplot_kwsr   r~   )rU   r
   rD  r   r   r   rg   r   Zget_facecolorr4   colorsZto_rgbrd   rE  r"   r"   r#   test_subplot_kwsh  s    zTestPlot.test_subplot_kwsc              	   C  sZ  | j d d ddf jdd tt  dks4t| j jdd tt  dksZt| j jdd t  d dkst| j jddd tt  d	ksttjt	d
d | j jt
 dd W 5 Q R X tjt	d
d | j jddd W 5 Q R X tjt	d
d | j jdt
 d W 5 Q R X tjt	dd | j jdd W 5 Q R X d S )Nr   )   r   )figsizer   sizerI   r_   rN  aspectr   r   cannot provide bothr   )r~   r   )r=   rL  )rN  rL  )rN  r=   zcannot provide `aspect`rP  )r   r   tupler   r2   get_size_inchesrd   rt   r   r   rj   r\   r"   r"   r#   test_plot_sizey  s     zTestPlot.test_plot_sizec              	   C  s   t d}t|ddddgd}|jddddd}t|jjdd	g |jjD ]}| sHtqHt	j
td
d |jdddt d W 5 Q R X d S )Nr   r=  r_   r~   r   r   columnsrowsr  r   r   r@  rowr~   r_   rB  r   rC  )rU   r
   r   r   rg   rQ   r   rc   rd   rt   r   r   r   rj   rE  r"   r"   r#   test_convenient_facetgrid_4d  s    z%TestPlot.test_convenient_facetgrid_4dc                 C  s(   ddddg}| j d|d  dS )zTest line plot with intervals.r   r   rI   r_   r   .Nr   groupby_binsmeanr   r]   binsr"   r"   r#   test_coord_with_interval  s    z!TestPlot.test_coord_with_intervalc                 C  s,   ddddg}| j d|djdd d	S )
z3Test line plot with intervals explicitly on x axis.r   r   rI   r_   r   .
dim_0_binsr   Nr]  r`  r"   r"   r#   test_coord_with_interval_x  s    z#TestPlot.test_coord_with_interval_xc                 C  s,   ddddg}| j d|djdd d	S )
z3Test line plot with intervals explicitly on y axis.r   r   rI   r_   r   .rc  r   Nr]  r`  r"   r"   r#   test_coord_with_interval_y  s    z#TestPlot.test_coord_with_interval_yc                 C  s*   ddddg}| j d|dj  dS )z3Test line plot with intervals on both x and y axes.r   r   rI   r_   r   .N)r   r^  r_  rc  r   r`  r"   r"   r#   test_coord_with_interval_xy  s    z$TestPlot.test_coord_with_interval_xydimr   c                 C  sp   ddddg}| j d|d}d|jjd< |jf |d	i\}|j }t|d
| d }d}||kslt	dS )z4Test line plot with intervals and a units attribute.r   r   rI   r_   r   .mr   rc  get_labelzdim_0_bins_center [m]N)
r   r^  r_  rc  r   r   figurerj   getattrrd   )r]   rg  ra  arrmappabler=   actualexpectedr"   r"   r#   $test_labels_with_units_with_interval  s    
z-TestPlot.test_labels_with_units_with_intervalN)0rq   rr   rs   rt   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rv   rw   r   r   r  r  r  r  r  r+  r4  r5  r7  r:  filterwarningsrG  rJ  rV  r\  rb  rd  re  rf  parametrizerq  r"   r"   r"   r#   rx      s`   
			$ 

rx   c                   @  s   e Zd ZejddddddZddddZddd	d
ZddddZddddZ	ddddZ
ddddZddddZddddZddddZejjddddZddddZddddZdddd Zddd!d"Zd#S )$
TestPlot1DTr[   ry   rz   c                 C  s:   ddddg}t |dtt|idd| _d| jjjd< d S )Nr   g?r_   period)r   r   sr   )r
   r9  r'   r   ru  r   r]   rF  r"   r"   r#   setUp  s    zTestPlot1D.setUpc                 C  s"   | j   dt  kstd S )Nz
period [s]r   r   r   rj   rW   rd   r\   r"   r"   r#   test_xlabel_is_index_name  s    
z$TestPlot1D.test_xlabel_is_index_namec                 C  s&   | j jdd dt  ks"td S )Nru  r   r   ry  r\   r"   r"   r#   test_no_label_name_on_x_axis  s    z'TestPlot1D.test_no_label_name_on_x_axisc                 C  s"   | j   dt  kstd S )Nr   )r   r   r   rj   rV   rd   r\   r"   r"   r#   test_no_label_name_on_y_axis  s    
z'TestPlot1D.test_no_label_name_on_y_axisc                 C  s6   d| j _d| j jd< | j   dt  ks2td S )Ntemperaturedegrees_Celsiusr   temperature [degrees_Celsius])r   r   r   r   r   rj   rV   rd   r\   r"   r"   r#   test_ylabel_is_data_name  s    
z#TestPlot1D.test_ylabel_is_data_namec                 C  s:   d| j _d| j jd< | j jdd dt  ks6td S )Nr}  r~  r   ru  r   r  )r   r   r   r   r   rj   rW   rd   r\   r"   r"   r#   test_xlabel_is_data_name  s    z#TestPlot1D.test_xlabel_is_data_namec                 C  s   | j jd d S )Nror   r   r   r\   r"   r"   r#   test_format_string  s    zTestPlot1D.test_format_stringc                 C  s   |  | jjj d S r8   )rh   r   r   r   r\   r"   r"   r#   r    s    z TestPlot1D.test_can_pass_in_axisc                 C  s,   t dddgddddgidd}|j  d S )	NrI   r_   r~   letterrT   r   cr  )r
   r   r   r   r"   r"   r#   test_nonnumeric_index  s    z TestPlot1D.test_nonnumeric_indexc                 C  s&   | j j }t|d tjjs"td S ri   )r   r   r   r   r4   linesLine2Drd   )r]   r  r"   r"   r#   test_primitive_returned  s    z"TestPlot1D.test_primitive_returnedc                 C  s   t j| jd< | jj  d S NrI   )rL   r  r   r   r   r\   r"   r"   r#   test_plot_nans  s    zTestPlot1D.test_plot_nansc                 C  sT   t dd}ttt|d|fg}|j  t	 
 d  }|dksPtd S )Nr8  
2000-01-10r0   r   )r&  r'  r
   rL   r   r'   r   r   r   rj   get_xticklabelsget_rotationrd   r]   r   rT   Zrotationr"   r"   r#   !test_x_ticks_are_rotated_for_time  s
    
z,TestPlot1D.test_x_ticks_are_rotated_for_timec                 C  sd   | j jjddd t  }t  }|d |d  |d |d  f}tdd |D s`td S )NF	xincrease	yincreaserI   r   c                 s  s   | ]}|d k V  qdS )r   Nr"   r/   r   r"   r"   r#   	<genexpr>  s     z@TestPlot1D.test_xyincrease_false_changes_axes.<locals>.<genexpr>)	r   r   r   r   rj   get_xlimget_ylimr   rd   r]   xlimylimZdiffsr"   r"   r#   "test_xyincrease_false_changes_axes  s
     z-TestPlot1D.test_xyincrease_false_changes_axesc                 C  s4   d| j jd< | j j  t  }d|ks0td S )NS㥛$@rF  	d = 10.01)r   r   r   r   r   rj   r   rd   )r]   titler"   r"   r#   test_slice_in_title  s    zTestPlot1D.test_slice_in_titlec                 C  sB   | j dtdgi}|jjdd t  }d|ks>t	dS )z-Edge case for data of shape (1, N) or (N, 1).rF  r  ru  r   r  N)
r   Zexpand_dimsrL   r   r   r   r   rj   r   rd   )r]   r   r  r"   r"   r#   %test_slice_in_title_single_item_array
  s    z0TestPlot1D.test_slice_in_title_single_item_arrayN)rq   rr   rs   rt   ru   rx  rz  r{  r|  r  r  r  r  r  r  rv   rw   r  r  r  r  r  r"   r"   r"   r#   rt    s"   
rt  c                   @  s   e Zd ZejddddddZddddZejd	d
ddgddddZ	ddddZ
ejd	d
ddgddddZddddZejd	d
ddgddddZddddZddddZddddZddddZdS ) TestPlotStepTr[   ry   rz   c                 C  s   t td| _d S r|   r   r\   r"   r"   r#   rx    s    zTestPlotStep.setUpc                 C  s(   | j d j }d|d  ks$td S )Nr   r   stepsr   r   r   stepget_drawstylerd   r]   r   r"   r"   r#   	test_step  s    zTestPlotStep.test_stepwhereprepostZmidc                 C  s2   | j d jj|d}|d  d| ks.td S )Nr  )r  r   steps-r  r]   r  r   r"   r"   r#   test_step_with_where  s    z!TestPlotStep.test_step_with_wherec                 C  s,   | j d jjdd}|d  dks(td S )Nr   dim_2r   z	steps-prer  r  r"   r"   r#   test_step_with_hue   s    zTestPlotStep.test_step_with_huec                 C  s4   | j d jjd|d}|d  d| ks0td S )Nr   r  )r   r  r  r  r  r"   r"   r#   test_step_with_hue_and_where$  s    z)TestPlotStep.test_step_with_hue_and_wherec                 C  s,   | j d jddd}|d  dks(td S )Nr   r  r  r   Z	drawstyler   r   r  rd   r  r"   r"   r#   test_drawstyle_steps)  s    z!TestPlotStep.test_drawstyle_stepsc                 C  s8   | j d jdd| d}|d  d| ks4td S )Nr   r  r  r  r  r  r"   r"   r#   test_drawstyle_steps_with_where-  s    z,TestPlotStep.test_drawstyle_steps_with_wherec                 C  sT   ddddg}| j d|dj  tt jd 	 t|d d ksPt
dS )zTest step plot with intervals.r   r   rI   r_   r   .Nr   r^  r_  r   r  r'   r   rj   r  r   rd   r`  r"   r"   r#   test_coord_with_interval_step2  s    z*TestPlotStep.test_coord_with_interval_stepc                 C  sX   ddddg}| j d|djjdd tt jd 	 t|d d ksTt
d	S )
z3Test step plot with intervals explicitly on x axis.r   r   rI   r_   r   .rc  r   Nr  r`  r"   r"   r#   test_coord_with_interval_step_x8  s    z,TestPlotStep.test_coord_with_interval_step_xc                 C  sX   ddddg}| j d|djjdd tt jd 	 t|d d ksTt
d	S )
z3Test step plot with intervals explicitly on y axis.r   r   rI   r_   r   .rc  r   Nr  r`  r"   r"   r#   test_coord_with_interval_step_y>  s    z,TestPlotStep.test_coord_with_interval_step_yc              	   C  sd   t jtddtddgdtddtddgfgd}tjtdd |j  W 5 Q R X dS )	zHTest that step plot with intervals both on x and y axes raises an error.r   rI   r_   r   r   zintervals against intervalsr   N)	r   r
   r&  ZIntervalrt   r   r   r   r  r]   rm  r"   r"   r#   8test_coord_with_interval_step_x_and_y_raises_valueeerrorD  s    zETestPlotStep.test_coord_with_interval_step_x_and_y_raises_valueeerrorN)rq   rr   rs   rt   ru   rx  r  rv   rs  r  r  r  r  r  r  r  r  r  r"   r"   r"   r#   r    s   
r  c                   @  s   e Zd ZejddddddZddddZddd	d
ZddddZddddZ	ddddZ
ddddZejjddddZddddZdS )TestPlotHistogramTr[   ry   rz   c                 C  s   t td| _d S r|   r   r\   r"   r"   r#   rx  O  s    zTestPlotHistogram.setUpc                 C  s   | j j  d S r8   )r   r   histr\   r"   r"   r#   test_3d_arrayS  s    zTestPlotHistogram.test_3d_arrayc                 C  s8   d| j _d| j jd< | j j  dt  ks4td S )NZ
testpointsZ	testunitsr   ztestpoints [testunits])	r   r   r   r   r  r   rj   rW   rd   r\   r"   r"   r#   test_xlabel_uses_nameV  s    z'TestPlotHistogram.test_xlabel_uses_namec                 C  s0   d| j jd< | j j  dt  ks,td S )Nr   rF  zd = 10)r   r   r   r  r   rj   r   rd   r\   r"   r"   r#   test_title_is_histogram\  s    z)TestPlotHistogram.test_title_is_histogramc                 C  s.   d}| j jj|d |tt jks*td S )Nr   )ra  )r   r   r  r'   r   rj   patchesrd   )r]   Znbinsr"   r"   r#   test_can_pass_in_kwargsa  s    z)TestPlotHistogram.test_can_pass_in_kwargsc                 C  s   |  | jjj d S r8   )rh   r   r   r  r\   r"   r"   r#   r  f  s    z'TestPlotHistogram.test_can_pass_in_axisc                 C  s*   | j j }t|d d tjjs&td S )Nr   r   )r   r   r  r   r4   r  Z	Rectanglerd   )r]   r   r"   r"   r#   r  i  s    z)TestPlotHistogram.test_primitive_returnedc                 C  s   t j| jd< | jj  d S )N)r   r   r   )rL   r  r   r   r  r\   r"   r"   r#   r  m  s    z TestPlotHistogram.test_plot_nansc                 C  s*   | j dddddgdjjdd d S )	Nr   r   r   rI   r_   .)r   r_   r9  )r   r^  r_  r   r  r\   r"   r"   r#   test_hist_coord_with_intervalr  s    z/TestPlotHistogram.test_hist_coord_with_intervalN)rq   rr   rs   rt   ru   rx  r  r  r  r  r  r  rv   rw   r  r  r"   r"   r"   r#   r  N  s   
r  c                   @  s   e Zd ZejddddddZddddZddd	d
ZddddZddddZ	ddddZ
ddddZejjddddZddddZddddZddddZdS )TestDetermineCmapParamsTr[   ry   rz   c                 C  s   t jdddd| _d S )Nr   rI   r   rJ   )rL   rM   r   r\   r"   r"   r#   rx  |  s    zTestDetermineCmapParams.setUpc                 C  s   t | jdd}|d t| jdks(t|d t| jdksBt|d dksRt|d	 d
ksbt|d d ksrt|d d kstd S )NTrobustr  r_   r  b   r
  r  extendbothlevelsnorm)r   r   rL   Z
percentilerd   r]   cmap_paramsr"   r"   r#   test_robust  s    z#TestDetermineCmapParams.test_robustc                 C  sn   t | jdd}|d d d|d  ks*t|d dks:t|d dksJt|d	 d ksZt|d
 d ksjtd S )Nr  centerr  r  r
  RdBu_rr  neitherr  r  )r   r   rd   r  r"   r"   r#   test_center  s    z#TestDetermineCmapParams.test_centerc              	   C  s6   t jdd  t| j}|d dks(tW 5 Q R X d S )NmagmaZcmap_sequentialr
  r   set_optionsr   r   rd   r  r"   r"   r#   test_cmap_sequential_option  s    
z3TestDetermineCmapParams.test_cmap_sequential_optionc              	   C  s>   t jtjjd$ t| j}|d tjjks0tW 5 Q R X d S )Nr  r
  )r   r  r4   r  r  r   r   rd   r  r"   r"   r#   $test_cmap_sequential_explicit_option  s    
z<TestDetermineCmapParams.test_cmap_sequential_explicit_optionc              	   C  s:   t jdd$ t| jdd}|d dks,tW 5 Q R X d S )Nr  )Zcmap_divergentr  r  r
  r  r  r"   r"   r#   test_cmap_divergent_option  s    z2TestDetermineCmapParams.test_cmap_divergent_optionc                 C  s`   t | j}| j}tj|dd< tj|dd< t |}|d |d ksHt|d |d ks\td S )N2   7   8   <   r  r  )r   r   rL   r  r  rd   )r]   Zcmap_params1r   Zcmap_params2r"   r"   r#   test_nan_inf_are_ignored  s    
z0TestDetermineCmapParams.test_nan_inf_are_ignoredc                 C  s  | j d }tjddtdD ]t}t||d}|d d ks:t|d d ksJt|d j|d	 d
 ksdt|d j|d	 d ks~t|d dkstqt|dd
ddd}|d d kst|d d kst|d jd
kst|d jdkst|d j|d	 d
 kst|d j|d	 d kst|d jdks2t|d dksDt|d j	dksXt|d j	dksltt|dddd}|d jdkst|d dkstt|ddd}|d jdkst|d dkstt|dddd}|d jdkst|d dkstd S )NrI   r_   r   r   r  r  r  r  r  r   r   r  r  r   Bluesr  r  r  r
  r
  r   r  r  r  r  r  r  max)r  r  ming?r  )
r   rL   r   intr   rd   r  r  r   N)r]   r   levelr  r"   r"   r#   test_integer_levels  sD    
    z+TestDetermineCmapParams.test_integer_levelsc                 C  s   | j d }ddddddg}t||ddd}|d d ks:t|d	 d ksJt|d
 jdks\t|d
 jdksnt|d jdkst|d
 jdkstttjt	j
tfD ]"}t|||d}t|d | qd S )NrI   r   r_   r~   r   r   r  r  r  r  r
  r$  r  r  )r   r   rd   r  r  r  rD  rL   r   r&  ZIndexr
   r   )r]   r   Zorig_levelsr  Zwrap_levelsr"   r"   r#   test_list_levels  s    
z(TestDetermineCmapParams.test_list_levelsc                 C  s|  | j d }| j }t|}|d dks(t|d dks8t|d dksHtt|}|d dks`t|d d	kspt|d d
kstt|ddd}|d dkst|d d	kst|d dkstt|ddd}|d dkst|d dkst|d dkstt|dd}|d dkst|d d	ks,t|d dks>tt|dd}|d dks\t|d d	ksnt|d d
kstt|dd}|d dkst|d dkst|d d
kstt|dd}|d dkst|d dkst|d d
kstt|ddd}|d dks$t|d dks6t|d d
ksHtt|dd}|d dksft|d dksxt|d d
kstt|dd}|d dkst|d dkst|d dkstt|dd}|d dkst|d dkst|d dkstt|ddd}|d dks.t|d dks@t|d dksRtt|dddgd}|d jd
ksxtd S )Nr   r  r   r  rI   r
  r  gr	  r  gF)r  r  r  )r  r  r  )r  )r  r  g333333?皙ٿgɿr  r  r  )r   r   rd   r   )r]   negposr  r"   r"   r#   test_divergentcontrol  sp    
z-TestDetermineCmapParams.test_divergentcontrolc           	   	   C  s&  | j  }| j  }ttj tj tj|d |d tjd |d tj|d d gdddddgdd d d d gD ]\}}}|jd kr|n|j}|jd kr|n|j}t	| j ||d}|d d kst
|d	 d kst
|d
 j|kst
|d
 j|kst
|d |kst
|d
 |ksxt
qxd S )Nr   r  r  r  r     )r  r  r  r  r  r  )r   r  r  zipr4   rI  Z	Normalizer  r  r   rd   )	r]   r  r  r  r  r  Ztest_minZtest_maxr  r"   r"   r#   test_norm_sets_vmin_vmax0  s*    

z0TestDetermineCmapParams.test_norm_sets_vmin_vmaxN)rq   rr   rs   rt   ru   rx  r  r  r  r  r  r  rv   rw   r  r  r  r  r"   r"   r"   r#   r  z  s   
		'Nr  c                   @  s   e Zd Zejdddd ZejjddddZejjddd	d
Z	ejjddddZ
ejjddddZddddZddddZdS )TestDiscreteColorMapTr[   c                 c  s   t jdddd}t jdddd}t t ||}t jj|dd}t|ttd	||f| _	|
 | _| | _d V  td
 d S )Nr   r   r_   )rR   rS   r  r   ir%  r   r   )rL   r   Zdstackr   Zlinalgr  r
   rD  r  r   r  data_minr  data_maxr   r   )r]   r   r   r   Zdistancer"   r"   r#   rx  N  s    

zTestDiscreteColorMap.setUpry   rz   c                 C  s0   t dd}t|tjkstt|dks,td S )Njetr   )r   typerL   Zndarrayrd   r'   )r]   Zpalr"   r"   r#   'test_recover_from_seaborn_jet_exception[  s    
z<TestDiscreteColorMap.test_recover_from_seaborn_jet_exceptionc                 C  s   dddgddfdddgd	d
ffD ]\}}}}t ||||\}}|jt|d ksTtt|jt|d ksnt|jt|kstt|j| t||jkstt	||j
kst|r|j|kstq |jd	ks tq d S )Nr  r   rI   r  FZhotr,  r   r  T)r   r  r'   rd   rI  r   
boundariesr  r  r  r  colorbar_extend)r]   r
  r  r  ZfilledZncmapZcnormr"   r"   r#   test_build_discrete_cmapa  s    z-TestDiscreteColorMap.test_build_discrete_cmapc                 C  s   ddddddgfddddd	gfd
ddddgfdddddgffD ]\}}dD ]}t | jj||d}t||jj t||jjkstt	||jj
kst|dkr||jjkstnd|jjkstt|d t|jjksJtqJq>d S )Nr  r   r_   r   r   r   r  r   r2  r  r   r=  r  r   r   r   contourr  r   rI   )rl  r   r   r   r  r  r  r  rd   r  r  r
  r  r'   rI  )r]   r  r  kind	primitiver"   r"   r#   %test_discrete_colormap_list_of_levelss  s    z:TestDiscreteColorMap.test_discrete_colormap_list_of_levelsc                 C  s   dddd dt jjfddfD ]\}}}}}dD ]}t| jj|||||d}|t|jjd	 ksbt	|d kr~|jj
| jkst	n|jj
|kst	|d kr|jj| jkst	n|jj|kst	|d
kr||jjkst	nd|jjkst	|t|jjks,t	q,qd S )N)r  r  NNNr  r  r   )r  r  r   r   N)r  r   r   r=  Nr  r  rI   r   r  )r4   r  RdBurl  r   r   r'   r  r  rd   r  r  r  r  r
  r  rI  )r]   r  r  r  r  r
  r  r  r"   r"   r#   !test_discrete_colormap_int_levels  s.       z6TestDiscreteColorMap.test_discrete_colormap_int_levelsc                 C  sJ   ddddg}| j j|ddd}|jjt|ks2t|jjt|ksFtd S )Nr   r   r   r=  r  r   r  )r   r   r  r  r  rd   r  r  )r]   r  r  r"   r"   r#   3test_discrete_colormap_list_levels_and_vmin_or_vmax  s    zHTestDiscreteColorMap.test_discrete_colormap_list_levels_and_vmin_or_vmaxc                 C  s<   t jddddgd}| jjj|d}tj|j	|j
 d S )Nr   r   r   r=  r   r  )r4   rI  ZBoundaryNormr   r   r   rL   r(  r)  r  r  )r]   r  r  r"   r"   r#   -test_discrete_colormap_provided_boundary_norm  s    zBTestDiscreteColorMap.test_discrete_colormap_provided_boundary_normN)rq   rr   rs   rt   ru   rx  rv   rw   r  r  r  r  r  r  r"   r"   r"   r#   r  L  s   

r  c                   @  s  e Zd ZU dZded< ded< ded< dZd	ed
< ejddddddZddddZ	ddddZ
ddddZddddZddddZddddZddddZdddd Zddd!d"Zddd#d$Zddd%d&Zddd'd(Zddd)d*Zejd+ejd,ddd-d.Zejd/ddd0d1Zddd2d3Zddd4d5Zddd6d7Zeddd8d9Zddd:d;Zddd<d=Z ddd>d?Z!ddd@dAZ"dddBdCZ#dddDdEZ$dddFdGZ%dddHdIZ&dddJdKZ'dddLdMZ(dddNdOZ)dddPdQZ*dddRdSZ+dddTdUZ,dddVdWZ-ejdXdddYdZZ.ejdXddd[d\Z/ejd]ddd^d_Z0ddd`daZ1dddbdcZ2dddddeZ3dddfdgZ4dddhdiZ5dddjdkZ6dS )lCommon2dMixinz
    Common tests for 2d plotting go here.

    These tests assume that a staticmethod for `self.plotfunc` exists.
    Should have the same name as the method.
    r
   r   staticmethodplotfuncr   rh   Nzdict[Any, Any] | NonerH  Tr[   ry   rz   c                 C  s   t tdddddgtdtddd	}|jd
d}t|jj|jj\}}t |ddgd|d< t |ddgd|d< |	ddg}|j
| _d| jjd< d| jjd< d| jjjd< d| jjjd< d| jjjd< d| jjjd< t| jj| jj| _d S )N)r   r=  r   rR   r   r   r   r=  r   r   testvarr   r  r   r   r   r   r   r   Zx_long_nameZx_unitsZy_long_nameZy_units)r
   rU   rL   r   
to_datasetr   r   r   r   Z
set_coordsr  r   r   rl  r   r  rq   re   )r]   r   r   r   r   r"   r"   r#   rx    s$    
zCommon2dMixin.setUpc                 C  s4   |    dt  kstdt  ks0td S )Nx_long_name [x_units]y_long_name [y_units]re   r   rj   rW   rd   rV   r\   r"   r"   r#   test_label_names  s    zCommon2dMixin.test_label_namesc              	   C  s6   t jtdd | | jdd d f  W 5 Q R X d S )NDataArray must be 2dr   r   )rt   r   r   r  r   r\   r"   r"   r#   test_1d_raises_valueerror  s    z'Common2dMixin.test_1d_raises_valueerrorc                 C  s   t j| jtd  d S )Nr   r   r\   r"   r"   r#   	test_bool  s    zCommon2dMixin.test_boolc              	   C  s,   t jtdd | jd   W 5 Q R X d S )Nr   r   r   )rt   r   r   r   r   r\   r"   r"   r#   test_complex_raises_typeerror  s    z+Common2dMixin.test_complex_raises_typeerrorc              	   C  sH   t td}| jjdkr t  tjtdd | | W 5 Q R X d S )Nr}   r   r  r   )r
   rU   r  rq   rt   skipr   r   r   r"   r"   r#   test_3d_raises_valueerror  s
    z'Common2dMixin.test_3d_raises_valueerrorc              	   C  sZ   t tddddgddggd}| jjdkrLtt | | W 5 Q R X n
| | d S )	Nr~   r_   rT   r   r  rF  er   surface)r
   rU   r  rq   rt   r   	Exceptionr   r"   r"   r#   r    s
    z#Common2dMixin.test_nonnumeric_indexc              	   C  sj   t tddtddddgfdddgfdddgfd	d
}|jdd}tjtdd | | W 5 Q R X d S )Nr  r   r   r   rI   r_   r   r~   r   rT   r   r   r   r   z[Pp]lotr   )r
   rU   r   r   rt   r   r   r  r   r"   r"   r#    test_multiindex_raises_typeerror  s    &z.Common2dMixin.test_multiindex_raises_typeerrorc                 C  s   |  | j d S r8   rh   re   r\   r"   r"   r#   r     s    z#Common2dMixin.test_can_pass_in_axisc                 C  s   |  ttddddgddggd t  }|d |d k sDtt  }|d |d k sdt|  ttddddgddggd t  }|d |d k stt  }|d |d k std S )Nr  rI   r_   r~   r   r   )r  r
   rU   r   rj   r  rd   r  )r]   Zboundsr"   r"   r#   test_xyincrease_defaults  s    $$z&Common2dMixin.test_xyincrease_defaultsc                 C  sl   | j ddd t  }t  }|d d |d d |d d |d d f}tdd |D shtd S )	NFr  r      rI   r   c                 s  s   | ]}t |d k V  qdS rI   Nabsr  r"   r"   r#   r    s     zCCommon2dMixin.test_xyincrease_false_changes_axes.<locals>.<genexpr>re   r   rj   r  r  r   rd   r  r"   r"   r#   r    s
    ,z0Common2dMixin.test_xyincrease_false_changes_axesc                 C  sl   | j ddd t  }t  }|d d |d d |d d |d d f}tdd |D shtd S )	NTr  r   rI   r"  r   c                 s  s   | ]}t |d k V  qdS r#  r$  r  r"   r"   r#   r    s     zBCommon2dMixin.test_xyincrease_true_changes_axes.<locals>.<genexpr>r&  r  r"   r"   r#   !test_xyincrease_true_changes_axes  s
    ,z/Common2dMixin.test_xyincrease_true_changes_axesc                 C  sd   t dd}ttjdt|dddgfd|fg}|jdd t	 
 d  }|dks`td S )	Nr8  r  r_   ZxxrI   r0   r   r   )r&  r'  r
   rL   randomrandnr'   r   r   rj   r  r  rd   r  r"   r"   r#   r  !  s
    (z/Common2dMixin.test_x_ticks_are_rotated_for_timec                 C  sR   | j d d }| j  }tj|dd < | | }| | }||ksNtd S )Nr   )r   r   rL   r  r  get_climrd   )r]   x1Zx2Zclim1Zclim2r"   r"   r#   r  (  s    
zCommon2dMixin.test_plot_nanszignore::UserWarningz ignore:invalid value encounteredc                 C  s   |  ttdtj d S )Nr_   r_   )r  r
   rL   fullr  r\   r"   r"   r#   test_can_plot_all_nans1  s    z$Common2dMixin.test_can_plot_all_nanszignore: Attempting to setc                 C  s$   | j jdkr |  ttd d S )N)r   r   )rI   rI   )r  rq   r
   rL   onesr\   r"   r"   r#   test_can_plot_axis_size_one7  s    z)Common2dMixin.test_can_plot_axis_size_onec              	   C  s2   t t | jttddd W 5 Q R X d S )Nr,  znot Nonergb)rt   r   r   r  r
   rL   r/  r\   r"   r"   r#   test_disallows_rgb_arg<  s    z$Common2dMixin.test_disallows_rgb_argc                 C  s"   | j dd j}d|kstd S )Nr  r  re   get_cmapr   rd   r]   Z	cmap_namer"   r"   r#   test_viridis_cmapA  s    zCommon2dMixin.test_viridis_cmapc                 C  s@   |    j}d|kst| t| j j}d|ks<td S )Nr  r  )re   r5  r   rd   r  r%  r   r6  r"   r"   r#   test_default_cmapE  s    zCommon2dMixin.test_default_cmapc                 C  s$   | j ddd j}d|ks td S )Nr_   husl)r  r
  r4  r6  r"   r"   r#   test_seaborn_palette_as_cmapL  s    z*Common2dMixin.test_seaborn_palette_as_cmapc                 C  s"   | j dd j}d|kstd S )Nr  r  r4  r6  r"   r"   r#   test_can_change_default_cmapQ  s    z*Common2dMixin.test_can_change_default_cmapc                 C  s4   |   }| \}}tt| | ddks0td S )Nr  r   )re   r*  roundr%  rd   )r]   artistr  r  r"   r"   r#   test_diverging_color_limitsU  s    z)Common2dMixin.test_diverging_color_limitsc                 C  s:   | j ddd t }d| ks&td| ks6td S )Nr   r   r   r  r  r  r]   r=   r"   r"   r#   test_xy_stringsZ  s    zCommon2dMixin.test_xy_stringsc                 C  sl   | j dd t }d| ks$td| ks4t| j dd t }d| ksXtd| kshtd S )Nr   r   r  r  r   )re   r   rj   rV   rd   rW   r?  r"   r"   r#   test_positional_coord_string`  s    z*Common2dMixin.test_positional_coord_stringc              	   C  s   t jtdd | jddd W 5 Q R X d}t jtd| d | jddd W 5 Q R X t jtd| d | jdd W 5 Q R X t jtd	| d | jdd
 W 5 Q R X d| jjd< d S )Nzx and y cannot be equal.r   r   r   z+must be one of None, 'x', 'x2d', 'y', 'y2d'r   Znot_a_real_dimr   r   r   r   r   )rt   r   r   re   r   r   )r]   r   r"   r"   r#   test_bad_x_string_exceptionk  s    z)Common2dMixin.test_bad_x_string_exceptionc                 C  s*   ddht | jjkst| jddd d S )Nr   r   r   )setr   r   rd   re   r\   r"   r"   r#   test_coord_stringsy  s    z Common2dMixin.test_coord_stringsc                 C  sh   | j jd | j jd< | j| j ddd t }d| ks>td| ksNtt	
| dksdtd S N   Znewyr   r   r  g      Y@)r   r   r   r  r   rj   rW   rd   rV   rL   r  r  r?  r"   r"   r#   test_non_linked_coords~  s    z$Common2dMixin.test_non_linked_coordsc                 C  sh   | j jd | j jd< | j| j ddd t }d| ks>td| ksNtt	
| dksdtd S rE  )r   r   r   r  r   rj   rW   rd   rV   rL   r  r  r?  r"   r"   r#    test_non_linked_coords_transpose  s    z.Common2dMixin.test_non_linked_coords_transposec              	   C  s   t tddtddddgfdddgfdddgfd	d
}|jddgd}dD ]@\}}| j|||d t }|| kszt||	 ksJtqJt
jtdd | j|ddd W 5 Q R X t
jtdd | j|ddd W 5 Q R X d S )Nr  r   r   r   rI   r_   r   r~   r  r   rT   r   r   ))rT   r   )r   r   )r   rT   )r   r   zlevels of the same MultiIndexr   z$y must be one of None, 'a', 'b', 'x')r
   rU   r   r   r  r   rj   rW   rd   rV   rt   r   r   )r]   r   r   r   r=   r"   r"   r#   r     s    &z,Common2dMixin.test_multiindex_level_as_coordc                 C  sd   t tddddgd}ddg|jd< d|jd	< | |jdd
 t  }d|ks`d|ks`td S )N)r   r~   r_   rT   r   r  r  r   rI   foorF  r  zc = 1, d = foozd = foo, c = 1)	r
   rU   r   r  iselr   rj   r   rd   )r]   rT   r  r"   r"   r#   test_default_title  s    
z Common2dMixin.test_default_titlec                 C  s   | j dd dt kstd S )NTadd_colorbarr   )re   r7   rd   r\   r"   r"   r#   test_colorbar_default_label  s    z)Common2dMixin.test_colorbar_default_labelc                 C  s@   d| j _d| j jd< | jdd t }dD ]}||ks*tq*d S )Nr  
test_unitsr   F)Z
add_labels)r  r  testvar [test_units])r   r   r   re   r7   rd   )r]   r>   stringr"   r"   r#   test_no_labels  s    zCommon2dMixin.test_no_labelsc                 C  s  | j jd d| j jd< | jdd t }d|ks8t| j jd d| j _| jddd	id
 t }d	|ksrtd|ks~t| jddd
 t }d	|kstd|ksttdd\}\}}| j||dddid |	 st|	 stt }d|kstd|ksttdd\}\}}| j|dd|dd |	 sDt|	 sRtt }d|ksftd|kstt| jdd dt kstt
jt| jdddid
 d S )Nr   rP  r   TrM  rQ  r  rj  MyLabel)rN  cbar_kwargs))rj  rT  rI   r_   ZMyBar)r=   cbar_axrN  rU  )rj  cax)r=   rN  rU  F)r   r   r   re   r7   rd   r   r   rb   rc   rt   r   r   )r]   r>   rf   r=   rW  r"   r"   r#   test_colorbar_kwargs  s\         z"Common2dMixin.test_colorbar_kwargsc                 C  sZ   t d}t|dddgd}tj|d| jd}|| jdd |jjD ]}|	 sDt
qDd S )Nr   r=  r~   r   r   r   r  )r@  rH  )rU   r
   xplt	FacetGridrH  map_dataarrayr  rg   r   rc   rd   rE  r"   r"   r#   test_verbose_facetgrid  s    z$Common2dMixin.test_verbose_facetgridc                 C  sB   t | j}t | j}|j D ]\}}|j| |ks"tq"d S r8   )inspect	signaturer  re   
parametersitemsrd   )r]   Zfunc_sigZ
method_sigargnameparamr"   r"   r#   *test_2d_function_and_method_signature_same   s    z8Common2dMixin.test_2d_function_and_method_signature_samer;  c                 C  sf  t d}t|dddgd}| j|ddddd}t|jjddg t|jD ]l\\}}}| sdt	|dkr~d|
 kst	nd	|
 kst	|d
krd| kst	qLd	| ksLt	qL| j|ddd}t|jjddg t|jD ]x\\}}}| st	|dkr d|
 ks2t	nd	|
 ks2t	|d
krPd| ks`t	qd	| kst	qd S )Nr<  r   r   r   r  r_   r   r   r@  rA  r   r   rI   r@  rA  rU   r
   r  r   rg   rQ   rL   Zndenumeraterc   rd   rV   rW   r]   rT   rF  r  r   r   r=   r"   r"   r#   rG    s,    

z'Common2dMixin.test_convenient_facetgridc                 C  s`   t d}t|ddddgd}| j|ddddd}t|jjdd	g |jjD ]}| sJtqJd S )
NrW  r   r   rX  rY  r  rZ  r~   r_   )	rU   r
   r  r   rg   rQ   r   rc   rd   rE  r"   r"   r#   r\  &  s    z*Common2dMixin.test_convenient_facetgrid_4dzignore:This figure includesc                 C  sZ   t d}t|ddddgd}| j|ddddd}|j}|dd	  |j}||ksVtd S )
NrW  r   r   rX  rY  r  rZ  c                   S  s   t ddS r  )r   r   r"   r"   r"   r#   <lambda>8      zICommon2dMixin.test_facetgrid_map_only_appends_mappables.<locals>.<lambda>)rU   r
   r  
_mappablesmaprd   )r]   rT   rF  r  rp  ro  r"   r"   r#   )test_facetgrid_map_only_appends_mappables0  s    z7Common2dMixin.test_facetgrid_map_only_appends_mappablesc                 C  sx   t jjddt ddd }t|dddgd	}|jjdd
}tdd |jD dksXttdd |jD dksttd S )N)r      r#  rM  r  r~   r#  r   r   r   r  r@  c                 S  s   h | ]}|  qS r"   )r*  r/   rh  r"   r"   r#   r1   C  s     z4Common2dMixin.test_facetgrid_cmap.<locals>.<setcomp>rI   c                 S  s   h | ]}|  jqS r"   )r5  r   rp  r"   r"   r#   r1   E  s     )	rL   r(  rM   r
   r   r   r'   rk  rd   )r]   r   rF  fgr"   r"   r#   test_facetgrid_cmap=  s
    z!Common2dMixin.test_facetgrid_cmapc                 C  sV   t d}t|ddddgd}| j|ddddddid	}|jd k	rRt|jdksRtd S )
NrW  r   r   rX  rY  r  rj  Z
test_label)r   r   r@  r[  rU  )rU   r
   r  ZcbarrY   rd   )r]   rT   rF  r  r"   r"   r#   test_facetgrid_cbar_kwargsG  s    

z(Common2dMixin.test_facetgrid_cbar_kwargsc              	   C  sL   t d}t|ddddgd}tt | j|dddddd W 5 Q R X d S )	NrW  r   r   rX  rY  r  rI   )r   r   r@  r[  rV  )rU   r
   rt   r   r   r  r]   rT   rF  r"   r"   r#   test_facetgrid_no_cbar_axW  s    z'Common2dMixin.test_facetgrid_no_cbar_axc              	   C  s(   t t | jddd W 5 Q R X d S Nkr  )rI  r
  rt   r   r   re   r\   r"   r"   r#   test_cmap_and_color_both]  s    z&Common2dMixin.test_cmap_and_color_bothc                 C  sH   | j jD ]:}| j j|tddd|g}dD ]}t|j|  q.qd S )Nr=  T)Zrestore_coord_dimsr  )r   r   r^  r9  r_  rl  r   )r]   rg  Zgpr  r"   r"   r#   test_2d_coord_with_intervala  s    z)Common2dMixin.test_2d_coord_with_intervalc              	   C  s^   t jdd}tt | jj|dd W 5 Q R X tt | jj|dd W 5 Q R X d S )Nr   g      $@r_   )r  r  )r  r  )r4   rI  ZLogNormrt   r   r   r   r   )r]   r  r"   r"   r#   &test_colormap_error_norm_and_vmin_vmaxi  s
    z4Common2dMixin.test_colormap_error_norm_and_vmin_vmax)7rq   rr   rs   __doc____annotations__rH  rt   ru   rx  r  r  r  r  r  r  r  r  r!  r  r'  r  r  rv   rr  r.  r0  r3  r7  r8  r   r:  r;  r>  r@  rA  rB  rD  rG  rH  r   rL  rO  rS  rX  r]  rd  rG  r\  rm  rr  rs  ru  ry  rz  r{  r"   r"   r"   r#   r	    sr   

	
	


3

	

r	  c                   @  s|   e Zd ZeejZejj	ddddZ
ddddZejj	ddddZejj	ddd	d
Zejj	ddddZdS )TestContourfry   rz   c                 C  s,   |  | jjjrt|  | jjjs(td S r8   )rp   r   r   r   rd   r   r\   r"   r"   r#   test_contourf_calledx  s    z!TestContourf.test_contourf_calledc                 C  s   |   }t|tjjstd S r8   )re   r   r4   r   ZQuadContourSetrd   r]   r=  r"   r"   r#   test_primitive_artist_returned~  s    z+TestContourf.test_primitive_artist_returnedc                 C  s   |   }|jdkstd| jd< d| jd< | j dd}|jdksDtd	| jd< d	| jd< | j d	d
d}|jdkstt| j dd	d}|jdkstd S )Nr  ir  r   r   r   Tr  r  r   r   r  r  ir  )re   r  rd   r   r  r"   r"   r#   test_extend  s    



zTestContourf.test_extendc                 C  s:   | j ddd t }d| ks&td| ks6td S Nr   r   r   r  r?  r"   r"   r#   test_2d_coord_names  s    z TestContourf.test_2d_coord_namesc                 C  s>   | j dddgd}|jdks t| j dd}|jdks:td S )Nr  r  r   r  r  r~   r  )re   r  rd   r  r"   r"   r#   test_levels  s    zTestContourf.test_levelsN)rq   rr   rs   r
  rZ  r   r  rt   rv   rw   r  r  r  r  r  r"   r"   r"   r#   r~  s  s   
r~  c                   @  s~   e Zd ZeejZedd ZddddZddddZ	ddd	d
Z
ddddZejjddddZddddZdS )TestContourc                 C  s   t | d d S )Nr~   )rT  rJ  r"   r"   r#   _color_as_tuple  s    zTestContour._color_as_tuplery   rz   c                 C  s   | j dd}|jjd dks t| j ddgd}| |jjd dksJt| jjjddd	d
gddddgd}| |jjd dkst| |jjd dkst| |jjdkstd S )Nrw  )rI  r   r   rI           r        ?r  r  r  r  r  r  r  rI  r  r  r  r_   r  r  r  )	re   r
  rI  rd   r  r   r   r   
_rgba_overr  r"   r"   r#   test_colors  s    
 
zTestContour.test_colorsc                 C  sz   t ddddg}| jjj|ddddgd	}| |jjd
 dksFt| |jjd dks`t| |jj	dksvtd S )Nr  r  r  r  rw  r  r  r   r  rI   r  r_   r  r  )
rL   r   r   r   r   r  r
  rI  rd   r  )r]   r  r=  r"   r"   r#   test_colors_np_levels  s
    z!TestContour.test_colors_np_levelsc              	   C  s(   t t | jddd W 5 Q R X d S rv  rx  r\   r"   r"   r#   ry    s    z$TestContour.test_cmap_and_color_bothc              	   C  s.   t jtdd | jddgd W 5 Q R X d S )Nzlist of colorsr   rw  r   r  rx  r\   r"   r"   r#   #list_of_colors_in_cmap_raises_error  s    z/TestContour.list_of_colors_in_cmap_raises_errorc                 C  s:   | j ddd t }d| ks&td| ks6td S r  r  r?  r"   r"   r#   r    s    zTestContour.test_2d_coord_namesc                 C  s   | j dgd | j dd d S )Nr   r  rI   )re   r\   r"   r"   r#   test_single_level  s    zTestContour.test_single_levelN)rq   rr   rs   r
  rZ  r   r  r  r  r  ry  r  rt   rv   rw   r  r  r"   r"   r"   r#   r    s   


r  c                   @  sV   e Zd ZeejZddddZddddZe	j
jddddZddd	d
ZdS )TestPcolormeshry   rz   c                 C  s   |   }t|tjjstd S r8   )re   r   r4   r9   r:   rd   r  r"   r"   r#   r    s    z-TestPcolormesh.test_primitive_artist_returnedc                 C  s"   |   }| j| jjkstd S r8   )re   	get_arrayrN  r   rd   r  r"   r"   r#   test_everything_plotted  s    z&TestPcolormesh.test_everything_plottedc                 C  s:   | j ddd t }d| ks&td| ks6td S r  r  r?  r"   r"   r#   r    s    z"TestPcolormesh.test_2d_coord_namesc                 C  sP   t  }t|dd | jdd|d}t|tjjs6t|	 j
| jj
ksLtd S )N
projectionTr   r   r   )r   rj   setattrre   r   r4   r9   r:   rd   r  rN  r   )r]   r=   r=  r"   r"   r#   +test_dont_infer_interval_breaks_for_cartopy  s
    z:TestPcolormesh.test_dont_infer_interval_breaks_for_cartopyN)rq   rr   rs   r
  rZ  r   r  r  r  rt   rv   rw   r  r  r"   r"   r"   r#   r    s   
r  c                   @  sB   e Zd ZdZeejZej	ddddddZ
dddd	Zd
S )TestPcolormeshLogscalez;
    Test pcolormesh axes when x and y are in logscale
    Tr[   ry   rz   c                 C  sr   d| _ d}t| j d | j d |d }t| j d | j d |d }tt|ddd	d
g||ddd}|| _d S )N)r   r   r,  r~   )r   r2  r   rI   r_   r~   r   r  r   r   r   r  r   )r  rL   r3  r
   rU   r   )r]   rQ   r   r   r   r"   r"   r#   rx    s    
zTestPcolormeshLogscale.setUpc           	      C  s   | j jjddd}dd | d D }dd | d D }t|t| }}t|t| }}d}tj|d| j	d	 |   tj|d| j	d
 |   tj|d| j	d |   tj|d| j	d |   dS )zx
        Check if the outer vertices of the pcolormesh are the expected values

        Checks bugfix for #5333
        r.  )xscaleyscalec                 S  s   g | ]}|j d d df qS ri   r  r/   r  r"   r"   r#   rC     s     zHTestPcolormeshLogscale.test_interval_breaks_logspace.<locals>.<listcomp>ro   c                 S  s   g | ]}|j d d df qS r  r  r  r"   r"   r#   rC      s     r  r   r   rI   r_   r~   N)
r   r   r   Z
propertiesrL   r  r  r(  r)  r  )	r]   r=  Z
x_verticesZ
y_verticesZxminZxmaxZyminZymaxZlog_intervalr"   r"   r#   test_interval_breaks_logspace  s    z4TestPcolormeshLogscale.test_interval_breaks_logspaceN)rq   rr   rs   r|  r
  rZ  r   r  rt   ru   rx  r  r"   r"   r"   r#   r    s
   

r  c                	   @  sv  e Zd ZeejZejj	ddddZ
ddddZddddZejj	ddd	d
Zejj	ddddZejj	eddddZddddZddddZddddZddddZddddZddddZddddZddddZejdd d!gd"d#d$d%d&d'gd(d(d)dd*d+d,Zddd-d.Zddd/d0Zejd1ddd2d3Zddd4d5Zd6S )7
TestImshowry   rz   c                 C  s,   |  | jjjrt|  | jjjs(td S r8   )rm   r   r   r   rd   r   r\   r"   r"   r#   test_imshow_called4  s    zTestImshow.test_imshow_calledc                 C  sL   | j jjdd tddgt  s,ttddgt 	 sHtd S )NFr  r  g      -@r   )
r   r   r   rL   allcloser   rj   r  rd   r  r\   r"   r"   r#   test_xy_pixel_centered:  s    z!TestImshow.test_xy_pixel_centeredc                 C  s$   | j j  dt  ks td S )Nauto)r   r   r   r   rj   
get_aspectrd   r\   r"   r"   r#   test_default_aspect_is_auto?  s    z&TestImshow.test_default_aspect_is_autoc              	   C  sl   t jtdd | jjjdd W 5 Q R X | jjjddd dt  ksPt	t
t  d	ksht	d S )
Nznot available in xarrayr   equalrS  r   r_   rO  r  rQ  )rt   r   r   r   r   r   r   rj   r  rd   rT  r2   rU  r\   r"   r"   r#   test_cannot_change_mpl_aspectC  s
    z(TestImshow.test_cannot_change_mpl_aspectc                 C  s   |   }t|tjjstd S r8   )re   r   r4   rk   rl   rd   r  r"   r"   r#   r  N  s    z)TestImshow.test_primitive_artist_returnedc              	   C  s&   t t | jdd W 5 Q R X d S )Nr9  r  rx  r\   r"   r"   r#   !test_seaborn_palette_needs_levelsS  s    z,TestImshow.test_seaborn_palette_needs_levelsc              	   C  s,   t jtdd | jddd W 5 Q R X d S )Nzrequires 1D coordinatesr   r   r   r   rx  r\   r"   r"   r#   r  Y  s    zTestImshow.test_2d_coord_namesc                 C  s6   t tddddddgdj  dtt ks2td S )NrY  r   r  r   r   bandr  r
   rU   r   r   r'   r;   rd   r\   r"   r"   r#   test_plot_rgb_image]  s
    
 zTestImshow.test_plot_rgb_imagec                 C  s>   t tddddddgdjjdddd dtt ks:td S )	NrY  r   r  r   r   r  r  )r   r   r2  r  r\   r"   r"   r#   test_plot_rgb_image_explicitc  s    
   z'TestImshow.test_plot_rgb_image_explicitc                 C  s@   t tddddddddgd	jjddd
 dtt ks<td S )N)r_   r_   r   r=  r~   r   r  rT   r   r   r   r  r  r[  r@  r  r\   r"   r"   r#   test_plot_rgb_facetedi  s    
  z TestImshow.test_plot_rgb_facetedc                 C  s$   t tddddddgdj  d S )N)r   r   r=  r   r  r  r   r   r  r
   rU   r   r   r\   r"   r"   r#   test_plot_rgba_image_transposedo  s    
 z*TestImshow.test_plot_rgba_image_transposedc              	   C  sX   t tddddgd}tt |j  W 5 Q R X |jjdd |jjddd d S )N)r~   r~   r~   r   r   r  r  r1  r   )r
   rU   rt   warnsUserWarningr   r   r  r"   r"   r#   test_warns_ambigious_dimu  s
    z#TestImshow.test_warns_ambigious_dimc              	   C  s@   t tdddddgd}tt |jjdd W 5 Q R X d S )N)r~   r~   r~   r~   r   r   r   r  r  r1  r
   rU   rt   r   r   r   r   r  r"   r"   r#   test_rgb_errors_too_many_dims}  s    z(TestImshow.test_rgb_errors_too_many_dimsc              	   C  s>   t tddddgd}tt |jjdd W 5 Q R X d S )N)r   r   r   r   r   r  r  r1  r  r  r"   r"   r#   test_rgb_errors_bad_dim_sizes  s    z(TestImshow.test_rgb_errors_bad_dim_sizesr  r  r  )r   NF)Nr_   F)r   rI   F)r   r   F)r   NT)Nr   Tfloat | Noner   )r  r  r  r{   c                 C  sX   t tdddd}|jj|||d }d|   krN|   krNdksTn td S )Nr   r   r~   333333ffffff?rR   rS   )r  r  r  r   rI   )r
   rU   r   r   r  r  r  rd   )r]   r  r  r  r   rm  r"   r"   r#   test_normalize_rgb_imshow  s    z$TestImshow.test_normalize_rgb_imshowc              
   C  sh   t tdddd}dD ].\}}tt |jj||d W 5 Q R X qdD ]\}}|jj||d qJd S )Nr  r  r  r  ))Nr   )r_   Nr  ))g333333r   )r_   g @r  )r]   r   r  r  Zvmin2Zvmax2r"   r"   r#    test_normalize_rgb_one_arg_error  s    z+TestImshow.test_normalize_rgb_one_arg_errorc                 C  sh   t tjdddd}t \}}|jj|d }|j	tj
ksFt|dd df |jk sdtd S )NK   uint8r   r  ra   .r~   )r
   rL   r   rP   r   rb   r   r   r  r   r  rd   r   r   )r]   r   r  r=   outr"   r"   r#   %test_imshow_rgb_values_in_valid_range  s
    z0TestImshow.test_imshow_rgb_values_in_valid_rangez'ignore:Several dimensions of this arrayc                 C  s    t tdddd}|j  d S )N)rI   r~   r~   r  r  r  r  r   r"   r"   r#   'test_regression_rgb_imshow_dim_size_one  s    z2TestImshow.test_regression_rgb_imshow_dim_size_onec              	   C  s   t tddddgddggd}t < |jjdd	 t d dk sHtt d dk s\tW 5 Q R X t < |jjd
d	 t d dk stt d dk stW 5 Q R X d S )Nr  r   r_   r   rI   r   upper)originlower)	r
   rU   r$   r   r   r   r  rd   r  r   r"   r"   r#    test_origin_overrides_xyincrease  s    z+TestImshow.test_origin_overrides_xyincreaseN) rq   rr   rs   r
  rZ  r   r  rt   rv   rw   r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  rs  r  r  r  rr  r  r  r"   r"   r"   r#   r  /  sH   



r  c                      s  e Zd ZeejZddiZddddZe	j
jddddZddd	d
ZddddZddddZddddZddddZddddZddddZdd fddZe	j
dddddZdd fddZdd fddZdd fd d!Zdd fd"d#Z  ZS )$TestSurfacer  3dry   rz   c                 C  s    |   }t|tjjjstd S r8   )re   r   mpl_toolkitsZmplot3dZart3dZPoly3DCollectionrd   r  r"   r"   r#   r    s    z*TestSurface.test_primitive_artist_returnedc                 C  s^   | j ddd t }d| ks&td| ks6t| jj d| jj d|	 ksZtd S )Nr   r   r   z [])
re   r   rj   rW   rd   rV   r   r   r   Z
get_zlabelr?  r"   r"   r#   r    s
    zTestSurface.test_2d_coord_namesc                 C  s   t d d S Nz%does not make sense for surface plotsrt   r  r\   r"   r"   r#   r    s    z.TestSurface.test_xyincrease_false_changes_axesc                 C  s   t d d S r  r  r\   r"   r"   r#   r'    s    z-TestSurface.test_xyincrease_true_changes_axesc                 C  s   | j | jddid d S )Nr  r  )r`   r   r\   r"   r"   r#   r    s    z!TestSurface.test_can_pass_in_axisc                 C  s   t d d S r  r  r\   r"   r"   r#   r8    s    zTestSurface.test_default_cmapc                 C  s   t d d S r  r  r\   r"   r"   r#   r>    s    z'TestSurface.test_diverging_color_limitsc                 C  s   t d d S r  r  r\   r"   r"   r#   rX    s    z TestSurface.test_colorbar_kwargsc                 C  s   t d d S r  r  r\   r"   r"   r#   ry    s    z$TestSurface.test_cmap_and_color_bothc              	     s$   t t t   W 5 Q R X d S r8   )rt   r   r   superr:  r\   	__class__r"   r#   r:    s    z(TestSurface.test_seaborn_palette_as_cmapr;  c                 C  s   t d}t|dddgd}| j|ddddd}t|jjddg t|jD ]8\\}}}| sdt	d|
 kstt	d| ksLt	qL| j|ddd}t|jjddg t|jD ]8\\}}}| st	d|
 kst	d| kst	qd S )	Nr<  r   r   r   r  r_   re  rf  rg  rh  r"   r"   r#   rG    s    z%TestSurface.test_convenient_facetgridc                   s
   t   S r8   )r  r7  r\   r  r"   r#   r7    s    zTestSurface.test_viridis_cmapc                   s
   t   S r8   )r  r;  r\   r  r"   r#   r;    s    z(TestSurface.test_can_change_default_cmapc                   s
   t   S r8   )r  rO  r\   r  r"   r#   rO    s    z'TestSurface.test_colorbar_default_labelc                   s
   t   S r8   )r  rm  r\   r  r"   r#   rm    s    z5TestSurface.test_facetgrid_map_only_appends_mappables)rq   rr   rs   r
  rZ  r  r  rH  r  rt   rv   rw   r  r  r'  r  r8  r>  rX  ry  r:  rr  rG  r7  r;  rO  rm  __classcell__r"   r"   r  r#   r    s&   

r  c                   @  s  e Zd ZejddddddZejjddddZejjddd	d
Z	ejjddddZ
ejjddddZejjddddZejjddddZejjddddZejjddddZejjddddZejjddddZejjddddZejjddddZejjejdddd d!Zejjddd"d#Zejjddd$d%Zejjddd&d'Zejjddd(d)Zejjddd*d+Zejjddd,d-Zejjddd.d/Zd0S )1TestFacetGridTr[   ry   rz   c                 C  s>   t d}t|dddgddddgid| _tj| jdd	| _d S )
NrY  r   r   r   rT   r   r  r   ro  )rU   r
   r   rZ  r[  r  rw  r"   r"   r#   rx    s     zTestFacetGrid.setUpc                 C  sD   | j tjdd t }d|ks$t| j jjD ]}| s.tq.d S )Nr   r   ry   )	r  r\  rZ  r   r7   rd   rg   r   rc   )r]   r>   r=   r"   r"   r#   test_no_args  s
    zTestFacetGrid.test_no_argsc                 C  sz   d| j _| jtjdd td| jjjD ]\}}d| |	 ks*t
q*t }| j j|ks`t
dD ]}||ksdt
qdd S )Nr  r   r   abczz = r   )r   r   r  r\  rZ  r   r  rg   r   r   rd   r7   )r]   rw  r=   r>   rj  r"   r"   r#   test_names_appear_somewhere$  s    z)TestFacetGrid.test_names_appear_somewherec                 C  sz   dd dD | j jd< tj| j dd}|tjdd t }tdd	 |D }|d
k sZt|j	d 
 }|dsvtd S )Nc                 S  s   g | ]}d | qS )r   r"   )r/   r  r"   r"   r#   rC   2  s     z:TestFacetGrid.test_text_not_super_long.<locals>.<listcomp>r  r   ro  r   r   c                 s  s   | ]}t |V  qd S r8   )r'   rA   r"   r"   r#   r  6  s     z9TestFacetGrid.test_text_not_super_long.<locals>.<genexpr>r  r  z...)r   r   rZ  r[  r\  r   r7   r  rd   rg   r   endswith)r]   r  r>   maxlent0r"   r"   r#   test_text_not_super_long0  s    z&TestFacetGrid.test_text_not_super_longc                 C  s   | j j }| j j }t||f}| jtj	dd t
 tjjD ]"}t| }t||sJtqJdtt kstd S )Nr   r   rI   )r   r   r  r  rL   r   r  r\  rZ  r   r   r2   r3   r4   rk   rl   r*  r  rd   r'   r;   r]   r  r  rp  rk   Zclimr"   r"   r#   test_colorbar<  s    zTestFacetGrid.test_colorbarc                 C  sH   t j| jddd}|t jdd |jd }| r8t| rDtd S )Nr   r_   rf  r   r   r  )	rZ  r[  r   r\  r   rg   rc   rd   get_visibler]   r  Zbottomrightr"   r"   r#   test_empty_cellJ  s
    
zTestFacetGrid.test_empty_cellc              	   C  s*   t jtdd t| j W 5 Q R X d S )Nz[Rr]owr   )rt   r   r   rZ  r[  r   r\   r"   r"   r#   test_norow_nocol_errorS  s    z$TestFacetGrid.test_norow_nocol_errorc                 C  sF   | j tjdd | j jd }| jj| }| jjdd}t|| d S )Nr   r   r  r   r   )	r  r\  rZ  r   Z
name_dictsr   locrK  r   )r]   Zupperleft_dictZupperleft_arrayZz0r"   r"   r#   test_groupsX  s
    zTestFacetGrid.test_groupsc                 C  s6   dddg| j jd< tj| j dd}|tjdd d S )Nr   r   g?r   ro  r   r   )r   r   rZ  r[  r\  r   r]   r  r"   r"   r#   test_float_indexa  s    zTestFacetGrid.test_float_indexc              	   C  s@   dddg| j jd< tjtdd tj| j dd W 5 Q R X d S )Nr   r   r   z	[Uu]niquer   ro  )r   r   rt   r   r   rZ  r[  r\   r"   r"   r#   test_nonunique_index_errorg  s    z(TestFacetGrid.test_nonunique_index_errorc              	   C  s   t d}t|dddgd}d|d d d d df< d|d< d	|d
< tj|dd}|jtjdddd t }t }|D ],}z|	t
| W qt tk
r   Y qtX qttdd |D }|dk std S )N)r   r   r_   r   r   r   r  rI   i)r_   r   r     )r~   r   r   ro  Tr  c                 s  s   | ]}t |V  qd S r8   r$  r  r"   r"   r#   r    s     z,TestFacetGrid.test_robust.<locals>.<genexpr>   )rL   zerosr
   rZ  r[  r\  r   rC  r7   addfloatr   r  rd   )r]   r   r   r  Znumbersr>   r?   largestr"   r"   r#   r  m  s     
zTestFacetGrid.test_robustc                 C  sh   d\}}t ||f}| jjtjdd||d t t	j
jD ]"}t | }t ||s@tq@d S )N)g      I@     @@r   r   r  )rL   r   r  r\  rZ  r   r   r2   r3   r4   rk   rl   r*  r  rd   r  r"   r"   r#   test_can_set_vmin_vmax  s    z$TestFacetGrid.test_can_set_vmin_vmaxc                 C  s<   | j jtjddddd}|jD ]}|jj|jjkstqd S )Nr   r   r  r  )	r  r\  rZ  r   rk  r  r  r  rd   )r]   rq  rn  r"   r"   r#   test_vmin_vmax_equal  s    
z"TestFacetGrid.test_vmin_vmax_equalignorec                 C  sL   t jd}| jjtjdd|d t 	t j
jD ]}|j|ks4tq4d S )Nr   r   r   r  )r4   rI  Z
SymLogNormr  r\  rZ  r   r   r2   r3   rk   rl   r  rd   )r]   r  rk   r"   r"   r#   test_can_set_norm  s    zTestFacetGrid.test_can_set_normc              	   C  s  t | jj d tj| jddd}t |j d | jjjddd}t |j d tj| jdddd}t |j d	 tj| jdd
d}t |j d
 t	j
tdd tj| jddddd}W 5 Q R X t	j
tdd  tj| jddt dd}W 5 Q R X d S )Nr   r~   r   r$  )r@  rN  )   r$  r   r  )r@  rN  rP  )r  r   )r   r   )r@  rL  rR  r   r_   )r$  r   )r[  r@  rL  rN  z	Can't use)r[  r@  r=   rN  )r   r  rf   rU  rZ  r[  r   r   r   rt   r   r   r   rj   r  r"   r"   r#   test_figure_size  s     zTestFacetGrid.test_figure_sizec                 C  s   d}|d }| j tjdd | j j||d | j jjD ]T}t| }t|	 }||ks`t
||kslt
||d ks|t
||d ks8t
q8d S )Nc   rI   r   r   )Z
max_xticksZ
max_yticksg       @)r  r\  rZ  r   Z	set_ticksrg   r   r'   
get_xticks
get_yticksrd   )r]   ZnticksZmaxticksr=   xticksyticksr"   r"   r#   test_num_ticks  s    zTestFacetGrid.test_num_ticksc                 C  sH   | j jdkst| j tjddd | j jdks4t| j dd  d S )NFr   r   .Tc                   S  s   d S r8   r"   r"   r"   r"   r#   ri    rj  z(TestFacetGrid.test_map.<locals>.<lambda>)r  Z
_finalizedrd   rl  r   r   r\   r"   r"   r#   test_map  s    zTestFacetGrid.test_mapc                 C  s   t j| jjdddd}|tjddd t }dD ]}||ks4tq4d|ksRtd|ks^td	t	t
 kspt|jd
d d
t kstdt	t
 kstd S )NrI  r  r   ro  r   r   r   ry   r   zcolors!)rj  rI   )rZ  r[  r   r  rl  r   r   r7   rd   r'   r;   rN  r]   r  r>   rj  r"   r"   r#   test_map_dataset  s    zTestFacetGrid.test_map_datasetc                 C  s>   | j tjdd}|dd t }dD ]}||ks(tq(d S )Nr   r   	longitudelatitude)r  r  )r  r\  rZ  r   set_axis_labelsr7   rd   r  r"   r"   r#   test_set_axis_labels  s
    z"TestFacetGrid.test_set_axis_labelsc                 C  s   t d}t|dddgdd}|jjdddd dtt ks@t|jjdddd	d
 dtt ksft|jjddddd
 dtt kstd S )Nr<  r   r   r   rI  )r   r   r   r   r@  rI   T)r   r   r@  rN  Fr   )rU   r
   r   r   r'   r;   rd   rt  r"   r"   r#   test_facetgrid_colorbar  s    z%TestFacetGrid.test_facetgrid_colorbarc                 C  s    | j jjdtddddd d S )Nr   Zpolar)r  F)r@  rH  ZsharexZsharey)r   r   r   r   r\   r"   r"   r#   test_facetgrid_polar  s       z"TestFacetGrid.test_facetgrid_polarN)rq   rr   rs   rt   ru   rx  rv   rw   r  r  r  r  r  r  r  r  r  r  r  r  rr  r  r  r  r  r  r  r  r  r"   r"   r"   r#   r    sV   

	
r  r;  c                   @  sJ   e Zd ZejddddddZddddZejjddd	d
Z	dS )TestFacetGrid4dTr[   ry   rz   c                 C  sj   t d}t|ddddgd}tdd |jd jD |jd< td	d |jd jD |jd< || _d S )
N)r   r=  r~   r_   r   r   r@  r[  r  c                 S  s   g | ]}d t | qS ro  strr  r"   r"   r#   rC   	  s     z)TestFacetGrid4d.setUp.<locals>.<listcomp>c                 S  s   g | ]}d t | qS r[  r  r  r"   r"   r#   rC   	  s     )rU   r
   rL   r   r   r   r   )r]   rT   r   r"   r"   r#   rx    s    

zTestFacetGrid4d.setUpc                 C  s   t j| jddd}|jddd t| jjd j|jd d df D ]\}}tdd||sBt	qBt| jjd j|jd	d d f D ]\}}tdd||st	qd S )
Nr@  r[  r@  r[  z{value}Zbold)templateweightr   r  r   )
rZ  r[  r   
set_titlesr  r   r   rg   rH   rd   r]   r  rj  r=   r"   r"   r#   test_title_kwargs		  s    **z!TestFacetGrid4d.test_title_kwargsc                 C  sV  t j| jddd}d|jjks"t|t jdd t| jj	d j
|jd d df D ]\}}t||sTtqTt| jj	d j
|jdd d f D ]\}}t||stq|d	 t| jj	d j
|jd d df D ]*\}}td
| |sttd|stqt| jj	d j
|jdd d f D ]0\}}td
| |s>ttd|s tq d S )Nr@  r[  r	  )r_   r~   r   r   r   r   zabc={value}zabc=zrow=zcol=)rZ  r[  r   rg   rQ   rd   r\  r   r  r   r   r@   r  rE   r  r"   r"   r#   test_default_labels	  s    **
**z#TestFacetGrid4d.test_default_labelsN)
rq   rr   rs   rt   ru   rx  r  rv   rw   r  r"   r"   r"   r#   r    s
   
r  c                   @  s4   e Zd ZejddddddZddddZd	S )
TestFacetedLinePlotsLegendTr[   ry   rz   c                 C  s   t j | _d S r8   )r   tutorialscatter_example_datasetr   r\   r"   r"   r#   rx  3	  s    z TestFacetedLinePlotsLegend.setUpc                 C  sD   | j jjjdddd}dd |jjD }t|ddd	d
gks@td S )Nr   r  r   )r@  r[  r   c                 S  s   g | ]}|  qS r"   r,   r.   r"   r"   r#   rC   9	  s     zATestFacetedLinePlotsLegend.test_legend_labels.<locals>.<listcomp>r   123)r   Ar   r   	figlegendtextssortedrd   )r]   rq  Zall_legend_labelsr"   r"   r#   test_legend_labels7	  s    z-TestFacetedLinePlotsLegend.test_legend_labelsN)rq   rr   rs   rt   ru   rx  r  r"   r"   r"   r#   r  1	  s   
r  c                   @  s   e Zd ZejddddddZddddZddd	d
ZddddZddddZ	ddddZ
ddddZddddZddddZdS )TestFacetedLinePlotsTr[   ry   rz   c              
   C  s   t tjddddddddgtdtdtdd	d
ddggdd| _d| jj_d| jjjd< d| jj	jd< d| jj
jd< d| jjjd< d S )Nr   r$  r~   r   r   r   r@  r[  r  BCzC++zCornelius Ortega the 1str   huenamehunitsr   xunitscolunitsrowunits)r
   rL   r(  r)  r9  r   r   r   r   r   r@  r[  r\   r"   r"   r#   rx  @	  s    

zTestFacetedLinePlots.setUpc                 C  sp   | j jdddd}|jjt| j jt| j jfks6t| j jdddd}|jjt| j jt| j jfksltd S )Nr[  r@  r   r[  r@  r   )r   r   rg   rQ   r'   r[  r@  rd   r  r"   r"   r#   test_facetgrid_shapeO	  s    $z)TestFacetedLinePlots.test_facetgrid_shapec                 C  s\   | j jjddddd}dd |jjd  D }|d  d	ksDt|d  d
ksXtd S )Nzo--r[  r@  r   r#  c                 S  s   g | ]}t |tjjr|qS r"   )r   r4   r  r  )r/   qr"   r"   r#   rC   X	  s     z:TestFacetedLinePlots.test_unnamed_args.<locals>.<listcomp>r   oz--)	r   r   r   rg   r   Zget_childrenZ
get_markerrd   Zget_linestyle)r]   r  r  r"   r"   r#   test_unnamed_argsV	  s    z&TestFacetedLinePlots.test_unnamed_argsc                 C  s   | j jdddd}t| j jd j|jd d df D ]\}}t||s4tq4t| j jd j|jdd d f D ]\}}tt||sntqn|jd d df D ]}t| j j	|stqd S )Nr[  r@  r   r#  r   r   )
r   r   r  r   r   rg   r@   rd   r  r   r  r"   r"   r#   r  _	  s    **z(TestFacetedLinePlots.test_default_labelsc                 C  sF   | j jdddjdddd}|jd }| r6t| rBtd S )	NrI   r  r[  r@  r   r_   )r@  r   rA  r  )r   rK  Z	drop_varsr   rg   rc   rd   r  r  r"   r"   r#   test_test_empty_cellm	  s      
z)TestFacetedLinePlots.test_test_empty_cellc                 C  s@   | j jdddd}|dd t }d|ks0td|ks<td S )Nr[  r@  r   r#  r  r  )r   r   r   r7   rd   )r]   r  r>   r"   r"   r#   r  w	  s
    z)TestFacetedLinePlots.test_set_axis_labelsc              	   C  s4   t t  | jjjdddt d W 5 Q R X d S )Nr[  r@  r   )r[  r@  r   r=   )rt   r   r   r   r   r   r   axesr\   r"   r"   r#   test_axes_in_faceted_plot	  s    z.TestFacetedLinePlots.test_axes_in_faceted_plotc              	   C  s2   t t | jjjdddddd W 5 Q R X d S )Nr[  r@  r   r~   r   r~   )r[  r@  r   rN  rL  r   r\   r"   r"   r#   test_figsize_and_size	  s    z*TestFacetedLinePlots.test_figsize_and_sizec              	   C  s<   t t( | jjddd | jjjddd W 5 Q R X d S )Nr[  r   )r[  r   r   r\   r"   r"   r#   test_wrong_num_of_dimensions	  s    z1TestFacetedLinePlots.test_wrong_num_of_dimensionsN)rq   rr   rs   rt   ru   rx  r$  r'  r  r(  r  r*  r,  r-  r"   r"   r"   r#   r  >	  s   
	
r  c                   @  s`   e Zd ZejddddddZddddZddd	d
Zej	dddddgdd Z
dS )TestDatasetQuiverPlotsTr[   ry   rz   c                 C  s   dd dD }t |d |d d}d|jjd< d	|jjd< d
|jjd< d|jjd< d|jjd< d|jjd< t	|j|j|d< || _
d S )Nc              	   S  s:   g | ]2}t tjd d ddddddgdd dD d	qS )
r~   r   r   r   r[  r@  c                 S  s   g | ]}t |qS r"   r  r/   rw  r"   r"   r#   rC   	  s     z;TestDatasetQuiverPlots.setUp.<locals>.<listcomp>.<listcomp>r~   r~   r   r   r   r
   rL   r(  r)  r/   r  r"   r"   r#   rC   	  s   
z0TestDatasetQuiverPlots.setUp.<locals>.<listcomp>rI   r_   r   rI   ur   r   r   yunitsr!  r"  uunitsvunitsmagr   r   r   r   r@  r[  r5  r   rL   hypotr   r]   Zdasr   r"   r"   r#   rx  	  s    zTestDatasetQuiverPlots.setUpc              	   C  s   t  8 | jjdddjjddddd}t|tjjs:tW 5 Q R X t	j
tdd	$ | jjdddjjdddd
 W 5 Q R X t	j
tdd	* | jjdddjjddddddd W 5 Q R X d S Nr   r  r   r   r5  r   r   r   r5  r   zspecify x, y, u, vr   )r   r   r5  	hue_styler9  discrete)r   r   r5  r   r   r?  )r$   r   rK  r   quiverr   r4   Quiverrd   rt   r   r   r  r"   r"   r#   test_quiver	  s     (     z"TestDatasetQuiverPlots.test_quiverc                 C  s   t  d | jjjddddddddd	}|jD ]}t|tjjs,tq,|j	d k	sRtd
|j	j
 ksftW 5 Q R X t  4 | jjjdddddddddd	}|j	d kstW 5 Q R X tjtdd  | jjjddddddd W 5 Q R X d S )Nr   r   r5  r   r[  r@  rI   r9  )r   r   r5  r   r[  r@  r0  r   r7  F)	r   r   r5  r   r[  r@  r0  r   	add_guidezPlease provide scaler   )r   r   r5  r   r[  r@  )r$   r   r   rA  rk  r   r4   rB  rd   Z	quiverkeyr5   r-   rt   r   r   r]   rq  handler"   r"   r#   test_facetgrid	  s<           
z%TestDatasetQuiverPlots.test_facetgrid&add_guide, hue_style, legend, colorbarNNFTFNFFTNFTT
continuousFTc              	   C  s<   t | jddd||dd}|d |ks(t|d |ks8td S )Nr   r   r9  rA  r   r   r   r?  rD  funcnamer   rN  r   r   rd   r]   rD  r?  legendrX   Z	meta_datar"   r"   r#   test_add_guide	  s    	z%TestDatasetQuiverPlots.test_add_guideN)rq   rr   rs   rt   ru   rx  rC  rG  rv   rs  rS  r"   r"   r"   r#   r.  	  s   
	r.  c                   @  sB   e Zd ZejddddddZddddZddd	d
ZdS )TestDatasetStreamplotPlotsTr[   ry   rz   c                 C  s   dd dD }t |d |d d}d|jjd< d	|jjd< d
|jjd< d|jjd< d|jjd< d|jjd< t	|j|j|d< || _
d S )Nc              	   S  s:   g | ]2}t tjd d ddddddgdd dD d	qS )
r~   r_   r   r   r[  r@  c                 S  s   g | ]}t |qS r"   r  r/  r"   r"   r#   rC   	  s     z?TestDatasetStreamplotPlots.setUp.<locals>.<listcomp>.<listcomp>)r~   r~   r_   r_   r   r1  r2  r"   r"   r#   rC   	  s   
z4TestDatasetStreamplotPlots.setUp.<locals>.<listcomp>r3  r   rI   r4  r   r   r6  r!  r"  r7  r8  r9  r:  r<  r"   r"   r#   rx  	  s    z TestDatasetStreamplotPlots.setUpc              	   C  s   t  8 | jjdddjjddddd}t|tjjs:t	W 5 Q R X t
jtdd	$ | jjdddjjdddd
 W 5 Q R X t
jtdd	* | jjdddjjddddddd W 5 Q R X d S r=  )r$   r   rK  r   
streamplotr   r4   r9   LineCollectionrd   rt   r   r   r  r"   r"   r#   test_streamline	  s     (     z*TestDatasetStreamplotPlots.test_streamlinec                 C  s   t  @ | jjjdddddddd}|jD ]}t|tjjs*t	q*W 5 Q R X t  $ | jjjdddddddd	d
}W 5 Q R X d S )Nr   r   r5  r   r[  r@  r9  )r   r   r5  r   r[  r@  r   F)r   r   r5  r   r[  r@  r   rD  )
r$   r   r   rU  rk  r   r4   r9   rV  rd   rE  r"   r"   r#   rG  
  s.          
z)TestDatasetStreamplotPlots.test_facetgridN)rq   rr   rs   rt   ru   rx  rW  rG  r"   r"   r"   r#   rT  	  s   
rT  c                   @  s  e Zd ZejddddddZddddZejd	d
dddddgddddddddZ	ddddZ
ddddZddddZddddZejdejdd d!d!d!ed"d#ejd d$d!d!ded%d#gd&d&d'ddd(d)d*d+Zejjd,d-ejd.d/d0gd1dd2d3d4Zejd.d/d0gd1dd2d5d6Zejd7d8d9d:gd;d<gd&d&d&d&dd=d>d?Zddd@dAZdddBdCZdddDdEZdddFdGZd!S )HTestDatasetScatterPlotsTr[   ry   rz   c                 C  s~   dd dD }t |d |d d}d|j_d|jjd	< d
|jjd	< d|jjd	< d|jjd	< d|jjd	< d|jjd	< || _	d S )Nc              	   S  s:   g | ]2}t tjd d ddddddgdd dD d	qS )
r~   r   r   r[  r@  r   c                 S  s   g | ]}t |qS r"   r  r/  r"   r"   r#   rC    
  s     z<TestDatasetScatterPlots.setUp.<locals>.<listcomp>.<listcomp>r0  r   r1  r2  r"   r"   r#   rC   
  s   
z1TestDatasetScatterPlots.setUp.<locals>.<listcomp>r3  r   rI   )r  r  r  r  r   r   r!  r"  ZAunitsZBunits)
r   r   r   r   r   r@  r[  r  r  r   r<  r"   r"   r#   rx  
  s    zTestDatasetScatterPlots.setUpc                 C  s0   ddl m} tj|kstt| jj|s,td S )Nr   )DatasetPlotAccessor)r   rY  r   r   rd   r   r   )r]   rY  r"   r"   r#   r   .
  s    z%TestDatasetScatterPlots.test_accessorrH  rI  rJ  rK  rL  )Fr@  FF)Tr@  TFzbool | Nonez)Literal[('continuous', 'discrete', None)]r   )rD  r?  rR  rX   r{   c              	   C  s<   t | jddd||dd}|d |ks(t|d |ks8td S )Nr  r  r   scatterrN  r   rN  rP  rQ  r"   r"   r#   rS  4
  s    	z&TestDatasetScatterPlots.test_add_guidec                 C  sx   | j jjddddd}|jjt| j jt| j jfks:t| j jjddddd}|jjt| j jt| j jfksttd S )Nr  r  r[  r@  )r   r   r[  r@  )	r   r   rZ  rg   rQ   r'   r[  r@  rd   r  r"   r"   r#   r$  S
  s    $z,TestDatasetScatterPlots.test_facetgrid_shapec                 C  s   | j jjdddddd}t| j jd j|jdd d f D ]\}}tt||s:t	q:|jdd d f D ]}|
 d	ksht	qh|jd d df D ]}| d
kst	qd S )Nr  r  r[  r@  r   )r   r   r[  r@  r   r   r   z
A [Aunits]z
B [Bunits])r   r   rZ  r  r   r   rg   r@   r  rd   rW   rV   r  r"   r"   r#   r  Z
  s    *z+TestDatasetScatterPlots.test_default_labelsc              	   C  s4   t t  | jjjdddt d W 5 Q R X d S )Nr  r  r[  )r   r   r[  r=   )rt   r   r   r   r   rZ  r   r)  r\   r"   r"   r#   r*  i
  s    z1TestDatasetScatterPlots.test_axes_in_faceted_plotc              	   C  s2   t t | jjjdddddd W 5 Q R X d S )Nr  r  r[  r~   r+  )r   r   r[  rN  rL  )rt   r   r   r   r   rZ  r\   r"   r"   r#   r,  m
  s    z-TestDatasetScatterPlots.test_figsize_and_sizez/x, y, hue, add_legend, add_colorbar, error_typer  zThe Spanish InquisitionNZbad_yidr  Zbad_xr   zHashable | Noneztype[Exception])r   r   r   r   rN  
error_typec              	   C  s2   t | | jjj|||||d W 5 Q R X d S )N)r   r   r   r   rN  )rt   r   r   r   rZ  )r]   r   r   r   r   rN  r]  r"   r"   r#   test_bad_argsq
  s        z%TestDatasetScatterPlots.test_bad_argsz.datetime,timedelta hue variable not supported.r*   r?  r@  rM  z#Literal[('discrete', 'continuous')])r?  r{   c                 C  s\   | j  }tjddd|d< |jjddd|d tjddd	d
|d< |jjddd|d d S )Nz2000-1-1r   r!  r   r  r  )r   r   r   r?  z-1DD)r"  freq)r   r   r&  r'  r   rZ  Ztimedelta_range)r]   r?  ds2r"   r"   r#   test_datetime_hue
  s
    
z)TestDatasetScatterPlots.test_datetime_huec                 C  s6   | j jjddddd|d}t|jd tjjs2td S )Nr  r  r[  r@  r   )r   r   r[  r@  r   r?  r   )	r   r   rZ  r   rk  r4   r9   rn   rd   )r]   r?  r  r"   r"   r#   test_facetgrid_hue_style
  s         z0TestDatasetScatterPlots.test_facetgrid_hue_styler   r   r   
markersize)r  r  r   r@  )r   r[  r  r  )r   r   r   rd  r{   c              	   C  sJ   | j jj||||d tjtdd | j jj||ddd W 5 Q R X d S )N)r   r   r   rd  zu, vr   r@  r[  r>  )r   r   rZ  rt   r   r   )r]   r   r   r   rd  r"   r"   r#   test_scatter
  s    z$TestDatasetScatterPlots.test_scatterc                 C  s@   | j  }ddddg|d< |jjdddd}|jjd k	s<td S )	NrT   r   r  rF  r   r  r  r   )r   r   r   rZ  r)  Zlegend_rd   )r]   ra  pcr"   r"   r#   test_non_numeric_legend
  s    
z/TestDatasetScatterPlots.test_non_numeric_legendc                 C  s`   | j  }ddddg|d< |jjdddd}dd |j jD }d	d
dddg}||ks\td S )NrT   r   r   r  r  r   c                 S  s   g | ]}|  qS r"   r,   r.   r"   r"   r#   rC   
  s     z>TestDatasetScatterPlots.test_legend_labels.<locals>.<listcomp>zcol [colunits]$\mathdefault{0}$$\mathdefault{1}$$\mathdefault{2}$z$\mathdefault{3}$)r   r   r   rZ  r)  r   r  rd   )r]   ra  rf  ro  rp  r"   r"   r#   r  
  s    
z*TestDatasetScatterPlots.test_legend_labelsc                 C  sj   | j  }ddddg|d< |jjddddd	d
}|j}|d k	sBttdd |jD }d}||ksftd S )NrF  rT   r  r   r   r  r  r   r@  )r   r   r   rd  r@  c                 s  s   | ]}|  V  qd S r8   r,   r.   r"   r"   r#   r  
  s     zGTestDatasetScatterPlots.test_legend_labels_facetgrid.<locals>.<genexpr>)z
x [xunits]rh  ri  rj  )r   r   r   rZ  r  rd   rT  r  )r]   ra  r  rR  ro  rp  r"   r"   r#   test_legend_labels_facetgrid
  s    
z4TestDatasetScatterPlots.test_legend_labels_facetgridc                 C  s,   | j jjdddd}t|jjdks(td S )Nr  r  r   r   r_   )r   r   rZ  r'   rk  r)  rd   )r]   Zscr"   r"   r#   test_add_legend_by_default
  s    z2TestDatasetScatterPlots.test_add_legend_by_default)rq   rr   rs   rt   ru   rx  r   rv   rs  rS  r$  r  r*  r,  rc  KeyErrorr   r^  Zxfailrb  rc  re  rg  r  rk  rl  r"   r"   r"   r#   rX  
  sn   
            
rX  c                   @  s^   e Zd ZejddddddZddddZddd	d
ZddddZddddZ	dS )TestDatetimePlotTr[   ry   rz   c                 C  sX   t ddd}t dt j | d }t|dgd}t dd |D |jd< || _d	S )
zU
        Create a DataArray with a time-axis that contains datetime objects.
        rI   rK  r_         (@r   r  c                 S  s   g | ]}t d |dqS )i  rI   r   rp  r"   r"   r#   rC   
  s     z*TestDatetimePlot.setUp.<locals>.<listcomp>N)rL   r   sinpir
   r   r   r   r]   monthr   r   r"   r"   r#   rx  
  s
    zTestDatetimePlot.setUpc                 C  s   | j j  d S r8   r  r\   r"   r"   r#   test_datetime_line_plot
  s    z(TestDatetimePlot.test_datetime_line_plotc                 C  s>   t  \}}|| jd | j t|j tjj	ks:t
d S )Nr   )r   rb   r   r   r  xaxisget_major_locatorr4   datesAutoDateLocatorrd   )r]   rf   r=   r"   r"   r#   test_datetime_units
  s    z$TestDatetimePlot.test_datetime_unitsc                 C  s4   | j j }|d j}t|j tjj	ks0t
d S ri   )r   r   r   r)  r  ru  rv  r4   rw  rx  rd   )r]   r  r=   r"   r"   r#   test_datetime_plot1d
  s    
z%TestDatetimePlot.test_datetime_plot1dc                 C  sf   t tdddddddgdd tdd	D dd
}|j }|j}t|j	
 tjjksbtd S )Nr#  r~   r   r   rI   r_   c                 S  s   g | ]}t d |dqS )z2000-01-Z02d)rL   Z
datetime64r  r"   r"   r#   rC   
  s     z9TestDatetimePlot.test_datetime_plot2d.<locals>.<listcomp>r   r   )r
   rL   r   rP   r9  r   r   r)  r  ru  rv  r4   rw  rx  rd   )r]   r   r  r=   r"   r"   r#   test_datetime_plot2d
  s    	
z%TestDatetimePlot.test_datetime_plot2dN)
rq   rr   rs   rt   ru   rx  rt  ry  rz  r{  r"   r"   r"   r#   rn  
  s   
		rn  z/ignore:setting an array element with a sequenceznc_time_axis is not installedc                   @  sP   e Zd ZejddddddZddddZddd	d
ZddddZdS )TestCFDatetimePlotTr[   ry   rz   c                 C  sD   t jdd}tjddddd}t|ddgd	}||jd< || _d
S )d
        Create a DataArray with a time-axis that contains cftime.datetime
        objects.
        r   r#  20171MnoleaprR   r"  r`  calendarr   r   r  N)rL   r(  Zrandr   cftime_ranger
   r   r   )r]   r   r   r   r"   r"   r#   rx    s
    
zTestCFDatetimePlot.setUpc                 C  s   | j jddj  d S )Nr   r   )r   rK  r   r   r\   r"   r"   r#   test_cfdatetime_line_plot  s    z,TestCFDatetimePlot.test_cfdatetime_line_plotc                 C  s   | j j  d S r8   )r   r   r   r\   r"   r"   r#   test_cfdatetime_pcolormesh_plot  s    z2TestCFDatetimePlot.test_cfdatetime_pcolormesh_plotc                 C  s   | j j  d S r8   )r   r   r   r\   r"   r"   r#   test_cfdatetime_contour_plot"  s    z/TestCFDatetimePlot.test_cfdatetime_contour_plotN)	rq   rr   rs   rt   ru   rx  r  r  r  r"   r"   r"   r#   r|  
  s
   
r|  znc_time_axis is installedc                   @  s4   e Zd ZejddddddZddddZd	S )
TestNcAxisNotInstalledTr[   ry   rz   c                 C  sV   t ddd}t dt j | d }t|dgd}tjddd	d
d|jd< || _dS )r}  rI   rK  r_   ro  r   r  r~  r#  r  r  r  N)	rL   r   rp  rq  r
   r   r  r   r   rr  r"   r"   r#   rx  )  s       zTestNcAxisNotInstalled.setUpc              	   C  s*   t jtdd | jj  W 5 Q R X d S )Nzoptional `nc-time-axis`r   )rt   r   ImportErrorr   r   r   r\   r"   r"   r#   "test_ncaxis_notinstalled_line_plot8  s    z9TestNcAxisNotInstalled.test_ncaxis_notinstalled_line_plotN)rq   rr   rs   rt   ru   rx  r  r"   r"   r"   r#   r  &  s   
r  c                   @  s  e Zd Zejdddgddd Zejddgddd Zejd	d
dgddddZ	ejdd
dgddddZ
ejddddgddddZejddddgddddZddddZddddZddd d!Zddd"d#Zddd$d%Zddd&d'Zd(S ))TestAxesKwargsrI   r_   r~   )paramsc                 C  sF   |j }|dkrttdS |dkr.ttdS |dkrBttdS dS )z+
        Return a simple DataArray
        rI   )r   r_   r  r~   )r   r~   r_   N)rc  r
   rU   r]   requestr   r"   r"   r#   
data_array?  s    zTestAxesKwargs.data_arrayc              	   C  sr   |j }|dkr0ttdddtdddidS |dkrnttd	d
d
dtddd
tddd
ddS dS )zF
        Return a simple DataArray with logspaced coordinates
        rI   r  r   r   r  r~   r   r_      r   r   r   r1  r   N)rc  r
   rL   r   r3  rP   r  r"   r"   r#   data_array_logspacedL  s      z#TestAxesKwargs.data_array_logspacedr  TFry   rz   c              	   C  s8   t  ( |j|d t  | ks*tW 5 Q R X d S )N)r  )r$   r   r   rj   Zxaxis_invertedrd   )r]   r  r  r"   r"   r#   test_xincrease_kwarg]  s    z#TestAxesKwargs.test_xincrease_kwargr  c              	   C  s8   t  ( |j|d t  | ks*tW 5 Q R X d S )Nr  )r$   r   r   rj   Zyaxis_invertedrd   )r]   r  r  r"   r"   r#   test_yincrease_kwargc  s    z#TestAxesKwargs.test_yincrease_kwargr  ZlinearZlogitZsymlogc              	   C  s6   t  & |j|d t  |ks(tW 5 Q R X d S )Nr  r$   r   r   rj   Z
get_xscalerd   )r]   r  r  r"   r"   r#   test_xscale_kwargi  s    z TestAxesKwargs.test_xscale_kwargr  c              	   C  s6   t  & |j|d t  |ks(tW 5 Q R X d S )Nr  r$   r   r   rj   Z
get_yscalerd   )r]   r  r  r"   r"   r#   test_yscale_kwargo  s    z TestAxesKwargs.test_yscale_kwargc              	   C  s:   d}t  & |j|d t  |ks,tW 5 Q R X d S )Nr.  r  r  )r]   r  r  r"   r"   r#   test_xscale_log_kwargu  s    z$TestAxesKwargs.test_xscale_log_kwargc              	   C  s:   d}t  & |j|d t  |ks,tW 5 Q R X d S )Nr.  r  r  )r]   r  r  r"   r"   r#   test_yscale_log_kwarg{  s    z$TestAxesKwargs.test_yscale_log_kwargc              	   C  s>   t  . d}|jddgd t  |ks0tW 5 Q R X d S )Nr  r  r   r  )r  )r$   r   r   rj   r  rd   r]   r  rp  r"   r"   r#   test_xlim_kwarg  s    zTestAxesKwargs.test_xlim_kwargc              	   C  s>   t  . |jddgd d}t  |ks0tW 5 Q R X d S )Nr   r  )r  r  )r$   r   r   rj   r  rd   r  r"   r"   r#   test_ylim_kwarg  s    zTestAxesKwargs.test_ylim_kwargc              	   C  sH   t  8 |jtdd td }tt  | W 5 Q R X d S )Nr   )r  )	r$   r   rL   r   tolistr   r   rj   r  r  r"   r"   r#   test_xticks_kwarg  s    z TestAxesKwargs.test_xticks_kwargc              	   C  sD   t  4 |jtdd td}tt  | W 5 Q R X d S )Nr   )r  )r$   r   rL   r   r   r   rj   r  r  r"   r"   r#   test_yticks_kwarg  s    
z TestAxesKwargs.test_yticks_kwargN)rq   rr   rs   rt   ru   r  r  rv   rs  r  r  r  r  r  r  r  r  r  r  r"   r"   r"   r#   r  =  s$   

r  r  r   r   r   ry   rz   c              	   C  s   t ddd}t ddd}t ddd}|d d t jf |t jd d f  }tjt |t | dd	g||d
|fd|jfdd}t  t	|j
| d	dd W 5 Q R X t  t	|j
| dd	d W 5 Q R X d S )Nr   r   e   r~   r  rI   3   rv  r   )rv  r   )r   rv  )r   rv  r   ztr   r  r   )rL   rM   Znewaxisr   r
   rp  r   Tr$   rl  r   )r  r   r   rv  r   r   r"   r"   r#   !test_plot_transposed_nondim_coord  s    $r  r   c              	   C  sr   t jtdtj d td gd dd}t 4 t|j| ddd}t	|
  |   W 5 Q R X d S )Nr_   r   r   r  r   r   r   )r   r
   rL   rp  rq  r   r$   rl  r   r   r  ZravelZto_masked_array)r  r   r   r"   r"   r#   test_plot_transposes_properly  s    .r  c               	   C  s   t t dt d\} }tt | d |d  }tt | d |d  d }tj||gdd}ddg|d< t  |jj	ddgdgd	 W 5 Q R X d S )
Nr#  r_   rI   r   )rg  r   r   rw  )r@  r  rI  )
rL   r   r   r   r
   r6  concatr$   r   r   )r   r   r   Zz2r   r"   r"   r#   test_facetgrid_single_contour  s     r  c                	   C  s   t jtdd tddgd d dd W 5 Q R X t jtdd td dddd W 5 Q R X t jtd	d tddgdd d d W 5 Q R X t jtd
d td d dd d W 5 Q R X t jtdd td d d ddd W 5 Q R X d S )Nzboth `figsize` and `ax`r   r   Z	somethingrL  rN  rP  r=   zboth `size` and `ax`r   gUUUUUU?zboth `figsize` and `size`z `aspect` argument without `size`z'cannot use subplot_kws with existing axrI   r   )rL  rN  rP  r=   Zsomething_else)rt   r   r   r   r"   r"   r"   r#   test_get_axis_raises  s    r  rL  rN  rP  r=   r!   r  Fr[  )r-  g      @rj  testZfigsize_kwargsr   g      @Zsize_kwargszsize+aspectr  Zauto_aspectr  Zequal_aspectdefaultZdefault_kwargsztuple[float, float] | Noner  r   zdict[str, Any])rL  rN  rP  r=   r!   r{   c              	   C  sP   t  @ |rt nd }tf | |||d|}t|tjjsBtW 5 Q R X d S )Nr  )r$   r   r)  r   r   r4   Axesrd   )rL  rN  rP  r=   r!   Zinp_axout_axr"   r"   r#   test_get_axis  s       r  )rL  rN  rP  r{   c              	   C  sN   dt j i}t 0 tf | ||d|}t|t jjjs@t	W 5 Q R X d S )Nr  )rL  rN  rP  )
cartopyZcrsZPlateCarreer$   r   r   r4   ZgeoaxesZGeoAxesSubplotrd   )rL  rN  rP  r!   r  r"   r"   r#   test_get_axis_cartopy   s    r  c               	   C  s4   t  $ t \} }t }||ks&tW 5 Q R X d S r8   )r$   r   rb   r   rd   )r  r=   r  r"   r"   r#   test_get_axis_current  s    r  c               	   C  s   t  2 tdd} t| tjjs$t|  dks4tW 5 Q R X t  : t	  tdd} t| tjjsjt|  dksztW 5 Q R X t  4 t }tdd} || kst|  dkstW 5 Q R X d S )NrI   rS  r  )
r$   r   r   r4   r)  r  rd   r  r   rk  )r=   Zexisting_axesr"   r"   r#   test_maybe_gca  s    


r  z<x, y, z, hue, markersize, row, col, add_legend, add_colorbar)	r  r  NNNNNNN)	r  r  Nr  NNNTN)	r  r  Nr   r   NNTT)	r  r  r   NNNNNN)	r  r  r   r  NNNTN)	r  r  r   r   r   NNTT)	r  r  r   r   r   r  NTTc	              	     s   t j  dd | ||fD }	t j}
|
 fdd|	D  t j | |
d}t  |jj	| |||||d W 5 Q R X dS )z8Test datarray scatter. Merge with TestPlot1D eventually.c                 S  s   g | ]}|d k	r|qS r8   r"   r/   r   r"   r"   r#   rC   K  s      z)test_datarray_scatter.<locals>.<listcomp>c                   s   i | ]}| | qS r"   r"   r  r   r"   r#   
<dictcomp>Q  s      z)test_datarray_scatter.<locals>.<dictcomp>r   )r   r   r   rd  r   rN  N)
r   r  r  r   r   updater
   r$   r   rZ  )r   r   r   r   rd  r[  r@  r   rN  Zextra_coordsr   r   r"   r  r#   test_datarray_scatter8  s    

r  c               	   C  sX   t j } | j}t|ddd t|d dd tjtdd t|ddd W 5 Q R X d S )Nr   )r   r   r   zx must be one ofr   Z	error_now)r   r  r  r  r   rt   r   r   )r   r   r"   r"   r#   test_assert_valid_xy`  s    
r  valemptyZscalarmethod__call__r   r  r  rZ  r  zlist | floatr  )r  r  r{   c              	   C  s6   t | }tjtdd t|j|  W 5 Q R X d S )NzNo numeric datar   )r   r
   rt   r   r   rl  r   )r  r  r   r"   r"   r#   test_plot_empty_raisesp  s    
r  c               
   C  sR   t jtdd: t ( tj } | jjdddd}|j	 W 5 Q R X W 5 Q R X d S )Nzlself.axes is deprecated since 2022.11 in order to align with matplotlibs plt.subplots, use self.axs instead.r   r  r  r   r  )
rt   r  DeprecationWarningr$   r   r  r  r   rZ  r)  )r   r  r"   r"   r#   .test_facetgrid_axes_raises_deprecation_warning  s    
r  )r   rI   )n
__future__r   
contextlibr^  rN   r   r   typingr   r   r   r	   ZnumpyrL   Zpandasr&  rt   Zxarrayr   Zxarray.plotr   rZ  r
   r   Zxarray.core.utilsr   Zxarray.plot.dataarray_plotr   Zxarray.plot.dataset_plotr   Zxarray.plot.utilsr   r   r   r   r   r   r   Zxarray.testsr   r   r   r   r   r   Zhas_nc_time_axisZ
matplotlibr4   Zmatplotlib.pyplotZpyplotr   r  r  r  contextmanagerr$   ru   r)   rv   Zflakyr  r7   r;   r@   rE   rH   rU   rY   rZ   rx   rt  r  r  r  r  r	  rw   r~  r  r  r  r  r  r  rr  r  r  r  r.  rT  rX  rn  Zskipifr|  r  r  rs  r  r  r  r  rc  r  r  r  r  r  r  r  r  r"   r"   r"   r#   <module>   sh  $	 

	
	

    N<, R`   I1<. U i
6

NS6 ;7
\
     		 