o
    i	                     @   s  d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZmZ d dlZd dlmZ d dlmZ ddlmZ d dlmZ ejjZeejd	ed
ddgdgZdZdddddddZG dd dZejdeddejdeG dd dZedddejded dG dd  d Z edddG d!d" d"Z!G d#d$ d$Z"G d%d& d&Z#G d'd( d(Z$G d)d* d*Z%G d+d, d,Z&dS )-    N)suppress_warnings)xp_assert_equalxp_assert_closeassert_array_almost_equal)is_cupyis_jax_asarrayarray_namespace)raises   )types)array_api_compatibleskip_xp_backendsTcupy	jax.numpy)Zcpu_only
exceptions-q=reflectZ	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                   @   s  e Zd Zedddejddg dfdg dfd	g d
fdg dfdg dfdg dfdg dfgdd Zedddejddg dfdg dfd	g dfdg dfdg dfdg dfdg dfgdd Zejdg dejde	dd d! Z
d"S )#TestBoundariesr   &CuPy does not have geometric_transformreasonzmode, expected_valuer   )      ?      @      @   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"   r#   r"   r!   r    r   )r    r!   r"   r$   r$   r$   r   )r    r!   r"   r    r$   r$   r$   c              	   C   s<   dd }| g d}ttj||d|ddd| | d S )Nc                 S   s   | d d fS )Nr         ? xr&   r&   `/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/ndimage/tests/test_interpolation.pyshift1      z-TestBoundaries.test_boundaries.<locals>.shift)r               @r$   )   r   )cvalmodeoutput_shapeorderasarrayr   ndimagegeometric_transformselfr1   Zexpected_valuexpr*   datar&   r&   r)   test_boundaries%   s   zTestBoundaries.test_boundaries)r   r   r,   r-   )r-   r   r,   r-   )r#   r   r,   r-   )r,   r   r,   r-   )r$   r   r,   r-   c                 C   s:   dd }| g d}ttj||d|dd| | d S )Nc                 S      | d d fS )Nr   g?r&   r'   r&   r&   r)   r*   F   r+   z.TestBoundaries.test_boundaries2.<locals>.shiftr   r,   r-   r#   r$   r#   )r0   r1   r2   r4   r8   r&   r&   r)   test_boundaries2:   s   zTestBoundaries.test_boundaries2r1   )r   r   r   r   r   r   r3      c                 C   s   t |r|dvs|dkrtd tjddtjd}||}|tjddd	d
}t|j	}t
j|||df ||d}d}	t|}
|tj||	|
d}||	| |df }t
j||||d}|dkrhdnd}t||d|d dS )z$Tests based on examples from gh-2640)r   r   r   r   r   r   z-Jax does not support grid- modes or order > 1ir/   dtypei   i  )num.r3   r1       r1   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r5   Zlinspacer	   newaxisr6   map_coordinatesndimage_to_numpy_modegetpadr   )r9   r1   r3   r:   Znp_datar;   r(   rR   ynpadpad_modepaddedZcoordsexpectedrL   r&   r&   r)   test_boundary_spline_accuracyO   s    



z,TestBoundaries.test_boundary_spline_accuracyN)__name__
__module____qualname__r   rM   markparametrizer<   r@   ranger\   r&   r&   r&   r)   r   #   s<    



















r   r3   r,   rA   rC   c                   @   s@   e Zd Zdd Zdd Zeddddd	 Zd
d Zdd ZdS )
TestSplinec                 C   sB   t ||}|jg |d}tj||d}||jd|jdksJ d S )NrB   r3   r   getattronesr6   spline_filterr5   rC   r9   rC   r3   r:   r;   outr&   r&   r)   test_spline01p   s   
zTestSpline.test_spline01c                 C   s>   t ||}|jdg|d}tj||d}t||dg d S )Nr   rB   rd   )rf   r5   r6   rh   r   ri   r&   r&   r)   test_spline02v   s   
zTestSpline.test_spline02Tzoutput=dtype is numpy-specificnp_onlyr   c                 C   sD   t ||}|jg |d}tj|||d}||jd|jdks J d S )NrB   outputr   re   ri   r&   r&   r)   test_spline03|   s   
zTestSpline.test_spline03c                 C   s>   t ||}|jdg|d}t||}t||g d d S )Nr#   rB   r   r   r   r   )rf   rg   r6   rh   r   r5   ri   r&   r&   r)   test_spline04   s   
zTestSpline.test_spline04c                 C   sZ   t ||}|jddg|d}tj||d}|g dg dg dg dg}t|| d S )Nr#   rB   rd   rr   )rf   rg   r6   rh   r5   r   )r9   rC   r3   r:   r;   rj   r[   r&   r&   r)   test_spline05   s   

zTestSpline.test_spline05N)	r]   r^   r_   rk   rl   r   rq   rs   rt   r&   r&   r&   r)   rc   l   s    

rc   r   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zej	d	d
dgdd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.S )/TestGeometricTransformc                 C   sD   | dg}dd }tj|||j|d}t||j dg|jd d S )Nr   c                 S      | S Nr&   r'   r&   r&   r)   mapping      zBTestGeometricTransform.test_geometric_transform01.<locals>.mappingrd   rB   r5   r6   r7   shaper   rC   r9   r3   r:   r;   rx   rj   r&   r&   r)   test_geometric_transform01   s   z1TestGeometricTransform.test_geometric_transform01c                 C   F   | dg}dd }tj|||j|d}t||jg d|jd d S )Nr#   c                 S   rv   rw   r&   r'   r&   r&   r)   rx      ry   zBTestGeometricTransform.test_geometric_transform02.<locals>.mappingrd   rr   rB   rg   r6   r7   r{   r   r5   rC   r|   r&   r&   r)   test_geometric_transform02      z1TestGeometricTransform.test_geometric_transform02c                 C   r~   )Nr#   c                 S   r=   Nr   r   r&   r'   r&   r&   r)   rx      r+   zBTestGeometricTransform.test_geometric_transform03.<locals>.mappingrd   r   r   r   r   rB   r   r|   r&   r&   r)   test_geometric_transform03   r   z1TestGeometricTransform.test_geometric_transform03c                 C   sH   | g d}dd }tj|||j|d}t||j g d|jd d S )Nr#   r   r-   r,   c                 S   r=   r   r&   r'   r&   r&   r)   rx      r+   zBTestGeometricTransform.test_geometric_transform04.<locals>.mappingrd   r   r#   r   r-   rB   rz   r|   r&   r&   r)   test_geometric_transform04   s   z1TestGeometricTransform.test_geometric_transform04rC   rQ   
complex128c           	      C   s   t ||}|jg dg dg dg|d}|jg dg dg dg|d}t|j}||jdr<|d| 8 }|d| 8 }dd }tj|||j|d}t|| d S )	Nrr   rB   r   complex floating              ?c                 S      | d | d d fS r   r&   r'   r&   r&   r)   rx         zBTestGeometricTransform.test_geometric_transform05.<locals>.mappingrd   )	rf   r5   r	   isdtyperC   r6   r7   r{   r   )	r9   r3   rC   r:   r;   r[   r   rx   rj   r&   r&   r)   test_geometric_transform05   s,   



