
    bij                        d dl Z d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZ d dlZd dlmZ d dlmZ ddlmZ ej&                  j(                  Zej&                  j*                  ZdZdddd	d
ddZ G d d      Z eej2                        ej&                  j5                  d edd            ej&                  j5                  de       G d d                           Z eej:                        ej&                  j5                  d ed d             G d d                    Z eej:                         G d d             Z eej@                         G d d             Z! eejD                         G d d             Z# eejH                         G d d             Z% eejL                         G d d              Z' eejP                         G d! d"             Z)y)#    N)_asarrayassert_array_almost_equalis_jax	np_compatxp_assert_equalxp_assert_closemake_xp_test_case)raises   )types-q=reflect	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                   0   e Zd Z eej
                        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ej
                        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ej                        ej                  j                  dg d      ej                  j                  d ed            d                      Zy)TestBoundariesz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    a/home/cdr/jupyterlab/.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selfr.   expected_valuexpr&   datas         r%   test_boundarieszTestBoundaries.test_boundaries%   sG    	! zz-(''e"459DJJ~&	(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      |j                  |             y )Nc                     | d   dz
  fS )Nr   g?r"   r#   s    r%   r&   z.TestBoundaries.test_boundaries2.<locals>.shiftF   r'   r(   r   r)   r*   r   r   r   )r-   r.   r/   r1   r5   s         r%   test_boundaries2zTestBoundaries.test_boundaries2:   sD    	! zz,'''e"459;JJ~&	(r(   r.   )r   r   r   r   r   r   r0      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                  |||j                  df   ||      }d}t        j                  |      }	|j                  t        j                  |||	            }
