U
    FvfK                  
   @   s  d dl mZ d dlmZ d dlZd dlZd dlmZ d dlZd dlZd dl	Z
d dlZd dlmZ d dlmZ d dlZd dlmZmZmZmZmZmZ d dlmZmZmZmZm Z  d d	l!m"Z"m#Z# d d
l$m%Z%m&Z&m'Z' d dl(m)Z* d dl+Z+e#dgdddd Z,e#dgdddd Z-e#dgddgdddd Z.e+j/0dddge#dgddgdd d! Z1d"d# Z2e+j/0d$d%d&d'd(d)ge"dgdd*d+ Z3e"dgdd,d- Z4e" d.d/ Z5d0d1 Z6d2d3 Z7e+j/0d4dd5d6d7gd8d9 Z8e+j/0d4ddd:d;dgd<d= Z9d>d? Z:d@dA Z;dBdC Z<e#dDgdddEdF Z=dGdH Z>e+j/0dIdJdKggdLfdMdNggdOfej?dPdQggdRfdPdSggdTfdUdUggdVfgdWdX Z@e#dYgdddZd[ ZAe#d\gddd]d^ ZBe#d_gddd`dadb ZCe"dgddcdd ZDdedf ZEdgdh ZFe#digdddjdk ZGe#dlgdddgdmdndo ZHdpdq ZIe#drgddd`dsdt ZJe#dugdddvdw ZKe"dgddxdy ZLe#dzgddgddd{d|d} ZMe#d~gddd`dd ZNdd ZOe#dgddd`dd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVe+j/0deeWdeWdeWdXdfe eWdeWdeWdXdfgdd ZYdd ZZdd Z[e#dgdddd Z\e#dgdddd Z]dd Z^dd Z_e#dgddddd Z`e#dgdddd Zadd Zbe#dgdddd Zce#dged dkr d ndddddd Zedd Zfe+j/0ddd dg D ddÄ Zhe#dgddd`ddƄ Zie#dgddd`ddɄ Zje#dgddd`dd̄ Zke+j/0dejlejmddτ ddτ gdd҄ ZnddԄ Zoddք Zpdd؄ Zqddڄ Zre+j/0dddge+j/0dddgdd Zsdd Ztdd Zudd Zvdd Zwe" dd Zxdd Zyejzddd Z{e#dgddgddd{dd Z|G dd dej}Z~dd Zdd Ze"dgddd Ze+j/0ddUdPge"dgddd Ze" dd  Ze#dgdddd Ze#dgdded dkrdnd ddd	 Ze+j/d
e+j/0dddge+j/0ddddgdddgge"dddd Ze"dgddd ZdS (      )	ExitStack)copyN)Path)assert_array_equal)Image)colorsimagepatchespyplotstylercParams)	AxesImage	BboxImageFigureImageNonUniformImagePcolorImage)check_figures_equalimage_comparison)BboxAffine2DTransformedBboxZimage_interpsZmpl20)r   c                  C   s   dt jd< tddd} t d\}\}}}|j| dd |d	 |d |j| d
d |d
 |j| dd |d dS )z5Make the basic nearest, bilinear and bicubic interps.   ztext.kerning_factord            nearestinterpolationzthree interpolationsbilinearZbicubicN)	pltr   nparangereshapesubplotsimshow	set_titleZ
set_ylabel)Xfigax1ax2ax3 r,   ?/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_image.pytest_image_interps   s    



r.   zinterp_alpha.pngT)remove_textc                  C   sf   t dd\} \}}td}td|d< ttjdtjd|d< |j|dd	 |j|d
d	 dS )z:Test the interpolation of the alpha channel on RGBA images      )r   r      r   r   ).r0   dtype.r   noner   r   N)r    r$   r!   zerosonesZtriluint8r%   )r(   ZaxlZaxrimgr,   r,   r-   test_alpha_interp.   s    
r<   Zinterp_nearest_vs_noneZpdfsvg)
extensionsr/   c                  C   s   dt d< tjdddgdddggd	d
dgd
ddgggtjd} tdd\}\}}|j| dd |d |j| dd |d dS )z5Test the effect of "nearest" and "none" interpolationr   savefig.dpi          z   g            r   c   G   r4   r0   r1   r7   r   zinterpolation noner   zinterpolation nearestN)r   r!   arrayr:   r    r$   r%   r&   )r'   r(   r)   r*   r,   r,   r-   test_interp_nearest_vs_none;   s    
rK   suppressCompositeFfigimagepng)r>   c                 C   s  t jddd}| |_ttdd tdd \}}t|d |d  ||  }td|d  d|d   }||d  }|j|d	d	d
d |j|d d dd d f d	dd
d |j|d d d d df dd	d
d |j|d d dd d df ddd
d d S )Nr1   r1   r   figsizedpig      Y@r1   r   2   r   r   lower)ZxoZyoorigin)r    figurerL   r!   Zix_r"   sinrM   )rL   r(   xyzcr;   r,   r,   r-   test_figimageM   s    $$$r]   c                  C   sF   t  \} }|dddg t }| | |d t | d S )Nr0   r1   r   r   )r    r$   plotioBytesIOsavefigseekimread)r(   axbufferr,   r,   r-   test_image_python_io]   s    

rf   z!img_size, fig_size, interpolation)r   r1   hanning)r   r   r   )r   
   r   )r   333333@rg   )r   g333333"@r   c           	      C   s   t jd tjd }t jt|| t|| }| |fD ]}||| q<|  }|	ddddg |j