z1TestGeometricTransform.test_geometric_transform05c                 C   h   | g dg dg dg}dd }tj|||j|d}|j g dg dg d	g|jd
}t|| d S )Nr   r/   rA         r-   r   r-   rA   c                 S   r   r   r&   r'   r&   r&   r)   rx      r   zBTestGeometricTransform.test_geometric_transform06.<locals>.mappingrd   r   r   r/   rA   r   r   r-   r   r-   rB   r5   r6   r7   r{   rC   r   r9   r3   r:   r;   rx   rj   r[   r&   r&   r)   test_geometric_transform06      

z1TestGeometricTransform.test_geometric_transform06c                 C   sh   | g dg dg dg}dd }tj|||j|d}|j g dg dg dg|jd}t|| d S )	Nr   r   r   c                 S   s   | d d | d fS r   r&   r'   r&   r&   r)   rx      r   zBTestGeometricTransform.test_geometric_transform07.<locals>.mappingrd   r   r   r   r   rB   r   r   r&   r&   r)   test_geometric_transform07   r   z1TestGeometricTransform.test_geometric_transform07c                 C   r   )Nr   r   r   c                 S      | d d | d d fS r   r&   r'   r&   r&   r)   rx         zBTestGeometricTransform.test_geometric_transform08.<locals>.mappingrd   r   r   r   rB   r   r   r&   r&   r)   test_geometric_transform08   r   z1TestGeometricTransform.test_geometric_transform08c                 C   s   | g dg dg dg}dd }|dkrtj||d}n|}tj|||j|dd	}|j g d
g dg dg|jd}t|| d S )Nr   r   r   c                 S   r   r   r&   r'   r&   r&   r)   rx     r   zBTestGeometricTransform.test_geometric_transform10.<locals>.mappingr   rd   Fr3   	prefilterr   r   r   rB   )r5   r6   rh   r7   r{   rC   r   )r9   r3   r:   r;   rx   filteredrj   r[   r&   r&   r)   test_geometric_transform10  s$   

z1TestGeometricTransform.test_geometric_transform10c                 C   sL   |j dg|jd}dd }tj||dg|d}t||jg d|jd d S )Nr,   rB   c                 S   s   | d d fS Nr   r,   r&   r'   r&   r&   r)   rx     r+   zBTestGeometricTransform.test_geometric_transform13.<locals>.mappingr#   rd   rr   )rg   rQ   r6   r7   r   r5   rC   r|   r&   r&   r)   test_geometric_transform13  s   z1TestGeometricTransform.test_geometric_transform13c                 C   sH   | g d}dd }tj||dg|d}t||j g d|jd d S )Nr   r   r,   rA   r-   r/   r#   r#   c                 S   s   d| d  fS )Nr,   r   r&   r'   r&   r&   r)   rx   "  r+   zBTestGeometricTransform.test_geometric_transform14.<locals>.mappingr#   rd   r>   rB   )r5   r6   r7   r   rC   r|   r&   r&   r)   test_geometric_transform14  s   z1TestGeometricTransform.test_geometric_transform14c                 C   s@   g d}dd }t j||dg|d}t|d d d g d d S )Nr>   c                 S   s   | d d fS r   r&   r'   r&   r&   r)   rx   +  r+   zBTestGeometricTransform.test_geometric_transform15.<locals>.mappingr   rd   r,   r6   r7   r   r|   r&   r&   r)   test_geometric_transform15(  s   z1TestGeometricTransform.test_geometric_transform15c                 C   sP   g dg dg dg}dd }t j||d|d}t|dd	gd
dgddgg d S )Nr>   r   rA   r/   r   g      "@
         c                 S   s   | d | d d fS Nr   r   r,   r&   r'   r&   r&   r)   rx   6  r   zBTestGeometricTransform.test_geometric_transform16.<locals>.mappingr-   r,   rd   r   r-   r   r/   	   r   r   r|   r&   r&   r)   test_geometric_transform161  s   
 z1TestGeometricTransform.test_geometric_transform16c                 C   sD   g dg dg dg}dd }t j||d|d}t|g dg d S )Nr>   r   r   r   r   r   c                 S   s   | d d | d fS Nr   r,   r   r&   r'   r&   r&   r)   rx   B  r   zBTestGeometricTransform.test_geometric_transform17.<locals>.mappingr   r#   rd   r   r|   r&   r&   r)   test_geometric_transform17=     
