o
    iJ                  
   @   s  d dl mZ d dlmZ d dlZd dlZd dlZd dlmZ d dl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,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dNdNggdOfgdPdQ ZAe$dRgdddSdT ZBe$dUgdddVdW ZCe$dXgdddYdZd[ ZDe#dgdd\d] ZEd^d_ ZFd`da ZGe$dbgdddcdd ZHe$degdddgdfdgdh ZIdidj ZJe$dkgdddYdldm ZKe$dngdddodp ZLe#dgddqdr ZMe$dsgddgdddtdudv ZNe$dwgdddYdxdy ZOdzd{ ZPe$d|gdddYd}d~ ZQdd 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d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 dh D dd Zie$dgdddYdd Zje$dgdddYdd Zke$dgdddY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$dgddgdddtdd Z}G dd dej~Zdd Zdd Ze#dgddd Ze,j01ddNdIge#dgddd Ze# dd Ze$dgdddd Ze$dgddee dv r}dnd d dd Ze,j0de,j01dddge,j01dg dg d	ge#d
ddd Ze#dgddd Zdd Zdd Z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,   j/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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   noner   r   N)r    r$   r!   zerosonesZtriluint8r%   )r(   ZaxlZaxrimgr,   r,   r-   test_alpha_interp0   s   
r<   Zinterp_nearest_vs_nonepdfsvg)
extensionsr/   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   )rH   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   
rL   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    figurerM   r!   Zix_r"   sinrN   )rM   r(   xyzcr;   r,   r,   r-   test_figimageO   s   $$$*r^   c                  C   sD   t  \} }|g d t }| | |d t | d S )N)r0   r1   r   r   )r    r$   plotioBytesIOsavefigseekimread)r(   axbufferr,   r,   r-   test_image_python_io_   s   

rg   z!img_size, fig_size, interpolation))r   r1   hanning)r   r   r   )r   
   r   )r   333333@rh   )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,r@   r   r   r0   r0   antialiasedr   )r!   randomseedr    r   randintset_size_inchesr$   set_positionr%   )	fig_testfig_refZimg_sizeZfig_sizer   rS   Ar(   re   r,   r,   r-   test_imshow_antialiasedh   s   
rw   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 )
Nrk   r@   r   rj   rm   r   ri   r   r   )r!   rn   ro   r    r   rp   rq   rr   r$   r%   set_xlimset_ylim)rt   ru   rS   rv   r(   re   r,   r,   r-   test_imshow_zoom   s   
rz   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    rd   )rt   ru   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    rd   ospathjoindirnamer~   r5   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    rd   r   r~   r   r5   r!   r   r   r   r,   r,   r-   test_imread_fspath   s
   r   fmt)rO   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   r0   i@  r1   )formatrS   r   r   r   r   )r!   rn   ro   rp   r`   ra   r    imsaverc   rd   shaper   )r   Z	has_alphadataZ	buff_dpi1Zbuff_dpi100Zarr_dpi1Z
arr_dpi100r,   r,   r-   test_imsave   s   	

r   )rO   r=   psZepsr>   c                 C   s&   t jttjtddgg| d d S )Nr   r0   r   )r    r   r   r   devnullr!   rK   )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 )Nr0   )rU   upper   r2   rO   )rV   r   r   rH   r:   rU   rW   )r!   rn   ro   rp   r`   ra   r    r   rc   rd   astyper   )rV   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testr0   r1   r   rO   pnginfor   
pil_kwargs)
ZPIL.PngImagePluginr   r`   ra   add_textr    r   r   r   info)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s%J t| } fd
d|j	
 D }|d dks>J 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>       z/test_imsave_pil_kwargs_tiff.<locals>.<dictcomp>ZImageDescription)ZPIL.TiffTagsr   r`   ra   r    r   lenr   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!   rn   ro   rp   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   ri   r   )rV   r2   r2   motion_notify_event,   )g333333$@r2   rU   )r   r   r   r   extent)      ?r   7   )      ?r   ){Gz?g{Gzr1   r   	transform)r   ri   )matplotlib.backend_basesr   r    r$   r%   r!   r"   r#   	transDatar   canvasget_cursor_dataclearr   scalerotate)