|dd | }|	ddddg |j
||d d S )N!N,r?   r   r0   antialiasedr   )r!   randomseedr    r   randintset_size_inchesr$   set_positionr%   )	fig_testfig_refZimg_sizeZfig_sizer   rR   Ar(   rd   r,   r,   r-   test_imshow_antialiasedf   s    
ru   c                 C   s   t jd tjd }t jt|d t|d }| |fD ]}|dd q<|  }|j	|dd |
ddg |ddg | }|j	|d	d |
ddg |ddg d S )
Nrj   r?   r   ri   rk   r   rh   r   r   )r!   rl   rm   r    r   rn   ro   rp   r$   r%   set_xlimset_ylim)rr   rs   rR   rt   r(   rd   r,   r,   r-   test_imshow_zoom~   s    
rx   c                 C   s   t d ttjd }ttjd }| d}|d t| |d t| |d}|d t	
| |d t	
| d S )Ndefault%baseline_images/pngsuite/basn3p04.png%baseline_images/test_image/uint16.tifr1   r   r0   )r   Zuser   __file__parentr$   r%   r   openr    rc   )rr   rs   Zpng_pathZ	tiff_pathaxsr,   r,   r-   test_imshow_pil   s    


r   c                  C   sF   t tjtjtddd} | jtj	ks0t
t| dksBt
d S )NZbaseline_imagesZ
test_imagez
uint16.tif )r    rc   ospathjoindirnamer|   r5   r!   uint16AssertionErrorsumr;   r,   r,   r-   test_imread_pil_uint16   s      r   c                  C   s:   t ttjd } | jtjks$tt	| dks6td S )Nr{   r   )
r    rc   r   r|   r}   r5   r!   r   r   r   r   r,   r,   r-   test_imread_fspath   s
    r   fmtjpgjpegtiffc                 C   s   | dk}t jd t jdd}t }tj||| dd t }tj||| dd |d tj	|| d}|d tj	|| d}|j
ddd	| fkst|j
ddd	| fkstt|| d S )
N)r   r   r0   i@  r1   )formatrR   r   r   r   r   )r!   rl   rm   rn   r_   r`   r    imsaverb   rc   shaper   r   )r   Z	has_alphadataZ	buff_dpi1Zbuff_dpi100Zarr_dpi1Z
arr_dpi100r,   r,   r-   test_imsave   s    	

r   psZepsc                 C   s&   t jttjtddgg| d d S )Nr   r0   r   )r    r   r   r   devnullr!   rJ   )r   r,   r,   r-   test_imsave_fspath   s    r   c                  C   s   t jd dD ]~} t jddd}t }tj||| dd |d t	|}d| 
d	}| d
krv|d d d }d| 
d	}t|| qd S )Nr0   )rT   upper   r2   rN   )rU   r   r   rG   r:   rT   rV   )r!   rl   rm   rn   r_   r`   r    r   rb   rc   astyper   )rU   r   buffZarr_bufr,   r,   r-   test_imsave_color_alpha   s    

r   c                  C   sh   ddl m}  t }|  }|dd tj|ddgddggdd	|id
 t|}|j	d dksdt
d S )Nr   )PngInfoZSoftwaretestr0   r1   r   rN   pnginfor   
pil_kwargs)ZPIL.PngImagePluginr   r_   r`   add_textr    r   r   r~   infor   )r   bufr   imr,   r,   r-   test_imsave_pil_kwargs_png   s     
r   c                     s   ddl m  t } ddi}tj| ddgddggd|d	 t|dksJtt	| } fd
d|j
 D }|d dks|td S )Nr   )TAGS_V2descriptionz
test imager0   r1   r   r   r   c                    s   i | ]\}} | j |qS r,   )name).0kvZTAGSr,   r-   
<dictcomp>   s      z/test_imsave_pil_kwargs_tiff.<locals>.<dictcomp>ZImageDescription)ZPIL.TiffTagsr   r_   r`   r    r   lenr   r   r~   Ztag_v2items)r   r   r   tagsr,   r   r-   test_imsave_pil_kwargs_tiff   s    
r   Zimage_alphac                  C   sd   t jd t jdd} tdd\}\}}}|j| ddd |j| ddd |j| dd	d d S )
Nr   r   r0   r         ?r7   )alphar         ?r   )r!   rl   rm   rn   r    r$   r%   )Zr(   r)   r*   r+   r,   r,   r-   test_image_alpha  s    r   c            
      C   s|  ddl m}  t \}}|jtddddd}d\}}|j	||g\}}| d|j