z1TestGeometricTransform.test_geometric_transform17c                 C   sD   g dg dg dg}dd }t j||d|d}t|dd	gg d S )
Nr>   r   r   c                 S      | d d | d d fS r   r&   r'   r&   r&   r)   rx   N  r   zBTestGeometricTransform.test_geometric_transform18.<locals>.mappingr   r,   rd   r   r-   r   r|   r&   r&   r)   test_geometric_transform18I  r   z1TestGeometricTransform.test_geometric_transform18c                 C   sL   g dg dg dg}dd }t j||d|d}t|dd d d	f | d S )
Nr>   r   r   c                 S   s   | d | d d fS r   r&   r'   r&   r&   r)   rx   Z  r   zBTestGeometricTransform.test_geometric_transform19.<locals>.mappingr-   r   rd   .r,   r   r|   r&   r&   r)   test_geometric_transform19U     
z1TestGeometricTransform.test_geometric_transform19c                 C   sL   g dg dg dg}dd }t j||d|d}t|d d dd	f | d S )
Nr>   r   r   c                 S   s   | d d | d fS r   r&   r'   r&   r&   r)   rx   f  r   zBTestGeometricTransform.test_geometric_transform20.<locals>.mappingrA   r#   rd   r,   .r   r|   r&   r&   r)   test_geometric_transform20a  r   z1TestGeometricTransform.test_geometric_transform20c                 C   sR   g dg dg dg}dd }t j||d|d}t|d d dd d df | d S )	Nr>   r   r   c                 S      | d d | d d fS r   r&   r'   r&   r&   r)   rx   r  r   zBTestGeometricTransform.test_geometric_transform21.<locals>.mappingrA   r   rd   r,   r   r|   r&   r&   r)   test_geometric_transform21m  s   
"z1TestGeometricTransform.test_geometric_transform21c                 C   sd   |j g dg dg dg|jd}dd }dd }tj||d	|d
}tj||d|d
}t|| d S )Nr>   r   r   rB   c                 S   r   r   r&   r'   r&   r&   r)   mapping1~  r   zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping1c                 S   r   r   r&   r'   r&   r&   r)   mapping2  r   zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping2r   rd   r-   r#   )r5   rQ   r6   r7   r   )r9   r3   r:   r;   r   r   rj   r&   r&   r)   test_geometric_transform22y  s   
z1TestGeometricTransform.test_geometric_transform22c                 C   sN   g dg dg dg}dd }t j||d|d}|tj}t|dd	g d S )
Nr>   r   r   c                 S   s   d| d d fS )Nr   r   r,   r&   r'   r&   r&   r)   rx        zBTestGeometricTransform.test_geometric_transform23.<locals>.mappingr,   rd   r   r/   )r6   r7   astyperO   Zint32r   r|   r&   r&   r)   test_geometric_transform23  s   z1TestGeometricTransform.test_geometric_transform23c                 C   sJ   g dg dg dg}dd }t j||d|ddd	id
}t|ddg d S )Nr>   r   r   c                 S   s   || d | fS )Nr   r&   )r(   abr&   r&   r)   rx     r   zBTestGeometricTransform.test_geometric_transform24.<locals>.mappingr   )r   r   r,   )r3   Zextra_argumentsZextra_keywordsr   r/   r   r|   r&   r&   r)   test_geometric_transform24  s   
z1TestGeometricTransform.test_geometric_transform24N)r]   r^   r_   r}   r   r   r   rM   r`   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r&   r)   ru      s.    




			ru   c                   @   sh   e Zd Zdd Zejdg dejdeddd Ze	d	d
ddd Z
e	d	dddd ZdS )TestGeometricTransformExtrac                 C   sV   |j g dg dg|jd}dd }| g dg dg}ttj||dd	d
| d S )Nr   r,   r-   r#   r   rA   rB   c                 S   s   | d d | d d fS )Nr   r%   r   r&   r'   r&   r&   r)   rx     r   zZTestGeometricTransformExtra.test_geometric_transform_grid_constant_order1.<locals>.mappingg      ?g      ?      ?r   g      @r.   r   r   r1   r3   )r5   rQ   r   r6   r7   )r9   r:   r(   rx   expected_resultr&   r&   r)   -test_geometric_transform_grid_constant_order1  s   


zITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1r1   r   r   r   r   r   r3   rA   c                 C   s   dd }t jdtddd}d}t|}t j|||d}||}||}tt	|| g|j
 }	tj||||d|	 }
ttj||||d|
d	d
 d S )Nc                 S   s   | d d | d d fS )Nr   皙?r   gffffff@r&   r'   r&   r&   r)   rx     r   zOTestGeometricTransformExtra.test_geometric_transform_vs_padded.<locals>.mapping   rB   r      rH   r   rI   rK   )rO   rP   floatreshaperT   rU   rV   r5   tupleslicendimr6   r7   r   )r9   r3   r1   r:   rx   r(   rX   rY   x_paddedcenter_slicer   r&   r&   r)   "test_geometric_transform_vs_padded  s(   




z>TestGeometricTransformExtra.test_geometric_transform_vs_paddedTzendianness is numpy-specificrm   c                 C   sz   t dg}dd }|j|j t |t ||j fD ]}tj|||j|d}|d u r2|n|}t	|dg q d S )Nr   c                 S   rv   rw   r&   r'   r&   r&   r)   rx     ry   zfTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter.<locals>.mappingro   )
rO   r5   rC   newbyteorder
empty_liker   r6   r7   r{   r   )r9   r:   r;   rx   rj   returnedresultr&   r&   r)   9test_geometric_transform_endianness_with_output_parameter  s   zUTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter!string `output` is numpy-specificc                 C   sH   | dg}dd }tj||dd}|jtdu sJ t|dg d S )Nr   c                 S   rv   rw   r&   r'   r&   r&   r)   rx     ry   zXTestGeometricTransformExtra.test_geometric_transform_with_string_output.<locals>.mappingfro   )r5   r6   r7   rC   rO   r   )r9   r:   r;   rx   rj   r&   r&   r)   +test_geometric_transform_with_string_output  s
   zGTestGeometricTransformExtra.test_geometric_transform_with_string_outputN)r]   r^   r_   r   rM   r`   ra   rb   r   r   r   r   r&   r&   r&   r)   r     s    


r   c                   @   s   e Zd Zejdeddejdejej	gdd Z
ejdedddd Zed	d
ddd Zedddd Zeddddd Zejjdejv pWedjdk dddd ZdS )TestMapCoordinatesr3   r   rA   rC   c           	      C   s   t |r|dkrtd |g dg dg dg}|g dg dg dg}t|j}||jd	r@|d
|  }|d
|  }t|j	}|d8 }||}t
j|||d}t|| d S )Nr   'jax map_coordinates requires order <= 1r   r   r   r   r   r   r   r   rd   )r   rM   rN   r5   r	   r   rC   rO   indicesr{   r6   rS   r   )	r9   r3   rC   r:   r;   r[   r   idxrj   r&   r&   r)   test_map_coordinates01  s&   




