
    e!h	                        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,                  j1                  d	       ed
ddg      gZdZdddddddZ G d d      Zej,                  j;                  d edd            ej,                  j;                  de       G d d                    Z edd      ej,                  j;                  d ed d             G d d                     Z  edd       G d! d"             Z! G d# d$      Z" G d% d&      Z# G d' d(      Z$ G d) d*      Z% G d+ d,      Z&y)-    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)cpu_only
exceptions-q=reflect	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                      e Zd Z edd      ej
                  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               Z edd      ej
                  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               Zej
                  j                  dg d      ej
                  j                  d e	d            d               Z
y) 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           
          d }|j                  g d      }t        t        j                  ||d|dd      |j                  |             y )Nc                     | d   dz   fS )Nr         ? xs    n/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/ndimage/tests/test_interpolation.pyshiftz-TestBoundaries.test_boundaries.<locals>.shift1       aD3J=     )r               @r(   )   r   )cvalmodeoutput_shapeorderasarrayr   ndimagegeometric_transformselfr8   expected_valuexpr0   datas         r/   test_boundarieszTestBoundaries.test_boundaries%   sG    	! zz-(''e"459DJJ~&	(r2   )r   r   r3   r4   )r4   r   r3   r4   )r'   r   r3   r4   )r3   r   r3   r4   )r(   r   r3   r4   c           	          d }|j                  g d      }t        t        j                  ||d|d      |j                  |             y )Nc                     | d   dz
  fS )Nr   g?r,   r-   s    r/   r0   z.TestBoundaries.test_boundaries2.<locals>.shiftF   r1   r2   r   r3   r4   r'   r(   r'   )r7   r8   r9   r;   r?   s         r/   test_boundaries2zTestBoundaries.test_boundaries2:   sD    	! zz,'''e"459;JJ~&	(r2   r8   )r   r   r   r   r   r   r:      c                    t        |      r|dvs|dkD  rt        j                  d       t        j                  ddt        j
                        }|j                  |      }|j                  t        j                  ddd	
            }t        |      j                  }t        j                  |||df   ||      }d}	t        j                  |      }
|j                  t        j                  ||	|
            }|j                  |	|z         |df   }t        j                  ||||      }|dk(  rdnd}t        ||d|       y)z$Tests based on examples from gh-2640)r   r   r   r   r   r   z-Jax does not support grid- modes or order > 1ir6   dtypei   i  )num.r:   r8       r8   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r<   linspacer
   newaxisr=   map_coordinatesndimage_to_numpy_modegetpadr   )r@   r8   r:   rB   np_datarC   r.   r]   ynpadpad_modepaddedcoordsexpectedrV   s                  r/   test_boundary_spline_accuracyz,TestBoundaries.test_boundary_spline_accuracyO   s    2JMM	LLHI))B4zz'"JJr{{2rt45!!$,,##D!GSL/TR (,,T2BFF7Dx@AD1H%gsl3**66TR.tE8$T:r2   N)__name__
__module____qualname__r   rW   markparametrizerD   rI   rangeri   r,   r2   r/   r    r    #   s8   f%MN[[
0	1
5	6
:	;
7	8
6	7
5	6
;	<	>	(	 O( f%MN[[
\	"
,	
|	$
L	!
\	"
m	$
=	)	+	(	 O( [[V &1 2 [[WeAh/; 02;r2   r    r:   r3   rJ   rM   c                   D    e Zd Zd Zd Z edd      d        Zd Zd Zy	)

TestSplinec                     t        ||      }|j                  g |      }t        j                  ||      }||j	                  d|j
                        k(  sJ y )NrL   r:   r   getattronesr=   spline_filterr<   rM   r@   rM   r:   rB   rC   outs         r/   test_spline01zTestSpline.test_spline01p   sQ    E"wwrw'##D6bjj#))j4444r2   c                     t        ||      }|j                  dg|      }t        j                  ||      }t	        ||j                  dg             y )Nr   rL   rs   )ru   r<   r=   rw   r   rx   s         r/   test_spline02zTestSpline.test_spline02v   sH    E"zz1#Uz+##D6!#rzz1#7r2   Tzoutput=dtype is numpy-specificnp_onlyr#   c                     t        ||      }|j                  g |      }t        j                  |||      }||j	                  d|j
                        k(  sJ y )NrL   outputr   rt   rx   s         r/   test_spline03zTestSpline.test_spline03|   sS    E"wwrw'##D%>bjj#))j4444r2   c                     t        ||      }|j                  dg|      }t        j                  ||      }t	        ||j                  g d             y )Nr'   rL   r   r   r   r   )ru   rv   r=   rw   r   r<   rx   s         r/   test_spline04zTestSpline.test_spline04   sG    E"wws%w(##D%0!#rzz,'?@r2   c                     t        ||      }|j                  ddg|      }t        j                  ||      }|j	                  g dg dg dg dg      }t        ||       y )Nr'   rL   rs   r   )ru   rv   r=   rw   r<   r   )r@   rM   r:   rB   rC   ry   rh   s          r/   test_spline05zTestSpline.test_spline05   s`    E"ww1vUw+##D6::|+++- . 	"#x0r2   N)	rj   rk   rl   rz   r|   r   r   r   r   r,   r2   r/   rq   rq   l   s4    58 d+KL5 M5A1r2   rq   r!   r"   c                       e Zd Zd Zd Zd Zd Zej                  j                  dddg      d        Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestGeometricTransformc                     |j                  dg      }d }t        j                  |||j                  |      }t	        ||j                  dg|j
                               y )Nr   c                     | S Nr,   r-   s    r/   mappingzBTestGeometricTransform.test_geometric_transform01.<locals>.mapping       Hr2   rs   rL   r<   r=   r>   shaper   rM   r@   r:   rB   rC   r   ry   s         r/   test_geometric_transform01z1TestGeometricTransform.test_geometric_transform01   sR    zz1#	 ))$057!#rzz1#SYYz'GHr2   c                     |j                  dg      }d }t        j                  |||j                  |      }t	        ||j                  g d|j                               y )Nr'   c                     | S r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform02.<locals>.mapping   r   r2   rs   r   rL   rv   r=   r>   r   r   r<   rM   r   s         r/   test_geometric_transform02z1TestGeometricTransform.test_geometric_transform02   sP    wws|	 ))$057!#rzz,ciiz'PQr2   c                     |j                  dg      }d }t        j                  |||j                  |      }t	        ||j                  g d|j                               y )Nr'   c                     | d   dz
  fS Nr   r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform03.<locals>.mapping       aD1H;r2   rs   r   r   r   r   rL   r   r   s         r/   test_geometric_transform03z1TestGeometricTransform.test_geometric_transform03   sP    wws|	 ))$057!#rzz,ciiz'PQr2   c                     |j                  g d      }d }t        j                  |||j                  |      }t	        ||j                  g d|j
                               y )Nr'   r   r4   r3   c                     | d   dz
  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform04.<locals>.mapping   r   r2   rs   r   r'   r   r4   rL   r   r   s         r/   test_geometric_transform04z1TestGeometricTransform.test_geometric_transform04   sO    zz,'	 ))$057!#rzz,ciiz'PQr2   rM   r[   
complex128c                 `   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg|      }t        |      j                  } ||j                  d      r|d|z  z  }|d|z  z  }d }t        j                  |||j                  |      }t        ||       y )Nr   rL   r   complex floating              ?c                     | d   | d   dz
  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform05.<locals>.mapping       aD!A$(##r2   rs   )	ru   r<   r
   isdtyperM   r=   r>   r   r   )	r@   r:   rM   rB   rC   rh   r   r   ry   s	            r/   test_geometric_transform05z1TestGeometricTransform.test_geometric_transform05   s    E"zz<'')05  7 ::|++-49  ; "$'//4::12BIDX%H	$ ))$057!#x0r2   c                     |j                  g dg dg dg      }d }t        j                  |||j                  |      }|j                  g dg dg dg|j                  	      }t        ||       y )
Nr   r6   rJ         r4   r   r4   rJ   c                     | d   | d   dz
  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform06.<locals>.mapping   r   r2   rs   r   r   r6   rJ   r   r   r4   r   r4   rL   r<   r=   r>   r   rM   r   r@   r:   rB   rC   r   ry   rh   s          r/   test_geometric_transform06z1TestGeometricTransform.test_geometric_transform06   t    zz<'') *	$ ))$057::|++-47II  ? 	"#x0r2   c                     |j                  g dg dg dg      }d }t        j                  |||j                  |      }|j                  g dg dg dg|j                        }t        ||       y )Nr   r   r   c                     | d   dz
  | d   fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform07.<locals>.mapping       aD1Had##r2   rs   r   r   r   r   rL   r   r   s          r/   test_geometric_transform07z1TestGeometricTransform.test_geometric_transform07   r   r2   c                     |j                  g dg dg dg      }d }t        j                  |||j                  |      }|j                  g dg dg dg|j                  	      }t        ||       y )
Nr   r   r   c                 "    | d   dz
  | d   dz
  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform08.<locals>.mapping       aD1HadQh''r2   rs   r   r   r   rL   r   r   s          r/   test_geometric_transform08z1TestGeometricTransform.test_geometric_transform08   st    zz<'') *	( ))$057::|++-47II  ? 	"#x0r2   c                 (   |j                  g dg dg dg      }d }|dkD  rt        j                  ||      }n|}t        j                  |||j                  |d      }|j                  g d	g d
g dg|j
                        }t        ||       y )Nr   r   r   c                 "    | d   dz
  | d   dz
  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform10.<locals>.mapping  r   r2   r   rs   Fr:   	prefilterr   r   r   rL   )r<   r=   rw   r>   r   rM   r   )r@   r:   rB   rC   r   filteredry   rh   s           r/   test_geometric_transform10z1TestGeometricTransform.test_geometric_transform10  s    zz<'') *	( AI,,T?HH))(GTZZ05H::|++-47II  ? 	"#x0r2   c                     |j                  dg|j                        }d }t        j                  ||dg|      }t	        ||j                  g d|j                               y )Nr3   rL   c                     | d   dz  fS Nr   r3   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform13.<locals>.mapping  s    aDAI<r2   r'   rs   r   )rv   r[   r=   r>   r   r<   rM   r   s         r/   test_geometric_transform13z1TestGeometricTransform.test_geometric_transform13  sT    wws"**w-	  ))$!EJ!#rzz,ciiz'PQr2   c                     |j                  g d      }d }t        j                  ||dg|      }t        ||j                  g d|j                               y )Nr   r   r3   rJ   r4   r6   r'   r'   c                     d| d   z  fS )Nr3   r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform14.<locals>.mapping"  s    !H;r2   r'   rs   rG   rL   )r<   r=   r>   r   rM   r   s         r/   test_geometric_transform14z1TestGeometricTransform.test_geometric_transform14  sK    zz23	 ))$!EJ!#rzz,ciiz'PQr2   c                 n    g d}d }t        j                  ||dg|      }t        |d d d   g d       y )NrG   c                     | d   dz  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform15.<locals>.mapping+  r   r2   r   rs   r3   r=   r>   r   r   s         r/   test_geometric_transform15z1TestGeometricTransform.test_geometric_transform15(  s8    	 ))$!EJ!#cc(L9r2   c                 |    g dg dg dg}d }t        j                  ||d|      }t        |ddgd	d
gddgg       y )NrG   r   rJ   r6   r   g      "@
         c                     | d   | d   dz  fS Nr   r   r3   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform16.<locals>.mapping6  r   r2   r4   r3   rs   r   r4   r   r6   	   r   r   r   s         r/   test_geometric_transform16z1TestGeometricTransform.test_geometric_transform161  sO    !#	$ ))$057!#AAB'@Ar2   c                 p    g dg dg dg}d }t        j                  ||d|      }t        |g dg       y )NrG   r   r   r   r   r   c                     | d   dz  | d   fS Nr   r3   r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform17.<locals>.mappingB  r   r2   r   r'   rs   r   r   s         r/   test_geometric_transform17z1TestGeometricTransform.test_geometric_transform17=  s>    !	$ ))$057!#~6r2   c                 p    g dg dg dg}d }t        j                  ||d|      }t        |ddgg       y )	NrG   r   r   c                 "    | d   dz  | d   dz  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform18.<locals>.mappingN  r   r2   r   r3   rs   r   r4   r   r   s         r/   test_geometric_transform18z1TestGeometricTransform.test_geometric_transform18I  sB    !	( ))$057!#Ax0r2   c                 z    g dg dg dg}d }t        j                  ||d|      }t        |dd d df   |       y )	NrG   r   r   c                     | d   | d   dz  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform19.<locals>.mappingZ  r   r2   r4   r   rs   .r3   r   r   s         r/   test_geometric_transform19z1TestGeometricTransform.test_geometric_transform19U  sH    !	$ ))$057!#c3Q3h-6r2   c                 z    g dg dg dg}d }t        j                  ||d|      }t        |d d ddf   |       y )	NrG   r   r   c                     | d   dz  | d   fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform20.<locals>.mappingf  r   r2   rJ   r'   rs   r3   .r   r   s         r/   test_geometric_transform20z1TestGeometricTransform.test_geometric_transform20a  sH    !	$ ))$057!#cc3h-6r2   c                     g dg dg dg}d }t        j                  ||d|      }t        |d d dd d df   |       y )NrG   r   r   c                 "    | d   dz  | d   dz  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform21.<locals>.mappingr  r   r2   rJ   r   rs   r3   r   r   s         r/   test_geometric_transform21z1TestGeometricTransform.test_geometric_transform21m  sL    !	( ))$057!#cc3Q3h-6r2   c                     |j                  g dg dg dg|j                        }d }d }t        j                  ||d|      }t        j                  ||d	|      }t	        ||       y )
NrG   r   r   rL   c                 "    | d   dz  | d   dz  fS r   r,   r-   s    r/   mapping1zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping1~  r   r2   c                 "    | d   dz  | d   dz  fS r   r,   r-   s    r/   mapping2zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping2  r   r2   r   rs   r4   r'   )r<   r[   r=   r>   r   )r@   r:   rB   rC   r   r   ry   s          r/   test_geometric_transform22z1TestGeometricTransform.test_geometric_transform22y  sq    zz<'*,35::  ?	(	( ))$*0?))#x*0?!#t,r2   c                     g dg dg dg}d }t        j                  ||d|      }|j                  t        j                        }t        |ddg       y )	NrG   r   r   c                     d| d   dz  fS )Nr   r   r3   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform23.<locals>.mapping      qtax= r2   r3   rs   r   r6   )r=   r>   astyperY   int32r   r   s         r/   test_geometric_transform23z1TestGeometricTransform.test_geometric_transform23  sO    !	! ))$UKjj"!#1v.r2   c           	      v    g dg dg dg}d }t        j                  ||d|dddi	      }t        |d
dg       y )NrG   r   r   c                     || d   |z  fS )Nr   r,   )r.   abs      r/   r   zBTestGeometricTransform.test_geometric_transform24.<locals>.mapping  r   r2   r   )r   r  r3   )r:   extra_argumentsextra_keywordsr   r6   r   r   s         r/   test_geometric_transform24z1TestGeometricTransform.test_geometric_transform24  sK    !	! ))'4ud8% 	"#1v.r2   N)rj   rk   rl   r   r   r   r   rW   rm   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r,   r2   r/   r   r      s    IRRR [[Wy,&?@1 A1*1111&RR:
B
7
1
7
7
7-"
//r2   r   c                       e Zd Zd Zej
                  j                  dg d      ej
                  j                  d ed            d               Z e	dd	      d
        Z
 e	dd	      d        Zy)TestGeometricTransformExtrac                     |j                  g dg dg|j                        }d }|j                  g dg dg      }t        t        j                  ||dd	      |       y )
Nr   r3   r4   r'   r   rJ   rL   c                 "    | d   dz
  | d   dz
  fS )Nr   r+   r   r,   r-   s    r/   r   zZTestGeometricTransformExtra.test_geometric_transform_grid_constant_order1.<locals>.mapping      aD3J!A$*--r2   g      ?g      ?      ?r  g      @r5   r   r   r8   r:   )r<   r[   r   r=   r>   )r@   rB   r.   r   expected_results        r/   -test_geometric_transform_grid_constant_order1zITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1  sj     JJ	!#*,**  6	. **&8&8&: ;!''7./1	
r2   r8   r   r   r   r   r   r:   rJ   c                    d }t        j                  dt              j                  dd      }d}t        j                  |      }t        j                  |||      }|j                  |      }|j                  |      }t        t        ||       g|j                  z        }	t        j                  ||||      |	   }
t        t        j                  ||||      |
d	       y )
Nc                 "    | d   dz
  | d   dz   fS )Nr   皙?r   gffffff@r,   r-   s    r/   r   zOTestGeometricTransformExtra.test_geometric_transform_vs_padded.<locals>.mapping  r  r2      rL   r      rR   r  rS   rU   )rY   rZ   floatreshaper_   r`   ra   r<   tupleslicendimr=   r>   r   )r@   r:   r8   rB   r   r.   rd   re   x_paddedcenter_slicer  s              r/   "test_geometric_transform_vs_paddedz>TestGeometricTransformExtra.test_geometric_transform_vs_padded  s    
	.
 IIc'//B7(,,T266!T1JJqM::h'eD4%01AFF:;!55gD77CE 	''7.35		
r2   Tzendianness is numpy-specificr}   c                    t        j                  dg      }d }|j                  |j                  j                         t        j                  |      t        j                  |      j                  |j                  j                               fD ]8  }t        j                  |||j                  |      }||n|}t        |dg       : y )Nr   c                     | S r   r,   r-   s    r/   r   zfTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter.<locals>.mapping  r   r2   r   )
rY   r<   rM   newbyteorder
empty_liker   r=   r>   r   r   )r@   rB   rC   r   ry   returnedresults          r/   9test_geometric_transform_endianness_with_output_parameterzUTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter  s     zz1#	 JJ

 7 7 9MM$'MM$'..tzz/F/F/HIK 	3C 224$**:=?H$,S(F%fqc2	3r2   !string `output` is numpy-specificc                     |j                  dg      }d }t        j                  ||d      }|j                  t	        j                  d      u sJ t        |dg       y )Nr   c                     | S r   r,   r-   s    r/   r   zXTestGeometricTransformExtra.test_geometric_transform_with_string_output.<locals>.mapping  r   r2   fr   )r<   r=   r>   rM   rY   r   )r@   rB   rC   r   ry   s        r/   +test_geometric_transform_with_string_outputzGTestGeometricTransformExtra.test_geometric_transform_with_string_output  sR    zz1#	 ))$DyyBHHSM)))!#s+r2   N)rj   rk   rl   r  rW   rm   rn   ro   r"  r   r)  r.  r,   r2   r/   r  r    s    
" [[V &; <[[WeAh/
 0<
4 d+IJ3 K3  d+NO, P,r2   r  c                      e Zd Zej                  j                  d edd            ej                  j                  dej                  ej                  g      d               Z
ej                  j                  d edd            d        Z edd	      d
        Z ed      d        Z edd      d        Zej                  j!                  dej$                  v xs  ej&                  d      j(                  dk  d	      d        Zy)TestMapCoordinatesr:   r   rJ   rM   c                    t        |      r|dkD  rt        j                  d       |j                  g dg dg dg      }|j                  g dg dg dg      }t	        |      j
                  } ||j                  d	      r|d
|z  z
  }|d
|z  z
  }t        j                  |j                        }|dz  }|j                  |      }t        j                  |||      }t        ||       y )Nr   'jax map_coordinates requires order <= 1r   r   r   r   r   r   r   r   rs   )r   rW   rX   r<   r
   r   rM   rY   indicesr   r=   r^   r   )	r@   r:   rM   rB   rC   rh   r   idxry   s	            r/   test_map_coordinates01z)TestMapCoordinates.test_map_coordinates01  s     ":%!)LLBCzz<'') * ::|++- . "$'//4::12"t)#D"x-/Hjj$qjjo%%dCu=!#x0r2   c                    t        |      r4|dkD  rt        j                  d       |dk(  rt        j                  d       |j                  g dg dg dg      }t	        j
                  |j                  t        j                        }|dz  }|j                  |      }t        j                  |d|      }t        j                  |||      }t        ||       y )	Nr   r2  zoutput differs. jax bug?r   r   r   r+   rs   )r   rW   rX   r<   rY   r3  r   r[   r=   r0   r^   r   )r@   r:   rB   rC   r4  out1out2s          r/   test_map_coordinates02z)TestMapCoordinates.test_map_coordinates02  s    ":qy||EFz||67zz<'') * jjRZZ0s
jjo}}T3e4&&tS>!$-r2   r   z`order` is required in jaxr"   c           
         t        g dg dg dgd|      }t        j                  |j                        dz
  }|j	                  |      }t        j                  ||      }|j	                  g dg dg d	g      }t        ||       t        |t        j                  |d
             t        j                  |d d ddf   j                        dz
  }|j	                  |      }t        j                  |d d ddf   |      }t        ||j	                  g dg dg             t        |t        j                  |d d ddf   d
             t        j                  |d d d d df   j                        dz
  }|j	                  |      }t        j                  |d d d d df   |      }t        ||j	                  ddgddgddgg             t        |t        j                  |d d d d df   d
             y )Nr   r   r   F)r:   rB   r   r   r   r   r   r   r3   .r   r'   r6   )	r	   rY   r3  r   r<   r=   r^   r   r0   )r@   rB   rC   r4  ry   rh   s         r/   test_map_coordinates03z)TestMapCoordinates.test_map_coordinates03  s   %%'.1b: jj$q(jjo%%dC0::|++- . 	"#x0!#w}}T6'BCjjcc3h--.2jjo%%d3Q38nc:!#rzz<3?3A (B 	C!#w}}T#A#s(^V'LMjja1f++,q0jjo%%d1cc6lC8!#rzzAq6Aq6Aq62J'KL!#w}}T!SqS&\6'JKr2   T)r~   c                     t        j                  ddgddgg      }t        j                  ddgddgg      }t        j                  |j                        }|dz  }|j                  |j                  j                         t        j                  |      t        j                  |      j                  |j                  j                               fD ],  }t        j                  |||      }||n|}t        ||       . y )Nr   r3   r6   rJ   r   r   )rY   r<   r3  r   rM   r%  r&  r   r=   r^   r   )r@   rB   rC   rh   r4  ry   r'  r(  s           r/   5test_map_coordinates_endianness_with_output_parameterzHTestMapCoordinates.test_map_coordinates_endianness_with_output_parameter:  s     zzAq6Aq6*+::1v1v./jj$qJJJJ##%MM(#MM(#**8>>+F+F+HI	
 	8C ..tSEH$,S(F%fh7	8r2   r*  r}   c                 :   |j                  dgg      }t        j                  |j                        }|j                  |      }t	        j
                  ||d      }|j                  t        j                  d      u sJ t        ||j                  dgg             y Nr   r-  r   )r<   rY   r3  r   r=   r^   rM   r   )r@   rB   rC   r4  ry   s        r/   'test_map_coordinates_with_string_outputz:TestMapCoordinates.test_map_coordinates_with_string_outputN  sx    zzA3% jj$jjo%%dC<yyBHHSM)))!#rzzA3%'89r2   win32r   z2do not run on 32 bit or windows (no sparse memory)c                 j   	 d}t        j                  |dz  t         j                        j                  ||      }d||dz
  d |dz
  d f<   t	        j
                  |j                  |      |j                  |dz
  g|dz
  gg      d       y # t        $ r}t        j                  d	      |d }~ww xY w)
Ni0u  r3   rL   r   r4   r$   r   rs   zNot enough memory available)
rY   emptyfloat32r  r=   r^   r<   MemoryErrorrW   skip)r@   rB   nr  es        r/   test_map_coordinates_large_dataz2TestMapCoordinates.test_map_coordinates_large_dataW  s    

	DAARZZ088A>A !Aa!efa!efn##

1rzzAG9q3wi*@A  	D++;<!C	Ds   BB 	B2B--B2N)rj   rk   rl   rW   rm   rn   ro   rY   r[   r   r5  r9  r   r=  r?  rB  skipifsysplatformintpitemsizerK  r,   r2   r/   r0  r0    s&   [[WeAqk2[[Wrzz2==&AB1 C 31, [[WeAqk2. 3.$ k*FGL HL4 d#8 $8& d+NO: P: [[3<</J72771:3F3F3J 4  5D5Dr2   r0  c                   
   e Zd Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Z	ej                  j                  d edd            d        Z
ej                  j                  d edd            ej                  j                  dd	d
g      d               Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d         Z d! Z! e"d"d#$      d%        Z# e"d"d#$      d&        Z$ e"d"d'$      d(        Z% e"d"d)$      d*        Z&ej                  j                  d+g d,      ej                  j                  d edd            d-               Z'ej                  j                  d edd            d.        Z(y/)0TestAffineTransformr:   r   rJ   c                     |j                  dg      }t        j                  ||j                  dgg      |      }t        ||j                  dg             y )Nr   rs   r<   r=   affine_transformr   r@   r:   rB   rC   ry   s        r/   test_affine_transform01z+TestAffineTransform.test_affine_transform01k  sF    zz1#&&tRZZ!->eL!#rzz1#7r2   c                     |j                  dg      }t        j                  ||j                  dgg      |      }t	        ||j                  g d             y )Nr'   r   rs   r   rv   r=   rU  r<   r   rV  s        r/   test_affine_transform02z+TestAffineTransform.test_affine_transform02q  sE    wws|&&tRZZ!->eL!#rzz,'?@r2   c                     |j                  dg      }t        j                  ||j                  dgg      d|      }t	        ||j                  g d             y )Nr'   r   r(   rs   r   rY  rV  s        r/   test_affine_transform03z+TestAffineTransform.test_affine_transform03w  sG    wws|&&tRZZ!->%P!#rzz,'?@r2   c                     |j                  g d      }t        j                  ||j                  dgg      d|      }t        ||j                  g d             y )Nr   r   r(   rs   r   rT  rV  s        r/   test_affine_transform04z+TestAffineTransform.test_affine_transform04}  sF    zz,'&&tRZZ!->%P!#rzz,'?@r2   rM   r[   r   c                 t   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg|      }t        |      j                  } ||j                  d      r|d|z  z  }|d|z  z  }t        j                  ||j                  ddgddgg      ddg|	      }t        ||       y )
Nr   rL   r   r   r   r   r   r(   rs   )ru   r<   r
   r   rM   r=   rU  r   r@   r:   rM   rB   rC   rh   r   ry   s           r/   test_affine_transform05z+TestAffineTransform.test_affine_transform05  s     E"zz<'')05  7 ::|++-49  ; "$'//4::12BIDX%H&&tRZZ!Q!Q8H-I()2we=!#x0r2   c           	          |j                  g dg dg dg      }t        j                  ||j                  ddgddgg      ddg|      }t        ||j                  g dg d	g d
g             y )Nr   r   r   r   r   r(   rs   r   r   r   rT  rV  s        r/   test_affine_transform06z+TestAffineTransform.test_affine_transform06  sw    zz<'') * &&tRZZ!Q!Q8H-I()2we=!#rzz<3?3?3A (B 	Cr2   c           	          |j                  g dg dg dg      }t        j                  ||j                  ddgddgg      ddg|      }t        ||j                  g dg dg dg             y )	Nr   r   r   r   r   r(   rs   r   rT  rV  s        r/   test_affine_transform07z+TestAffineTransform.test_affine_transform07  sw    zz<'') * &&tRZZ!Q!Q8H-I(*Awe=!#rzz<3?3?3A (B 	Cr2   c           	          |j                  g dg dg dg      }t        j                  ||j                  ddgddgg      ddg|      }t        ||j                  g dg d	g d
g             y )Nr   r   r   r   r   r(   rs   r   r   r   rT  rV  s        r/   test_affine_transform08z+TestAffineTransform.test_affine_transform08  sw    zz<'') * &&tRZZ!Q!Q8H-I(*Bxu>!#rzz<3?3?3A (B 	Cr2   c           	          |j                  g dg dg dg      }|dkD  rt        j                  ||      }n|}t        j                  ||j                  ddgddgg      ddg|d	      }t	        ||j                  g d
g dg dg             y )Nr   r   r   r   rs   r   r(   Fr   r   r   r   )r<   r=   rw   rU  r   r@   r:   rB   rC   r   ry   s         r/   test_affine_transform09z+TestAffineTransform.test_affine_transform09  s    zz<'') * AI,,T?HH&&xaVaV<L1M(*Bxu168 	"#rzz<3?3?3A (B 	Cr2   c                     |j                  dg|j                        }t        j                  ||j	                  dgg      d|      }t        ||j	                  g d             y )Nr3   rL   r+   rH   )r9   r:   r   r   r   r   )rv   r[   r=   rU  r<   r   rV  s        r/   test_affine_transform10z+TestAffineTransform.test_affine_transform10  sS    wws"**w-&&tRZZ#-@t-24!#rzz,'?@r2   c                     |j                  g d      }t        j                  ||j                  dgg      dd|      }t        ||j                  g d             y )Nr   r3   r   rH   rs   rG   rT  rV  s        r/   test_affine_transform11z+TestAffineTransform.test_affine_transform11  sI    zz23&&tRZZ!->4uU!#rzz,'?@r2   c                     |j                  g d      }t        j                  ||j                  dgg      dd|      }t        |d d d   |j                  g d             y )NrG   r+   r   r   rs   r3   rT  rV  s        r/   test_affine_transform12z+TestAffineTransform.test_affine_transform12  sQ    zz,'&&tRZZ#-@!TQVW!#cc(BJJ|,DEr2   c           	          g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|      }t        ||j                  dd	gd
dgddgg             y )NrG   r   r   r   r   r3   r   rs   r4   r   r6   r   r   rT  rV  s        r/   test_affine_transform13z+TestAffineTransform.test_affine_transform13  sy    !# zz$&&tRZZ!Q!Q8H-I1f-24!#rzzAq6Aq6Ar72K'LMr2   c                     g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|      }t        ||j                  g dg             y )	NrG   r   r   r3   r   r   r   rs   rT  rV  s        r/   test_affine_transform14z+TestAffineTransform.test_affine_transform14  sh    ! zz$&&tRZZ!Q!Q8H-I1f-24!#rzz<.'ABr2   c                     g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|      }t        ||j                  dd	gg             y )
NrG   r   r   r3   r   r   rs   r   r4   rT  rV  s        r/   test_affine_transform15z+TestAffineTransform.test_affine_transform15  sl    ! zz$&&tRZZ!Q!Q8H-I1f-24!#rzzAq6(';<r2   c                     g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|	      }t        |d
d d df   |       y )NrG   r   r   r           r   r+   r   rs   .r3   rT  rV  s        r/   test_affine_transform16z+TestAffineTransform.test_affine_transform16  si    ! zz$&&tRZZ!SAs88L-Mq'-U<!#c3Q3h-6r2   c                     g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|      }t        |d d d	d
f   |       y )NrG   r   r   r+   r   r   r   rs   r3   .rT  rV  s        r/   test_affine_transform17z+TestAffineTransform.test_affine_transform17  si    ! zz$&&tRZZ#qAq68J-KQ'-U<!#cc3h-6r2   c                     |j                  g dg dg dg      }t        j                  ||j                  ddgddgg      dd|      }t        |d d dd d df   |       y )	NrG   r   r   r+   r   r   rs   r3   rT  rV  s        r/   test_affine_transform18z+TestAffineTransform.test_affine_transform18  sj    zz<'*, - &&tRZZ#qAs88L-Mq'-U<!#cc3Q3h-6r2   c                 $   |j                  g dg dg dg|j                        }t        j                  ||j                  ddgddgg      dd|      }t        j                  ||j                  d	dgdd	gg      dd
|      }t	        ||       y )NrG   r   r   rL   r+   r   r   rs          @r   )r<   r[   r=   rU  r   rV  s        r/   test_affine_transform19z+TestAffineTransform.test_affine_transform19  s    zz<'*,35::  ? &&tRZZ#qAs88L-Mq'-U<&&sBJJa1c(7K,La'-U<!#t,r2   c                    t        |      rt        j                  d       g dg dg dg}|j                  |      }t	        j
                  ||j                  dgdgg      dd|      }t        ||j                  d	d
g             y )N(https://github.com/cupy/cupy/issues/8394rG   r   r   r   r3   r   rs   r   r4   r   rW   rX   r<   r=   rU  r   rV  s        r/   test_affine_transform20z+TestAffineTransform.test_affine_transform20  y    2;LLCD! zz$&&tRZZ!qc
-CQ-24!#rzz1a&'9:r2   c                    t        |      rt        j                  d       g dg dg dg}|j                  |      }t	        j
                  ||j                  dgdgg      dd|      }t        ||j                  d	d
g             y )Nr  rG   r   r   r3   r   r   rs   r   r   r  rV  s        r/   test_affine_transform21z+TestAffineTransform.test_affine_transform21,  r  r2   c                     |j                  g d      }t        j                  ||j                  dgg      dgd|      }t        ||j                  g d             y )Nr   r3   r(   )r4   rs   r   r   r3   rT  rV  s        r/   test_affine_transform22z+TestAffineTransform.test_affine_transform229  sO     zz,'&&tRZZ!->d-24!#rzz)'<=r2   c                     |j                  g d      }t        j                  ||j                  dgg      dgd|      }t        |d d d   |j                  g d             y )Nr   r+   r(   rq  rs   r3   r   rT  rV  s        r/   test_affine_transform23z+TestAffineTransform.test_affine_transform23A  sW     zz,'&&tRZZ#-@2$-24!#cc(BJJ|,DEr2   c                 R   |j                  g d      }t               5 }|j                  t        d       t	        j
                  ||j                  dg      d|      }d d d        t	        j
                  ||j                  dgg      d|      }t        |       y # 1 sw Y   @xY w)Nr   @The behavior of affine_transform with a 1-D array .* has changedr3   r(   rs   r<   r   filterUserWarningr=   rU  r   r@   r:   rB   rC   supr7  r8  s          r/   test_affine_transform24z+TestAffineTransform.test_affine_transform24I  s     zz,'  	TCJJ{%& ++D"**aS/2USD		T
 ''bjj1#.?5Q!$-	T 	T   A BB&c                 R   |j                  g d      }t               5 }|j                  t        d       t	        j
                  ||j                  dg      d|      }d d d        t	        j
                  ||j                  dgg      d|      }t        |       y # 1 sw Y   @xY w)Nr   r  r+   r(   rs   r  r  s          r/   test_affine_transform25z+TestAffineTransform.test_affine_transform25U  s     zz,'  	VCJJ{%& ++D"**cU2CRuUD		V
 ''bjj3%.A2US!$-	V 	Vr  c           
         |j                  g dg dg dg      }|dkD  rt        j                  ||      }n|}|j                  d      }|j	                  d       }t        ||      j                  } |||fd      } |||j                  g d	g      fd
      }	|j                  |d      D 
cg c]  }
t        |
       }}
t        j                  ||||d      }t        j                  |||d      }t        j                  ||	|d      }|||fD ]&  }t        ||j                  g dg dg dg             ( y c c}
w )Nr   r   r   r   rs   r3   r3   r   axis)rz  r   r   r   )r(   Fr   r   r   r   )r<   r=   rw   eyerv   r
   concatr  r  rU  r   )r@   r:   rB   rC   r   tform_originaloffset_originalr  tform_h1tform_h2r.   offsr7  r8  out3ry   s                   r/   test_affine_transform26z+TestAffineTransform.test_affine_transform26a  sQ    zz<'') * AI,,T?HH776?* AHH>?;!DHbjj+&?@qI"$**_e"DEQaEE''.(,.3uF ''(%279''(%279$% 	GC%c2::|7C7C7E ,F G	G Fs   1E c                 t   t        |      rt        j                  d       |j                  g dg dg dg      }t	        |      j
                  } ||j                  d      |j                  d       fd      } |||j                  g d	g      fd
      }t        t        t        j                  ||       y )NzCuPy does not raiser   r   r   r3   r  r   r  )      @r3   r   r   )r   rW   rX   r<   r
   r  r  rv   assert_raises
ValueErrorr=   rU  )r@   rB   rC   r  r  r  s         r/   test_affine_transform27z+TestAffineTransform.test_affine_transform27  s    2;LL./ zz<'') * !&--BFF1I'78B8RZZ%>?aHj'":":D(Kr2   Tzbyteorder is numpy-specificr}   c           	         |j                  d      }|j                  |      |j                  |      j                  |j                  j	                               |j                  |j                  j	                         fD ]}  }t               5 }|j                  t        d       |j                  ddg      }t        j                  |||      }d d d        |n|}t        ||j                  ddgddgg              y # 1 sw Y   3xY w)N)r3   r3   r  r   r   )rv   r&  r   rM   r%  r   r  r  r<   r=   rU  r   )r@   rB   rC   ry   r  matrixr'  r(  s           r/   9test_affine_transform_1d_endianness_with_output_parameterzMTestAffineTransform.test_affine_transform_1d_endianness_with_output_parameter  s     wwvMM$'MM$'..tzz/F/F/HIJJ

 7 7 9; 
	LC #$ N

;,- QF+"33D&MN %,S(F%fbjj1a&1a&9I.JK
	LN Ns   AD  D		c                    t        j                  dg      }|j                  |j                  j                         t        j                  |      t        j                  |      j                  |j                  j                               fD ]U  }t        j                  |t        j                  dgg      |      }||n|}t        |t        j                  dg             W y )Nr   r   )	rY   r<   rM   r%  r&  r   r=   rU  r   )r@   rB   rC   ry   r'  r(  s         r/   >test_affine_transform_multi_d_endianness_with_output_parameterzRTestAffineTransform.test_affine_transform_multi_d_endianness_with_output_parameter  s    
 zz1#JJ

 7 7 9MM$'MM$'..tzz/F/F/HIK 	?C //bjj1#6GPSTH$,S(F%fbjj!o>	?r2   z+`out` of a different size is numpy-specificc                 b   |j                  d|j                        }|j                  d      }t        j                  ||j                  dgg      |       t        |d d |       t        j                  t              5  t        j                  |dgg|d       d d d        y # 1 sw Y   y xY w)Nr   rL   )   r   r   )r   )r   r9   )
rZ   r[   rv   r=   rU  r<   r   rW   r   RuntimeErrorr@   rB   rC   ry   s       r/   "test_affine_transform_output_shapez6TestAffineTransform.test_affine_transform_output_shape  s    
 yy"**y-ggen  rzzA3%'8E!#bq'40 ]]<( 	=$$seCe=	= 	= 	=s    B%%B.r*  c                     |j                  dg      }t        j                  ||j                  dgg      d      }|j                  t	        j                  d      u sJ t        ||j                  dg             y rA  )r<   r=   rU  rM   rY   r   r  s       r/   (test_affine_transform_with_string_outputz<TestAffineTransform.test_affine_transform_with_string_output  s`    zz1#&&tRZZ!->sKyyBHHSM)))!#rzz1#7r2   r0   )r   r   r   r   )r(   r   )r4   )r3   r6   c                    t        j                  ddgddgg      }t        j                  d      }t        j                  d      |d dd df<   t        j                  |      |d d df<   t        j                  ||d      }|j                  |      }|j                  |      }|j                  |      }t        t        j                  ||d|	      |       y )
Nr   r   r3   r4   r3   r4   r  r  r   r  )rY   r<   zerosr  rollr   r=   rU  )r@   r0   r:   rB   r.   affinerh   s          r/   )test_affine_transform_shift_via_grid_wrapz=TestAffineTransform.test_affine_transform_shift_via_grid_wrap  s    
 JJAA  !&!rr2A2vzz%(q!t771e&1JJqMF#::h'!$$Q[N	
r2   c                    t        j                  g dg dg      }|d d dd d df   j                         }|j                  |      }|j                  |      }t        j                  ddg      }t        j                  d      |d dd df<   t        j                  |j
                        |d d df<   |j                  |      }t        t        j                  ||d|      |       y )Nr  r4   r'   r   r(   r3   r4   r   r  )	rY   r<   copyr  r  r   r   r=   rU  )r@   r:   rB   r.   rh   r  s         r/   #test_affine_transform_shift_reflectz7TestAffineTransform.test_affine_transform_shift_reflect  s     JJ	!# $TrT4R4Z=%%'JJqM::h'1a&!rr2A2vzz!''*q!tF#!$$QYeL	
r2   N))rj   rk   rl   rW   rm   rn   ro   rW  rZ  r\  r^  ra  rc  re  rg  rj  rm  ro  rr  rt  rv  rx  r{  r}  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r,   r2   r/   rR  rR  i  s   [[WeAqk28 38
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2[[Wy,&?@1 A 31  [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2A 3A [[WeAqk2A 3A
 [[WeAqk2F 3F
 [[WeAqk2N 3N [[WeAqk2C 3C [[WeAqk2= 3= [[WeAqk27 37 [[WeAqk27 37 [[WeAqk27 37 [[WeAqk2- 3- [[WeAqk2
; 3
; [[WeAqk2
; 3
; [[WeAqk2> 3> [[WeAqk2F 3F [[WeAqk2	. 3	. [[WeAqk2	. 3	. [[WeAqk2G 3G<L d+HIL JL  d+HI
? J
? d<== d+NO8 P8 [[WGI[[WeAqk2
 3I
& [[WeAqk2
 3
r2   rR  c                      e Zd Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Z	ej                  j                  d edd            d        Z
ej                  j                  d edd            ej                  j                  dd	d
g      d               Zej                  j                  d edd            ej                  j                  dddg      ej                  j                  dd	d
g      d                      Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  dg d      ej                  j                  d edd            d               Zej                  j                  dg d      ej                  j                  d edd            d               Zd Zej                  j                  d edd            d        Zej                  j                  d edd            ej                  j                  dddg      d               Zej                  j                  dg d      ej                  j                  d ed            d               Zy )!	TestShiftr:   r   rJ   c                     |j                  dg      }t        j                  |dg|      }t        ||j                  dg             y )Nr   rs   r   r<   r=   r0   r   rV  s        r/   test_shift01zTestShift.test_shift01  s9    zz1#mmD1#U3!#rzz1#7r2   c                     |j                  dg      }t        j                  |dg|      }t        ||j	                  g d             y )Nr'   r   rs   r   rv   r=   r0   r   r<   rV  s        r/   test_shift02zTestShift.test_shift02  s8    wws|mmD1#U3!#rzz,'?@r2   c                     |j                  dg      }t        j                  |d|      }t        ||j	                  g d             y )Nr'   r(   rs   rl  r  rV  s        r/   test_shift03zTestShift.test_shift03  s6    wws|mmD"E2!#rzz,'?@r2   c                     |j                  g d      }t        j                  |d|      }t        ||j                  g d             y )Nr   r   rs   r   r  rV  s        r/   test_shift04zTestShift.test_shift04  s5    zz,'mmD!51!#rzz,'?@r2   rM   r[   r   c                 H   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg|      }t        |      j                  } ||j                  d      r|d|z  z  }|d|z  z  }t        j                  |ddg|      }t        ||       y )	Nr   rL   r   r   r   r   r   rs   )ru   r<   r
   r   rM   r=   r0   r   r`  s           r/   test_shift05zTestShift.test_shift05  s     E"zz<'')05  7 ::|++-49  ; "$'//4::12BIDX%HmmD1a&6!#x0r2   r8   r   r   c                    t        j                  g dg dg dg|      }t        j                  g dg dg dg|      }t        |      j                  } ||j                  d      r|d|z  z  }|d|z  z  }d}||d d df<   |j                  |      }|j                  |      }t        j                  |ddg|||	      }	t        |	|       y )
Nr   rL   r   r   r   r  r   r   )r:   r8   r7   )rY   r<   r
   r   rM   r=   r0   r   )
r@   r:   r8   rM   rB   rC   rh   r   r7   ry   s
             r/   test_shift_with_nonzero_cvalz&TestShift.test_shift_with_nonzero_cval  s     zz<'')057 ::|++-49; "$'//4::12BIDX%HAzz$::h'mmD1a&DtL!#x0r2   c           	          |j                  g dg dg dg      }t        j                  |ddg|      }t        ||j                  g dg dg d	g             y )
Nr   r   r   r   r   rs   r   r   r   r  rV  s        r/   test_shift06zTestShift.test_shift060  Z    zz<'') * mmD1a&6!#rzz<3?3?3A (B 	Cr2   c           	          |j                  g dg dg dg      }t        j                  |ddg|      }t        ||j                  g dg dg dg             y )Nr   r   r   r   r   rs   r   r  rV  s        r/   test_shift07zTestShift.test_shift07:  r  r2   c           	          |j                  g dg dg dg      }t        j                  |ddg|      }t        ||j                  g dg dg dg             y )	Nr   r   r   r   rs   r   r   r   r  rV  s        r/   test_shift08zTestShift.test_shift08D  r  r2   c           	          |j                  g dg dg dg      }|dkD  rt        j                  ||      }n|}t        j                  |ddg|d      }t	        ||j                  g dg d	g d
g             y )Nr   r   r   r   rs   Fr   r   r   r   )r<   r=   rw   r0   r   ri  s         r/   test_shift09zTestShift.test_shift09N  sz    zz<'') * AI,,T?HHmmHq!fEUK!#rzz<3?3?3A (B 	Cr2   r0   r  c                     t        j                  ddgddgg      }t        j                  ||d      }|j                  |      }|j                  |      }t        t	        j
                  ||d|      |       y )	Nr   r   r3   r4   r  r  r   r  )rY   r<   r  r   r=   r0   )r@   r0   r:   rB   r.   rh   s         r/   test_shift_grid_wrapzTestShift.test_shift_grid_wrap\  sn    
 JJAA  !771e%0JJqM::h'!MM!UEB	
r2   c           	          |j                  |j                  d      d      }t        t        j                  ||d|      t        j                  ||d|             y )N   )r   r'   r   r  r   )r  rZ   r   r=   r0   )r@   r0   r:   rB   r.   s        r/   test_shift_grid_constant1z#TestShift.test_shift_grid_constant1m  sH    
 JJryy}f-!MM!UFMM!U5A	
r2   c                     |j                  g dg dg|j                        }|j                  g dg dg      }t        t        j                  |ddd	      |       y )
Nr
  r  rL   r  r  )r+   r+   r   r   r  )r<   r[   r   r=   r0   )r@   rB   r.   r  s       r/   test_shift_grid_constant_order1z)TestShift.test_shift_grid_constant_order1x  s\    JJ	!#*,**  6**&8&8&: ;!MM!ZoQG	
r2   c                    t        j                  g dg dg      }|d d dd d df   j                         }|j                  |      }|j                  |      }t        t	        j
                  ||j                  d|      |       y )Nr  r  r(   r   r  )rY   r<   r  r   r=   r0   r   )r@   r:   rB   r.   rh   s        r/   test_shift_reflectzTestShift.test_shift_reflect  sv     JJ	!# $TrT4R4Z=%%'JJqM::h'!MM!QWW9EB	
r2   r   FTc                     |j                  d      }t        d||      }t        t        j                  ||dz  dz   fi |d   |d          t        t        j                  || dz  dz
  fi |d   |d          y )Nr  r   )r8   r:   r   r3   r   r   r(   )rZ   dictr   r=   r0   )r@   r:   r   rB   r.   kwargss         r/   test_shift_nearest_boundaryz%TestShift.test_shift_nearest_boundary  s    
 IIbM9EYG!MM!UaZ!^6v6q91Q4	
 	"MM!eVq[1_77;QrU	
r2   r  c                    t        j                  dt              j                  dd      }d}d}t        j                  |      }|j                  t        j                  |||            }|j                  |      }	t        t        ||       g|	j                  z        }
t        j                  ||||      |
   }t        t        j                  |	|||      |d	       y )
Nr  rL   r   )r  gffffffrQ   rR   r  rS   r  )rY   rZ   r  r  r_   r`   r<   ra   r  r  r  r=   r0   r   )r@   r:   r8   rB   x_npr0   rd   re   r   r.   r!  r  s               r/   test_shift_vs_paddedzTestShift.test_shift_vs_padded  s     yyE*222r: (,,T2::bffT4h?@JJteD4%01AFF:;!--e$e55AC 	MM!UU;	
r2   N)rj   rk   rl   rW   rm   rn   ro   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,   r2   r/   r  r    sj   [[WeAqk28 38
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2[[Wy,&?@1 A 31 [[WeAqk2[[Vj/%BC[[Wy,&?@1 A D 31* [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WGI[[WeAqk2
 3I
 [[WGI[[WeAqk2
 3I

 [[WeAqk2
 3
 [[WeAqk2[[[5$-8

 9 3

 [[V &; <[[WeAh/
 0<
r2   r  c                      e Zd Zej                  j                  d edd            d        Zd Zd Z	ej                  j                  d edd            ej                  j                  ddd	g      d
               Z
d Zd Zd Zej                  j                  dg d      ej                  j                  dg d      d               Zej                  j                  dddg      ej                  j                  dg d      ej                  j                  dg d      d                      Zej                  j                  dddg      ej                  j                   d               Z edd      d        Zd Zy )!TestZoomr:   r   rJ   c                    dddgfD ]  }|j                  |j                  d|j                        d      }t        j                  |||      }|j
                  dk(  sJ |j                  |dd d f   dk7        sJ |j                  |dd d f   d	t        z
  k\        sJ |j                  |dd d f   d
t        z   k        sJ |j                  |dt        z
  k\        sJ |j                  |dt        z   k        rJ  y )Nr3      rL   )r   r   rs   )r   r   r(   r   r  r   r  )r  rZ   r[   r=   zoomr   alleps)r@   r:   rB   zarrs        r/   
test_zoom1zTestZoom.test_zoom1  s    aV 	-A**RYYrY<fEC,,sAU3C99(((66#b!e*/***66#b!e*c233366#ad)C011166#!c'*+++66#"s(+,,,	-r2   c                     |j                  |j                  d      d      }t        j                  t        j                  |d      d      }t	        ||       y )Nr   r   r3   r+   )r  rZ   r=   r  r   )r@   rB   r  ry   s       r/   
test_zoom2zTestZoom.test_zoom2  s?    jj2/ll7<<Q/5S!r2   c                    |j                  ddgg      }t        j                  |d      }t        j                  |d      }t        ||j                  ddgddgg             t        ||j                  g dg             y )Nr   r3   r  r   )r   r   r3   r3   )r<   r=   r  r   )r@   rB   r  r7  r8  s        r/   
test_zoom3zTestZoom.test_zoom3  sk    jj1a&"||C(||C(!$

QFQF3C(DE!$

L>(BCr2   rM   r[   r   c                    t        ||      }|j                  g dg dg dg|      }t        |      j                  } ||j                  d      r|d|z  z  }t               5 }|j                  t        d       t        j                  ||j                  ddg      d	d
|      }d d d        t        d d dd d df   |       y # 1 sw Y   !xY w)NrG   r   r   rL   r   r   r  r+   r   r   rs   r3   )ru   r<   r
   r   rM   r   r  r  r=   rU  r   )r@   r:   rM   rB   rC   r   r  ry   s           r/   test_zoom_affine01zTestZoom.test_zoom_affine01  s     E"zz<'*,38  : "$'//4::12BID  	@CJJ{%& **4S#J1G+1@C		@ 	"#cc3Q3h-6	@ 	@s   #ACCc                 `    d}t        j                  |j                  ||f      d|z  d       y )Nr         ?r   rR   )r=   r  r  )r@   rB   dims      r/   test_zoom_infinityzTestZoom.test_zoom_infinity  s(    RXXsCj)28)Dr2   c                     |j                  d      }d}t        j                  ||d      }|j                  d      }t        ||       y )N)r   r   r   )r  r  r  r6   )r7   )r   r   r   )r  r=   r  r   )r@   rB   r  r  ry   refs         r/   test_zoom_zoomfactor_onez!TestZoom.test_zoom_zoomfactor_one  s?    hhy!ll31-hh{#!#s+r2   c                 x    |j                  d      }d}t        j                  ||      }|j                  dk(  sJ y )N)r4   r   r  )gUUUUUU?gE]t?g(\?)r'   rN      )r  r=   r  r   )r@   rB   r  r  ry   s        r/   test_zoom_output_shape_roundoffz(TestZoom.test_zoom_output_shape_roundoff  s7    hh{#.ll3%yyK'''r2   r  )r<  )r4   r   )r   r3   )r   r   r8   )r   r   r   r   r   r   r   r   c                 6   t        j                  ddgddggt         j                        }t        j                  |t        j                  |            }|j                  |      }|j                  |      }t        t        j                  ||d|      |       y )Nr   r   r3   r4   rL   rP   )rY   r<   r[   kronrv   r   r=   r  )r@   r  r8   rB   r  rh   r.   s          r/   test_zoom_by_int_order0z TestZoom.test_zoom_by_int_order0  s|     zzAq6q6#*,**6774/JJt::h'!LLD5	