||}||d	ksrtd
\}}|j	||g\}}| d|j
||}||d kst|  |jtddddd}d\}}|j	||g\}}| d|j
||}||d	kstt \}}|jtdddddddgd}d\}}|j	||g\}}| d|j
||}||dkstd\}}|j	||g\}}| d|j
||}||d kstd\}}|j	||g\}}| d|j
||}||d kstt dd}	|jtddd|	|j d}d\}}|j	||g\}}| d|j
||}||d	ksxtd S )Nr   
MouseEventr   rh   r   )rU   r2   r2   motion_notify_event,   )g333333$@r2   rT   r   extent)      ?r   7   )      ?r   ){Gz?g{Gzr1   )	transform)r   rh   )matplotlib.backend_basesr   r    r$   r%   r!   r"   r#   	transDatar   canvasget_cursor_datar   clearr   Zscalerotate)
r   r(   rd   r   rY   rZ   xdispydispeventZtransr,   r,   r-   test_cursor_data  sN    
$r   z
data, texti'  i'  z[10001.000]grh|?g/$?z[0.123]r0   r1   []g     ?z[1.0000000000000000]rV   z[-1.0000000000000000]c           	      C   sb   ddl m} t \}}|| }|jddg\}}|d|j||}||	||ks^t
d S )Nr   r   r   )r   r   r    r$   r%   r   r   r   format_cursor_datar   r   )	r   textr   r(   rd   r   r   r   r   r,   r,   r-   test_format_cursor_dataT  s    	
r   Z
image_clipc                  C   sF   ddgddgg} t  \}}|| }tjdd|jd}|| d S )Nr0   r1   r   r2   r   r   )Zradiusr   )r    r$   r%   r	   ZCircler   set_clip_path)dr(   rd   r   patchr,   r,   r-   test_image_clipg  s
    
r   Zimage_cliprectc                  C   sN   t  \} }ddgddgg}|j|dd}tjddd|jjd}|| d S )	Nr0   r1   r   r2   r   r   r   r   r   r0   r0   )Zxywidthheightr   )r    r$   r%   r	   Z	RectangleZaxesr   r   )r(   rd   r   r   Zrectr,   r,   r-   test_image_cliprectq  s       r   r%   )r/   r   c                  C   sH   t  \} }tdd}|j|ddd |dd |dd d S )Nr   rh   rh   r   r0   r1   r0   r1   r   r   r   r   )r    r$   r!   r"   r#   r%   rv   rw   r(   rd   arrr,   r,   r-   test_imshow}  s
    r   c                 C   s   t dd}| }|j|d d d d df ddd |dd |dd |  }|j|ddd |dd |dd d S )Nr   )rh   rh   r0   r   r   r   r   r   )r!   r"   r#   r$   r%   rv   rw   )rr   rs   r   rd   r,   r,   r-   test_imshow_10_10_1  s    "r   c               	   C   s@   t  \} }tdd}tt || W 5 Q R X d S )N   )rh   rh   r1   	r    r$   r!   r"   r#   pytestraises	TypeErrorr%   r   r,   r,   r-   test_imshow_10_10_2  s    r   c               	   C   s@   t  \} }tdd}tt || W 5 Q R X d S )Ni  )rh   rh   r   r   r   r,   r,   r-   test_imshow_10_10_5  s    r   Zno_interpolation_originc                  C   sP   t d\} }|d jtddddd |d jtdddd	 d S )
Nr1   r   r   )r1   rS   rT   r7   )rU   r   r0   r   )r    r$   r%   r!   r"   r#   )r(   r   r,   r,   r-   test_no_interpolation_origin  s
    r   Zimage_shift)r/   r>   c                  C   sT   dd t ddD } d}d}t \}}|j| t d||ddfd |d	 d S )
Nc                    s$   g | ]  fd dt ddD qS )c                    s   g | ]}d | d    qS )r0   r,   )r   rY   rZ   r,   r-   
<listcomp>  s     z/test_image_shift.<locals>.<listcomp>.<listcomp>r0   r   )range)r   r,   r   r-   r     s     z$test_image_shift.<locals>.<listcomp>r0   r   gMk&Agk&Ar7   )normr   r   auto)r   r    r$   r%   r   LogNormZ
set_aspect)ZimgDataZtMinZtMaxr(   rd   r,   r,   r-   test_image_shift  s    
r   c                  C   s  t jddgd} | jddddgdd}ttdddd	}|j|d
ddddgddd}d }}|| |g |	| |g |
g  |g  t }| j|dd |d t |}t|d d df \}}}	}
t|d d df \}}}	}
|dkstdd S )Nr0   rQ   r   F)frameon      r   	   r   rh   r7   gray)rU   r   r   cmapr1   )r   r0   r   )	facecolorrV   r   z.Expected a non-green edge - but sadly, it was.)r    rW   add_axesr!   Ztiler"   r#   r%   rv   rw   
set_xticks
set_yticksr_   r`   ra   rb   rc   r   r   )r(   rd   r   r   rY   rZ   r   rgbar,   r,   r-   test_image_edges  s&     



r  Zimage_composite_backgroundc                  C   sf   t  \} }tddd}|j|ddddgd |j|ddddgd |d	 |ddg d S )
Nr   r2   r   r   r1   r   r   r   )r0   r   r   r   )r    r$   r!   r"   r#   r%   set_facecolorrv   r   r,   r,   r-   test_image_composite_background  s    
r  Zimage_composite_alphac                  C   s  t  \} }td}d|dddddf< ttdddtdddddd f|dddddf< td	}d|dddddf< d|dddddf< ttdddtdddddd fddtjf |dddddf< |j|dd
ddgdd |j|d
dddgdd |j|ddddgd |j|dddd
gd |j|ddd
dgdd |j|ddddgdd |d |	ddg |
ddg dS )z{
    Tests that the alpha value is recognized and correctly applied in the
    process of compositing images together.
    )      r2   r0   Nr   皙?皙?rV   r   )r  r  r2   r1   r   333333?)r   r   333333?r2   r   )r   r   r   r0   )r    r$   r!   r8   Zconcatenater"   Znewaxisr%   r  rv   rw   )r(   rd   r   Zarr2r,   r,   r-   test_image_composite_alpha  s.    
$
$
r  c                 C   st   t dd}| |fD ]P}| }|j|tjdddg|jfd |j|tjddd	g|jfd qd
|_	d S )Nr   r   r   r   r   r0   )r0   r   )Z	clip_pathr   r0   r1   )r1   r0   T)
r!   r"   r#   add_subplotr%   mplr   r   r   rL   )rr   rs   tr(   rd   r,   r,   r-   #test_clip_path_disables_compositing  s    
r  Zrasterize_10dpi)r>   r/   r   c                  C   s   t ddgddgg} tjdddd\}}|d |  |d jddgddgdd	d
 |d jddd |d jddgddgdd |d jddd |D ],}|g  |g  |j	d d  
d qdtd< d S )Nr0   r1   r   r2   )r   r0   r   r   g      4@T)	linewidthZ
rasterizedr  )rV   r1   xlimylim)r  Frh   r?   )r!   asarrayr    r$   r%   r^   setr   r   ZspinesZset_visibler   )r;   r(   r   rd   r,   r,   r-   test_rasterize_dpi  s    	

r  Zbbox_image_invertedc                  C   s   t dd} t \}}tttddgddgg|jdd}|	|  |
d |dd |dd || t d} tttdd	gd
dgg|jjdd}|	|  |
d || d S )Nr   r   r   r   r   Frh   r	  皙?r
  r   )r!   r"   r#   r    r$   r   r   r   r   set_dataZset_clip_onrv   rw   Z
add_artistidentityrW   ZtransFigure)r   r(   rd   Zbbox_imr,   r,   r-   test_bbox_image_inverted$  s(    





r  c               	   C   sN  t ddddgddddgdd	d
dgddddgg} tjddd\}}|ddddg |dd |dd |j| ddddgdd}|j	  |jj
}||}t| ddgddgg tjddd\}}|ddddg |dd |dd |j| ddddgd|jd}|j	  |jj
}||}t| ddgddgg d S )Nr   r   r   r	  g?r   皙?r  r
          r  ffffff?g?r   r   rP   r   r0   r   )r   r   i  r   i  i  r1   )r   r   r   )r!   rJ   r    r$   rq   rv   rw   r%   r   drawrendererZget_window_extentr   Z
get_pointsZ	transAxes)r   r(   rd   Zim_objr#  Zim_bboxr,   r,   r-   $test_get_window_extent_for_AxisImage=  s>    
 
 
 

 
 

r$  zzoom_and_clip_upper_origin.pngc                  C   sF   t d} | d} t \}}||  |dd |dd d S )Nr   r          @      )r!   r"   r#   r    r$   r%   rw   rv   )r   r(   rd   r,   r,   r-   test_zoom_and_clip_upper_origin`  s    