z)TestMapCoordinates.test_map_coordinates01c                 C   s   t |r|dkrtd |dkrtd |g dg dg dg}t|jtj}|d8 }||}tj	|d|d}tj
|||d}t|| d S )	Nr   r   zoutput differs. jax bug?r   r   r   r%   rd   )r   rM   rN   r5   rO   r   r{   rQ   r6   r*   rS   r   )r9   r3   r:   r;   r   out1out2r&   r&   r)   test_map_coordinates02  s   



z)TestMapCoordinates.test_map_coordinates02r   z`order` is required in jaxr   c              	   C   s  t g dg dg dgd|d}t|jd }||}t||}|g dg dg d	g}t|| t|t|d
 t|d d ddf jd }||}t|d d ddf |}t||g dg dg t|t|d d ddf d
 t|d d d d df jd }||}t|d d d d df |}t||ddgddgddgg t|t|d d d d df d
 d S )Nr   r   r   F)r3   r:   r   r   r   r   r   r   r,   .r   r#   r/   )	r   rO   r   r{   r5   r6   rS   r   r*   )r9   r:   r;   r   rj   r[   r&   r&   r)   test_map_coordinates03  s6   



 "
"(z)TestMapCoordinates.test_map_coordinates03T)rn   c                 C   s   t ddgddgg}t ddgddgg}t |j}|d8 }|j|j t |t ||j fD ]}tj	|||d}|d u rF|n|}t
|| q6d S )Nr   r,   r/   rA   r   ro   )rO   r5   r   r{   rC   r   r   r   r6   rS   r   )r9   r:   r;   r[   r   rj   r   r   r&   r&   r)   5test_map_coordinates_endianness_with_output_parameter:  s   zHTestMapCoordinates.test_map_coordinates_endianness_with_output_parameterr   rm   c                 C   s`   | dgg}t|j}| |}tj||dd}|jtdu s$J t|| dgg d S Nr   r   ro   )r5   rO   r   r{   r6   rS   rC   r   )r9   r:   r;   r   rj   r&   r&   r)   'test_map_coordinates_with_string_outputN  s   
z:TestMapCoordinates.test_map_coordinates_with_string_outputwin32r   z2do not run on 32 bit or windows (no sparse memory)c              
   C   s   z7d}t j|d t jd||}d||d d |d d f< tj||||d g|d ggdd W d S  tyI } zt	d	|d }~ww )
Ni0u  r,   rB   r   r-   r    r   rd   zNot enough memory available)
rO   emptyZfloat32r   r6   rS   r5   MemoryErrorrM   skip)r9   r:   nr   er&   r&   r)   test_map_coordinates_large_dataW  s   "z2TestMapCoordinates.test_map_coordinates_large_dataN)r]   r^   r_   rM   r`   ra   rb   rO   rQ   r   r   r   r   r   r   r   ZskipifsysplatformZintpitemsizer   r&   r&   r&   r)   r     s     





r   c                   @   s  e Zd Zejdedddd Zejdedddd Zejdedddd	 Z	ejdeddd
d Z
ejdeddejdddgdd Zejdedddd Zejdedddd Zejdedddd Zejdedddd Zejdedddd Zejdedddd Zejdedddd Zejdedddd  Zejdeddd!d" Zejdeddd#d$ Zejdeddd%d& Zejdeddd'd( Zejdeddd)d* Zejdeddd+d, Zejdeddd-d. Zejdeddd/d0 Zejdeddd1d2 Zejdeddd3d4 Zejdeddd5d6 Zejdeddd7d8 Zejdeddd9d: Z d;d< Z!e"d=d>d?d@dA Z#e"d=d>d?dBdC Z$e"d=dDd?dEdF Z%e"d=dGd?dHdI Z&ejdJg dKejdedddLdM Z'ejdedddNdO Z(dPS )QTestAffineTransformr3   r   rA   c                 C   s<   | dg}tj|| dgg|d}t|| dg d S )Nr   rd   r5   r6   affine_transformr   r9   r3   r:   r;   rj   r&   r&   r)   test_affine_transform01k  s   z+TestAffineTransform.test_affine_transform01c                 C   s>   | dg}tj||dgg|d}t||g d d S )Nr#   r   rd   rr   rg   r6   r  r5   r   r  r&   r&   r)   test_affine_transform02q  s   z+TestAffineTransform.test_affine_transform02c                 C   s@   | dg}tj||dggd|d}t||g d d S )Nr#   r   r$   rd   r   r  r  r&   r&   r)   test_affine_transform03w  s   z+TestAffineTransform.test_affine_transform03c                 C   sB   | g d}tj|| dggd|d}t|| g d d S )Nr   r   r$   rd   r   r  r  r&   r&   r)   test_affine_transform04}  s   z+TestAffineTransform.test_affine_transform04rC   rQ   r   c                 C   s   t ||}|jg dg dg dg|d}|jg dg dg dg|d}t|j}||jdr<|d| 8 }|d| 8 }tj||ddgddggddg|d	}t|| d S )
Nrr   rB   r   r   r   r   r   r$   rd   )rf   r5   r	   r   rC   r6   r  r   r9   r3   rC   r:   r;   r[   r   rj   r&   r&   r)   test_affine_transform05  s*   



z+TestAffineTransform.test_affine_transform05c                 C   sj   | g dg dg dg}tj|| ddgddggddg|d}t|| g dg d	g d
g d S )Nr   r   r   r   r   r$   rd   r   r   r   r  r  r&   r&   r)   test_affine_transform06     
z+TestAffineTransform.test_affine_transform06c                 C   sj   | g dg dg dg}tj|| ddgddggddg|d}t|| g dg dg dg d S )	Nr   r   r   r   r   r$   rd   r   r  r  r&   r&   r)   test_affine_transform07  r  z+TestAffineTransform.test_affine_transform07c                 C   sj   | g dg dg dg}tj|| ddgddggddg|d}t|| g dg d	g d
g d S )Nr   r   r   r   r   r$   rd   r   r   r   r  r  r&   r&   r)   test_affine_transform08  r  z+TestAffineTransform.test_affine_transform08c                 C   s   | g dg dg dg}|dkrtj||d}n|}tj|| ddgddggddg|dd	}t|| g d
g dg dg d S )Nr   r   r   r   rd   r   r$   Fr   r   r   r   )r5   r6   rh   r  r   r9   r3   r:   r;   r   rj   r&   r&   r)   test_affine_transform09  s   
z+TestAffineTransform.test_affine_transform09c                 C   sF   |j dg|jd}tj||dggd|d}t||g d d S )Nr,   rB   r%   r?   )r2   r3   r   r   r   r   )rg   rQ   r6   r  r5   r   r  r&   r&   r)   test_affine_transform10  s
   z+TestAffineTransform.test_affine_transform10c                 C   sD   | g d}tj|| dggdd|d}t|| g d d S )Nr   r,   r   r?   rd   r>   r  r  r&   r&   r)   test_affine_transform11  s   z+TestAffineTransform.test_affine_transform11c                 C   sN   | g d}tj|| dggdd|d}t|d d d | g d d S )Nr>   r%   r   r   rd   r,   r  r  r&   r&   r)   test_affine_transform12  s   "z+TestAffineTransform.test_affine_transform12c                 C   sl   g dg dg dg}| |}tj|| ddgddggdd|d}t|| dd	gd