|j                  ||z         |j                  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 > 1ir,   dtypei   i  )num.r0   r.       r.   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r2   linspacer3   map_coordinatesnewaxisndimage_to_numpy_modegetpadr   )r6   r.   r0   r8   np_datar9   r$   ynpadpad_modepaddedcoordsexpectedrL   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!BJJO*<EPTU (,,T2BFF7Dx@AD1H%bjj#o6**66TR.tE8$T:r(   N)__name__
__module____qualname__r	   r3   r4   rM   markparametrizer:   r?   rS   ranger_   r"   r(   r%   r   r   #   sO   w223[[
0	1
5	6
:	;
7	8
6	7
5	6
;	<	>	(	 4( w223[[
\	"
,	
|	$
L	!
\	"
m	$
=	)	+	(	 4( w../[[V &1 2 [[WeAh/; 02 0
;r(   r   r0   r)   r@   rC   c                   H    e Zd Zd Zd Z eddgd      d        Zd Zd	 Zy
)
TestSplinec                     t        ||      }|j                  g |      }t        j                  ||      }||j	                  d|j
                        k(  sJ y )NrB   r0   r   getattronesr3   spline_filterr2   rC   r6   rC   r0   r8   r9   outs         r%   test_spline01zTestSpline.test_spline01q   sQ    E"wwrw'##D6bjj#))j4444r(   c                     t        ||      }|j                  dg|      }t        j                  ||      }t	        ||j                  dg             y )Nr   rB   ri   )rk   r2   r3   rm   r   rn   s         r%   test_spline02zTestSpline.test_spline02w   sH    E"zz1#Uz+##D6!#rzz1#7r(   Tcupyzoutput=dtype is numpy-specific)np_only
exceptionsreasonc                     t        ||      }|j                  g |      }t        j                  |||      }||j	                  d|j
                        k(  sJ y )NrB   outputr   rj   rn   s         r%   test_spline03zTestSpline.test_spline03}   sU     E"wwrw'##D%>bjj#))j4444r(   c                     t        ||      }|j                  dg|      }t        j                  ||      }t	        ||j                  g d             y )Nr   rB   r   r   r   r   )rk   rl   r3   rm   r   r2   rn   s         r%   test_spline04zTestSpline.test_spline04   sG    E"wws%w(##D%0!#rzz,'?@r(   c                     t        ||      }|j                  ddg|      }t        j                  ||      }|j	                  g dg dg dg dg      }t        ||       y )Nr   rB   ri   r|   )rk   rl   r3   rm   r2   r   )r6   rC   r0   r8   r9   ro   r^   s          r%   test_spline05zTestSpline.test_spline05   s`    E"ww1vUw+##D6::|+++- . 	"#x0r(   N)	r`   ra   rb   rp   rr   skip_xp_backendsrz   r}   r   r"   r(   r%   rg   rg   l   s9    
58 dx=?5?5A1r(   rg   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       Hr(   ri   rB   r2   r3   r4   shaper   rC   r6   r0   r8   r9   r   ro   s         r%   test_geometric_transform01z1TestGeometricTransform.test_geometric_transform01   sR    zz1#	 ))$057!#rzz1#SYYz'GHr(   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   r(   ri   r|   rB   rl   r3   r4   r   r   r2   rC   r   s         r%   test_geometric_transform02z1TestGeometricTransform.test_geometric_transform02   sP    wws|	 ))$057!#rzz,ciiz'PQr(   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;r(   ri   r   r   r   r   rB   r   r   s         r%   test_geometric_transform03z1TestGeometricTransform.test_geometric_transform03   sP    wws|	 ))$057!#rzz,ciiz'PQr(   c                     |j                  g d      }d }t        j                  |||j                  |      }t	        ||j                  g d|j
                               y )Nr   r   r*   r)   c                     | d   dz
  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform04.<locals>.mapping   r   r(   ri   r   r   r   r*   rB   r   r   s         r%   test_geometric_transform04z1TestGeometricTransform.test_geometric_transform04   sO    zz,'	 ))$057!#rzz,ciiz'PQr(   rC   rQ   
complex128c                 H   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg|      }|j                  |j                  d      r|d|z  z  }|d|z  z  }d }t	        j
                  |||j                  |      }t        ||       y )Nr|   rB   r   complex floating              ?c                     | d   | d   dz
  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform05.<locals>.mapping       aD!A$(##r(   ri   )rk   r2   isdtyperC   r3   r4   r   r   )r6   r0   rC   r8   r9   r^   r   ro   s           r%   test_geometric_transform05z1TestGeometricTransform.test_geometric_transform05   s    E"zz<'')05  7 ::|++-49  ; ::djj"45BIDX%H	$ ))$057!#x0r(   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@         r*   r   r*   r@   c                     | d   | d   dz
  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform06.<locals>.mapping   r   r(   ri   r   r   r,   r@   r   r   r*   r   r*   rB   r2   r3   r4   r   rC   r   r6   r0   r8   r9   r   ro   r^   s          r%   test_geometric_transform06z1TestGeometricTransform.test_geometric_transform06   t    zz<'') *	$ ))$057::|++-47II  ? 	"#x0r(   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##r(   ri   r   r   r   r   rB   r   r   s          r%   test_geometric_transform07z1TestGeometricTransform.test_geometric_transform07   r   r(   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''r(   ri   r   r   r   rB   r   r   s          r%   test_geometric_transform08z1TestGeometricTransform.test_geometric_transform08   st    zz<'') *	( ))$057::|++-47II  ? 	"#x0r(   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   r(   r   ri   Fr0   	prefilterr   r   r   rB   )r2   r3   rm   r4   r   rC   r   )r6   r0   r8   r9   r   filteredro   r^   s           r%   test_geometric_transform10z1TestGeometricTransform.test_geometric_transform10  s    zz<'') *	( AI,,T?HH))(GTZZ05H::|++-47II  ? 	"#x0r(   c                     |j                  dg|j                        }d }t        j                  ||dg|      }t	        ||j                  g d|j                               y )Nr)   rB   c                     | d   dz  fS Nr   r)   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform13.<locals>.mapping  s    aDAI<r(   r   ri   r|   )rl   rQ   r3   r4   r   r2   rC   r   s         r%   test_geometric_transform13z1TestGeometricTransform.test_geometric_transform13  sT    wws"**w-	  ))$!EJ!#rzz,ciiz'PQr(   c                     |j                  g d      }d }t        j                  ||dg|      }t        ||j                  g d|j                               y )Nr   r   r)   r@   r*   r,   r   r   c                     d| d   z  fS )Nr)   r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform14.<locals>.mapping#  s    !H;r(   r   ri   r=   rB   )r2   r3   r4   r   rC   r   s         r%   test_geometric_transform14z1TestGeometricTransform.test_geometric_transform14   sK    zz23	 ))$!EJ!#rzz,ciiz'PQr(   c                     |j                  g d      }d }t        j                  ||dg|      }t        |d d d   |j                  g d             y )Nr=   c                     | d   dz  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform15.<locals>.mapping,  r   r(   r   ri   r)   r2   r3   r4   r   r   s         r%   test_geometric_transform15z1TestGeometricTransform.test_geometric_transform15)  sJ    zz,'	 ))$!EJ!#cc(BJJ|,DEr(   c           	          g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        ||j                  ddgd	d
gddgg             y )Nr=   r   r@   r,   r   g      "@
         c                     | d   | d   dz  fS Nr   r   r)   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform16.<locals>.mapping8  r   r(   r*   r)   ri   r   r*   r   r,   	   r   r   r   s         r%   test_geometric_transform16z1TestGeometricTransform.test_geometric_transform162  sh    !# zz$	$ ))$057!#rzzAq6Aq6Ar72K'LMr(   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        ||j                  g dg             y )Nr=   r   r   r   r   r   c                     | d   dz  | d   fS Nr   r)   r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform17.<locals>.mappingE  r   r(   r   r   ri   r   r   s         r%   test_geometric_transform17z1TestGeometricTransform.test_geometric_transform17?  sW    ! zz$	$ ))$057!#rzz<.'ABr(   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        ||j                  ddgg             y )	Nr=   r   r   c                 "    | d   dz  | d   dz  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform18.<locals>.mappingR  r   r(   r   r)   ri   r   r*   r   r   s         r%   test_geometric_transform18z1TestGeometricTransform.test_geometric_transform18L  s[    ! zz$	( ))$057!#rzzAq6(';<r(   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        |dd d df   |       y )	Nr=   r   r   c                     | d   | d   dz  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform19.<locals>.mapping_  r   r(   r*   r   ri   .r)   r   r   s         r%   test_geometric_transform19z1TestGeometricTransform.test_geometric_transform19Y  sX    ! zz$	$ ))$057!#c3Q3h-6r(   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        |d d ddf   |       y )	Nr=   r   r   c                     | d   dz  | d   fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform20.<locals>.mappingl  r   r(   r@   r   ri   r)   .r   r   s         r%   test_geometric_transform20z1TestGeometricTransform.test_geometric_transform20f  sX    ! zz$	$ ))$057!#cc3h-6r(   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        |d d dd d df   |       y )Nr=   r   r   c                 "    | d   dz  | d   dz  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform21.<locals>.mappingy  r   r(   r@   r   ri   r)   r   r   s         r%   test_geometric_transform21z1TestGeometricTransform.test_geometric_transform21s  s\    ! zz$	( ))$057!#cc3Q3h-6r(   c                     g dg dg dg}|j                  ||j                        }d }d }t        j                  ||d|      }t        j                  ||d	|      }t	        ||       y )