r'  c                  C   s   t  } t| }|d d S )NBlues)r    gcar   Zset_cmaprd   r   r,   r,   r-   test_nonuniformimage_setcmapl  s    r+  c                  C   s"   t  } t| }|t   d S N)r    r)  r   set_norm	Normalizer*  r,   r,   r-   test_nonuniformimage_setnormr  s    r/  c                  C   sn   t jddd} tdD ]"}t dddd | |d d f< qtdd}||   t	 \}}|
| d S )	Nr   r:   r4   rh   r   r   rG   L)r!   r9   r   linspacer   newZputdataflattenr    r$   r%   )Zimdir   r(   rd   r,   r,   r-   test_jpeg_2dx  s     r5  c                  C   s   t jddd tjdtd} tddd| d< t |  t }t j	|d	d
dd |
d t|}t|d}d|  krdksn t|d}|dkstd S )Nr   ,  rP   )r6  r6  r2   r4   r   r   r6   Zredr   )r   r   rR   r            r   )   r   r   )r    rW   r!   r8   floatr1  rM   r_   r`   ra   rb   r   r~   r   Z	getcolorsr   Zgetpixel)r   r   r   Z
num_colorsZcorner_pixelr,   r,   r-   test_jpeg_alpha  s    



r<  c                  C   sP   t  } t| }tjdtdd}|| d|d< |jd dksLt	dd S Nr   r4   r2   r   #@r   r   value changed)
r    r)  r   r!   r"   r;  r#   r  _Ar   )rd   r   r[   r,   r,   r-   test_axesimage_setdata  s    
rB  c                  C   sP   t  } t| }tjdtdd}|| d|d< |jd dksLt	dd S r=  )
r    Zgcfr   r!   r"   r;  r#   r  rA  r   )r(   r   r[   r,   r,   r-   test_figureimage_setdata  s    
rC  zimage_cls,x,y,a      @      @g      (@r>  g      @)r   r1   c                 C   s   t  }| |}|||| d |d<  |d< |d< |jd |jd   krf|jd   krfdkspn td|||||jd d S )Nr?  r   r   r@  rV   )rV   )	r    r)  r  rA  Z_AxZ_Ayr   r#   r   )Z	image_clsrY   rZ   r  rd   r   r,   r,   r-   test_setdata_xya  s    :rF  c            
      C   s   ddl m}  tjd tjdd}tdd\}}|d |}|d |}tj	||d d tj	||d d t
 }tj|dd t
| }| |}d }|d	D ]*}	|d kr|	d
 }q|	d
 |krdstqd S )Nr   )ElementTreerh   r0   r1   )rd   r=   r   r   r   F)Z	xml.etreerG  r!   rl   rm   rn   r    r$   Z
pcolormeshcolorbarr_   r`   ra   getvalueparseiterr   )
rG  r   r(   rd   p1p2r   treer   r   r,   r,   r-   test_minimized_rasterized  s$    

rO  c               	   C   sz   t tjd } dtjdkrdnd |    }tjt	dd t
| W 5 Q R X tj|}t
| W 5 Q R X d S )Nrz   zfile:win32z/// zPlease open the URLmatch)r   r|   r}   sysplatformresolveas_posixr   r   
ValueErrorr    rc   urllibrequesturlopen)r   urlfiler,   r,   r-   test_load_from_url  s    
r^  Zlog_scale_imagec                  C   sR   t d} d| d d d< t \}}|j| ddddgddddd |jd	d
 d S )Nr   r0   r1   r   viridisrV   r   )r   r   vmaxvminaspectlog)Zyscale)r!   r8   r    r$   r%   r  )r   r(   rd   r,   r,   r-   test_log_scale_image  s    
rd  Zrotate_imagec               	   C   s0  d} t dd|  }}t ||\}}t |d |d   d dt j  }t |d d d |d d d   d dt j d d  }|| }tdd\}}	|	j|dd	d
ddddgdd}
t 	d|	j
 }|
