B
    Jd
              
   @   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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,j01dddge$dgddgdd d! Z2d"d# Z3e,j01d$d%d&d'd(d)ge#dgdd*d+ Z4e#dgdd,d- Z5e# d.d/ Z6d0d1 Z7d2d3 Z8e,j01d4dd5d6d7gd8d9 Z9e,j01d4ddd:d;dgd<d= Z:d>d? Z;d@dA Z<dBdC Z=e$dDgdddEdF Z>dGdH Z?e,j01dIdJdKggdLfdMdNggdOfej@dPdQggdRfdPdSggdTfdUdUggdVfgdWdX ZAe$dYgdddZd[ ZBe$d\gddd]d^ ZCe$d_gddd`dadb ZDe#dgddcdd ZEdedf ZFdgdh ZGe$digdddjdk ZHe$dlgdddgdmdndo ZIdpdq ZJe$drgddd`dsdt ZKe$dugdddvdw ZLe#dgddxdy ZMe$dzgddgddd{d|d} ZNe$d~gddd`dd ZOdd ZPe$dgddd`dd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWe,j01de eXdeXdeXdYdfe!eXdeXdeXdYdfgdd ZZdd Z[dd Z\e$dgdddd Z]e$dgddddd Z^dd Z_dd Z`e$dgddddd Zae$dgdddd Zbdd Zce$dgdddd Zde$dgee dkrd ndddddd Zfdd Zge,j01ddd d h D ddĄ Zie$dgddd`ddǄ Zje$dgddd`ddʄ Zke$dgddd`dd̈́ Zle,j01dejmejnddЄ ddЄ gddӄ ZoddՄ Zpddׄ Zqddل Zrddۄ Zse,j01dddge,j01dddgdd Ztdd Zudd Zvdd Zwdd Zxe# dd Zydd Zzej{ddd Z|e,j0j}e,j0j~dd ZG dd dejZdd Zdd Ze#dgddd Ze,j01ddUdPge#dgddd Ze# dd  Ze$dgdddd Ze$dgddddd ZdS (      )	ExitStack)copyN)Path)assert_array_equal)Image)_api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,   M/var/www/html/venv/lib/python3.7/site-packages/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   none)r   r   N)r    r$   r!   zerosonesZtriluint8r%   )r(   ZaxlZaxrimgr,   r,   r-   test_alpha_interp.   s    
r9   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   zsavefig.dpi          z   g            r   c   G   )r3   r0   r1   r4   )r   zinterpolation noner   zinterpolation nearestN)r   r!   arrayr7   r    r$   r%   r&   )r'   r(   r)   r*   r,   r,   r-   test_interp_nearest_vs_none;   s    
rG   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    figurerH   r!   Zix_r"   sinrI   )rH   r(   xyzcr8   r,   r,   r-   test_figimageM   s    $$$rW   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    