Nr=   r   r   rB   c                 "    | d   dz  | d   dz  fS r   r"   r#   s    r%   mapping1zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping1  r   r(   c                 "    | d   dz  | d   dz  fS r   r"   r#   s    r%   mapping2zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping2  r   r(   r   ri   r*   r   )r2   rQ   r3   r4   r   )r6   r0   r8   r9   r   r   ro   s          r%   test_geometric_transform22z1TestGeometricTransform.test_geometric_transform22  sr    ! zz$bjjz1	(	( ))$*0?))#x*0?!#t,r(   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        ||j                  ddg             y )	Nr=   r   r   c                     d| d   dz  fS )Nr   r   r)   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform23.<locals>.mapping      qtax= r(   r)   ri   r   r,   r   r   s         r%   test_geometric_transform23z1TestGeometricTransform.test_geometric_transform23  sV    ! zz$	! ))$UK!#rzz1a&'9:r(   c           	          g dg dg dg}|j                  |      }d }t        j                  ||d|dddi	      }t        ||j                  d
dg             y )Nr=   r   r   c                     || d   |z  fS )Nr   r"   )r$   abs      r%   r   zBTestGeometricTransform.test_geometric_transform24.<locals>.mapping  r   r(   r   )r   r   r)   )r0   extra_argumentsextra_keywordsr   r,   r   r   s         r%   test_geometric_transform24z1TestGeometricTransform.test_geometric_transform24  sd    ! zz$	! ))'4ud8% 	"#rzz1a&'9:r(   N)r`   ra   rb   r   r   r   r   rM   rc   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r(   r%   r   r      s    IRRR [[Wy,&?@1 A1(1111&RRFNC=777-$
;;r(   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   r)   r*   r   r   r@   rB   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$*--r(   g      ?g      ?      ?r  g      @r+   r   r   r.   r0   )r2   rQ   r   r3   r4   )r6   r8   r$   r   expected_results        r%   -test_geometric_transform_grid_constant_order1zITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1  sj     JJ	!#*,**  6	. **&8&8&: ;!''7./1	
r(   r.   r   r   r   r   r   r0   r@   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  r(      rB   r      rH   r  rI   rK   )rO   rP   floatreshaperU   rV   rW   r2   tupleslicendimr3   r4   r   )r6   r0   r.   r8   r   r$   rZ   r[   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		
r(   Tzendianness is numpy-specificrt   rv   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   r(   rx   )
rO   r2   rC   newbyteorder
empty_likeastyper3   r4   r   r   )r6   r8   r9   r   ro   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	3r(   !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   r(   frx   )r2   r3   r4   rC   rO   r   )r6   r8   r9   r   ro   s        r%   +test_geometric_transform_with_string_outputzGTestGeometricTransformExtra.test_geometric_transform_with_string_output  sR    zz1#	 ))$DyyBHHSM)))!#s+r(   N)r`   ra   rb   r
  rM   rc   rd   re   r  r   r"  r'  r"   r(   r%   r   r     s    
" [[V &; <[[WeAh/
 0<
4 d+IJ3 K3  d+NO, P,r(   r   c                   V   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                  j!                  dej$                  v xs  ej&                  d      j(                  dk  d	      d               Zy)TestMapCoordinatesr0   r   r@   rC   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      }|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   ri   )r   rM   rN   r2   r   rC   rO   indicesr   r3   rS   r   )r6   r0   rC   r8   r9   r^   idxro   s           r%   test_map_coordinates01z)TestMapCoordinates.test_map_coordinates01  s     ":%!)LLBCzz<'') * ::|++- . ::djj"45"t)#D"x-/Hjj$qjjo%%dCu=!#x0r(   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   r+  zoutput differs. jax bug?r   r   r   r!   ri   )r   rM   rN   r2   rO   r,  r   rQ   r3   r&   rS   r   )r6   r0   r8   r9   r-  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>!$-r(   	jax.numpyz`order` is required in jaxrv   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)r0   r8   r   r   r   r   r   r   r)   .r   r   r,   )	r   rO   r,  r   r2   r3   rS   r   r&   )r6   r8   r9   r-  ro   r^   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Kr(   T)rt   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   r)   r,   r@   r   rx   )rO   r2   r,  r   rC   r  r  r  r3   rS   r   )r6   r8   r9   r^   r-  ro   r   r!  s           r%   5test_map_coordinates_endianness_with_output_parameterzHTestMapCoordinates.test_map_coordinates_endianness_with_output_parameterC  s     zzAq6Aq6*+::1v1v./jj$qJJJJ##%MM(#MM(#**8>>+F+F+HI	
 	8C ..tSEH$,S(F%fh7	8r(   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&  rx   )r2   rO   r,  r   r3   rS   rC   r   )r6   r8   r9   r-  ro   s        r%   'test_map_coordinates_with_string_outputz:TestMapCoordinates.test_map_coordinates_with_string_outputW  sx    zzA3% jj$jjo%%dC<yyBHHSM)))!#rzzA3%'89r(   )cpu_only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  r)   rB   r   r*   r   r   ri   zNot enough memory available)