r   r(   re   r   rZ   r[   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]rW   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(   re   r   r   r   r   r,   r,   r-   test_format_cursor_dataV  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(   re   r   patchr,   r,   r-   test_image_clipi  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(   re   r   r   rectr,   r,   r-   test_image_cliprects  s   r   r%   )r/   r   c                  C   sH   t  \} }tdd}|j|ddd |dd |dd d S )Nr   ri   ri   r   r0   r1   r0   r1   r   r   r   r   )r    r$   r!   r"   r#   r%   rx   ry   r(   re   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   )ri   ri   r0   r   r   r   r   r   )r!   r"   r#   r$   r%   rx   ry   )rt   ru   r   re   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   )ri   ri   r1   	r    r$   r!   r"   r#   pytestraises	TypeErrorr%   r   r,   r,   r-   test_imshow_10_10_2  
   "r   c                  C   r   )Ni  )ri   ri   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 )
Nr1   r   r   )r1   rT   rU   r7   )rV   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   rZ   r[   r,   r-   
<listcomp>  r   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(   re   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 )Nr0   rR   rl   F)frameon      r   	   r   ri   r   ri   r7   gray)rV   r   r   cmapr1   )r   r0   r   )	facecolorr   rW   r   z.Expected a non-green edge - but sadly, it was.)r    rX   add_axesr!   Ztiler"   r#   r%   rx   ry   
set_xticks
set_yticksr`   ra   rb   rc   rd   r   )r(   re   r   r   rZ   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   r2   r   )r   r1   r   r   r   )r2   r   r   r   )r0   r   r   r   r   )r    r$   r!   r"   r#   r%   set_facecolorrx   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.
    )      r2   r0   Nr   皙?皙?rW   r   )r  r  r2   )r0   r1   r   r   333333?)r   r   )r1   r   r   r   333333?)r   r2   r   r   r   )r   r   r0   r1   )r   r   r1   r   )r   r   r   r2   )r   r   r   r0   r   )r    r$   r!   r8   Zconcatenater"   Znewaxisr%   r  rx   ry   )r(   re   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   r0   )r0   r   )	clip_path)r   r0   r1   )r1   r0   T)
r!   r"   r#   add_subplotr%   mplr   r   r   rM   )rt   ru   tr(   re   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 qMdtd< d S )Nr0   r1   r   r2   )r   r0   r   r   g      4@T)	linewidthZ
rasterizedr  )rW   r1   xlimylim)r  Fri   r@   )r!   asarrayr    r$   r%   r_   setr  r  ZspinesZset_visibler   )r;   r(   r   re   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   Fri   r  皙?r  r   )r!   r"   r#   r    r$   r   r   r   r   set_dataZset_clip_onrx   ry   Z
add_artistidentityrX   ZtransFigure)r   r(   re   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 tjddd\}}|g d |d
d |d	d
 |j| g dd|j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   rQ   rl   r   r0   )r(  r*  r$  r+  r   )r   r   i  r   i  i  r1   )r   r   r   )r!   rK   r    r$   rs   rx   ry   r%   r   drawrendererZget_window_extentr   Z
get_points	transAxes)r   r(   re   Zim_objr-  Zim_bboxr,   r,   r-   $test_get_window_extent_for_AxisImage?  s4   





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%   ry   rx   )r   r(   re   r,   r,   r-   test_zoom_and_clip_upper_originb  s   


r2  c                  C   s   t  } t| }|d d S )NBlues)r    gcar   Zset_cmapre   r   r,   r,   r-   test_nonuniformimage_setcmapn  s   r6  c                  C   s"   t  } t| }|t   d S N)r    r4  r   set_norm	Normalizer5  r,   r,   r-   test_nonuniformimage_setnormt  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   ri   r)  r   rH   L)r!   r9   r   linspacer   newZputdataflattenr    r$   r%   )Zimdir   r(   re   r,   r,   r-   test_jpeg_2dz  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rEdksHJ  J |d}|dksSJ d S )Nr   ,  rQ   )rA  rA  r2   r4   r)  r   r6   redr   )r  r   rS   r            r   )   r   r   )r    rX   r!   r8   floatr<  rN   r`   ra   rb   rc   r   r   r   Z	getcolorsZgetpixel)r   r   r   Z
num_colorsZcorner_pixelr,   r,   r-   test_jpeg_alpha  s   



rH  c                  C   P   t  } t| }tjdtdd}|| d|d< |jd dks&J dd S Nr   r4   r2   r   #@r   r   value changed)	r    r4  r   r!   r"   rG  r#   r%  _Are   r   r\   r,   r,   r-   test_axesimage_setdata     
rP  c                  C   rI  rJ  )	r    Zgcfr   r!   r"   rG  r#   r%  rN  )r(   r   r\   r,   r,   r-   test_figureimage_setdata  rQ  rR  zimage_cls,x,y,a      @      @g      (@rK  g      @)r   r1   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 )NrL  r   r   rM  rW   )r    r4  r%  rN  Z_AxZ_Ayr#   r   )Z	image_clsrZ   r[   r
  re   r   r,   r,   r-   test_setdata_xya  s   @$rU  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   )ElementTreeri   r0   r1   )re   r>   r   r   r   )Z	xml.etreerV  r!   rn   ro   rp   r    r$   Z