r`   z!img_size, fig_size, interpolation)r   r1   hanning)r   r   r   )r   
   r   )r   g333333@ra   )r   g333333"@r   c       	      C   s   t jd tjd }t jt|| t|| }x| |gD ]}||| q>W |  }|	ddddg |j
|dd | }|	ddddg |j
||d d S )Ni!N,zsavefig.dpir   r0   antialiased)r   )r!   randomseedr    r   randintset_size_inchesr$   set_positionr%   )	fig_testfig_refZimg_sizeZfig_sizer   rL   Ar(   r^   r,   r,   r-   test_imshow_antialiasedf   s    
rm   c             C   s   t jd tjd }t jt|d t|d }x| |gD ]}|dd q>W |  }|j	|dd |
ddg |ddg | }|j	|d	d |
ddg |ddg d S )
Ni!N,zsavefig.dpir   g333333@rc   )r   rb   r   r   )r!   rd   re   r    r   rf   rg   rh   r$   r%   set_xlimset_ylim)rj   rk   rL   rl   r(   r^   r,   r,   r-   test_imshow_zoom~   s    
rp   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defaultz%baseline_images/pngsuite/basn3p04.pngz%baseline_images/test_image/uint16.tifr1   r   r0   )r   Zuser   __file__parentr$   r%   r   openr    r]   )rj   rk   Zpng_pathZ	tiff_pathaxsr,   r,   r-   test_imshow_pil   s    


rv   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.tifi )r    r]   ospathjoindirnamerr   r3   r!   uint16AssertionErrorsum)r8   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 )Nz%baseline_images/test_image/uint16.tifi )
r    r]   r   rr   rs   r3   r!   r{   r|   r}   )r8   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   )formatrL   r   r   )r   r   )r!   rd   re   rf   rY   rZ   r    imsaver\   r]   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   rw   devnullr!   rF   )r   r,   r,   r-   test_imsave_fspath   s    r   c              C   s   t jd xdD ]~} t jddd}t }tj||| dd |d t	|}d| 
d	}| d
krx|d d d }d| 
d	}t|| qW d S )Nr0   )rN   upper   r2   rJ   )rO   r   r   rC   r7   rN   rP   )r!   rd   re   rf   rY   rZ   r    r   r\   r]   astyper   )rO   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   rJ   pnginfo)r   
pil_kwargs)ZPIL.PngImagePluginr   rY   rZ   add_textr    r   r   rt   infor|   )r   bufr   imr,   r,   r-   test_imsave_pil_kwargs_png   s    
r   c                 sp   ddl m  t } ddi}tj| ddgddggd|d	 t| } fd
d|j	 D }|d dkslt
d S )Nr   )TAGS_V2descriptionz
test imager0   r1   r   r   )r   r   c                s   i | ]\}}| | j qS r,   )name).0kv)TAGSr,   r-   
<dictcomp>   s    z/test_imsave_pil_kwargs_tiff.<locals>.<dictcomp>ZImageDescription)ZPIL.TiffTagsr   rY   rZ   r    r   r   rt   Ztag_v2itemsr|   )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   g      ?r4   )alphar   g      ?r   )r!   rd   re   rf   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   rb   r   )rO   )r2   r2   motion_notify_event,   )g333333$@r2   rN   g      ?)extent)g      ?g      ?7   )g      ?g      ?)g{Gz?g{Gzr1   )	transform)r   rb   )matplotlib.backend_basesr   r    r$   r%   r!   r"   r#   	transDatar   canvasget_cursor_datar|   clearr   scalerotate)
r   r(   r^   r   rS   rT   xdispydispeventZtransr,   r,   r-   test_cursor_data  sL    
$r   z
data, texti'  i'  z[10001.000]grh|?g/$?z[0.123]r0   r1   z[]g     ?z[1.0000000000000000]rP   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(   r^   r   r   r   r   r,   r,   r-   test_format_cursor_dataS  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(   r^   r   patchr,   r,   r-   test_image_clipf  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(   r^   r   r   rectr,   r,   r-   test_image_cliprectp  s    r   r%   )r/   r   c              C   sH   t  \} }tdd}|j|ddd |dd |dd d S )Nr   )rb   rb   r   )r0   r1   r0   r1   )r   r   r   r   )r    r$   r!   r"   r#   r%   rn   ro   )r(   r^   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   )rb   rb   r0   r   r   )r0   r1   r0   r1   )r   r   r   )r!   r"   r#   r$   r%   rn   ro   )rj   rk   r   r^   r,   r,   r-   test_imshow_10_10_1  s    "r   c           	   C   s@   t  \} }tdd}tt || W d Q R X d S )N   )rb   rb   r1   )	r    r$   r!   r"   r#   pytestraises	TypeErrorr%   )r(   r^   r   r,   r,   r-   test_imshow_10_10_2  s    r   c           	   C   s@   t  \} }tdd}tt || W d Q R X d S )Ni  )rb   rb   r   )	r    r$   r!   r"   r#   r   r   r   r%   )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   rM   rN   r4   )rO   r   r0   )r   )r    r$   r%   r!   r"   r#   )r(   ru   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   rS   )rT   r,   r-   
<listcomp>  s    z/test_image_shift.<locals>.<listcomp>.<listcomp>r0   r   )range)r   r,   )rT   r-   r     s    z$test_image_shift.<locals>.<listcomp>r0   r   gMk&Agk&Ar4   )normr   r   auto)r   r    r$   r%   r   LogNormZ
set_aspect)ZimgDataZtMinZtMaxr(   r^   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   )rK   r   F)frameon      r   	   r   irb   r4   gray)rO   r   r   cmapr1   )r   r0   r   )	facecolorrP   r   z.Expected a non-green edge - but sadly, it was.)r    rQ   add_axesr!   Ztiler"   r#   r%   rn   ro   
set_xticks
set_yticksrY   rZ   r[   r\   r]   r}   r|   )r(   r^   r   r   rS   rT   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   g      ?)r    r$   r!   r"   r#   r%   set_facecolorrn   )r(   r^   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   g?g?rP   r   )r   r   r2   r1   r   g333333?)r   r   g333333?r2   )r   )r   g      ?r   r0   )r    r$   r!   r5   Zconcatenater"   Znewaxisr%   r   rn   ro   )r(   r^   r   Zarr2r,   r,   r-   test_image_composite_alpha  s&    
:
H
r   c             C   sx   t dd}x\| |gD ]P}| }|j|tjdddg|jfd |j|tjddd	g|jfd qW d
|_	d S )Nr   )r   r   )r   r   )r   r0   )r0   r   )	clip_path)r0   r0   )r0   r1   )r1   r0   T)
r!   r"   r#   add_subplotr%   mplrx   r   r   rH   )rj   rk   tr(   r^   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 x4|D ],}|g  |g  |j	d d  
d qW dtd< d S )Nr0   r1   r   r2   )r   r0   )rK   r   g      4@T)	linewidthZ
rasterized)r   r0   )rP   r1   )xlimylim)r   Frb   zsavefig.dpi)r!   asarrayr    r$   r%   rX   setr   r   ZspinesZset_visibler   )r8   r(   ru   r^   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   )rb   rb   r   r   )r   Frb   g?g?g333333?g      ?)r!   r"   r#   r    r$   r   r   r   r   set_dataZset_clip_onrn   ro   Z
add_artistidentityrQ   ZtransFigure)r	   r(   r^   Zbbox_imr,   r,   r-   test_bbox_image_inverted#  s"    





r   c           	   C   s   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 d S )Ng      ?g      ?g      ?g?g?g      ?g?g333333?g333333?g        g?gffffff?g?)rb   rb   r   )rK   rL   r   r0   r   )r   r   i  r   i  i  )r!   rF   r    r$   ri   rn   ro   r%   r   drawrendererZget_window_extentr   Z
get_points)r   r(   r^   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   )rb   rb   g       @g      )r!   r"   r#   r    r$   r%   ro   rn   )r	   r(   r^   r,   r,   r-   test_zoom_and_clip_upper_originQ  s    


r   c              C   s   t  } t| }|d d S )NZBlues)r    gcar   Zset_cmap)r^   r   r,   r,   r-   test_nonuniformimage_setcmap]  s    r   c              C   s"   t  } t| }|t   d S )N)r    r   r   set_norm	Normalize)r^   r   r,   r,   r-   test_nonuniformimage_setnormc  s    r   c              C   sr   t jddd} x.tdD ]"}t dddd | |d d f< qW tdd}||   t	 \}}|
| d S )	N)rb   rb   r7   )r3   rb   g        g      ?rC   L)r!   r6   r   linspacer   newZputdataflattenr    r$   r%   )Zimdir   r(   r^   r,   r,   r-   test_jpeg_2di  s    "r  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 )N)r0   r0   i,  )rK   rL   )i,  i,  r2   )r3   g        g      ?).r   redr   )r   r   rL   r            )r   r   )   r   r   )r    rQ   r!   r5   floatr   rI   rY   rZ   r[   r\   r   rt   lenZ	getcolorsr|   Zgetpixel)r   r   r	   Z
num_colorsZcorner_pixelr,   r,   r-   test_jpeg_alphat  s    



r  c              C   sP   t  } t| }tjdtdd}|| d|d< |jd dksLt	dd S )Nr   )r3   )r2   r   g#@)r   r   r   zvalue changed)
r    r   r   r!   r"   r
  r#   r   _Ar|   )r^   r   rU   r,   r,   r-   test_axesimage_setdata  s    
r  c              C   sP   t  } t| }tjdtdd}|| d|d< |jd dksLt	dd S )Nr   )r3   )r2   r   g#@)r   r   r   zvalue changed)
r    Zgcfr   r!   r"   r
  r#   r   r  r|   )r(   r   rU   r,   r,   r-   test_figureimage_setdata  s    
r  zimage_cls,x,y,ag      @g      @g      (@)r2   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 )Ng#@r   )r   r   zvalue changedrP   )rP   )	r    r   r   r  Z_AxZ_Ayr|   r#   r   )Z	image_clsrS   rT   r   r^   r   r,   r,   r-   test_setdata_xya  s    :r  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 }x8|d	D ]*}	|d kr|	d
 }q|	d
 |krdstqW d S )Nr   )ElementTreerb   r0   r1   )r^   r:   )r   r	   r   F)Z	xml.etreer  r!   rd   re   rf   r    r$   Z
pcolormeshcolorbarrY   rZ   r[   getvalueparseiterr|   )
r  r   r(   r^   p1p2r   treer   r	   r,   r,   r-   test_minimized_rasterized  s$    

r  c           	   C   st   t tjd } dtjdkrdnd |    }t  t	
| W d Q R X tj|}t	
| W d Q R X d S )Nz%baseline_images/pngsuite/basn3p04.pngzfile:win32z/// )r   rr   rs   sysplatformresolveas_posixr   'suppress_matplotlib_deprecation_warningr    r]   urllibrequesturlopen)rx   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 )N)rb   rb   r0   r1   r   viridisrP   r   )r   r   vmaxvminaspectlog)Zyscale)r!   r5   r    r$   r%   r   )r   r(   r^   r,   r,   r-   test_log_scale_image  s    
r,  Zrotate_imagegffffff?)r/   tolc           	   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 )Ng      ?g      g      @r1   r0   g      ?g      ?r4   r'  rN   r2   T)r   r   rO   r   clip_on   zr--r   )Zlwr   r   r   )r!   r"   meshgridexppir    r$   r%   r   Z
rotate_degr   Zset_transformZ
get_extentrX   rn   ro   )deltarS   rT   r'   YZ1Z2r   r(   r)   Zim1Ztrans_data2x1Zx2y1y2r,   r,   r-   test_rotate_image  s$    &*

 r<  c              C   sR   t  } td}tj| |dd | d t| }|jd d |jksNt	d S )N)i  iA  rJ   )r   r   r1   )
rY   rZ   r!   r5   r    r   r\   r]   r   r|   )r   r   r8   r,   r,   r-   test_image_preserve_size  s    


r=  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)rK   r   g        g      ?r   rN   r   )r   rO   r*  r0   )rL   r   )r>  r>  r2   rP   )r!   r   r
  r    rQ   ZAxesset_axis_offr   r%   rY   rZ   r[   r\   r]   r   r|   r   r   bool)nr   r(   r^   r   r8   r,   r,   r-   test_image_preserve_size2  s    


rB  zmask_image_over_under.pngg      ?c              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?g      g      @r1   r0   g      ?g      ?rb   r   r   r   )overunderbadg333333?r   g      g      ?)r)  r(  cliprN   r/  r   )r   r   r   rO   r   zGreen=low, Red=high, Blue=badboth
horizontal)extendorientationr^   r*  r   rP   g      gɿr   g?r  )ZncolorsrF  zWith BoundaryNormZproportional)rI  spacingrJ  r^   r*  )r    r   r!   r"   r2  r3  r4  cmr   with_extremesmaZmasked_wherer$   r%   r   r   r&   r  ZBoundaryNorm)r5  rS   rT   r'   r6  r7  r8  r   paletteZZmr(   r)   r*   r   r,   r,   r-   test_mask_image_over_under'  s4    
&*




rP  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   )r   r   r   )r   )r3   T)r    r$   r!   r6   nanr%   r5   r@  rN  masked_arrayr{   )r(   r)   r*   rl   r,   r,   r-   test_mask_imageI  s    
rS  c              C   s2   t dt j} t \}}||  |j  d S )N)r1   r1   )r!   fullrQ  r    r$   r%   r   Z	draw_idle)r   r(   r^   r,   r,   r-   test_mask_image_all[  s    
rU  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 )Nrb   r   r0   r1   rN   r   r'  )rO   r   r   z<f8z>f8)	r!   r"   r2  hypotr    r$   dictr%   r   )rS   r'   r6  r   r(   r)   r*   kwargsr,   r,   r-   test_imshow_endianessc  s    
rY  Zimshow_masked_interpolationx86_64g{Gz?)r-  r/   r   c        
      C   s   t 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 x@t|| D ].\}}	|	| |	j||| |d |	d qW d S )Nr'  r   r   r   )rC  rD  rE  r   r   r0   )r)  r(  )r3   rP   )r   r   g     j@)r   r   )r   r   r@  T)r   r   r   r   rc   )r   r   r   off)r    get_cmaprM  r   r   r!   r"   r
  r#   infZ
zeros_liker   rN  rR  r$   sortedmimageZ	_interpd_removezipravelr&   r%   axis)
r   NrA  r   maskr(   Zax_gridZinterpsZinterpr^   r,   r,   r-    test_imshow_masked_interpolationq  s"    



rf  c               C   s   t ddgdtjgg d S )Nr0   r1   r   )r    r%   r!   rQ  r,   r,   r,   r-   test_imshow_no_warn_invalid  s    rg  r3   c             C   s   g | ]}t |qS r,   )r!   r3   )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 )
Ni,  )r3   )rb   rb   r   urb   r   rC   fr0   )r!   r"   r#   kindr    r$   r%   Z	get_arrayallr|   r3   r7   )r3   r   Ztoo_lowZtoo_high_r^   outr,   r,   r-   $test_imshow_clips_rgb_to_valid_range  s    


ro  zimshow_flatfield.pngc              C   s0   t  \} }|jtddd}|dd d S )N)r   r   r   )r   g      ?g      ?)r    r$   r%   r!   r6   set_clim)r(   r^   r   r,   r,   r-   test_imshow_flatfield  s    rq  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   zimage.interpolationr0   r1   g   mBr   r2   )r3   r   r   )r   r    r$   r!   rF   Zuint64r%   rp  )r(   r^   r8   pcr,   r,   r-   test_imshow_bignumbers  s
     
rs  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   zimage.interpolationg       @g      ?gMDg      @g      @r   r   )r   r    r$   r!   rF   r%   rp  )r(   r^   r8   rr  r,   r,   r-   test_imshow_bignumbers_real  s
    
rt  	make_normc               C   s
   t dS )Nr0   )r   Z
SymLogNormr,   r,   r,   r-   <lambda>      rv  c               C   s
   t dS )Nr0   )r   Z	PowerNormr,   r,   r,   r-   rv    rw  c          	   C   sz   t  \}}tjtdd |jg g|  d}W d Q R X |ddddg |j  t	t
 ||j W d Q R X d S )Nz)Attempting to set identical left == right)match)r   r   )r    r$   r   warnsUserWarningr%   Z
set_extentr   r   r   RuntimeError
make_imageZ_cachedRenderer)ru  r(   r^   r   r,   r,   r-   test_empty_imshow  s    

r~  c              C   s0   t  \} }|tjdtjd | j  d S )N)r   r   )r3   )r    r$   r%   r!   r5   Zfloat16r   r   )r(   r^   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 d Q R X d S )N)r   r   )r3   equiv)r    r$   r%   r!   r5   Z
longdoubleZcan_castfloat64r   r   rz  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 )NTF)r3   )r    r$   r%   r!   rF   r@  )r(   r^   r,   r,   r-   test_imshow_bool  s    r  c              C   s.   t  \} }|tdtj | j  d S )N)rb   rb   )r    r$   r%   r!   rT  rQ  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 )Nry  r   r0   r1   r   r   )r   rP   zimage.composite_image)r   )r!   r2  r"   rR   r    r$   rn   r%   r   rY   rZ   r[   r  countr|   )
r   ZcountedZcomposite_imager  r'   r6  r   r(   r^   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   r0   )r    r$   r%   ZrelimZ	autoscaleZget_xlimZget_ylimr|   )r(   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   )irb   irb   r   F)r*  r   r   r0  )r   r0   )r   r   .r   )r    r$   r?  r%   r   r   r   r!   rF   Zbuffer_rgbarl  r|   )r(   r^   r   r,   r,   r-   test_unclipped  s    

r  c              C   s   t d\} }x|D ]}|  qW |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   r0   r   r0   )r*  r   rgba)r   rC   )rP   r   )r   )r    r$   r?  r%   r   Zset_clip_boxZbboxrY   rZ   r[   r  r|   r   )r(   ru   r^   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 )	N)r2   r2   r   T)re  z[]Fz[0]z[nan])
r    r$   r%   r!   r5   rN  rR  r   r|   rQ  )r(   r^   r   r   r,   r,   r-   test_image_cursor_formatting3  s    r  c       
      C   s   t dd}t ||\}}t d|d d  |d  }||  }td}|  }|j|||dd	 | }|t	
 |}	||	d
< |j|	dd dS )zPer-pixel alpha channel test.r   r0   r/  g      ?r1   g[(\?r'  r   )r   r   r   ).rP   )r   N)r!   r   r2  r3  maxr    r\  r   r%   r   r   )
rj   rk   rS   Zxxyyzzr   r   r^   r  r,   r,   r-   test_image_array_alphaB  s    
r  c            	   C   s6   t jtdd tjtdddgd W d Q R X d S )Nzalpha must be a float, two-d)rx  )r1   r1   r0   )r   )r   r   r   r    r%   r!   r5   r,   r,   r,   r-   !test_image_array_alpha_validationU  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?g?r   )rK   rL   r   r0   rP   +   O   _   B   "   )r3   r   )r*  r   r)  r(  r[  rb   rC   )r   r    rL  r\  	set_underrQ   r   r!   rF   r
  r%   rc  r   r   r}  r   r   r   Trb  r   rg   rl  r|   )r   r(   r^   r   r   Z
from_imageZdirect_computationr,   r,   r-   test_exact_vminZ  s    *

&r  c           	   C   s"   t   td} W d Q R X d S )Nz.https://matplotlib.org/1.5.0/_static/logo2.png)r   r   r_  r]   )r   r,   r,   r-   test_https_imread_smoketestw  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 )N)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 )Nr  )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g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 )
Nrn  r0   r   r  Zdimensionlessr1   *z/())r  NotImplementedr  r!   r   addsubtract
ValueErrormultiplydivideZgreaterZgreater_equalequal	not_equallessZ
less_equalr  ndarrayrF   r  )r  ZufuncmethodinputsrX  funcZi0unitZout_arri1Zu0u1r,   r,   r-   __array_ufunc__  sB    



 

zQuantityND.__array_ufunc__c             C   s   |  tjS )N)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 d Q R X d S )Nr0   r1   mr   zm*mzm/(m)rh  )
r  r!   rl  r   r   r|   r  r   r   r  )qq0q1r,   r,   r-   test_quantitynd  s     r  c              C   s4   t tdd} t \}}||  |j  d S )N)r1   r1   r  )r  r!   r6   r    r$   r%   r   r   )r   r(   r^   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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 )N)r   r   r0   )r3   rP   r   r1   F)re  Tr'  w)rD  g      ?)r)  r(  )r   r   r   r   r   )r   r   r   r   r.  )r   rb   r   rb   )r   rb   )r   r   )r!   rT  r  rN  rF   re  r    r\  rM  r$   r%   r   r   r   r   r   )rj   rk   r   Zmasked_datar   r^   r   r,   r,   r-   test_norm_change  s&    r  rS   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	d	j
dd}|j|tjd| dd|d
 d S )N)r   r   )r3   g@xDr   r1   r0   )r)  r(  r   r'  )r   r   r   i  r  )rD  )r!   rT  r  r$   r%   r   r   r  r    r\  rM  r   )rj   rk   rS   r   r^   r   r,   r,   r-   test_huge_range_log  s    
r  c       	   
   C   sP  |  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}xt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`W d S )Nr0   r   r   r6   r5   mixedr   r  r   ZGreys)r   r*  rO   r   r)  r(  g      g      ?g?rG  r   r1   r   rb   T)ZnbinsZstepsinteger)r$   	enumeratera  r&   Zspyr%   rn   ro   ZxaxisZtick_toptitleZset_yZset_ticks_positionZset_major_locatormtickerZMaxNLocatorZyaxis)	rj   rk   Zax_testZax_refZ	plot_dataZplot_titlesr  rU   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} x^t| ddgD ]L\}}t||d}|tdd	 tdd	 td