rO   emptyfloat32r  r3   rS   r2   MemoryErrorrM   skip)r6   r8   nr   es        r%   test_map_coordinates_large_dataz2TestMapCoordinates.test_map_coordinates_large_data`  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)r`   ra   rb   rM   rc   rd   re   rO   rQ   r   r.  r2  r   r8  r:  r=  skipifsysplatformintpitemsizerG  r"   r(   r%   r)  r)    sB    [[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: [[!!4!0[[3<</J72771:3F3F3J 4  5D5 1Dr(   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            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dd      ej                  j                  d edd            d               Z edd      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dd$      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 d0      ej                  j                  d edd            d1               Z(ej                  j                  d edd            d2        Z)y3)4TestAffineTransformr0   r   r@   c                     |j                  dg      }t        j                  ||j                  dgg      |      }t        ||j                  dg             y )Nr   ri   r2   r3   affine_transformr   r6   r0   r8   r9   ro   s        r%   test_affine_transform01z+TestAffineTransform.test_affine_transform01v  sF    zz1#&&tRZZ!->eL!#rzz1#7r(   c                     |j                  dg      }t        j                  ||j                  dgg      |      }t	        ||j                  g d             y )Nr   r   ri   r|   rl   r3   rQ  r2   r   rR  s        r%   test_affine_transform02z+TestAffineTransform.test_affine_transform02|  sE    wws|&&tRZZ!->eL!#rzz,'?@r(   c                     |j                  dg      }t        j                  ||j                  dgg      d|      }t	        ||j                  g d             y )Nr   r   r   ri   r   rU  rR  s        r%   test_affine_transform03z+TestAffineTransform.test_affine_transform03  sG    wws|&&tRZZ!->%P!#rzz,'?@r(   c                     |j                  g d      }t        j                  ||j                  dgg      d|      }t        ||j                  g d             y )Nr   r   r   ri   r   rP  rR  s        r%   test_affine_transform04z+TestAffineTransform.test_affine_transform04  sF    zz,'&&tRZZ!->%P!#rzz,'?@r(   rC   rQ   r   c                 \   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg|      }|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|   rB   r   r   r   r   r   r   ri   )rk   r2   r   rC   r3   rQ  r   r6   r0   rC   r8   r9   r^   ro   s          r%   test_affine_transform05z+TestAffineTransform.test_affine_transform05  s     E"zz<'')05  7 ::|++-49  ; ::djj"45BIDX%H&&tRZZ!Q!Q8H-I()2we=!#x0r(   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   ri   r   r   r   rP  rR  s        r%   test_affine_transform06z+TestAffineTransform.test_affine_transform06  sw    zz<'') * &&tRZZ!Q!Q8H-I()2we=!#rzz<3?3?3A (B 	Cr(   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   ri   r   rP  rR  s        r%   test_affine_transform07z+TestAffineTransform.test_affine_transform07  sw    zz<'') * &&tRZZ!Q!Q8H-I(*Awe=!#rzz<3?3?3A (B 	Cr(   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   ri   r   r   r   rP  rR  s        r%   test_affine_transform08z+TestAffineTransform.test_affine_transform08  sw    zz<'') * &&tRZZ!Q!Q8H-I(*Bxu>!#rzz<3?3?3A (B 	Cr(   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   ri   r   r   Fr   r   r   r   )r2   r3   rm   rQ  r   r6   r0   r8   r9   r   ro   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r(   c                     |j                  dg|j                        }t        j                  ||j	                  dgg      d|      }t        ||j	                  g d             y )Nr)   rB   r!   r>   )r/   r0   r   r   r   r   )rl   rQ   r3   rQ  r2   r   rR  s        r%   test_affine_transform10z+TestAffineTransform.test_affine_transform10  sS    wws"**w-&&tRZZ#-@t-24!#rzz,'?@r(   c                     |j                  g d      }t        j                  ||j                  dgg      dd|      }t        ||j                  g d             y )Nr   r)   r   r>   ri   r=   rP  rR  s        r%   test_affine_transform11z+TestAffineTransform.test_affine_transform11  sI    zz23&&tRZZ!->4uU!#rzz,'?@r(   c                     |j                  g d      }t        j                  ||j                  dgg      dd|      }t        |d d d   |j                  g d             y )Nr=   r!   r   r   ri   r)   rP  rR  s        r%   test_affine_transform12z+TestAffineTransform.test_affine_transform12  sQ    zz,'&&tRZZ#-@!TQVW!#cc(BJJ|,DEr(   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 )Nr=   r   r   r   r   r)   r   ri   r*   r   r,   r   r   rP  rR  s        r%   test_affine_transform13z+TestAffineTransform.test_affine_transform13  sy    !# zz$&&tRZZ!Q!Q8H-I1f-24!#rzzAq6Aq6Ar72K'LMr(   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 )	Nr=   r   r   r)   r   r   r   ri   rP  rR  s        r%   test_affine_transform14z+TestAffineTransform.test_affine_transform14  sh    ! zz$&&tRZZ!Q!Q8H-I1f-24!#rzz<.'ABr(   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 )
Nr=   r   r   r)   r   r   ri   r   r*   rP  rR  s        r%   test_affine_transform15z+TestAffineTransform.test_affine_transform15  sl    ! zz$&&tRZZ!Q!Q8H-I1f-24!#rzzAq6(';<r(   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 )Nr=   r   r   r           r   r!   r   ri   .r)   rP  rR  s        r%   test_affine_transform16z+TestAffineTransform.test_affine_transform16  si    ! zz$&&tRZZ!SAs88L-Mq'-U<!#c3Q3h-6r(   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 )Nr=   r   r   r!   r   r   r   ri   r)   .rP  rR  s        r%   test_affine_transform17z+TestAffineTransform.test_affine_transform17  si    ! zz$&&tRZZ#qAq68J-KQ'-U<!#cc3h-6r(   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 )	Nr=   r   r   r!   r   r   ri   r)   rP  rR  s        r%   test_affine_transform18z+TestAffineTransform.test_affine_transform18  sj    zz<'*, - &&tRZZ#qAs88L-Mq'-U<!#cc3Q3h-6r(   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 )Nr=   r   r   rB   r!   r   r   ri          @r   )r2   rQ   r3   rQ  r   rR  s        r%   test_affine_transform19z+TestAffineTransform.test_affine_transform19  s    zz<'*,35::  ? &&tRZZ#qAs88L-Mq'-U<&&sBJJa1c(7K,La'-U<!#t,r(   rs   z(https://github.com/cupy/cupy/issues/8394r4  c                     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=   r   r   r   r)   r   ri   r   r*   rP  rR  s        r%   test_affine_transform20z+TestAffineTransform.test_affine_transform20)  g     ! zz$&&tRZZ!qc
-CQ-24!#rzz1a&'9:r(   c                     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=   r   r   r)   r   r   ri   r   r   rP  rR  s        r%   test_affine_transform21z+TestAffineTransform.test_affine_transform214  r  r(   c                     |j                  g d      }t        j                  ||j                  dgg      dgd|      }t        ||j                  g d             y )Nr   r)   r   )r*   ri   r   r   r)   rP  rR  s        r%   test_affine_transform22z+TestAffineTransform.test_affine_transform22?  sO     zz,'&&tRZZ!->d-24!#rzz)'<=r(   c                     |j                  g d      }t        j                  ||j                  dgg      dgd|      }t        |d d d   |j                  g d             y )Nr   r!   r   rm  ri   r)   r   rP  rR  s        r%   test_affine_transform23z+TestAffineTransform.test_affine_transform23G  sW     zz,'&&tRZZ#-@2$-24!#cc(BJJ|,DEr(   c                 p   |j                  g d      }t        j                         5  t        j                  ddt               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   ignore@The behavior of affine_transform with a 1-D array .* has changedr)   r   ri   r2   warningscatch_warningsfilterwarningsUserWarningr3   rQ  r   r6   r0   r8   r9   r0  r1  s         r%   test_affine_transform24z+TestAffineTransform.test_affine_transform24O  s     zz,'$$& 	T##R ++D"**aS/2USD	T ''bjj1#.?5Q!$-	T 	T   AB,,B5c                 p   |j                  g d      }t        j                         5  t        j                  ddt               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!   r   ri   r  r  s         r%   test_affine_transform25z+TestAffineTransform.test_affine_transform25\  s     zz,'$$& 	V##H%&13 ++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       }|j                  ||fd      }|j                  ||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   ri   r)   r)   r   axis)rv  r   r   r   )r   Fr   r   r   r   )
r2   r3   rm   eyerl   concatr  r  rQ  r   )r6   r0   r8   r9   r   tform_originaloffset_originaltform_h1tform_h2r$   offsr0  r1  out3ro   s                  r%   test_affine_transform26z+TestAffineTransform.test_affine_transform26h  sK    zz<'') * AI,,T?HH776?*99no>Q9G99h