| |
 \}}}}|	j|||||g|||||gdd|d |	dd |	dd d S )Nr         rD  r1   r0         ?r   r7   r_  rT   r2   T)r   r   rU   r   clip_on   zr--r   )lwr   r   r   )r!   r"   meshgridexppir    r$   r%   r   Z
rotate_degr   Zset_transformZ
get_extentr^   rv   rw   )deltarY   rZ   r'   YZ1Z2r   r(   r)   Zim1Ztrans_data2x1Zx2y1y2r,   r,   r-   test_rotate_image  s,    &*

 
 rv  c                  C   sR   t  } td}tj| |dd | d t| }|jd d |jksNt	d S )N)i  iA  rN   r   r   r1   )
r_   r`   r!   r8   r    r   rb   rc   r   r   )r   r   r;   r,   r,   r-   test_image_preserve_size  s    


rw  c                  C   s   d} t | t}tj| | fdd}t|ddddg}|  || |j|dddd	 t	
 }|j|d
d |d t|}|jdksttt |d d d d df tt | td d d  d S )N   F)rQ   r   r   r   r   rT   r   )r   rU   rb  r0   )rR   r   )rx  rx  r2   rV   )r!   r  r;  r    rW   ZAxesset_axis_offr   r%   r_   r`   ra   rb   rc   r   r   r   r  bool)nr   r(   rd   r   r;   r,   r,   r-   test_image_preserve_size2  s    


r|  zmask_image_over_under.pngr   )r/   tolc                  C   s~  dt jd< d} tdd|  }}t||\}}t|d |d   d dtj  }t|d d d |d d	 d   d dtj d	 d  }d
||  }t jjj	dddd}tj
|dk|}	t dd\}
\}}|j|	d|tjdddddddddgd}|d |
j|dd|d
d |j|	d|tjdddd d!d	dgd"dd#dddddgd}|d$ |
j|dd%d|d
d& d S )'NFzpcolormesh.snapg?re  rD  r1   r0   rf  r   rh   r   r   r  Zoverunderbad333333?r   g      r   )ra  r`  cliprT   rh  r   )r   r   r   rU   r   zGreen=low, Red=high, Blue=badbothZ
horizontal)extendorientationrd   rb  r   rV   r&  gɿr   r  r7  )Zncolorsr  zWith BoundaryNormZproportional)r  spacingr  rd   rb  )r    r   r!   r"   rl  rm  rn  cmr   with_extremesmaZmasked_wherer$   r%   r   r.  r&   rH  ZBoundaryNorm)ro  rY   rZ   r'   rp  rq  rr  r   ZpaletteZZmr(   r)   r*   r   r,   r,   r-   test_mask_image_over_under2  sL    
&* 


   


  r  Z
mask_imagec                  C   s   t dd\} \}}td}tj|ddddf< |j|dd tjdtd}d|ddddf< tj	tjdtj
d|}|j|dd d S )Nr0   r1   r3   r   r   r4   T)r    r$   r!   r9   nanr%   r8   rz  r  masked_arrayr   )r(   r)   r*   rt   r,   r,   r-   test_mask_imageT  s    
r  c                  C   s2   t dt j} t \}}||  |j  d S )NrO   )r!   fullr  r    r$   r%   r   Z	draw_idle)r   r(   rd   r,   r,   r-   test_mask_image_allf  s    
r  zimshow_endianess.pngc                  C   s|   t d} t | | \}}t |d |d }tdd\}\}}tdddd}|j|d	f| |j|d
f| d S )Nrh   r   r0   r1   rT   r   r_  )rU   r   r   z<f8z>f8)	r!   r"   rl  hypotr    r$   dictr%   r   )rY   r'   rp  r   r(   r)   r*   kwargsr,   r,   r-   test_imshow_endianessn  s    
r  Zimshow_masked_interpolationx86_64r   )r}  r/   r   c            
      C   s   t jd jdddd} d}tjd|| d d	}tj|| td
