o
    :a                  
   @   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$g d%e#dgdd&d' Z4e#dgdd(d) Z5e# d*d+ Z6d,d- Z7d.d/ Z8e,j01d0g d1d2d3 Z9e,j01d0g d4d5d6 Z:d7d8 Z;d9d: Z<d;d< Z=e$d=gddd>d? Z>d@dA Z?e,j01dBdCdDggdEfdFdGggdHfej@dIdJggdKfdIdLggdMfgdNdO ZAe$dPgdddQdR ZBe$dSgdddTdU ZCe$dVgdddWdXdY ZDe#dgddZd[ ZEd\d] ZFd^d_ ZGe$d`gdddadb ZHe$dcgdddgdddedf ZIdgdh ZJe$digdddWdjdk ZKe$dlgdddmdn ZLe#dgddodp ZMe$dqgddgdddrdsdt ZNe$dugdddWdvdw ZOdxdy ZPe$dzgdddWd{d| ZQd}d~ ZRdd 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rud ndddddd Zfdd Zge,j01ddd dh D dd Zie$dgdddWdd Zje$dgdddWdd Zke$dgdddW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,j01dddIge#dgddd Ze# dd Ze$dgdddd Ze$dgddddd 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-   =/usr/lib/python3/dist-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   ).r1   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_nonepdfsvg)
extensionsr0   c                  C   s|   dt d< tjg dg dgg dg d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   )rI   c   G   r5   r1   r2   r8   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   
rM   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r2   r2   r   figsizedpig      Y@r2   r   2   r   r   lower)ZxoZyoorigin)r!   figurerN   r"   Zix_r#   sinrO   )rN   r)   xyzcr<   r-   r-   r.   test_figimageM   s   $$$*r_   c                  C   sD   t  \} }|g d t }| | |d t | d S )N)r1   r2   r   r   )r!   r%   plotioBytesIOsavefigseekimread)r)   axbufferr-   r-   r.   test_image_python_io]   s   

rh   z!img_size, fig_size, interpolation))r   r2   hanning)r   r   r   )r   
   r   )r   333333@ri   )r   g333333"@r   c           	      C   s   t jd tjd }t jt|| t|| }| |fD ]}||| q|  }|	g d |j
|dd | }|	g d |j
||d d S )N!N,rA   r   r   r1   r1   antialiasedr   )r"   randomseedr!   r   randintset_size_inchesr%   set_positionr&   )	fig_testfig_refZimg_sizeZfig_sizer   rT   Ar)   rf   r-   r-   r.   test_imshow_antialiasedf   s   
rx   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 )
Nrl   rA   r   rk   rn   r   rj   r   r   )r"   ro   rp   r!   r   rq   rr   rs   r%   r&   set_xlimset_ylim)ru   rv   rT   rw   r)   rf   r-   r-   r.   test_imshow_zoom~   s   
r{   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.tifr2   r   r1   )r   Zuser   __file__parentr%   r&   r   openr!   re   )ru   rv   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sJ t
| dks!J d S )NZbaseline_imagesZ
test_imagez
uint16.tif )r!   re   ospathjoindirnamer   r6   r"   uint16sumr<   r-   r-   r.   test_imread_pil_uint16   s
   r   c                  C   s:   t ttjd } | jtjksJ t| dksJ d S )Nr~   r   )	r!   re   r   r   r   r6   r"   r   r   r   r-   r-   r.   test_imread_fspath   s
   r   fmt)rP   jpgjpegtiffc                 C   s   | dv}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sOJ |j
ddd	| fks[J t|| d S )
N)r   r   r1   i@  r2   )formatrT   r   r   r   r   )r"   ro   rp   rq   ra   rb   r!   imsaverd   re   shaper   )r   Z	has_alphadataZ	buff_dpi1Zbuff_dpi100Zarr_dpi1Z
arr_dpi100r-   r-   r.   test_imsave   s   	