K=(AB9K"$**_e"DEQaEE''.(,.3uF ''(%279''(%279$% 	GC%c2::|7C7C7E ,F G	G Fs   -D<zdoes not raisec                 .   |j                  g dg dg dg      }|j                  |j                  d      |j                  d       fd      }|j                  ||j                  g dg      fd	      }t	        t
        t        j                  ||       y )
Nr   r   r   r)   r  r   r  )      @r)   r   r   )r2   r  r  rl   assert_raises
ValueErrorr3   rQ  )r6   r8   r9   r  r  s        r%   test_affine_transform27z+TestAffineTransform.test_affine_transform27  s     zz<'') * 99bffQi"''&/)9:!9D99h

K=(AB9Kj'":":D(Kr(   Tzbyteorder is numpy-specificr  c           	      6   |j                  d      }|j                  |      |j                  |      j                  |j                  j	                               |j                  |j                  j	                         fD ]  }t        j                         5  t        j                  ddt               |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)r)   r)   r  r  r   rx   )rl   r  r  rC   r  r  r  r  r  r2   r3   rQ  r   )r6   r8   r9   ro   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'',-8: 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   rx   )	rO   r2   rC   r  r  r  r3   rQ  r   )r6   r8   r9   ro   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>	?r(   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   rB   )   r   rx   )r   )ry   r/   )
rP   rQ   rl   r3   rQ  r2   r   rM   r
   RuntimeErrorr6   r8   r9   ro   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 r<  )r2   r3   rQ  rC   rO   r   r  s       r%   (test_affine_transform_with_string_outputz<TestAffineTransform.test_affine_transform_with_string_output  s`    zz1#&&tRZZ!->sKyyBHHSM)))!#rzz1#7r(   r&   )r   r   r   r   )r   r   )r*   )r)   r,   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   r)   r*   r)   r*   r  r  r   r  )rO   r2   zerosr  rollr   r3   rQ  )r6   r&   r0   r8   r$   affiner^   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	
r(   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  r*   r   r   r   r)   r*   r   r  )	rO   r2   copyr  r  r   r   r3   rQ  )r6   r0   r8   r$   r^   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	
r(   N)*r`   ra   rb   rM   rc   rd   re   rS  rV  rX  rZ  r]  r_  ra  rc  rf  ri  rk  rn  rp  rr  rt  rw  ry  r{  r~  xfail_xp_backendsr  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r"   r(   r%   rN  rN  s  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- v&PQ[[WeAqk2; 3 R; v&PQ[[WeAqk2; 3 R; [[WeAqk2> 3> [[WeAqk2F 3F [[WeAqk2
. 3
. [[WeAqk2	. 3	. [[WeAqk2G 3G: v&67L 8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
r(   rN  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 )!	TestShiftr0   r   r@   c                     |j                  dg      }t        j                  |dg|      }t        ||j                  dg             y )Nr   ri   r   r2   r3   r&   r   rR  s        r%   test_shift01zTestShift.test_shift01  s9    zz1#mmD1#U3!#rzz1#7r(   c                     |j                  dg      }t        j                  |dg|      }t        ||j	                  g d             y )Nr   r   ri   r   rl   r3   r&   r   r2   rR  s        r%   test_shift02zTestShift.test_shift02  s8    wws|mmD1#U3!#rzz,'?@r(   c                     |j                  dg      }t        j                  |d|      }t        ||j	                  g d             y )Nr   r   ri   rh  r  rR  s        r%   test_shift03zTestShift.test_shift03  s6    wws|mmD"E2!#rzz,'?@r(   c                     |j                  g d      }t        j                  |d|      }t        ||j                  g d             y )Nr   r   ri   r   r  rR  s        r%   test_shift04zTestShift.test_shift04  s5    zz,'mmD!51!#rzz,'?@r(   rC   rQ   r   c                 0   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg|      }|j                  |j                  d      r|d|z  z  }|d|z  z  }t	        j
                  |ddg|      }t        ||       y )	Nr|   rB   r   r   r   r   r   ri   )rk   r2   r   rC   r3   r&   r   r\  s          r%   test_shift05zTestShift.test_shift05  s     E"zz<'')05  7 ::|++-49  ; ::djj"45BIDX%HmmD1a&6!#x0r(   r.   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|   rB   r   r   r   r  r   r   )r0   r.   r-   )rO   r2   r   r   rC   r3   r&   r   )	r6   r0   r.   rC   r8   r9   r^   r-   ro   s	            r%   test_shift_with_nonzero_cvalz&TestShift.test_shift_with_nonzero_cval  s     zz<'')057 ::|++-49; TZZ);<BIDX%HAzz$::h'mmD1a&DtL!#x0r(   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   ri   r   r   r   r  rR  s        r%   test_shift06zTestShift.test_shift062  Z    zz<'') * mmD1a&6!#rzz<3?3?3A (B 	Cr(   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   ri   r   r  rR  s        r%   test_shift07zTestShift.test_shift07<  r  r(   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   ri   r   r   r   r  rR  s        r%   test_shift08zTestShift.test_shift08F  r  r(   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   ri   Fr   r   r   r   )r2   r3   rm   r&   r   re  s         r%   test_shift09zTestShift.test_shift09P  sz    zz<'') * AI,,T?HHmmHq!fEUK!#rzz<3?3?3A (B 	Cr(   r&   r  c                     t        j                  ddgddgg      }t        j                  ||d      }|j                  |      }|j                  |      }t        t	        j
                  ||d|      |       y )	Nr   r   r)   r*   r  r  r   r  )rO   r2   r  r   r3   r&   )r6   r&   r0   r8   r$   r^   s         r%   test_shift_grid_wrapzTestShift.test_shift_grid_wrap^  sn    
 JJAA  !771e%0JJqM::h'!MM!UEB	