pcolormeshcolorbarr`   ra   rb   getvalueparseiter)
rV  r   r(   re   p1p2r   treer   r   r,   r,   r-   test_minimized_rasterized  s(   

r^  c                  C   s   t tjd } dtjdkrdnd |    }tjt	dd t
| W d    n1 s/w   Y  tj|}t
| W d    d S 1 sKw   Y  d S )Nr|   zfile:win32z/// zPlease open the URLmatch)r   r~   r   sysplatformresolveas_posixr   r   
ValueErrorr    rd   urllibrequesturlopen)r   urlfiler,   r,   r-   test_load_from_url  s   
"rm  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   r0   r1   )r0   r   r0   r   viridisrW   r   )r   r  vmaxvminaspectlog)Zyscale)r!   r8   r    r$   r%   r"  )r   r(   re   r,   r,   r-   test_log_scale_image  s   
rs  Zrotate_imagec                  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         rS  r1   r0         ?r   r7   rn  rU   )r2   r1   T)r   r  rV   r   clip_on   zr--r   )lwr   r   r   r2   )r!   r"   meshgridexppir    r$   r%   r   Z
rotate_degr   Zset_transformZ
get_extentr_   rx   ry   )deltarZ   r[   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s'J d S )N)i  iA  rO   r   r   r1   )	r`   ra   r!   r8   r    r   rc   rd   r   )r   r   r;   r,   r,   r-   test_image_preserve_size  s   


r  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)rR   r   )r)  r)  r   r   r   rU   r   )r   rV   rq  r0   )rS   r   )r  r  r2   rW   )r!   r&  rG  r    rX   ZAxesset_axis_offr  r%   r`   ra   rb   rc   rd   r   r   r!  bool)nr   r(   re   r   r;   r,   r,   r-   test_image_preserve_size2  s   


r  zmask_image_over_under.pngr   )r/   tolc               	   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?rt  rS  r1   r0   ru  r   ri   r  r  r	  Zoverunderbad333333?r   g      r   )rp  ro  cliprU   )rw  r   rw  r   )r   r  r   rV   r   zGreen=low, Red=high, Blue=badboth
horizontal)extendorientationre   rq  r   )rW   r1  gɿr   r$  r   r0   rC  )Zncolorsr  zWith BoundaryNormZproportional)r  spacingr  re   rq  )r    r   r!   r"   r{  r|  r}  cmr  with_extremesmaZmasked_wherer$   r%   r   r9  r&   rW  ZBoundaryNorm)r~  rZ   r[   r'   r  r  r  r   paletteZZmr(   r)   r*   r   r,   r,   r-   test_mask_image_over_under4  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 )Nr0   r1   r3   r   r   r4   T)r    r$   r!   r9   nanr%   r8   r  r  masked_arrayr   )r(   r)   r*   rv   r,   r,   r-   test_mask_imageV  s   
r  c                  C   s2   t dt j} t \}}||  |j  d S )NrP   )r!   fullr  r    r$   r%   r   Z	draw_idle)r   r(   re   r,   r,   r-   test_mask_image_allh  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 )Nri   r   r0   r1   rU   r   rn  )rV   r   r  z<f8z>f8)	r!   r"   r{  hypotr    r$   dictr%   r   )rZ   r'   r  r   r(   r)   r*   kwargsr,   r,   r-   test_imshow_endianessp  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 q^d S )Nrn  r  r	  r   r  r   r   r0   rp  ro  r4   rW   r3   g     j@)r   r   )r   r   r  T)r   r   r   r   rm   )r   r  r   off)r  	colormapsr  r   r9  r!   r"   rG  r#   infZ
zeros_liker   r  r  r    r$   sortedmimageZ	_interpd_removezipravelr&   r%   axis)
r  Nr  r   maskr(   Zax_gridZinterpsZinterpre   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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 )
NrA  r4   )ri   ri   r   uri   r   rH   fr0   )r!   r"   r#   kindr    r$   r%   Z	get_arrayallr5   r:   )r5   r   Ztoo_lowZtoo_high_re   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   ru  )r    r$   r%   r!   r9   set_climr(   re   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)r0   r1   g   mB)r   r0   r2   r4   r   r   )r   r    r$   r!   rK   Zuint64r%   r  r(   re   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  )r0  r   gMD)rT  r   rS  r   r   )r   r    r$   r!   rK   r%   r  r  r,   r,   r-   test_imshow_bignumbers_real  s
   
r  	make_normc                   C   
   t dS Nr0   )r   
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 sKw   Y  d S )Nz.Attempting to set identical low and high xlimsra  r   )r   r  r   )r    r$   r   warnsUserWarningr%   Z
set_extentr   r,  r   RuntimeError
make_imageZget_renderer)r  r(   re   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(   re   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  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!   rK   r  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|g dd |j|d d d	 g d
d |tjd< t	
 }	|j|	| d |	 ||ksWJ d S )Nr  r   r0   r1   r   r   r   r0   r   r0   r   rW   )r1   r   r   r0   zimage.composite_imager   )r!   r{  r"   rY   r    r$   rx   r%   r   r`   ra   rb   rX  count)