dgddgg d S )Nr>   r   r   r   r   r,   r   rd   r-   r   r/   r   r   r  r  r&   r&   r)   test_affine_transform13  s   
&z+TestAffineTransform.test_affine_transform13c                 C   s`   g dg dg dg}| |}tj|| ddgddggdd|d}t|| g dg d S )	Nr>   r   r   r,   r   r   r   rd   r  r  r&   r&   r)   test_affine_transform14     
z+TestAffineTransform.test_affine_transform14c                 C   s`   g dg dg dg}| |}tj|| ddgddggdd|d}t|| dd	gg d S )
Nr>   r   r   r,   r   r   rd   r   r-   r  r  r&   r&   r)   test_affine_transform15  r  z+TestAffineTransform.test_affine_transform15c                 C   sb   g dg dg dg}| |}tj|| ddgddggdd|d	}t|d
d d df | d S )Nr>   r   r   r           r   r%   r   rd   .r,   r  r  r&   r&   r)   test_affine_transform16     
z+TestAffineTransform.test_affine_transform16c                 C   sb   g dg dg dg}| |}tj|| ddgddggdd|d}t|d d d	d
f | d S )Nr>   r   r   r%   r   r   r   rd   r,   .r  r  r&   r&   r)   test_affine_transform17  r  z+TestAffineTransform.test_affine_transform17c                 C   sd   | g dg dg dg}tj|| ddgddggdd|d}t|d d dd d df | d S )	Nr>   r   r   r%   r   r   rd   r,   r  r  r&   r&   r)   test_affine_transform18  s   
"z+TestAffineTransform.test_affine_transform18c                 C   s|   |j g dg dg dg|jd}tj|| ddgddggdd|d}tj|| d	dgdd	ggdd
|d}t|| d S )Nr>   r   r   rB   r%   r   r   rd          @r   )r5   rQ   r6   r  r   r  r&   r&   r)   test_affine_transform19  s   
z+TestAffineTransform.test_affine_transform19c                 C   sl   t |r	td g dg dg dg}||}tj||dgdggdd|d}t||d	d
g d S )N(https://github.com/cupy/cupy/issues/8394r>   r   r   r   r,   r   rd   r   r-   r   rM   rN   r5   r6   r  r   r  r&   r&   r)   test_affine_transform20     

z+TestAffineTransform.test_affine_transform20c                 C   sl   t |r	td g dg dg dg}||}tj||dgdggdd|d}t||d	d
g d S )Nr$  r>   r   r   r,   r   r   rd   r   r   r%  r  r&   r&   r)   test_affine_transform21,  r'  z+TestAffineTransform.test_affine_transform21c                 C   sF   | g d}tj|| dggdgd|d}t|| g d d S )Nr   r,   r$   )r-   rd   r   r   r,   r  r  r&   r&   r)   test_affine_transform229  s
   z+TestAffineTransform.test_affine_transform22c                 C   sP   | g d}tj|| dggdgd|d}t|d d d | g d d S )Nr   r%   r$   r  rd   r,   r   r  r  r&   r&   r)   test_affine_transform23A  s
   "z+TestAffineTransform.test_affine_transform23c                 C      | g d}t }|td tj|| dgd|d}W d    n1 s(w   Y  tj|| dggd|d}t|| d S )Nr   @The behavior of affine_transform with a 1-D array .* has changedr,   r$   rd   r5   r   filterUserWarningr6   r  r   r9   r3   r:   r;   supr   r   r&   r&   r)   test_affine_transform24I     z+TestAffineTransform.test_affine_transform24c                 C   r,  )Nr   r-  r%   r$   rd   r.  r1  r&   r&   r)   test_affine_transform25U  r4  z+TestAffineTransform.test_affine_transform25c              	   C   s
  | g dg dg dg}|dkrtj||d}n|}|d}|d }t||j}|||fdd}||| g d	gfd
d}	dd ||dD }
tj|||
|dd}tj|||dd}tj||	|dd}|||fD ]}t	|| g dg dg dg qod S )Nr   r   r   r   rd   r,   r,   r   Zaxis)r  r   r   r   c                 S   s   g | ]}t |qS r&   )r   ).0r(   r&   r&   r)   
<listcomp>r  s    z?TestAffineTransform.test_affine_transform26.<locals>.<listcomp>)r$   Fr   r   r   r   )
r5   r6   rh   eyerg   r	   concatr   r  r   )r9   r3   r:   r;   r   Ztform_originalZoffset_originalr;  tform_h1tform_h2Zoffsr   r   Zout3rj   r&   r&   r)   test_affine_transform26a  s:   




z+TestAffineTransform.test_affine_transform26c                 C   s   t |r	td |g dg dg dg}t|j}||d|d fdd}|||g d	gfd
d}tt	t
j|| d S )NzCuPy does not raiser   r   r   r,   r6  r   r7  )      @r,   r   r   )r   rM   rN   r5   r	   r;  r:  rg   assert_raises
ValueErrorr6   r  )r9   r:   r;   r;  r<  r=  r&   r&   r)   test_affine_transform27  s   