||}d|d< d|d< tj	|d< t
|d}d|d< tj||}tdd\}}ttj}|d t|| D ].\}}	|	| |	j||| |d |	d qd S )Nr_  r   r  r   r~  r   r   r0   ra  r`  r4   rV   r3   g     j@)r   r   )r   r   rz  T)r   r   r   r   rk   )r   r   r   off)r  	colormapsr  r   r.  r!   r"   r;  r#   infZ
zeros_liker   r  r  r    r$   sortedmimageZ	_interpd_removezipravelr&   r%   axis)
r   Nr{  r   maskr(   Zax_gridZinterpsZinterprd   r,   r,   r-    test_imshow_masked_interpolation|  s"    



r  c                   C   s   t ddgdtjgg d S )Nr0   r1   r   )r    r%   r!   r  r,   r,   r,   r-   test_imshow_no_warn_invalid  s    r  r5   c                 C   s   g | ]}t |qS r,   )r!   r5   )r   sr,   r,   r-   r     s     r   zu2 u4 i2 i4 i8 f4 f8c                 C   s   t jd| dd}| jdkr&|d8 }|dk }|dk}| jdkrH|d }t \}}|| }|| dk svt	| jdkr|| d	k st	|j
jdkst	n$|| dk st	|j
t jkst	d S )
Nr6  r4   )rh   rh   r   urh   r   rG   fr0   )r!   r"   r#   kindr    r$   r%   Z	get_arrayallr   r5   r:   )r5   r   Ztoo_lowZtoo_high_rd   outr,   r,   r-   $test_imshow_clips_rgb_to_valid_range  s    


r  zimshow_flatfield.pngc                  C   s0   t  \} }|jtddd}|dd d S )Nr3   r   r   r   rf  )r    r$   r%   r!   r9   set_climr(   rd   r   r,   r,   r-   test_imshow_flatfield  s    r  zimshow_bignumbers.pngc                  C   sN   dt d< t \} }tjdddgdddggtjd}||}|d	d
 d S )Nr   image.interpolationr0   r1   g   mBr   r2   r4   r   r   )r   r    r$   r!   rJ   Zuint64r%   r  r(   rd   r;   Zpcr,   r,   r-   test_imshow_bignumbers  s
     
r  zimshow_bignumbers_real.pngc                  C   sH   dt d< t \} }tdddgdddgg}||}|dd	 d S )
Nr   r  r%  r   gMDrE  rD  r   r   )r   r    r$   r!   rJ   r%   r  r  r,   r,   r-   test_imshow_bignumbers_real  s
    
r  	make_normc                   C   s
   t dS Nr0   )r   
SymLogNormr,   r,   r,   r-   <lambda>      r  c                   C   s
   t dS r  )r   Z	PowerNormr,   r,   r,   r-   r    r  c              	   C   s~   t  \}}tjtdd |jg g|  d}W 5 Q R X |ddddg |j  t	t
 ||j  W 5 Q R X d S )Nz.Attempting to set identical low and high xlimsrR  r   r   )r    r$   r   warnsUserWarningr%   Z
set_extentr   r"  r   RuntimeError
make_imageZget_renderer)r  r(   rd   r   r,   r,   r-   test_empty_imshow  s    
r  c                  C   s0   t  \} }|tjdtjd | j  d S )Nr  r4   )r    r$   r%   r!   r8   Zfloat16r   r"  r(   rd   r,   r,   r-   test_imshow_float16  s    r  c               	   C   s^   t  \} }|tjdtjd ttjtjdr:t nt	
t | j  W 5 Q R X d S )Nr  r4   equiv)r    r$   r%   r!   r8   Z
longdoubleZcan_castfloat64r   r   r  r  r   r"  r  r,   r,   r-   test_imshow_float128  s    r  c                  C   s0   t  \} }|tjddgddggtd d S )NTFr4   )r    r$   r%   r!   rJ   rz  r  r,   r,   r-   test_imshow_bool  s    r  c                  C   s.   t  \} }|tdtj | j  d S )Nr   )r    r$   r%   r!   r  r  r   r"  r  r,   r,   r-   test_full_invalid  s    r  zfmt,counted)r   s    colorimage)r=   s   <imagezcomposite_image,count)Tr0   )Fr1   c           
      C   s   t t dddt ddd\}}t |d }t \}}|dd |j|ddddgd |j|d d d ddddgd |tjd	< t	
 }	|j|	| d
 |	 ||kstd S )Nr  r   r0   r1   r   r   r   rV   zimage.composite_imager   )r!   rl  r"   rX   r    r$   rv   r%   r   r_   r`   ra   rI  countr   )
r   ZcountedZcomposite_imager  r'   rp  r   r(   rd   r   r,   r,   r-   test_composite  s    $ 
r  c                  C   sT   t  \} }|jdggdd |  |  | |   krJdksPn td S )Nr   r   r0   r   r0   r   r  )r    r$   r%   ZrelimZ	autoscaleZget_xlimZget_ylimr   r  r,   r,   r-   
test_relim  s
    r  c                  C   sx   t  \} }|  |jddgddggddddd}|jddd | j  t| j	 d	d d
f dk
 sttd S )Nr   r   )r   rh   r   rh   r   F)rb  r   r   ri  r  r  .r   )r    r$   ry  r%   r  r   r"  r!   rJ   Zbuffer_rgbar  r   r  r,   r,   r-   test_unclipped   s     
r  c                  C   s   t d\} }|D ]}|  q|d jddgddggddd}|d  ||d j t }| j	|dd	 |
 d