r   ZcountedZcomposite_imager  r'   r  r   r(   re   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)rq  r   r  rx  r  r  .r   )r    r$   r  r%   r"  r   r,  r!   rK   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 )Nr1   r0   r   r   r   r  )rq  r   rgbar   rH   )rW   r   )r   )r    r$   r  r%   r   Zset_clip_boxZbboxr`   ra   rb   rX  r"  )r(   r   re   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!   r8   r  r  r   r  )r(   re   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   rw  r   r1   g[(\?rn  r   )r   r  r   ).rW   r   N)r!   r<  r{  r|  maxr  r  r  r%   r   r9  )
rt   ru   rZ   xxyyzzr   r  re   r  r,   r,   r-   test_image_array_alphaO  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-dra  rP   r0   )r   )r   r   r   r    r%   r!   r8   r,   r,   r,   r-   !test_image_array_alpha_validationb  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scJ d S )NZautumn_rZ	lightgrey)color)gffffff?r  r   rQ   rl   )rW   rW   rW   r   r   r   r   +   O   _   B   r0   rW   rW   rW   r   r   r   "   r4   r   r   )rq  r  rp  ro  r  r0   ri   rH   )r   r  r  	set_underr    rX   r  r!   rK   rG  r%   r  r   r,  r  r-  r  r   Tr  r   rq   r  )r  r(   re   r   r   Z
from_imageZdirect_computationr,   r,   r-   test_exact_vming  s    

$r  Zimage_placementc                  C   sn   t  \} }|jg dg d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   r   r0   r0   r   )r   r0   r0   r   r   r  r  )r  rz  rk   r   r3  r  r7   rW   r0   )r  r   r   rp  ro  gr  N)
r    r$   r_   r!   rn   ro   r%   Zrandnrx   ry   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 r7  )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                    s8   t | dd }t |}t|ts|d urt||}|S r  )r  super__getitem__
isinstancer  )r  itemr  ret	__class__r,   r-   r    s
   
zQuantityND.__getitem__c                 O   sp  t ||}d|v rtS t|dkr'|d }t |dd}|t|fi |}nt|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|
}n0|tjkro|
 d| }n#|tj	kr}|
 d| d	}n|tj
tjtjtjtjtjfv rd }ntS ||tj|	tjfi |}ntS |d u rt|}|S t||}|S )
Nr  r0   r   r  Zdimensionlessr1   *z/())r  NotImplementedr   r!   r!  addsubtractrg  multiplydivideZgreaterZgreater_equalequal	not_equallessZ
less_equalr  ndarrayrK   r  )r  ZufuncmethodZinputsr  funcZi0unitZout_arri1Zu0u1r,   r,   r-   __array_ufunc__  sF   



$