r   )rP   r>   psZepsr?   c                 C   s&   t jttjtddgg| d d S )Nr   r1   r   )r!   r   r   r   devnullr"   rL   )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r;|d d d }d| 
d	}t|| qd S )Nr1   )rV   upper   r3   rP   )rW   r   r   rI   r;   rV   rX   )r"   ro   rp   rq   ra   rb   r!   r   rd   re   astyper   )rW   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s2J d S )Nr   )PngInfoZSoftwaretestr1   r2   r   rP   pnginfor   
pil_kwargs)
ZPIL.PngImagePluginr   ra   rb   add_textr!   r   r   r   info)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s6J d S )Nr   )TAGS_V2descriptionz
test imager1   r2   r   r   r   c                    s   i | ]
\}} | j |qS r-   )name).0kvZTAGSr-   r.   
<dictcomp>       z/test_imsave_pil_kwargs_tiff.<locals>.<dictcomp>ZImageDescription)
ZPIL.TiffTagsr   ra   rb   r!   r   r   r   Ztag_v2items)r   r   r   Z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   r1   r         ?r8   )alphar         ?r   )r"   ro   rp   rq   r!   r%   r&   )Zr)   r*   r+   r,   r-   r-   r.   test_image_alpha  s   r   c            
      C   sp  ddl m}  t \}}|jtddddd}d\}}|j	||g\}}| d|j
||}||d	ks9J d
\}}|j	||g\}}| d|j
||}||d u sXJ |  |jtddddd}d\}}|j	||g\}}| d|j
||}||d	ksJ t \}}|jtdddg dd}d\}}|j	||g\}}| d|j
||}||dksJ d\}}|j	||g\}}| d|j
||}||d u sJ d\}}|j	||g\}}| d|j
||}||d u sJ t dd}	|jtddd|	|j d}d\}}|j	||g\}}| d|j
||}||d	ks6J d S )Nr   
MouseEventr   rj   r   )rW   r3   r3   motion_notify_event,   )g333333$@r3   rV   )r   r   r   r   extent)      ?r   7   )      ?r   ){Gz?g{Gzr2   r   )	transform)r   rj   )matplotlib.backend_basesr   r!   r%   r&   r"   r#   r$   	transDatar   canvasget_cursor_dataclearr   Zscalerotate)
r   r)   rf   r   r[   r\   xdispydispeventZtransr-   r-   r.   test_cursor_data  sN   
 r   z
data, texti'  i'  z[10001.000]grh|?g/$?z[0.123]r1   r2   []g     ?z[1.0000000000000000]c           	      C   sb   ddl m} t \}}|| }|jddg\}}|d|j||}||	||ks/J d S )Nr   r   r   )
r   r   r!   r%   r&   r   r   r   format_cursor_datar   )	r   textr   r)   rf   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 )Nr1   r2   r   r3   r   r   )Zradiusr   )r!   r%   r&   r
   ZCircler   set_clip_path)dr)   rf   r   Zpatchr-   r-   r.   test_image_clipe  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 )	Nr1   r2   r   r3   r   r   r   r   r   r1   r1   )ZxywidthZheightr   )r!   r%   r&   r
   Z	RectangleZaxesr   r   )r)   rf   r   r   Zrectr-   r-   r.   test_image_cliprecto  s   r   r&   )r0   r   c                  C   sH   t  \} }tdd}|j|ddd |dd |dd d S )Nr   rj   rj   r    r1   r2   r1   r2   r   r   r   r   )r!   r%   r"   r#   r$   r&   ry   rz   r)   rf   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   )rj   rj   r1   r   r    r   r   r   )r"   r#   r$   r%   r&   ry   rz   )ru   rv   r   rf   r-   r-   r.   test_imshow_10_10_1  s   "r   c                  C   V   t  \} }tdd}tt || W d    d S 1 s$w   Y  d S )N   )rj   rj   r2   	r!   r%   r"   r#   r$   pytestraises	TypeErrorr&   r   r-   r-   r.   test_imshow_10_10_2  
   "r   c                  C   r   )Ni  )rj   rj   r   r   r   r-   r-   r.   test_imshow_10_10_5  r   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 )
Nr2   r   r   )r2   rU   rV   r8   )rW   r   r1   r   )r!   r%   r&   r"   r#   r$   )r)   r   r-   r-   r.   test_no_interpolation_origin  s
   "r   Zimage_shift)r0   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 )r1   r-   )r   r[   r\   r-   r.   