d |	| q(W | d	 
tdd	 tdd	 td
d x | D ]}|  |jdd qW d S )N)r   r   )rK   r   T)sharexshareyr   r   )r   r1   r   r2   )r   rb   )r   )r    rQ   r$   ra  r   r   r!   r"   r#   Z	add_imageZ
pcolorfastr?  r   )ru   r^   r   r   r,   r,   r-   test_nonuniform_and_pcolor$  s    *
r  zrgba_antialias.png)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   )g      @g      @FT)rK   r  r  Zconstrained_layout   rP   g      ?rb   K   g?r0   g333333?r   rM   g    .AF   Z   g    .r1        yellowcyanr   r   g333333g333333?)r   r   r)  r(     rc   r   )r   Zinterpolation_stager   r)  r(  r   r  )r    r$   r!   r6   r"   r2  sqrtrR   r4  rg   NaNr   rL  ZRdBu_rZset_overr  r  r%   rn   ro   )r(   ru   rd  ZaarS   rT   r'   r6  RZf0r   r   r   r,   r,   r-   test_rgba_antialias4  s@    (<<4

""r  )
contextlibr   r   rY   rw   pathlibr   r  r  urllib.requestr!  numpyr!   Znumpy.testingr   ZPILr   Z
matplotlibr   r   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.   r9   rG   markZparametrizerW   r`   rm   rp   rv   r~   r   r   r   r   r   r   r   r   rQ  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<  r=  rB  rP  rS  rU  rY  machinerf  rg  splitro  rq  rs  rt  r   r   r~  r  r  r  r  r  r  r  r  r  r  r  contextr  networkZflakyr  r  r  r  r  r  r  r  r  r  r,   r,   r,   r-   <module>   s
  $	# 
G
	
		 .!""	
<	!