zQuantityND.__array_ufunc__c                 C   s   |  tjS r7  )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 )Nr0   r1   mr   zm*mzm/(m)r  )	r  r!   r  r   r!  r  r   r   rg  )qq0q1r,   r,   r-   test_quantitynd  s    "r  c                  C   s4   t tdd} t \}}||  |j  d S )NrP   r  )r  r!   r9   r    r$   r%   r   r,  )r   r(   re   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   rW   r   r1   Fr  Trn  wr  r   r  r   r   )r   r   r   r  rv  )r   ri   r   ri   r   ri   r  )r!   r  r  r  rK   r  r  r  r  r$   r%   r   r   r8  r9  r"  )rt   ru   r   Zmasked_datar  re   r   r,   r,   r-   test_norm_change  s.   r   rZ   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   rn  )r   r   r  i  r  r  )r!   r  r  r$   r%   r   r   r  r  r  r  r9  )rt   ru   rZ   r   re   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 )Nr0   r   r   )r9   r8   mixedr   r  r   ZGreys)r   rq  rV   r  rp  ro  r1  ru  g?r  r   )r0   r1   r   ri   T)ZnbinsZstepsinteger)r$   	enumerater  r&   Zspyr%   rx   ry   ZxaxisZtick_toptitleZset_yZset_ticks_positionZset_major_locatormtickerZMaxNLocatorZyaxis)	rt   ru   ax_testax_refZ	plot_dataZplot_titlesr?  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   r1   r   r2   r  )r  )r    rX   r$   r  r   r%  r!   r"   r#   Z	add_imageZ
pcolorfastr  r"  )r   re   r   r   r,   r,   r-   test_nonuniform_and_pcolor9  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   )      @r0  FT)rR   r*  r+  Zconstrained_layout   rW   r   ri   K   r(  r0   r  r   rT   g    .AF   Z   g    .ry        yellowcyanr   r   g333333r  )r   r  rp  ro     rm   r   )r   Zinterpolation_stager  rp  ro  r   r  )r    r$   r!   r9   r"   r{  sqrtrY   r}  rq   r  r   r  ZRdBu_rZset_overr  r>  r%   rx   ry   )r(   r   r  ZaarZ   r[   r'   r  RZf0r   r
  r  r,   r,   r-   test_rgba_antialiasI  sF   
(<<4

""
r<  z<ignore:Data with more than .* cannot be accurately displayedrV   r   rU   zdim, size, msg)rowi   z2\*\*23 columns)coli   z2\*\*24 rows)rO   c           
   	   C   s   |   }|  }td|d f}d|d d |jd d f< |dkr%|j}|j|ddddd|d}	tjtd	| d
d | j	
  W d    n1 sLw   Y  td}d|d d df< |dkre|j}|j|ddddd|d}	d S )Nr0   r1   r>  r   r   r  r7   )rp  ro  rq  r   r   rV   zData with more than z  cannot be accurately displayed.ra  r  )r$   r!   r8   sizer  r%   r   r  r  r   r,  )
rt   ru   dimr?  msgrV   r'  r(  rK   r   r,   r,   r-   test_large_image  s2   



rB  c                 C   sn  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u sJ tt |d j|dd W d    d S 1 sw   Y  d S )Nri   g?r  r0   r   r   rr  r  r$  )r   rp  r1   Zsymlogr   r  r*  )r   rp  ro  r2   Zlogit)rp  )	linthresh)rC  rp  ro  )r  r*  )r   ZclimZfoobar)r!   rn   rp   r$   r%   r   r   r  typeZimagesr   r   r   rg  )rt   ru   r  ZaxtsZaxrsr,   r,   r-   test_str_norms  s"   "rE  c                  C   sn  t jtjjt d} tjtdd | t	
dd  W d    n1 s$w   Y  tjtdd | t	
dt	
d W d    n1 sFw   Y  tjtdd | t	
dt	
d W d    n1 shw   Y  tjtd	d | t	
dt	jt	
d W d    n1 sw   Y  tjtd
d | t	
dt	
dj W d    d S 1 sw   Y  d S )Nr   zmust be a NumPy arrayra  )r   r   zdifferent dimensionalities)r   r   r2   zmust be RGBA)r   r   r   zMismatched typeszmust be C-contiguous)	functoolspartialr  Z_imageresampler   r   r   rg  r!   r8   r:   r  )rH  r,   r,   r-   test__resample_valid_output  s    "rI  c                  C   s   t  } t| }tjtdd |  W d    n1 sw   Y  tjdt	d
d}|| | dks:J | | ksDJ d S )Nz"You must first set the image arrayra  r   r4   rK  )r    r4  r   r   r   r  	get_shaper!   r"   rG  r#   r%  get_sizerO  r,   r,   r-   test_axesimage_get_shape  s   

rL  c                  C   s   t   } tdd}| j|| jd |  dksJ | j|t	 
d| j d |  dks4J | j|| jdd |  dksEJ d S )Nr2   rP   r   r   r1   r0   )r   rq  )r    rX   r  r!   r"   r#   r%   r.  Z
get_aspectr   r   r   r5  r,   r,   r-   .test_non_transdata_image_does_not_touch_aspect  s   rM  )
contextlibr   r   rF  r`   r   pathlibr   rd  rc  urllib.requestrh  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<   rL   markZparametrizer^   rg   rw   rz   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/  r2  r6  r:  r@  rH  rP  rR  r"   r#   rU  r^  rm  rs  r  r  r  r  r  r  r  machiner  r  splitr  r  r  r  r9  r   r  r  r  r  r  r  r  r  r  r  r  r  contextr  r  r  r  r  r  r   r!  r)  r,  r<  filterwarningsrB  rE  rI  rL  rM  r,   r,   r,   r-   <module>   s    


	




"


G

	






	





#

		
	!


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