<listcomp>  r   z/test_image_shift.<locals>.<listcomp>.<listcomp>r1   r   )range)r   r-   r   r.   r     s   $ z$test_image_shift.<locals>.<listcomp>r1   r   gMk&Agk&Ar8   )normr   r   auto)r   r!   r%   r&   r   LogNormZ
set_aspect)ZimgDataZtMinZtMaxr)   rf   r-   r-   r.   test_image_shift  s   
r   c                  C   s  t jddgd} | jg ddd}ttdddd	}|j|d
g d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sJ dd S )Nr1   rS   rm   F)frameon      r   	   r   rj   r   rj   r8   gray)rW   r   r   cmapr2   )r   r1   r   )	facecolorr   rX   r   z.Expected a non-green edge - but sadly, it was.)r!   rY   add_axesr"   Ztiler#   r$   r&   ry   rz   
set_xticks
set_yticksra   rb   rc   rd   re   r   )r)   rf   r   r   r[   r\   r   rgbar-   r-   r.   test_image_edges  s$   



r  Zimage_composite_backgroundc                  C   s^   t  \} }tddd}|j|g dd |j|g dd |d |ddg d S )	Nr   r3   r   )r   r2   r   r   r   )r3   r   r   r   )r1   r   r   r   r   )r!   r%   r"   r#   r$   r&   set_facecolorry   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|g d
dd |j|g ddd |j|g dd |j|g dd |j|g ddd |j|g d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.
    )      r3   r1   Nr   g?皙?rX   r   )r	  r  r3   )r1   r2   r   r   333333?)r   r   )r2   r   r   r   333333?)r   r3   r   r   r   )r   r   r1   r2   )r   r   r2   r   )r   r   r   r3   )r   r   r   r1   r   )r!   r%   r"   r9   Zconcatenater#   Znewaxisr&   r  ry   rz   )r)   rf   r   Zarr2r-   r-   r.   test_image_composite_alpha  s.   
$
$
r  c                 C   sp   t dd}| |fD ]&}| }|j|tjg d|jfd |j|tjg d|jfd qd|_	d S )Nr   r   r   )r   r   r1   )r1   r   )Z	clip_path)r   )r1   r2   )r2   r1   T)
r"   r#   r$   add_subplotr&   mplr   r   r   rN   )ru   rv   tr)   rf   r-   r-   r.   #test_clip_path_disables_compositing  s   

r  Zrasterize_10dpi)r@   r0   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 qMdtd< d S )Nr1   r2   r   r3   )r   r1   r   r   g      4@T)	linewidthZ
rasterizedr  )rX   r2   xlimylim)r  Frj   rA   )r"   asarrayr!   r%   r&   r`   setr   r   ZspinesZset_visibler   )r<   r)   r   rf   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   Frj   r
  皙?r  r   )r"   r#   r$   r!   r%   r   r   r   r   set_dataZset_clip_onry   rz   Z
add_artistidentityrY   ZtransFigure)r	   r)   rf   Zbbox_imr-   r-   r.   test_bbox_image_inverted"  s(   





r  c                  C   s   t g dg dg dg dg} tjddd\}}|g d |d	d
 |d	d
 |j| g ddd}|j	  |jj
}||}t| ddgddgg d S )N)r   r   r   r   )r
  g?r   皙?)r  r          r  )ffffff??r  r  r   r   rR   rm   r   r1   )r  r!  r  r"  r   )r   r   i  r   i  i  )r"   rL   r!   r%   rt   ry   rz   r&   r   drawrendererZget_window_extentr   Z
get_points)r   r)   rf   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&   rz   ry   )r	   r)   rf   r-   r-   r.   test_zoom_and_clip_upper_originP  s   


r(  c                  C   s   t  } t| }|d d S )NZBlues)r!   gcar   Zset_cmaprf   r   r-   r-   r.   test_nonuniformimage_setcmap\  s   r+  c                  C   s"   t  } t| }|t   d S N)r!   r)  r   set_norm	Normalizer*  r-   r-   r.   test_nonuniformimage_setnormb  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;   r5   rj   r   r   rI   L)r"   r:   r   linspacer   newZputdataflattenr!   r%   r&   )Zimdir   r)   rf   r-   r-   r.   test_jpeg_2dh  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rEdksHJ  J |d}|dksSJ d S )Nr   ,  rR   )r6  r6  r3   r5   r   r   r7   Zredr   )r   r   rT   r            r   )   r   r   )r!   rY   r"   r9   floatr1  rO   ra   rb   rc   rd   r   r   lenZ	getcolorsZgetpixel)r   r   r	   Z
num_colorsZcorner_pixelr-   r-   r.   test_jpeg_alphas  s   