z+TestAffineTransform.test_affine_transform27Tzbyteorder is numpy-specificrm   c              	   C   s   | d}|||||j |j|j fD ]@}t }|td |ddg}t	j
|||d}W d    n1 s@w   Y  |d u rK|n|}t||ddgddgg qd S )N)r,   r,   r-  r   ro   )rg   r   r   rC   r   r   r/  r0  r5   r6   r  r   )r9   r:   r;   rj   r2  matrixr   r   r&   r&   r)   9test_affine_transform_1d_endianness_with_output_parameter  s   
zMTestAffineTransform.test_affine_transform_1d_endianness_with_output_parameterc                 C   s~   t dg}|j|j t |t ||j fD ] }tj|t dgg|d}|d u r1|n|}t|t dg qd S )Nr   ro   )	rO   r5   rC   r   r   r   r6   r  r   )r9   r:   r;   rj   r   r   r&   r&   r)   >test_affine_transform_multi_d_endianness_with_output_parameter  s   zRTestAffineTransform.test_affine_transform_multi_d_endianness_with_output_parameterz+`out` of a different size is numpy-specificc                 C   s   |j d|jd}|d}tj||dgg|d t|d d | tt	 tj|dgg|dd W d    d S 1 s?w   Y  d S )Nr   rB   )   r   ro   )r   )rp   r2   )
rP   rQ   rg   r6   r  r5   r   rM   r
   RuntimeErrorr9   r:   r;   rj   r&   r&   r)   "test_affine_transform_output_shape  s   
"z6TestAffineTransform.test_affine_transform_output_shaper   c                 C   sP   | dg}tj|| dggdd}|jtdu sJ t|| dg d S r   )r5   r6   r  rC   rO   r   rH  r&   r&   r)   (test_affine_transform_with_string_output  s   z<TestAffineTransform.test_affine_transform_with_string_outputr*   )r   r   r   r   )r$   r   )r-   )r,   r/   c                 C   s   t ddgddgg}t d}t d|d dd df< t ||d d df< t j||dd}||}||}||}ttj||d|d	| d S )
Nr   r   r,   r-   r,   r-   rL  r7  r   r   )rO   r5   zerosr:  rollr   r6   r  )r9   r*   r3   r:   r(   affiner[   r&   r&   r)   )test_affine_transform_shift_via_grid_wrap  s   




z=TestAffineTransform.test_affine_transform_shift_via_grid_wrapc                 C   s   t g dg dg}|d d dd d df  }||}||}t ddg}t d|d dd df< t |j|d d df< ||}ttj||d|d| d S )Nr)  r-   r#   r   r$   r,   r-   r   r   )	rO   r5   copyrO  r:  r{   r   r6   r  )r9   r3   r:   r(   r[   rQ  r&   r&   r)   #test_affine_transform_shift_reflect  s   



z7TestAffineTransform.test_affine_transform_shift_reflectN))r]   r^   r_   rM   r`   ra   rb   r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r#  r&  r(  r*  r+  r3  r5  r>  rB  r   rD  rE  rI  rJ  rR  rU  r&   r&   r&   r)   r  i  s    














	
	
	
	
	
















r  c                   @   s4  e Zd Zejdedddd Zejdedddd Zejdedddd	 Z	ejdeddd
d Z
ejdeddejdddgdd Zejdeddejdddgejdddgdd Zejdedddd Zejdedddd Zejdedddd Zejdedddd Zejdg dejdeddd d! Zejdg dejdeddd"d# Zd$d% Zejdeddd&d' Zejdeddejd(d)d*gd+d, Zejdg d-ejdedd.d/ Zd0S )1	TestShiftr3   r   rA   c                 C   s4   | dg}tj|dg|d}t|| dg d S )Nr   rd   r   r5   r6   r*   r   r  r&   r&   r)   test_shift01  s   zTestShift.test_shift01c                 C   s6   | dg}tj|dg|d}t||g d d S )Nr#   r   rd   r   rg   r6   r*   r   r5   r  r&   r&   r)   test_shift02  s   zTestShift.test_shift02c                 C   s4   | dg}tj|d|d}t||g d d S )Nr#   r$   rd   r  rY  r  r&   r&   r)   test_shift03  s   zTestShift.test_shift03c                 C   s6   | g d}tj|d|d}t|| g d d S )Nr   r   rd   r   rW  r  r&   r&   r)   test_shift04  s   zTestShift.test_shift04rC   rQ   r   c                 C   s   t ||}|jg dg dg dg|d}|jg dg dg dg|d}t|j}||jdr<|d| 8 }|d| 8 }tj|ddg|d}t|| d S )	Nrr   rB   r   r   r   r   r   rd   )rf   r5   r	   r   rC   r6   r*   r   r  r&   r&   r)   test_shift05  s&   



zTestShift.test_shift05r1   r   r   c           
      C   s   t jg dg dg dg|d}t jg dg dg dg|d}t|j}||jdr7|d| 8 }|d| 8 }d}||d d df< ||}||}tj|ddg|||d	}	t|	| d S )
Nrr   rB   r   r   r   r?  r   r   )r3   r1   r0   )rO   r5   r	   r   rC   r6   r*   r   )
r9   r3   r1   rC   r:   r;   r[   r   r0   rj   r&   r&   r)   test_shift_with_nonzero_cval  s,   




z&TestShift.test_shift_with_nonzero_cvalc                 C   sV   | g dg dg dg}tj|ddg|d}t|| g dg dg d	g d S )
Nr   r   r   r   r   rd   r   r   r   rW  r  r&   r&   r)   test_shift060     
zTestShift.test_shift06c                 C   sV   | g dg dg dg}tj|ddg|d}t|| g dg dg dg d S )Nr   r   r   r   r   rd   r   rW  r  r&   r&   r)   test_shift07:  r`  zTestShift.test_shift07c                 C   sV   | g dg dg dg}tj|ddg|d}t|| g dg dg dg d S )	Nr   r   r   r   rd   r   r   r   rW  r  r&   r&   r)   test_shift08D  r`  zTestShift.test_shift08c                 C   st   | g dg dg dg}|dkrtj||d}n|}tj|ddg|dd}t|| g dg d	g d
g d S )Nr   r   r   r   rd   Fr   r   r   r   )r5   r6   rh   r*   r   r  r&   r&   r)   test_shift09N  s   
zTestShift.test_shift09r*   rK  c                 C   sV   t ddgddgg}t j||dd}||}||}ttj||d|d| d S )	Nr   r   r,   r-   rL  r7  r   r   )rO   r5   rP  r   r6   r*   )r9   r*   r3   r:   r(   r[   r&   r&   r)   test_shift_grid_wrap\  s   


zTestShift.test_shift_grid_wrapc                 C   s<   | |dd}ttj||d|dtj||d|d d S )N   )r   r#   r   r   r   )r   rP   r   r6   r*   )r9   r*   r3   r:   r(   r&   r&   r)   test_shift_grid_constant1m  s
   z#TestShift.test_shift_grid_constant1c                 C   sN   |j g dg dg|jd}| g dg dg}ttj|dddd	| d S )
Nr   r   rB   r   r   )r%   r%   r   r   r   )r5   rQ   r   r6   r*   )r9   r:   r(   r   r&   r&   r)   test_shift_grid_constant_order1x  s   

z)TestShift.test_shift_grid_constant_order1c                 C   sd   t g dg dg}|d d dd d df  }||}||}ttj||jd|d| d S )Nr)  rS  r$   r   r   )rO   r5   rT  r   r6   r*   r{   )r9   r3   r:   r(   r[   r&   r&   r)   test_shift_reflect  s   


zTestShift.test_shift_reflectr   FTc                 C   sr   | d}td||d}ttj||d d fi |d |d  ttj|| d d fi |d |d  d S )NrF  r   )r1   r3   r   r,   r   r   r$   )rP   dictr   r6   r*   )r9   r3   r   r:   r(   kwargsr&   r&   r)   test_shift_nearest_boundary  s   
$&z%TestShift.test_shift_nearest_boundaryr   c                 C   s   t jdtddd}d}d}t|}|t j|||d}||}	tt	|| g|	j
 }
tj||||d|
 }ttj|	|||d|dd	 d S )
Nr   rB   r   )r   gffffffrG   rH   r   rI   r   )rO   rP   r   r   rT   rU   r5   rV   r   r   r   r6   r*   r   )r9   r3   r1   r:   x_npr*   rX   rY   r   r(   r   r   r&   r&   r)   test_shift_vs_padded  s"   


zTestShift.test_shift_vs_paddedN)r]   r^   r_   rM   r`   ra   rb   rX  rZ  r[  r\  r]  r^  r_  ra  rb  rc  rd  rf  rg  rh  rk  rm  r&   r&   r&   r)   rV    sV    




	
	
	