hkst|d jdd t }| j	|dd	 |
 |
 kstd S )Nr1   r0   r   r   r   r  )rb  r   rgbar   rG   )rV   r   )r  )r    r$   ry  r%   r   Zset_clip_boxZbboxr_   r`   ra   rI  r   r  )r(   r   rd   r   Z
buf_beforeZ	buf_afterr,   r,   r-   test_respects_bbox,  s    
 
r  c                  C   s   t  \} }|td}tjjdgdgd}||dksBttjjdgdgd}||dkshttj	}||dkstd S )	Nr   r   Tr  r   Fz[0]z[nan])
r    r$   r%   r!   r8   r  r  r   r   r  )r(   rd   r   r   r,   r,   r-   test_image_cursor_formatting>  s    r  c           
      C   s   t dd}t ||\}}t d|d d  |d  }||  }tjd }|  }|j|||dd	 | }|t	
 |}	||	d
< |j|	dd dS )zPer-pixel alpha channel test.r   r0   rh  r   r1   g[(\?r_  r   )r   r   r   ).rV   r   N)r!   r1  rl  rm  maxr  r  r  r%   r   r.  )
rr   rs   rY   Zxxyyzzr   r   rd   r  r,   r,   r-   test_image_array_alphaM  s    
r  c                	   C   s6   t jtdd tjtdddgd W 5 Q R X d S )Nzalpha must be a float, two-drR  rO   r0   )r   )r   r   r   r    r%   r!   r8   r,   r,   r,   r-   !test_image_array_alpha_validation`  s    r  c                  C   s   t tjd } | jdd tjddd}|ddddg}tjd	d	d	ddddd
ddddd	d	d	ddddggt	d}|j
|d| ddd}|d |j  ||jjd d }|||dggd  j d t}t||kstd S )NZautumn_rZ	lightgrey)color)gffffff?r	  r   rP   r   r0   rV   +   O   _   B   "   r4   r   )rb  r   ra  r`  r  rh   rG   )r   r  r  	set_underr    rW   r   r!   rJ   r;  r%   r  r   r"  r  r#  r   r   Tr  r   ro   r  r   )r   r(   rd   r   r   Z
from_imageZdirect_computationr,   r,   r-   test_exact_vmine  s"    *

$r  Zimage_placementc                  C   sz   t  \} }|jdddddgdddddgddd tjd |jtjdddd	d
ddd |dd |	dd dS )zK
    The red box should line up exactly with the outside of the image.
    r   r0   r   r	  )r  rk  rj   r   r(  r  r7   rV   )r   r   r   ra  r`  gr  N)
r    r$   r^   r!   rl   rm   r%   Zrandnrv   rw   r  r,   r,   r-   test_image_placement  s    &  r  c                       s@   e Zd Zdd Zdd Z fddZdd Zed	d
 Z  Z	S )
QuantityNDc                 C   s   t || }||_|S r,  )r!   r  viewunits)clsZinput_arrayr  objr,   r,   r-   __new__  s    zQuantityND.__new__c                 C   s   t |dd | _d S Nr  )getattrr  )selfr  r,   r,   r-   __array_finalize__  s    zQuantityND.__array_finalize__c                    s<   t | dd }tt| |}t|ts.|d k	r8t||}|S r  )r  superr  __getitem__
isinstance)r  itemr  ret	__class__r,   r-   r    s
    
zQuantityND.__getitem__c                 O   sl  t ||}d|krtS t|dkrJ|d }t |dd}|t|f|}nt|dkrD|d }|d }	t |dd}
t |	dd}|
d kr|n|
}
|d kr|
n|}|tjtjfkr|
|krt|
}nb|tjkr|
 d| }nH|tj	kr|
 d| d	}n,|tj
tjtjtjtjtjfkr d }ntS ||tj|	tjf|}ntS |d kr^t|}n
t||}|S )
Nr  r0   r   r  Zdimensionlessr1   *z/())r  NotImplementedr   r!   r  addsubtractrX  multiplydivideZgreaterZgreater_equalequal	not_equalZlessZ
less_equalr  ndarrayrJ   r  )r  Zufuncmethodinputsr  funcZi0unitZout_arri1Zu0u1r,   r,   r-   __array_ufunc__  sH    



   

zQuantityND.__array_ufunc__c                 C   s   |  tjS r,  )r  r!   r  )r  r,   r,   r-   r     s    zQuantityND.v)
__name__
__module____qualname__r  r  r  r  propertyr   __classcell__r,   r,   r  r-   r    s   'r  c               	   C   s   t ddgd} | d d  \}}t| jtddgks<t| jdksJtt|| jtdgksjt|| jdks|t|| jdksttt	 |t dd  W 5 Q R X d S )Nr0   r1   mr   zm*mzm/(m)r  )
r  r!   r  r   r  r   r  r   r   rX  )qZq0Zq1r,   r,   r-   test_quantitynd  s     r  c                  C   s4   t tdd} t \}}||  |j  d S )NrO   r  )r  r!   r9   r    r$   r%   r   r"  )r   r(   rd   r,   r,   r-   test_imshow_quantitynd  s    
r  c                 C   s.  t jddt jd}d|ddd d f< t jj|dd}d	|jddddf< tjd
 jdd}| 	 }|j
|tjddddd|d}|tjddd |j
|tjddddd|d}|tjddd |jddd |	 }|j
|tjddddd|d |j
|tjddddd|d |jddd d S )Nr3   r0   r4   rV   r   r1   Fr  Tr_  wr  r   r  r   r   )r   r   r   r   rg  )r   rh   r   rh   r   rh   r  )r!   r  r  r  rJ   r  r  r  r  r$   r%   r   r   r-  r.  r  )rr   rs   r   Zmasked_datar   rd   r   r,   r,   r-   test_norm_change  s>            r  rY   c                 C   s   t jd|t jd}d|ddd d f< |  }|j|tjd| ddd	d
 t jd|t jd}d|ddd d f< | }tj	d	 j
dd}|j|tjd| dd|d
 d S )Nr3   r4   g@xDr   r1   r0   r  r   r_  )r   r   r   i  r  r	  )r!   r  r  r$   r%   r   r   r  r  r  r  r.  )rr   rs   rY   r   rd   r   r,   r,   r-   test_huge_range_log  s      r  c           	   
   C   sL  |  dd}| dd}ddgddggddgddggddgddggf}dddg}tt||D ]\}\}}|| | || | || | || j|ddd	d
ddd || dd || dd || j	  || j
d || jd || jtjdddddgdd || jtjdddddgdd q^d S )Nr0   r   r   r9   r8   mixedr   r  r   ZGreys)r   rb  rU   r   ra  r`  r&  rf  g?r  r   r1   r   rh   T)ZnbinsZstepsinteger)r$   	enumerater  r&   Zspyr%   rv   rw   ZxaxisZtick_toptitleZset_yZset_ticks_positionZset_major_locatormtickerZMaxNLocatorZyaxis)	rr   rs   ax_testax_refZ	plot_dataZplot_titlesr4  r[   r  r,   r,   r-   test_spy_box  s:    
   

r  znonuniform_and_pcolor.pngc                  C   s   t jddjdddd} t| ddgD ]L\}}t||d}|tdd	 tdd	 td
d |	| q&| d	 
tdd	 tdd	 td
d | D ]}|  |jdd qd S )Nr  r   r   T)sharexshareyr   r   r   r1   r   r2   r
  )r  )r    rW   r$   r  r   r  r!   r"   r#   Z	add_imageZ