r=  c                  C   P   t  } t| }tjdtdd}|| d|d< |jd dks&J dd S Nr   r5   r3   r   #@r   r   value changed)	r!   r)  r   r"   r#   r;  r$   r  _A)rf   r   r]   r-   r-   r.   test_axesimage_setdata     
rD  c                  C   r>  r?  )	r!   Zgcfr   r"   r#   r;  r$   r  rC  )r)   r   r]   r-   r-   r.   test_figureimage_setdata  rE  rF  zimage_cls,x,y,a      @      @g      (@r@  g      @)r   r2   c                 C   s   t  }| |}|||| d |d<  |d< |d< |jd |jd   kr6|jd   kr6dks;J d J d||||g |jdR  d S )NrA  r   r   rB  rX   )r!   r)  r  rC  Z_AxZ_Ayr$   r   )Z	image_clsr[   r\   r  rf   r   r-   r-   r.   test_setdata_xya  s   @$rI  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 u rd|	d
 }qY|	d
 |krlJ qYd S )Nr   )ElementTreerj   r1   r2   )rf   r?   r   r	   r   )Z	xml.etreerJ  r"   ro   rp   rq   r!   r%   Z
pcolormeshcolorbarra   rb   rc   getvalueparseiter)
rJ  r   r)   rf   Zp1Zp2r   Ztreer   r	   r-   r-   r.   test_minimized_rasterized  s(   

rO  c                  C   s   t tjd } dtjdkrdnd |    }t  t	
| W d    n1 s,w   Y  tj|}t	
| W d    d S 1 sHw   Y  d S )Nr}   zfile:win32z/// )r   r   r   sysplatformZresolveZas_posixr   'suppress_matplotlib_deprecation_warningr!   re   urllibZrequestZurlopen)r   Zurlfiler-   r-   r.   test_load_from_url  s   

"rW  Zlog_scale_imagec                  C   sN   t d} d| d d d< t \}}|j| g dddddd |jd	d
 d S )Nr   r1   r2   )r1   r   r1   r   viridisrX   r   )r   r   vmaxvminaspectlog)Zyscale)r"   r9   r!   r%   r&   r  )r   r)   rf   r-   r-   r.   test_log_scale_image  s   
r]  Zrotate_imagegffffff?)r0   tolc                  C   s,  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
g ddd}
t 	d|	j
 }|
| |
 \}}}}|	j|||||g|||||gdd|d |	dd |	dd d S )Nr         rG  r2   r1         ?r   r8   rX  rV   )r3   r2   T)r   r   rW   r   clip_on   zr--r   )Zlwr   r   r   r3   )r"   r#   meshgridexppir!   r%   r&   r   Z