rV  c                   @   s&  e Zd Zejdedddd Zdd Zdd	 Z	ejdeddejd
ddgdd Z
dd Zdd Zdd Zejdg dejdg ddd Zejdddgejdg dejdg ddd  Zejdd!d"gejjd#d$ Zed%d&d'd(d) Zd*d+ Zd,S )-TestZoomr3   r   rA   c                 C   s   dddgfD ]d}| |jd|jdd}tj|||d}|jdks#J ||dd d f dks2J ||dd d f d	t ksCJ ||dd d f d
t ksTJ ||dt ks_J ||dt ksjJ qd S )Nr,      rB   )r   r   rd   )r   r   r$   r   re  r   r   )r   rP   rQ   r6   zoomr{   alleps)r9   r3   r:   zarrr&   r&   r)   
test_zoom1  s   ""zTestZoom.test_zoom1c                 C   s4   | |dd}tt|dd}t|| d S )Nr   r   r,   r%   )r   rP   r6   rp  r   )r9   r:   rt  rj   r&   r&   r)   
test_zoom2  s   zTestZoom.test_zoom2c                 C   s^   | ddgg}t|d}t|d}t|| ddgddgg t|| g dg d S )Nr   r,   r6  r   )r   r   r,   r,   )r5   r6   rp  r   )r9   r:   rt  r   r   r&   r&   r)   
test_zoom3  s
   zTestZoom.test_zoom3rC   rQ   r   c                 C   s   t ||}|jg dg dg dg|d}t|j}||jdr&|d| 8 }t }|td tj	||ddgd	d
|d}W d    n1 sIw   Y  t
|d d dd d df | d S )Nr>   r   r   rB   r   r   r-  r%   r   r   rd   r,   )rf   r5   r	   r   rC   r   r/  r0  r6   r  r   )r9   r3   rC   r:   r;   r   r2  rj   r&   r&   r)   test_zoom_affine01  s&   


"zTestZoom.test_zoom_affine01c                 C   s&   d}t j|||fd| dd d S )Nr         ?r   rH   )r6   rp  rO  )r9   r:   dimr&   r&   r)   test_zoom_infinity  s   "zTestZoom.test_zoom_infinityc                 C   s6   | d}d}tj||dd}| d}t|| d S )N)r   r   r   )ry  r"  r"  r/   )r0   )r   r   r   )rO  r6   rp  r   )r9   r:   rt  rp  rj   refr&   r&   r)   test_zoom_zoomfactor_one  s
   

z!TestZoom.test_zoom_zoomfactor_onec                 C   s,   | d}d}t||}|jdksJ d S )N)r-   r   ro  )gUUUUUU?gE]t?g(\?)r#   rD      )rO  r6   rp  r{   )r9   r:   rt  rp  rj   r&   r&   r)   test_zoom_output_shape_roundoff  s   
z(TestZoom.test_zoom_output_shape_roundoffrp  )r   )r-   r   )r   r,   )r   r   r1   )r   r   r   r   r   r   r   r   c                 C   s^   t jddgddggt jd}t |t |}||}||}ttj||d|d| d S )Nr   r   r,   r-   rB   rF   )rO   r5   rQ   kronrg   r   r6   rp  )r9   rp  r1   r:   rl  r[   r(   r&   r&   r)   test_zoom_by_int_order0  s   
	

z TestZoom.test_zoom_by_int_order0r{   rN  )r#   r#   )r   r   r   r   r   c              
   C   sV   t jt |td|}||}ttj||d|dd|t 	|t 