r(   c           	          |j                  |j                  d      d      }t        t        j                  ||d|      t        j                  ||d|             y )N   )r   r   r   r  r   )r  rP   r   r3   r&   )r6   r&   r0   r8   r$   s        r%   test_shift_grid_constant1z#TestShift.test_shift_grid_constant1o  sH    
 JJryy}f-!MM!UFMM!U5A	
r(   c                     |j                  g dg dg|j                        }|j                  g dg dg      }t        t        j                  |ddd	      |       y )
Nr  r  rB   r  r  )r!   r!   r   r   r  )r2   rQ   r   r3   r&   )r6   r8   r$   r	  s       r%   test_shift_grid_constant_order1z)TestShift.test_shift_grid_constant_order1z  s\    JJ	!#*,**  6**&8&8&: ;!MM!ZoQG	
r(   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  )rO   r2   r  r   r3   r&   r   )r6   r0   r8   r$   r^   s        r%   test_shift_reflectzTestShift.test_shift_reflect  sv     JJ	!# $TrT4R4Z=%%'JJqM::h'!MM!QWW9EB	
r(   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   )r.   r0   r   r)   r   r   r   )rP   dictr   r3   r&   )r6   r0   r   r8   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	
r(   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  rB   r   )r  gffffffrG   rH   r  rI   r  )rO   rP   r  r  rU   rV   r2   rW   r  r  r  r3   r&   r   )r6   r0   r.   r8   x_npr&   rZ   r[   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;	
r(   N)r`   ra   rb   rM   rc   rd   re   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"   r(   r%   r  r    sl    [[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<
r(   r  c                   b   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      d        Z edd       edd      d               Zd  Z ed!d"      d#        Z ed!d"       edd$       edd%      d&                      Zy')(TestZoomr0   r   r@   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 )Nr)      rB   )r   r   ri   )r   r   r   r   r  r   r  )r  rP   rQ   r3   zoomr   alleps)r6   r0   r8   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(+,,,	-r(   c                     |j                  |j                  d      d      }t        j                  t        j                  |d      d      }t	        ||       y )Nr   r   r)   r!   )r  rP   r3   r  r   )r6   r8   r  ro   s       r%   
test_zoom2zTestZoom.test_zoom2  s?    jj2/ll7<<Q/5S!r(   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   r)   r  r   )r   r   r)   r)   )r2   r3   r  r   )r6   r8   r  r0  r1  s        r%   
test_zoom3zTestZoom.test_zoom3  sk    jj1a&"||C(||C(!$

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

L>(BCr(   rC   rQ   r   c                    t        ||      }|j                  g dg dg dg|      }|j                  |j                  d      r|d|z  z  }t	        j
                         5  t	        j                  ddt               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)Nr=   r   r   rB   r   r   r  r  r!   r   r   ri   r)   )rk   r2   r   rC   r  r  r  r  r3   rQ  r   )r6   r0   rC   r8   r9   ro   s         r%   test_zoom_affine01zTestZoom.test_zoom_affine01  s     E"zz<'*,38  : ::djj"45BID$$& 	@##H%&13 **4S#J1G+1@C		@ 	"#cc3Q3h-6	@ 	@s   !ACCc                 `    d}t        j                  |j                  ||f      d|z  d       y )Nr         ?r   rH   )r3   r  r  )r6   r8   dims      r%   test_zoom_infinityzTestZoom.test_zoom_infinity  s(    RXXsCj)28)Dr(   c                     |j                  d      }d}t        j                  ||d      }|j                  d      }t        ||       y )N)r   r   r   )r  r}  r}  r,   )r-   )r   r   r   )r  r3   r  r   )r6   r8   r  r  ro   refs         r%   test_zoom_zoomfactor_onez!TestZoom.test_zoom_zoomfactor_one  s?    hhy!ll31-hh{#!#s+r(   c                 x    |j                  d      }d}t        j                  ||      }|j                  dk(  sJ y )N)r*   r   r  )gUUUUUU?gE]t?g(\?)r   rD      )r  r3   r  r   )r6   r8   r  r  ro   s        r%   test_zoom_output_shape_roundoffz(TestZoom.test_zoom_output_shape_roundoff  s7    hh{#.ll3%yyK'''r(   r  )r7  )r*   r   )r   r)   )r   r   r.   )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   r)   r*   rB   rF   )rO   r2   rQ   kronrl   r   r3   r  )r6   r  r.   r8   r  r^   r$   s          r%   test_zoom_by_int_order0z TestZoom.test_zoom_by_int_order0  s|     zzAq6q6#*,**6774/JJt::h'!LLD5	
r(   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 )NrB   r   T)r0   r.   	grid_mode)rO   rP   prodr  r  r2   r   r3   r  r  rl   )r6   r   r  r.   r8   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	
r(   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   rB   )r*   r*   zIt is recommended to use mode)matchr)   T)r.   r	  )r  rP   rQ   rM   warnsr  r3   r  )r6   r.   r8   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z
dask.arrayz!output=array requires buffer viewr4  r3  c                     |j                  |j                  d      d      }t        j                  |d|j	                  d             y)zTicket #643r   r   r)   r   rx   N)r  rP   r3   r  r  r6   r8   r$   s      r%   test_zoom_output_shapezTestZoom.test_zoom_output_shape&  s5     JJryy}f-Q"((6"23r(   c                     |j                  d      }d}t        j                  |t        j                  |            }t        j                  ||      }t        ||       y )Ng      $@r)   )rP   r3   r  rO   arrayr   )r6   r8   r   factoractualr^   s         r%   test_zoom_0d_arrayzTestZoom.test_zoom_0d_array-  sG    IIcNa&!12<<6*)r(   rs   zCuPy `zoom` needs similar fix.c                     |j                  d      }t        t        j                  |d      |       t        t        j                  |d      |       y )Nr*   r   r7  )r  r   r3   r  r  s      r%   test_zoom_1_gh20999zTestZoom.test_zoom_1_gh209995  s;     FF1IQ*A.Q/3r(   zread-only backendznumpy round-tripc                     |j                  d      }|j                  |      }t        j                  |d|       t	        ||       y )Nr*   r   rx   )r  
zeros_liker3   r  r   )r6   r8   r$   ry   s       r%   test_zoom_1_gh20999_outputz#TestZoom.test_zoom_1_gh20999_output=  s9     FF1Iq!Q&)"r(   N)r`   ra   rb   rM   rc   rd   re   r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r"   r(   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:; ;; l+NOk*MN4 O P4
* v&FG4 H4 v&FGk*=>|,>?# @ ? H#r(   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 edd      d        Zy)
TestRotater0   r   r@   c                     |j                  g dg dg dg|j                        }t        j                  |d|      }t	        ||       y )Nr   r   r   r   r   rB   r   ri   r2   rQ   r3   rotater   rR  s        r%   test_rotate01zTestRotate.test_rotate01J  sG    zz<'')02

  < nnT1E2!#t,r(   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   rB   r   r   r   r   r   r   Z   ri   r!  r6   r0   r8   r9   r^   ro   s         r%   test_rotate02zTestRotate.test_rotate02R  su    zz<'')02

  < ::y(((* 24  = nnT2U3!#x0r(   rC   rQ   r   c                 8   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg dg dg|      }|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   rB   r%  r&  r   r   r'  ri   )rk   r2   r   rC   r3   r"  r   r\  s          r%   test_rotate03zTestRotate.test_rotate03^  s     E"zz?**,38  : ::y((((	* 27	  8
 ::djj"45BIDX%HnnT2U3!#x0r(   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,  rB   r   r   r   r   r   r'  F)r  r0   r!  r(  s         r%   test_rotate04zTestRotate.test_rotate04p  ss    zz?**,35::  ? ::..079zz  C nnT2uEB!#x0r(   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   r*   r*   r*   r%  r&  rB   r   r   r'  ri   rO   rA  re   r2   rQ   r3   r"  r   r6   r0   r8   r9   ir^   ro   s          r%   test_rotate05zTestRotate.test_rotate05{  s    xx	"q 	FAJJ	(1(1(1(3 ;=**FDAqM	F
 zz$::|++-46JJ  @ nnT2U3q 	>A%c!Q'lH=	>r(   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)r*   r   r*   r*   r   r   rB   r%  r&  r'  ri   r2  r3  s          r%   test_rotate06zTestRotate.test_rotate06  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=	>r(   c                 J   |j                  g dg dg dggdz  |j                        }|j                  |d      }|j                  g dg dg dg dg dggdz  |j                        }|j                  |d      }t        j                  |dd	|
      }t        ||       y )Nr+  r,  r)   rB   r)   r   r   r%  r&  r'  r  )axesr0   r2   rQ   permute_dimsr3   r"  r   r(  s         r%   test_rotate07zTestRotate.test_rotate07  s    zzO++- .0129;  E tY/::	 ) ) ) )	 + , /0	0 8:zz	  C
 ??8Y7nnT2F%@!#x0r(   c                 @   |j                  g dg dg dggdz  |j                        }|j                  |d      }|j                  g dg dg dggdz  |j                        }|j                  |d      }t        j                  |ddd	|
      }t        ||       y )Nr+  r,  r)   rB   r9  r/  r'  r  F)r:  r  r0   r;  r(  s         r%   test_rotate08zTestRotate.test_rotate08  s    zzO++- .0129;  E tY/:: / / 1 2456=?ZZ  I ??8Y7nnT2FEO!#x0r(   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,  r)   rB   r'  r   )r:  )r2   rQ   r  r  r3   r"  r  )r6   r8   r9   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-   rB   )r*   r   r*   )rv  rv  rv  )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>rJ   )r  rP   rQ   r2   r3   r"  r   )r6   r8   r9   r^   ro   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<r(   rs   z(https://github.com/cupy/cupy/issues/8400r4  c                     |j                  t        j                  t        j                  d      d            }t	        j
                  t	        j
                  |d      d      }t        ||       y )Nr   )r   r      iL)r2   rO   tilerP   r3   r"  r   )r6   r8   r   r   s       r%   test_rotate_exact_180z TestRotate.test_rotate_exact_180  sH    JJrwwryy|V45NN7>>!S1481r(   N)r`   ra   rb   rM   rc   rd   re   r#  r)  r-  r0  r5  r7  r=  r?  rA  rE  r  rI  r"   r(   r%   r  r  G  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:=2 v&PQ Rr(   r  )*rI  r  numpyrO   scipy._lib._array_apir   r   r   r   r   r   r	   rM   r
   r  scipy.ndimager3    r   rc   r   r  r  rU   r   rm   rd   re   rg   r4   r   r   rS   r)  rQ  rN  r&   r  r  r  r"  r  r"   r(   r%   <module>rN     s   
      *  ;;// KK11    F; F;R 7(()%1+.%($1 $1 ) / *$1N 7../%1+.R; R; / 0R;j 7../J, J, 0J,Z 7**+tD tD ,tDn 7++,y
 y
 -y
x 7==!D
 D
 "D
N 7<< K# K# !K#\ 7>>"S S #Sr(   