rotate_degr   Zset_transformZ
get_extentr`   ry   rz   )deltar[   r\   r(   YZ1Z2r   r)   r*   Zim1Ztrans_data2Zx1Zx2Zy1Zy2r-   r-   r.   test_rotate_image  s*   &*

 rl  c                  C   sR   t  } td}tj| |dd | d t| }|jd d |jks'J d S )N)i  iA  rP   r   r   r2   )	ra   rb   r"   r9   r!   r   rd   re   r   )r   r   r<   r-   r-   r.   test_image_preserve_size  s   


rm  c                  C   s   d} t | t}tj| | fdd}t|g d}|  || |j|dddd t	
 }|j|d	d
 |d t|}|jdksGJ tt |d d d d df tt | td d d  d S )N   F)rS   r   )r   r   r   r   r   rV   r   )r   rW   r[  r1   )rT   r   )rn  rn  r3   rX   )r"   r  r;  r!   rY   ZAxesset_axis_offr   r&   ra   rb   rc   rd   re   r   r   r  bool)nr   r)   rf   r   r<   r-   r-   r.   test_image_preserve_size2  s   


rr  zmask_image_over_under.pngr   c               	   C   sl  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g dd}|d |
j|dd|d
d |j|	d|tjg dddddg dd}|d |
j|dd d|d
d! d S )"NFzpcolormesh.snapg?r_  rG  r2   r1   r`  r   rj   r  r  r  ZoverunderZbad333333?r    g      r   )rZ  rY  cliprV   )rb  r   rb  r   )r   r   r   rW   r   zGreen=low, Red=high, Blue=badbothZ
horizontal)extendorientationrf   r[  r   )rX   r'  gɿr   r  r   r1   r7  )Zncolorsrv  zWith BoundaryNormZproportional)rx  Zspacingry  rf   r[  )r!   r   r"   r#   re  rf  rg  cmr   with_extremesmaZmasked_wherer%   r&   r   r.  r'   rK  ZBoundaryNorm)rh  r[   r\   r(   ri  rj  rk  r   ZpaletteZZmr)   r*   r+   r   r-   r-   r.   test_mask_image_over_under&  s@   
&*





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 )Nr1   r2   r4   r   r   r5   T)r!   r%   r"   r:   nanr&   r9   rp  r|  masked_arrayr   )r)   r*   r+   rw   r-   r-   r.   test_mask_imageH  s   
r  c                  C   s2   t dt j} t \}}||  |j  d S )NrQ   )r"   fullr~  r!   r%   r&   r   Z	draw_idle)r   r)   rf   r-   r-   r.   test_mask_image_allZ  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i | |j|d
fi | d S )Nrj   r   r1   r2   rV   r   rX  )rW   r   r   z<f8z>f8)	r"   r#   re  Zhypotr!   r%   dictr&   r   )r[   r(   ri  r   r)   r*   r+   kwargsr-   r-   r.   test_imshow_endianessb  s   
r  Zimshow_masked_interpolationZx86_64r   )r^  r0   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 t|| D ]\}}	|	| |	j||| |d |	d q^d S )NrX  r  r  r   rs  r   r   r1   rZ  rY  r5   rX   r4   g     j@)r   r   )r   r   rp  T)r   r   r   r   rn   )r   r   r   off)r!   get_cmapr{  r   r.  r"   r#   r;  r$   infZ
zeros_liker   r|  r  r%   sortedmimageZ	_interpd_removezipravelr'   r&   axis)
r   Nrq  r   maskr)   Zax_gridZinterpsZinterprf   r-   r-   r.    test_imshow_masked_interpolationp  s$   



r  c                   C   s   t ddgdtjgg d S )Nr1   r2   r   )r!   r&   r"   r~  r-   r-   r-   r.   test_imshow_no_warn_invalid  s   r  r6   c                 C   s   g | ]}t |qS r-   )r"   r6   )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r$|d }t \}}|| }|| dk s;J | jdkrT|| d	k sJJ |j	jdksRJ d S || dk s^J |j	t j
ksfJ d S )
Nr6  r5   )rj   rj   r   urj   r   rI   fr1   )r"   r#   r$   kindr!   r%   r&   Z	get_arrayallr6   r;   )r6   r   Ztoo_lowZtoo_high_rf   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 )Nr4   r   r   r   r`  )r!   r%   r&   r"   r:   set_climr)   rf   r   r-   r-   r.   test_imshow_flatfield  s   r  zimshow_bignumbers.pngc                  C   sJ   dt d< t \} }tjg dg dgtjd}||}|dd d S )Nr   image.interpolation)r1   r2   g   mB)r   r1   r3   r5   r   r   )r   r!   r%   r"   rL   Zuint64r&   r  r)   rf   r<   Zpcr-   r-   r.   test_imshow_bignumbers  s
   
r  zimshow_bignumbers_real.pngc                  C   sD   dt d< t \} }tg dg dg}||}|dd d S )Nr   r  )r&  r   gMD)rH  r   rG  r   r   )r   r!   r%   r"   rL   r&   r  r  r-   r-   r.   test_imshow_bignumbers_real  s
   
r  	make_normc                   C   
   t dS Nr1   )r   Z
SymLogNormr-   r-   r-   r.   <lambda>     
 r  c                   C   r  r  )r   Z	PowerNormr-   r-   r-   r.   r    r  c                 C   s   t  \}}tjtdd |jg g|  d}W d    n1 s!w   Y  |g d |j  t	t
 ||j W d    d S 1 sIw   Y  d S )Nz)Attempting to set identical left == rightmatch)r   )r   r  r   )r!   r%   r   warnsUserWarningr&   Z