| d S )NrB   r   T)r3   r1   	grid_mode)rO   rP   prodr   r   r5   r   r6   rp  r  rg   )r9   r{   rp  r1   r:   rl  r(   r&   r&   r)   test_zoom_grid_by_int_order0  s   
z%TestZoom.test_zoom_grid_by_int_order0r   r   c                 C   s`   | |jd|jdd}tjtdd tj|d|ddf W d    d S 1 s)w   Y  d S )	Nr   rB   )r-   r-   zIt is recommended to use mode)matchr,   T)r1   r  )r   rP   rQ   rM   Zwarnsr0  r6   rp  )r9   r1   r:   r(   r&   r&   r)   test_zoom_grid_mode_warnings  s   "z%TestZoom.test_zoom_grid_mode_warningsTz!inplace output= is numpy-specificrm   c                 C   s,   | |dd}tj|d|dd dS )zTicket #643r   r   r,   r   ro   N)r   rP   r6   rp  rO  )r9   r:   r(   r&   r&   r)   test_zoom_output_shape%  s   zTestZoom.test_zoom_output_shapec                 C   s:   | d}d}t|t|}t||}t|| d S )Ng      $@r,   )rP   r6   rp  rO   arrayr   )r9   r:   r   factoractualr[   r&   r&   r)   test_zoom_0d_array+  s
   
zTestZoom.test_zoom_0d_arrayN)r]   r^   r_   rM   r`   ra   rb   ru  rv  rw  rx  r{  r}  r  r  r  Zthread_unsafer  r   r  r  r&   r&   r&   r)   rn    s0    
	

rn  c                   @   s  e Zd Zejdedddd Zejdedddd Zejdeddejdd	d
gdd Z	ejdedddd Z
ejdedddd Zejdedddd Zejdedddd Zejdedddd Zdd Zdd Zdd ZdS )
TestRotater3   r   rA   c                 C   s@   |j g dg dg dg|jd}tj|d|d}t|| d S )Nr   r   r   r   r   rB   r   rd   r5   rQ   r6   rotater   r  r&   r&   r)   test_rotate016  s   
zTestRotate.test_rotate01c                 C   sh   |j g dg dg dg|jd}|j g dg dg dg dg|jd}tj|d|d}t|| d S )Nr   )r   r   r   r   rB   r   r   r   r   r   r   Z   rd   r  r9   r3   r:   r;   r[   rj   r&   r&   r)   test_rotate02>  s   

zTestRotate.test_rotate02rC   rQ   r   c                 C   s   t ||}|jg dg dg dg|d}|jg dg dg dg dg dg|d}t|j}||jdrB|d| 8 }|d| 8 }tj|d|d	}t|| d S )
Nr   r   r   r   r   r   r   r   r   r   rB   r  r  r   r   r  rd   )rf   r5   r	   r   rC   r6   r  r   r  r&   r&   r)   test_rotate03J  s*   



zTestRotate.test_rotate03c                 C   sd   |j g dg dg dg|jd}|j g dg dg dg|jd}tj|dd|d}t|| d S )Nr  r  rB   r   r   r   r   r   r  F)r   r3   r  r  r&   r&   r)   test_rotate04]  s   

zTestRotate.test_rotate04c                 C   s   t d}tdD ]}t jg dg dg dg dgt jd|d d d d |f< q	||}|jg dg dg dg|jd}tj|d|d	}tdD ]}t|d d d d |f | qKd S )
N)r#   r-   r-   r-   r  r  rB   r   r  r  rd   rO   r   rb   r5   rQ   r6   r  r   r9   r3   r:   r;   ir[   rj   r&   r&   r)   test_rotate05h  s(   



zTestRotate.test_rotate05c                 C   s   t d}tdD ]}t jg dg dg dgt jd|d d d d |f< q	||}|jg dg dg dg dg|jd}tj|d|d	}tdD ]}t|d d d d |f | qKd S )
N)r-   r#   r-   r-   r   r  rB   r  r  r  rd   r  r  r&   r&   r)   test_rotate06x  s(   



zTestRotate.test_rotate06c                 C   s   |j g dg dg dggd |jd}t|j}||d}|j g dg dg dg dg dggd |jd}||d}tj|dd	|d
}t|| d S )Nr  r  r,   rB   r,   r   r   r  r  r  rL  )axesr3   r5   rQ   r	   permute_dimsr6   r  r   r9   r3   r:   r;   r  r[   rj   r&   r&   r)   test_rotate07  s.   




zTestRotate.test_rotate07c                 C   s   |j g dg dg dggd |jd}t|j}||d}|j g dg dg dggd |jd}t|j}||d}tj|ddd	|d
}t|| d S )Nr  r  r,   rB   r  r  r  rL  F)r  r   r3   r  r  r&   r&   r)   test_rotate08  s,   





zTestRotate.test_rotate08c                 C   sj   |j g dg dg dgd |jd}tt tj|dd|jfd W d    d S 1 s.w   Y  d S )Nr  r  r,   rB   r  r   )r  )r5   rQ   r@  rA  r6   r  r   )r9   r:   r;   r&   r&   r)   test_rotate09  s   

"zTestRotate.test_rotate09c              	   C   s   | |jd|jdd}|jg dg dg dg dg dgg dg dg d	g d
g dgg dg dg dg dg dgg|jd}tj|ddd}t||ddd d S )N-   rB   )r-   r   r-   )r  r  r  )g|S2@g|S2@g>)!@)g9HD%@g9HD'@g9HD)@)gc~@gc~@gzLb @)g[ic6*@g[ic6,@g[ic6.@)g      5@g      6@g      7@)gRK<@gRK=@gRK>@)g,PA@g,PgB@g,PB@)gݠ'?@grn@@grnГ@@)gGA@gG9B@gGB@r   F)Zangler   gư>g>rJ   )r   rP   rQ   r5   r6   r  r   )r9   r:   r;   r[   rj   r&   r&   r)   test_rotate10  s0   
zTestRotate.test_rotate10c                 C   sF   t |r	td t|dd}tt|dd}t|| d S )Nz(https://github.com/cupy/cupy/issues/8400r   )r   r      iL)	r   rM   rN   rO   ZtilerP   r6   r  r   )r9   r:   r   r   r&   r&   r)   test_rotate_exact_180  s
   
z TestRotate.test_rotate_exact_180N)r]   r^   r_   rM   r`   ra   rb   r  r  r  r  r  r  r  r  r  r  r  r&   r&   r&   r)   r  4  s*    







r  )'r   numpyrO   Znumpy.testingr   Zscipy._lib._array_apir   r   r   r   r   r   r	   rM   r
   r@  Zscipy.ndimager6    r   Zscipy.conftestr   r`   r   ZusefixturesZ
pytestmarkrr  rT   r   ra   rb   rc   ru   r   r   r  rV  rn  r  r&   r&   r&   r)   <module>   sT    
I
&  
Mw    J~