r2   r   r  )r'   r'   )r   r   r   r   r   c                 T   t        j                  t        j                  |      t              j	                  |      }|j                  |      }t        t        j                  ||d|d      |j                  t        j                  |t        j                  |                         y )NrL   r   T)r:   r8   	grid_mode)rY   rZ   prodr  r  r<   r   r=   r  r	  rv   )r@   r   r  r8   rB   r  r.   s          r/   test_zoom_grid_by_int_order0z%TestZoom.test_zoom_grid_by_int_order0  sp     yyu5==eDJJt!LLDEJJrwwtRWWT]34	
r2   r   r   c                     |j                  |j                  d|j                        d      }t        j                  t
        d      5  t        j                  |d|d      f d d d        y # 1 sw Y   y xY w)	Nr   rL   )r4   r4   zIt is recommended to use mode)matchr3   T)r8   r  )r  rZ   r[   rW   warnsr  r=   r  )r@   r8   rB   r.   s       r/   test_zoom_grid_mode_warningsz%TestZoom.test_zoom_grid_mode_warnings  sa     JJryy"**y5v>\\+ ?A 	;LLADD9:	; 	; 	;s   	A--A6Tz!inplace output= is numpy-specificr}   c                     |j                  |j                  d      d      }t        j                  |d|j	                  d             y)zTicket #643r   r   r3   r   r   N)r  rZ   r=   r  r  )r@   rB   r.   s      r/   test_zoom_output_shapezTestZoom.test_zoom_output_shape%  s5     JJryy}f-Q"((6"23r2   c                     |j                  d      }d}t        j                  |t        j                  |            }t        j                  ||      }t        ||       y )Ng      $@r3   )rZ   r=   r  rY   arrayr   )r@   rB   r  factoractualrh   s         r/   test_zoom_0d_arrayzTestZoom.test_zoom_0d_array+  sG    IIcNa&!12<<6*)r2   N)rj   rk   rl   rW   rm   rn   ro   r  r  r  r  r  r  r  r
  r  thread_unsafer  r   r  r  r,   r2   r/   r  r    s   [[WeAqk2	- 3	-"
D [[WeAqk2[[Wy,&?@7 A 37 E
,( [[V%EF[[V &7 8
8 G
" [[Wvv&67[[V%EF[[V &D E

E G 8

 [[Vj&%9:[[;  ;; d+NO4 P4
*r2   r  c                      e Zd Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            ej                  j                  dddg      d	               Z	ej                  j                  d edd            d
        Z
ej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zd Zd Zd Zy)
TestRotater:   r   rJ   c                     |j                  g dg dg dg|j                        }t        j                  |d|      }t	        ||       y )Nr   r   r   r   r   rL   r   rs   r<   r[   r=   rotater   rV  s        r/   test_rotate01zTestRotate.test_rotate016  sG    zz<'')02

  < nnT1E2!#t,r2   c                     |j                  g dg dg dg|j                        }|j                  g dg dg dg dg|j                        }t        j                  |d|      }t	        ||       y )Nr   )r   r   r   r   rL   r   r   r   r   r   r   Z   rs   r  r@   r:   rB   rC   rh   ry   s         r/   test_rotate02zTestRotate.test_rotate02>  su    zz<'')02

  < ::y(((* 24  = nnT2U3!#x0r2   rM   r[   r   c                 P   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg dg dg|      }t        |      j                  } ||j                  d      r|d|z  z  }|d|z  z  }t        j                  |d|	      }t        ||       y )
Nr   r   r   r   r   r   r   r   r   r   rL   r#  r$  r   r   r%  rs   )ru   r<   r
   r   rM   r=   r   r   r`  s           r/   test_rotate03zTestRotate.test_rotate03J  s     E"zz?**,38  : ::y((((	* 27	  8
 "$'//4::12BIDX%HnnT2U3!#x0r2   c                     |j                  g dg dg dg|j                        }|j                  g dg dg dg|j                        }t        j                  |dd|      }t	        ||       y )Nr)  r*  rL   r   r   r   r   r   r%  F)r  r:   r  r&  s         r/   test_rotate04zTestRotate.test_rotate04]  ss    zz?**,35::  ? ::..079zz  C nnT2uEB!#x0r2   c                    t        j                  d      }t        d      D ]=  }t        j                  g dg dg dg dgt         j                        |d d d d |f<   ? |j                  |      }|j                  g dg dg dg|j                        }t        j                  |d|	      }t        d      D ]  }t        |d d d d |f   |        y )
N)r'   r4   r4   r4   r#  r$  rL   r   r  r%  rs   rY   rE  ro   r<   r[   r=   r   r   r@   r:   rB   rC   irh   ry   s          r/   test_rotate05zTestRotate.test_rotate05h  s    xx	"q 	FAJJ	(1(1(1(3 ;=**FDAqM	F
 zz$::|++-46JJ  @ nnT2U3q 	>A%c!Q'lH=	>r2   c                    t        j                  d      }t        d      D ]:  }t        j                  g dg dg dgt         j                        |d d d d |f<   < |j                  |      }|j                  g dg dg dg dg|j                        }t        j                  |d|	      }t        d      D ]  }t        |d d d d |f   |        y )
N)r4   r'   r4   r4   r   r  rL   r#  r$  r%  rs   r0  r1  s          r/   test_rotate06zTestRotate.test_rotate06x  s    xx	"q 	IAJJ(4(4(6=?ZZIDAqM	I zz$::y(((* 24  = nnT2U3q 	>A%c!Q'lH=	>r2   c                 P   |j                  g dg dg dggdz  |j                        }t        |      j                  } ||d      }|j                  g dg dg dg dg dggdz  |j                        } ||d      }t	        j
                  |dd	|
      }t        ||       y )Nr)  r*  r3   rL   r3   r   r   r#  r$  r%  r  )axesr:   r<   r[   r
   permute_dimsr=   r   r   r@   r:   rB   rC   r:  rh   ry   s          r/   test_rotate07zTestRotate.test_rotate07  s    zzO++- .0129;  E 't,99D),::	 ) ) ) )	 + , /0	0 8:zz	  C
  )4nnT2F%@!#x0r2   c                 p   |j                  g dg dg dggdz  |j                        }t        |      j                  } ||d      }|j                  g dg dg dggdz  |j                        }t        |      j                  } ||d      }t	        j
                  |ddd	|
      }t        ||       y )Nr)  r*  r3   rL   r7  r-  r%  r  F)r8  r  r:   r9  r;  s          r/   test_rotate08zTestRotate.test_rotate08  s    zzO++- .0129;  E 't,99D),:: / / 1 2456=?ZZ  I 't,99)4nnT2FEO!#x0r2   c                     |j                  g dg dg dgdz  |j                        }t        t              5  t	        j
                  |dd|j                  f       d d d        y # 1 sw Y   y xY w)Nr)  r*  r3   rL   r%  r   )r8  )r<   r[   r  r  r=   r   r  )r@   rB   rC   s      r/   test_rotate09zTestRotate.test_rotate09  si    zz?**,./079zz  C :& 	:NN41dii.9	: 	: 	:s   %A''A0c           
      F   |j                  |j                  d|j                        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                        }t	        j
                  |dd      }t        ||dd       y )N-   rL   )r4   r   r4   )rz  rz  rz  )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)angler  gư>g>rT   )r  rZ   r[   r<   r=   r   r   )r@   rB   rC   rh   ry   s        r/   test_rotate10zTestRotate.test_rotate10  s    zz"))Bbjj)99E :: / D G /	 1
 !E D 2 D G	 I
 !0 G G / /	 12 :<  E  nnTU;XDt<r2   c                     t        |      rt        j                  d       t        j                  |j                  d      d      }t        j                  t        j                  |d      d      }t        ||       y )Nz(https://github.com/cupy/cupy/issues/8400r   )r   r      iL)	r   rW   rX   rY   tilerZ   r=   r   r   )r@   rB   r  r  s       r/   test_rotate_exact_180z TestRotate.test_rotate_exact_180  sS    2;LLCDGGBIIaL&)NN7>>!S1481r2   N)rj   rk   rl   rW   rm   rn   ro   r!  r'  r+  r.  r3  r5  r<  r>  r@  rD  rH  r,   r2   r/   r  r  4  s   [[WeAqk2- 3- [[WeAqk2	1 3	1 [[WeAqk2[[Wy,&?@1 A 31" [[WeAqk21 31 [[WeAqk2> 3> [[WeAqk2> 3> [[WeAqk21 31 [[WeAqk21 31:=0r2   r  )'rM  numpyrY   numpy.testingr   scipy._lib._array_apir   r   r   r   r   r	   r
   rW   r   r  scipy.ndimager=    r   scipy.conftestr   rm   r   usefixtures
pytestmarkr  r_   r    rn   ro   rq   r   r  r0  rR  r  r  r  r,   r2   r/   <module>rQ     s   
  +  M L  *   /;;// "FKK$;$;<N$O&+9NPR
   F; F;R %1+.%(#1 #1 ) /#1L &!IJ%1+.K/ K/ / KK/\ &!IJJ, J, KJ,ZtD tDnA
 A
HF
 F
R{* {*|X Xr2   