pcolorfastry  r  )r   rd   r   r   r,   r,   r-   test_nonuniform_and_pcolor7  s      r  zrgba_antialias.png)aarch64ppc64les390xgy&1|?)r   r/   r}  c                  C   s  t jddddddd\} }d}t||f}d|d d dd d f< t|| d }t|| d }t||\}}t|d |d  }d	}	d
}
ttjd |	| |
|d  d   }d|d t	|d d d f |d t	|d d d f dk < d|d t	|d d d f |d t	|d d d f dk < |d d t	|d d f |d d t	|d d f< tj
|ddddf< d|ddddf< d|ddddf< d|ddddf< d|ddddf< tt jj}|d |d | }|d j|d|ddd |d |d d |d d g |d |d d |d d	 g |d j|d|ddd |d j|dd |ddd! |d" j|dd#|ddd! d S )$Nr1   )      @r  FT)rQ   r  r  Zconstrained_layout   rV   r   rh   K   r  r0   r
  r   rS   g    .AF   Z   g    .rj        ZyellowZcyanr   r   g333333r  )r   r   ra  r`     rk   r   )r   Zinterpolation_stager   ra  r`  r   r  )r    r$   r!   r9   r"   rl  sqrtrX   rn  ro   r  r   r  ZRdBu_rZset_overr  r3  r%   rv   rw   )r(   r   r  ZaarY   rZ   r'   rp  RZf0r   r  r   r,   r,   r-   test_rgba_antialiasG  sP     
(<<4

""    r%  z<ignore:Data with more than .* cannot be accurately displayedrU   r   rT   zdim, size, msgrowi   z2\*\*23 columnscoli   z2\*\*24 rows)rN   c           
   	   C   s   |   }|  }td|d f}d|d d |jd d f< |dkrJ|j}|j|ddddd|d}	tjtd	| d
d | j	
  W 5 Q R X td}d|d d df< |dkr|j}|j|ddddd|d}	d S )Nr0   r1   r'  r   r   r  r7   )ra  r`  rb  r   r   rU   zData with more than z  cannot be accurately displayed.rR  r  )r$   r!   r8   sizer  r%   r   r  r  r   r"  )
rr   rs   Zdimr(  msgrU   r  r  rJ   r   r,   r,   r-   test_large_image  s2    
 

r*  c              	   C   sZ  t jddd d }| dd}|d j|dd |d j|dd	d
 |d j|dd |d j|dddd |d j|dddd |dd}|d j|t d |d j|tjd	dd |d j|tjddd |d j|tjddddd |d j|ddd t|d j	d j
tjks.ttt |d j|dd W 5 Q R X d S )Nrh   g?r	  r0   r   r   rc  r  r  )r   ra  r1   Zsymlogr   r
  r!  )r   ra  r`  r2   Zlogit)ra  )	linthresh)r+  ra  r`  )r
  r!  )r   ZclimZfoobar)r!   rl   rn   r$   r%   r   r   r  typeZimagesr   r   r   r   rX  )rr   rs   r  ZaxtsZaxrsr,   r,   r-   test_str_norms  s      r-  )
contextlibr   r   r_   r   pathlibr   rU  rT  urllib.requestrY  Znumpyr!   Znumpy.testingr   ZPILr   Z
matplotlibr  r   r   r  r	   r
   r    r   r   Zmatplotlib.imager   r   r   r   r   Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.transformsr   r   r   Zmatplotlib.tickerZtickerr  r   r.   r<   rK   markZparametrizer]   rf   ru   rx   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r$  r'  r+  r/  r5  r<  rB  rC  r"   r#   rF  rO  r^  rd  rv  rw  r|  r  r  r  r  machiner  r  splitr  r  r  r  r.  r   r  r  r  r  r  r  r  r  r  r  r  r  contextr  r  r  r  r  r  r  r  r  r  r%  filterwarningsr*  r-  r,   r,   r,   r-   <module>   s   

 
	




"


G

	





 
	


  

# 

		    
	!



!

 
! 



 


	


 
<	


   7 