set_extentr   r#  r   RuntimeError
make_imageZ_cachedRenderer)r  r)   rf   r   r-   r-   r.   test_empty_imshow  s   
"r  c                  C   s0   t  \} }|tjdtjd | j  d S )Nr  r5   )r!   r%   r&   r"   r9   Zfloat16r   r#  r)   rf   r-   r-   r.   test_imshow_float16  s   r  c                  C   st   t  \} }|tjdtjd ttjtjdrt nt	
t | j  W d    d S 1 s3w   Y  d S )Nr  r5   Zequiv)r!   r%   r&   r"   r9   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 )NTFr5   )r!   r%   r&   r"   rL   rp  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)Tr1   )Fr2   c           
      C   s   t t dddt ddd\}}t |d }t \}}|dd |j|g dd |j|d d d	 g d
d |tjd< t	
 }	|j|	| d |	 ||ksWJ d S )Nr  r   r1   r2   r   r   r   r1   r   r1   r   rX   )r2   r   r   r1   zimage.composite_imager   )r"   re  r#   rZ   r!   r%   ry   r&   r   ra   rb   rc   rL  count)
r   ZcountedZcomposite_imager  r(   ri  r   r)   rf   r   r-   r-   r.   test_composite  s   $
r  c                  C   sV   t  \} }|jdggdd |  |  | |   kr&dks)J  J d S )Nr   r  r   r  )r!   r%   r&   ZrelimZ	autoscaleZget_xlimZget_ylimr  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
 s:J d S )Nr   r   r   r   F)r[  r   r   rc  r  r  .r   )r!   r%   ro  r&   r  r   r#  r"   rL   Zbuffer_rgbar  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	 h |
 d
hksCJ |d jdd t }| j	|dd	 |
 |
 ks`J d S )Nr2   r1   r   r   r   r  )r[  r   rgbar   rI   )rX   r   )r  )r!   r%   ro  r&   r   Zset_clip_boxZbboxra   rb   rc   rL  r  )r)   r   rf   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s!J tjjdgdgd}||dks4J tj}||dks@J d S )	Nr   r   Tr  r   Fz[0]z[nan])	r!   r%   r&   r"   r9   r|  r  r   r~  )r)   rf   r   r   r-   r-   r.   test_image_cursor_formatting2  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   r1   rb  r   r2   g[(\?rX  r   )r   r   r   ).rX   r   N)r"   r1  re  rf  maxr!   r  r  r&   r   r.  )
ru   rv   r[   ZxxZyyZzzr   r   rf   r  r-   r-   r.   test_image_array_alphaA  s   
r  c                   C   sL   t jtdd tjtdddgd W d    d S 1 sw   Y  d S )Nzalpha must be a float, two-dr  rQ   r1   )r   )r   r   r   r!   r&   r"   r9   r-   r-   r-   r.   !test_image_array_alpha_validationT  s   "r  c                  C   s   t tjd} | jdd tjddd}|g d}tjg dgt	d	}|j
|d
| ddd}|d |j  ||jjd d }|||dggd  j d t}t||ksdJ d S )NZautumn_rZ	lightgrey)Zcolor)gffffff?r
  r   rR   rm   )rX   rX   rX   r   r   r   r   +   O   _   B   r1   rX   rX   rX   r   r   r   "   r5   r   r   )r[  r   rZ  rY  r  r1   rj   rI   )r   r!   rz  r  	set_underrY   r   r"   rL   r;  r&   r  r   r#  r  r$  r   r   Tr  r   rr   r  )r   r)   rf   r   r   Z
from_imageZdirect_computationr-   r-   r.   test_exact_vminY  s    

$r  c                  C   s8   t   td} W d    d S 1 sw   Y  d S )Nz.https://matplotlib.org/1.5.0/_static/logo2.png)r   rT  r  re   )r   r-   r-   r.   test_https_imread_smoketestv  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 urt||}|S r  )r  superr  __getitem__
isinstance)r  itemr  ret	__class__r-   r.   r    s
   
zQuantityND.__getitem__c                 O   sJ  t ||}d|v rtt|dkr'|d }t |dd}|t|fi |}nlt|dkr|d }|d }	t |dd}
t |	dd}|
d u rG|n|
}
|d u rO|
n|}|tjtjfv rb|
|kr_t|
}n|tjkro|
 d| }n|tj	kr}|
 d| d	}nt||
tj|	
tjfi |}nt|d u rt|}|S t||}|S )
Nr  r1   r   r  Zdimensionlessr2   *z/())r  NotImplementedErrorr<  r"   r  addsubtract
ValueErrorZmultiplyZdivider  ndarrayrL   r  )r  ZufuncmethodZinputsr  funcZi0ZunitZout_arrZi1Zu0Zu1r-   r-   r.   __array_ufunc__  s<   


$

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J | jdks%J t|| jtdgks5J || jdks>J || jdksGJ tt |t dd  W d    d S 1 s_w   Y  d S )Nr1   r2   mr   zm*mzm/(m)r  )	r  r"   r  r   r  r  r   r   r  )qZq0Zq1r-   r-   r.   test_quantitynd  s    "r  c                  C   s4   t tdd} t \}}||  |j  d S )NrQ   r  )r  r"   r:   r!   r%   r&   r   r#  )r   r)   rf   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 )Nr4   r1   r5   rX   r   r2   Fr  TrX  wrt  r   r  r   r   )r   r   r   r   ra  )r   rj   r   rj   r   rj   r  )r"   r  r  r|  rL   r  r!   r  r{  r%   r&   r   r   r-  r.  r  )ru   rv   r   Zmasked_datar   rf   r   r-   r-   r.   test_norm_change  s.   r  r[   rX   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 )Nr4   r5   g@xDr   r2   r1   r  r   rX  )r   r   r   i  r  r  )r"   r  r  r%   r&   r   r   r  r!   r  r{  r.  )ru   rv   r[   r   rf   r   r-   r-   r.   test_huge_range_log  s   
r  c           	   
   C   sB  |  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}g d}tt||D ]p\}\}}|| | || | || | || j|ddddddd	 || d
d || dd
 || j	  || j
d || jd || jtjdg ddd || jtjdg ddd q.d S )Nr1   r   r   )r:   r9   Zmixedr   Zequalr   ZGreys)r   r[  rW   r   rZ  rY  r'  r`  g?rw  r   )r1   r2   r   rj   T)ZnbinsZstepsZinteger)r%   	enumerater  r'   Zspyr&   ry   rz   ZxaxisZtick_toptitleZset_yZset_ticks_positionZset_major_locatormtickerZMaxNLocatorZyaxis)	ru   rv   Zax_testZax_refZ	plot_dataZplot_titlesr4  r]   r  r-   r-   r.   test_spy_box  s6   

r  znonuniform_and_pcolor.pngc                  C   s   t jddjdddd} t| ddgD ]&\}}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 qUd S )Nr  r   r   T)sharexshareyr   r    r   r2   r   r3   r  )r  )r!   rY   r%   r  r   r  r"   r#   r$   Z	add_imageZ
pcolorfastro  r  )r   rf   r   r   r-   r-   r.   test_nonuniform_and_pcolor  s   &r  zrgba_antialias.png)r   r0   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 )$Nr2   )      @r  FT)rS   r  r  Zconstrained_layout   rX   r   rj   K   r  r1   r  r   rU   g    .AF   Z   g    .rd        ZyellowZcyanr   r   g333333ru  )r   r   rZ  rY     rn   r   )r   Zinterpolation_stager   rZ  rY  r   r  )r!   r%   r"   r:   r#   re  ZsqrtrZ   rg  rr   ZNaNr   rz  ZRdBu_rZset_overr  r3  r&   ry   rz   )r)   r   r  Zaar[   r\   r(   ri  RZf0r   r  r   r-   r-   r.   test_rgba_antialias.  sF   
(<<4

""
r  )
contextlibr   r   ra   r   Zpathlibr   rS  rR  Zurllib.requestrU  Z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/   r=   rM   ZmarkZparametrizer_   rh   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+  r/  r5  r=  rD  rF  r#   r$   rI  rO  rW  r]  rl  rm  rr  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  ZnetworkZflakyr  r  r  r  r  r  r  r  r  r  r-   r-   r-   r.   <module>   s~   $


	




"



G

	






	







		
	!


!


!






	


	7
	


 
