
    -i                        S SK r S SKrS SKJr  S SKJrJrJrJ	r	J
r
Jr  S SKrS SKJr  S SKJr  SSKJr  \R&                  R(                  r\R&                  R*                  r\" SSS	/S
9/rSrSSSSSSS.r " S S5      r\R&                  R5                  S\" SS5      5      \R&                  R5                  S\5       " S S5      5       5       r\" SSS9\R&                  R5                  S\" S S5      5       " S S5      5       5       r\" SSS9 " S S5      5       r " S  S!5      r " S" S#5      r  " S$ S%5      r! " S& S'5      r" " S( S)5      r#g)*    N)suppress_warnings)_asarrayassert_array_almost_equalis_jax	np_compatxp_assert_equalxp_assert_close)raises   )typesTcupy	jax.numpy)cpu_only
exceptions-q=reflect	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                      \ rS rSr\" SSS9\R                  R                  SS/ SQ4S/ S	Q4S
/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4/5      S 5       5       r\" SSS9\R                  R                  SS/ SQ4S/ SQ4S
/ SQ4S/ SQ4S/ SQ4S/ SQ4S/ SQ4/5      S 5       5       r	\R                  R                  S/ SQ5      \R                  R                  S\
" S5      5      S 5       5       rS rg!)"TestBoundaries"   r   &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                     S nUR                  / SQ5      n[        [        R                  " XTSUSSS9UR                  U5      5        g )Nc                     U S   S-   4$ )Nr         ? xs    Y/var/www/html/venv/lib/python3.13/site-packages/scipy/ndimage/tests/test_interpolation.pyshift-TestBoundaries.test_boundaries.<locals>.shift0       aD3J=     )r               @r&   )   r   )cvalmodeoutput_shapeorderasarrayr   ndimagegeometric_transformselfr7   expected_valuexpr.   datas         r-   test_boundariesTestBoundaries.test_boundaries$   sE    	! zz-(''"459DJJ~&	(r1   )r   r   r2   r3   )r3   r   r2   r3   )r%   r   r2   r3   )r2   r   r2   r3   )r&   r   r2   r3   c           
          S nUR                  / SQ5      n[        [        R                  " XTSUSS9UR                  U5      5        g )Nc                     U S   S-
  4$ )Nr   g?r*   r+   s    r-   r.   .TestBoundaries.test_boundaries2.<locals>.shiftE   r0   r1   r   r2   r3   r%   r&   r%   )r6   r7   r8   r:   r>   s         r-   test_boundaries2TestBoundaries.test_boundaries29   sB    	! zz,'''"459;JJ~&	(r1   r7   )r   r   r   r   r   r   r9      c                 r   [        U5      (       a"  US;  d  US:  a  [        R                  " S5        [        R                  " SS[        R
                  S9nUR                  U5      nUR                  [        R                  " SSS	S
95      n[        R                  " XVUR                  S4   X!S9nSn[        R                  U5      n	UR                  [        R                  " XHU	S95      n
UR                  X-   5      UR                  S4   n[        R                  " XX!S9nUS:X  a  SOSn[        X|SUS9  g)z$Tests based on examples from gh-2640)r   r   r   r   r   r   z-Jax does not support grid- modes or order > 1ir5   dtypei   i  )num.r9   r7       r7   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r;   linspacer<   map_coordinatesnewaxisndimage_to_numpy_modegetpadr	   )r?   r7   r9   rA   np_datarB   r,   ynpadpad_modepaddedcoordsexpectedrX   s                 r-   test_boundary_spline_accuracy,TestBoundaries.test_boundary_spline_accuracyN   s    2JJMM	LLHI))B4zz'"JJr{{2rt45##DBJJO*<EU (,,T2BFF7x@ADH%bjj#o6**6R.tE$T:r1   r*   N)__name__
__module____qualname____firstlineno__skip_xp_backendsrY   markparametrizerC   rJ   rangerk   __static_attributes__r*   r1   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;r1   r   r9   r2   rL   rO   c                   J    \ rS rSrS rS r\" SS/SS9S 5       rS	 rS
 r	Sr
g)
TestSplinej   c                     [        X15      nUR                  / US9n[        R                  " XBS9nXSR	                  SUR
                  S9:X  d   eg )NrN   r9   r   getattronesr<   spline_filterr;   rO   r?   rO   r9   rA   rB   outs         r-   test_spline01TestSpline.test_spline01n   sK    "wwrw'##D6jj#))j4444r1   c                     [        X15      nUR                  S/US9n[        R                  " XBS9n[	        XSR                  S/5      5        g )Nr   rN   rz   )r|   r;   r<   r~   r   r   s         r-   test_spline02TestSpline.test_spline02t   sB    "zz1#Uz+##D6!#zz1#7r1   Tr   zoutput=dtype is numpy-specific)np_onlyr   r!   c                     [        X15      nUR                  / US9n[        R                  " XBUS9nXSR	                  SUR
                  S9:X  d   eg )NrN   outputr   r{   r   s         r-   test_spline03TestSpline.test_spline03z   sO     "wwrw'##D>jj#))j4444r1   c                     [        X15      nUR                  S/US9n[        R                  " XB5      n[	        XSR                  / SQ5      5        g )Nr%   rN   r   r   r   r   )r|   r}   r<   r~   r   r;   r   s         r-   test_spline04TestSpline.test_spline04   sA    "wws%w(##D0!#zz,'?@r1   c                     [        X15      nUR                  SS/US9n[        R                  " XBS9nUR	                  / SQ/ SQ/ SQ/ SQ/5      n[        XV5        g )Nr%   rN   rz   r   )r|   r}   r<   r~   r;   r   )r?   rO   r9   rA   rB   r   rj   s          r-   test_spline05TestSpline.test_spline05   sZ    "ww1vUw+##D6::|+++- . 	"#0r1   r*   N)rm   rn   ro   rp   r   r   rq   r   r   r   ru   r*   r1   r-   rw   rw   j   s9    58 dx=?5?5A1r1   rw   r   r    c                       \ rS rSrS rS rS rS r\R                  R                  SSS/5      S	 5       rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)TestGeometricTransform   c                     UR                  S/5      nS n[        R                  " X4UR                  US9n[	        XRR                  S/UR
                  S95        g )Nr   c                     U $ Nr*   r+   s    r-   mappingBTestGeometricTransform.test_geometric_transform01.<locals>.mapping       Hr1   rz   rN   r;   r<   r=   shaper   rO   r?   r9   rA   rB   r   r   s         r-   test_geometric_transform011TestGeometricTransform.test_geometric_transform01   sN    zz1#	 ))$057!#zz1#SYYz'GHr1   c                     UR                  S/5      nS n[        R                  " X4UR                  US9n[	        XRR                  / SQUR                  S95        g )Nr%   c                     U $ r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform02.<locals>.mapping   r   r1   rz   r   rN   r}   r<   r=   r   r   r;   rO   r   s         r-   test_geometric_transform021TestGeometricTransform.test_geometric_transform02   sL    wws|	 ))$057!#zz,ciiz'PQr1   c                     UR                  S/5      nS n[        R                  " X4UR                  US9n[	        XRR                  / SQUR                  S95        g )Nr%   c                     U S   S-
  4$ Nr   r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform03.<locals>.mapping       aD1H;r1   rz   r   r   r   r   rN   r   r   s         r-   test_geometric_transform031TestGeometricTransform.test_geometric_transform03   sL    wws|	 ))$057!#zz,ciiz'PQr1   c                     UR                  / SQ5      nS n[        R                  " X4UR                  US9n[	        XRR                  / SQUR
                  S95        g )Nr%   r   r3   r2   c                     U S   S-
  4$ r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform04.<locals>.mapping   r   r1   rz   r   r%   r   r3   rN   r   r   s         r-   test_geometric_transform041TestGeometricTransform.test_geometric_transform04   sK    zz,'	 ))$057!#zz,ciiz'PQr1   rO   r]   
complex128c                 <   [        X25      nUR                  / SQ/ SQ/ SQ/US9nUR                  / SQ/ SQ/ SQ/US9nUR                  UR                  S5      (       a  USU-  -  nUSU-  -  nS n[        R
                  " XFUR                  US9n[        Xu5        g )Nr   rN   r   complex floating              ?c                     U S   U S   S-
  4$ r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform05.<locals>.mapping       aD!A$(##r1   rz   )r|   r;   isdtyperO   r<   r=   r   r   )r?   r9   rO   rA   rB   rj   r   r   s           r-   test_geometric_transform051TestGeometricTransform.test_geometric_transform05   s    "zz<'')05  7 ::|++-49  ; ::djj"455BIDX%H	$ ))$057!#0r1   c                     UR                  / SQ/ SQ/ SQ/5      nS n[        R                  " X4UR                  US9nUR                  / SQ/ SQ/ SQ/UR                  S	9n[        XV5        g )
Nr   r5   rL         r3   r   r3   rL   c                     U S   U S   S-
  4$ r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform06.<locals>.mapping   r   r1   rz   r   r   r5   rL   r   r   r3   r   r3   rN   r;   r<   r=   r   rO   r   r?   r9   rA   rB   r   r   rj   s          r-   test_geometric_transform061TestGeometricTransform.test_geometric_transform06   p    zz<'') *	$ ))$057::|++-47II  ? 	"#0r1   c                     UR                  / SQ/ SQ/ SQ/5      nS n[        R                  " X4UR                  US9nUR                  / SQ/ SQ/ SQ/UR                  S9n[        XV5        g )Nr   r   r   c                     U S   S-
  U S   4$ r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform07.<locals>.mapping       aD1Had##r1   rz   r   r   r   r   rN   r   r   s          r-   test_geometric_transform071TestGeometricTransform.test_geometric_transform07   r   r1   c                     UR                  / SQ/ SQ/ SQ/5      nS n[        R                  " X4UR                  US9nUR                  / SQ/ SQ/ SQ/UR                  S	9n[        XV5        g )
Nr   r   r   c                 "    U S   S-
  U S   S-
  4$ r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform08.<locals>.mapping       aD1HadQh''r1   rz   r   r   r   rN   r   r   s          r-   test_geometric_transform081TestGeometricTransform.test_geometric_transform08   sp    zz<'') *	( ))$057::|++-47II  ? 	"#0r1   c                    UR                  / SQ/ SQ/ SQ/5      nS nUS:  a  [        R                  " X1S9nOUn[        R                  " XTUR                  USS9nUR                  / S	Q/ S
Q/ SQ/UR
                  S9n[        Xg5        g )Nr   r   r   c                 "    U S   S-
  U S   S-
  4$ r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform10.<locals>.mapping  r   r1   r   rz   Fr9   	prefilterr   r   r   rN   )r;   r<   r~   r=   r   rO   r   )r?   r9   rA   rB   r   filteredr   rj   s           r-   test_geometric_transform101TestGeometricTransform.test_geometric_transform10  s    zz<'') *	( AI,,T?HH))(TZZ05H::|++-47II  ? 	"#0r1   c                     UR                  S/UR                  S9nS n[        R                  " X4S/US9n[	        XRR                  / SQUR                  S95        g )Nr2   rN   c                     U S   S-  4$ Nr   r2   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform13.<locals>.mapping  s    aDAI<r1   r%   rz   r   )r}   r]   r<   r=   r   r;   rO   r   s         r-   test_geometric_transform131TestGeometricTransform.test_geometric_transform13  sP    wws"**w-	  ))$!EJ!#zz,ciiz'PQr1   c                     UR                  / SQ5      nS n[        R                  " X4S/US9n[        XRR                  / SQUR                  S95        g )Nr   r   r2   rL   r3   r5   r%   r%   c                     SU S   -  4$ )Nr2   r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform14.<locals>.mapping   s    !H;r1   r%   rz   rH   rN   )r;   r<   r=   r   rO   r   s         r-   test_geometric_transform141TestGeometricTransform.test_geometric_transform14  sG    zz23	 ))$!EJ!#zz,ciiz'PQr1   c                     UR                  / SQ5      nS n[        R                  " X4S/US9n[        US S S2   UR                  / SQ5      5        g )NrH   c                     U S   S-  4$ r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform15.<locals>.mapping)  r   r1   r   rz   r2   r;   r<   r=   r   r   s         r-   test_geometric_transform151TestGeometricTransform.test_geometric_transform15&  sH    zz,'	 ))$!EJ!#cc(BJJ|,DEr1   c           	          / SQ/ SQ/ SQ/nUR                  U5      nS n[        R                  " X4SUS9n[        XRR                  SS/S	S
/SS//5      5        g )NrH   r   rL   r5   r   g      "@
         c                     U S   U S   S-  4$ Nr   r   r2   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform16.<locals>.mapping5  r   r1   r3   r2   rz   r   r3   r   r5   	   r   r   r   s         r-   test_geometric_transform161TestGeometricTransform.test_geometric_transform16/  sd    !# zz$	$ ))$057!#zzAq6Aq6Ar72K'LMr1   c                     / SQ/ SQ/ SQ/nUR                  U5      nS n[        R                  " X4SUS9n[        XRR                  / SQ/5      5        g )NrH   r   r   r   r   r   c                     U S   S-  U S   4$ Nr   r2   r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform17.<locals>.mappingB  r   r1   r   r%   rz   r   r   s         r-   test_geometric_transform171TestGeometricTransform.test_geometric_transform17<  sS    ! zz$	$ ))$057!#zz<.'ABr1   c                     / SQ/ SQ/ SQ/nUR                  U5      nS n[        R                  " X4SUS9n[        XRR                  SS//5      5        g )	NrH   r   r  c                 "    U S   S-  U S   S-  4$ r  r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform18.<locals>.mappingO  r   r1   r   r2   rz   r   r3   r   r   s         r-   test_geometric_transform181TestGeometricTransform.test_geometric_transform18I  sW    ! zz$	( ))$057!#zzAq6(';<r1   c                     / SQ/ SQ/ SQ/nUR                  U5      nS n[        R                  " X4SUS9n[        USS S S24   U5        g )	NrH   r   r  c                     U S   U S   S-  4$ r   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform19.<locals>.mapping\  r   r1   r3   r   rz   .r2   r   r   s         r-   test_geometric_transform191TestGeometricTransform.test_geometric_transform19V  sV    ! zz$	$ ))$057!#c3Q3h-6r1   c                     / SQ/ SQ/ SQ/nUR                  U5      nS n[        R                  " X4SUS9n[        US S S2S4   U5        g )	NrH   r   r  c                     U S   S-  U S   4$ r  r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform20.<locals>.mappingi  r   r1   rL   r%   rz   r2   .r   r   s         r-   test_geometric_transform201TestGeometricTransform.test_geometric_transform20c  sV    ! zz$	$ ))$057!#cc3h-6r1   c                     / SQ/ SQ/ SQ/nUR                  U5      nS n[        R                  " X4SUS9n[        US S S2S S S24   U5        g )NrH   r   r  c                 "    U S   S-  U S   S-  4$ r  r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform21.<locals>.mappingv  r   r1   rL   r   rz   r2   r   r   s         r-   test_geometric_transform211TestGeometricTransform.test_geometric_transform21p  sZ    ! zz$	( ))$057!#cc3Q3h-6r1   c                     / SQ/ SQ/ SQ/nUR                  X2R                  S9nS nS n[        R                  " X4SUS9n[        R                  " XeS	US9n[	        Xc5        g )
NrH   r   r  rN   c                 "    U S   S-  U S   S-  4$ r  r*   r+   s    r-   mapping1CTestGeometricTransform.test_geometric_transform22.<locals>.mapping1  r   r1   c                 "    U S   S-  U S   S-  4$ r  r*   r+   s    r-   mapping2CTestGeometricTransform.test_geometric_transform22.<locals>.mapping2  r   r1   r  rz   r3   r%   )r;   r]   r<   r=   r   )r?   r9   rA   rB   r$  r'  r   s          r-   test_geometric_transform221TestGeometricTransform.test_geometric_transform22}  sj    ! zz$jjz1	(	( ))$*0?))#*0?!#,r1   c                     / SQ/ SQ/ SQ/nUR                  U5      nS n[        R                  " X4SUS9n[        XRR                  SS/5      5        g )	NrH   r   r  c                     SU S   S-  4$ )Nr   r   r2   r*   r+   s    r-   r   BTestGeometricTransform.test_geometric_transform23.<locals>.mapping  s    qtax= r1   r2   rz   r   r5   r   r   s         r-   test_geometric_transform231TestGeometricTransform.test_geometric_transform23  sR    ! zz$	! ))$UK!#zz1a&'9:r1   c           	          / SQ/ SQ/ SQ/nUR                  U5      nS n[        R                  " X4SUSSS0S	9n[        XRR                  S
S/5      5        g )NrH   r   r  c                     XS   U-  4$ )Nr   r*   )r,   abs      r-   r   BTestGeometricTransform.test_geometric_transform24.<locals>.mapping  s    tax= r1   r/  )r   r5  r2   )r9   extra_argumentsextra_keywordsr   r5   r   r   s         r-   test_geometric_transform241TestGeometricTransform.test_geometric_transform24  s`    ! zz$	! ))4ud8% 	"#zz1a&'9:r1   r*   N)rm   rn   ro   rp   r   r   r   r   rY   rr   rs   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r*  r0  r9  ru   r*   r1   r-   r   r      s    IRRR [[Wy,&?@1 A1(1111&RRFNC=777-$
;;r1   r   c                       \ rS rSrS r\R                  R                  S/ SQ5      \R                  R                  S\" S5      5      S 5       5       r	\
" SS	S
9S 5       r\
" SSS
9S 5       rSrg)TestGeometricTransformExtrai  c           	          UR                  / SQ/ SQ/UR                  S9nS nUR                  / SQ/ SQ/5      n[        [        R                  " X#SSS	9U5        g )
Nr   r2   r3   r%   r   rL   rN   c                 "    U S   S-
  U S   S-
  4$ )Nr   r)   r   r*   r+   s    r-   r   ZTestGeometricTransformExtra.test_geometric_transform_grid_constant_order1.<locals>.mapping      aD3J!A$*--r1   g      ?g      ?      ?rD  g      @r4   r   r   r7   r9   )r;   r]   r   r<   r=   )r?   rA   r,   r   expected_results        r-   -test_geometric_transform_grid_constant_order1ITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1  sh     JJ	!#*,**  6	. **&8&8&: ;!''./1	
r1   r7   r   r   r   r   r   r9   rL   c           	         S n[         R                  " S[        S9R                  SS5      nSn[        R                  U5      n[         R                  " XVUS9nUR                  U5      nUR                  U5      n[        [        Xf* 5      /UR                  -  5      n	[        R                  " XX!S9U	   n
[        [        R                  " XTUUS9U
SS	9  g )
Nc                 "    U S   S-
  U S   S-   4$ )Nr   皙?r   gffffff@r*   r+   s    r-   r   OTestGeometricTransformExtra.test_geometric_transform_vs_padded.<locals>.mapping  rB  r1      rN   r      rT   rF  rU   rW   )r[   r\   floatreshapera   rb   rc   r;   tupleslicendimr<   r=   r	   )r?   r9   r7   rA   r   r,   rf   rg   x_paddedcenter_slicerG  s              r-   "test_geometric_transform_vs_padded>TestGeometricTransformExtra.test_geometric_transform_vs_padded  s    
	.
 IIc'//B7(,,T266!1JJqM::h'eD%01AFF:;!55D77CE 	''.35		
r1   Tzendianness is numpy-specificr   r!   c                    [         R                  " S/5      nS nUR                  UR                  R                  5       [         R                  " U5      [         R                  " U5      R                  UR                  R                  5       5      4 H7  n[        R                  " X#UR                  US9nUc  UOUn[        US/5        M9     g )Nr   c                     U $ r   r*   r+   s    r-   r   fTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter.<locals>.mapping  r   r1   r   )
r[   r;   rO   newbyteorder
empty_likeastyper<   r=   r   r   )r?   rA   rB   r   r   returnedresults          r-   9test_geometric_transform_endianness_with_output_parameterUTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter  s     zz1#	 JJ

 7 7 9MM$'MM$'..tzz/F/F/HIKC 224$**:=?H$,S(F%fqc2Kr1   !string `output` is numpy-specificc                     UR                  S/5      nS n[        R                  " X#SS9nUR                  [        R                  " S5      L d   e[        US/5        g )Nr   c                     U $ r   r*   r+   s    r-   r   XTestGeometricTransformExtra.test_geometric_transform_with_string_output.<locals>.mapping  r   r1   fr   )r;   r<   r=   rO   r[   r   )r?   rA   rB   r   r   s        r-   +test_geometric_transform_with_string_outputGTestGeometricTransformExtra.test_geometric_transform_with_string_output  sP    zz1#	 ))$DyyBHHSM)))!#s+r1   r*   N)rm   rn   ro   rp   rH  rY   rr   rs   rt   rY  rq   rd  rk  ru   r*   r1   r-   r<  r<    s    
" [[V &; <[[WeAh/
 0<
4 d+IJ3 K3  d+NO, P,r1   r<  c                   L   \ rS rSr\R
                  R                  S\" SS5      5      \R
                  R                  S\R                  \R                  /5      S 5       5       r\R
                  R                  S\" SS5      5      S 5       r\" SS	S
9S 5       r\" SS9S 5       r\" SSS9S 5       r\R
                  R                  SS9\R
                  R#                  S\R&                  ;   =(       d    \R(                  " S5      R*                  S:  SS
9S 5       5       rSrg)TestMapCoordinatesi  r9   r   rL   rO   c                    [        U5      (       a  US:  a  [        R                  " S5        UR                  / SQ/ SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/5      nUR	                  UR
                  S	5      (       a  US
U-  -
  nUS
U-  -
  n[        R                  " UR                  5      nUS-  nUR                  U5      n[        R                  " XFUS9n[        Xu5        g )Nr   'jax map_coordinates requires order <= 1r   r   r   r   r   r   r   r   rz   )r   rY   rZ   r;   r   rO   r[   indicesr   r<   r_   r   )r?   r9   rO   rA   rB   rj   idxr   s           r-   test_map_coordinates01)TestMapCoordinates.test_map_coordinates01  s     "::%!)LLBCzz<'') * ::|++- . ::djj"455"t)#D"x-/Hjj$qjjo%%du=!#0r1   c                    [        U5      (       a8  US:  a  [        R                  " S5        US:X  a  [        R                  " S5        UR                  / SQ/ SQ/ SQ/5      n[        R
                  " UR                  [        R                  5      nUS-  nUR                  U5      n[        R                  " USUS9n[        R                  " X4US9n[        XV5        g )	Nr   rp  zoutput differs. jax bug?r   r   r   r)   rz   )r   rY   rZ   r;   r[   rq  r   r]   r<   r.   r_   r   )r?   r9   rA   rB   rr  out1out2s          r-   test_map_coordinates02)TestMapCoordinates.test_map_coordinates02  s    "::qy||EFz||67zz<'') * jjRZZ0s
jjo}}T3e4&&t>!$-r1   r   z`order` is required in jaxr    c           
         [        / SQ/ SQ/ SQ/SUS9n[        R                  " UR                  5      S-
  nUR	                  U5      n[
        R                  " X#5      nUR	                  / SQ/ SQ/ S	Q/5      n[        XE5        [        U[
        R                  " US
5      5        [        R                  " US S S2S4   R                  5      S-
  nUR	                  U5      n[
        R                  " US S S2S4   U5      n[        XAR	                  / SQ/ SQ/5      5        [        U[
        R                  " US S S2S4   S
5      5        [        R                  " US S 2S S S24   R                  5      S-
  nUR	                  U5      n[
        R                  " US S 2S S S24   U5      n[        XAR	                  SS/SS/SS//5      5        [        U[
        R                  " US S 2S S S24   S
5      5        g )Nr   r   r   F)r9   rA   r   r   r   r   r   r   r2   .r   r%   r5   )	r   r[   rq  r   r;   r<   r_   r   r.   )r?   rA   rB   rr  r   rj   s         r-   test_map_coordinates03)TestMapCoordinates.test_map_coordinates03$  s   %%'.1b: jj$q(jjo%%d0::|++- . 	"#0!#w}}T6'BCjjcc3h--.2jjo%%d3Q38nc:!#zz<3?3A (B 	C!#w}}T#A#s(^V'LMjja1f++,q0jjo%%d1cc6lC8!#zzAq6Aq6Aq62J'KL!#w}}T!SqS&\6'JKr1   T)r   c                    [         R                  " SS/SS//5      n[         R                  " SS/SS//5      n[         R                  " UR                  5      nUS-  nUR                  UR                  R                  5       [         R                  " U5      [         R                  " U5      R                  UR                  R                  5       5      4 H*  n[        R                  " X$US9nUc  UOUn[        Xs5        M,     g )Nr   r2   r5   rL   r   r   )r[   r;   rq  r   rO   r_  r`  ra  r<   r_   r   )r?   rA   rB   rj   rr  r   rb  rc  s           r-   5test_map_coordinates_endianness_with_output_parameterHTestMapCoordinates.test_map_coordinates_endianness_with_output_parameter?  s     zzAq6Aq6*+::1v1v./jj$qJJJJ##%MM(#MM(#**8>>+F+F+HI	
C ..tEH$,S(F%f7
r1   rf  r[  c                 8   UR                  S//5      n[        R                  " UR                  5      nUR                  U5      n[        R
                  " X#SS9nUR                  [        R                  " S5      L d   e[        XAR                  S//5      5        g Nr   rj  r   )r;   r[   rq  r   r<   r_   rO   r   )r?   rA   rB   rr  r   s        r-   'test_map_coordinates_with_string_output:TestMapCoordinates.test_map_coordinates_with_string_outputS  st    zzA3% jj$jjo%%d<yyBHHSM)))!#zzA3%'89r1   )r   win32r   z2do not run on 32 bit or windows (no sparse memory)c                 b    Sn[         R                  " US-  [         R                  S9R                  X"5      nSX2S-
  S 2US-
  S 24'   [        R
                  " UR                  U5      UR                  US-
  /US-
  //5      SS9  g ! [         a  n[        R                  " S	5      UeS nAff = f)
Ni0u  r2   rN   r   r3   r"   r   rz   zNot enough memory available)
r[   emptyfloat32rS  r<   r_   r;   MemoryErrorrY   skip)r?   rA   nr4  es        r-   test_map_coordinates_large_data2TestMapCoordinates.test_map_coordinates_large_data\  s    
	DAARZZ088>A !A!efa!efn##

1rzzAG9q3wi*@A  	D++;<!C	Ds   BB 
B.B))B.r*   N)rm   rn   ro   rp   rY   rr   rs   rt   r[   r]   r   rs  rx  rq   r}  r  r  skipifsysplatformintpitemsizer  ru   r*   r1   r-   rn  rn    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: [[!!4!0[[3<</J2771:3F3F3J 4  5D5 1Dr1   rn  c                   :
   \ rS rSr\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r	\R
                  R                  S\" SS5      5      S 5       r
\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      \R
                  R                  S	S
S/5      S 5       5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\" SSS9\R
                  R                  S\" SS5      5      S 5       5       r\" SSS9\R
                  R                  S\" SS5      5      S 5       5       r\R
                  R                  S\" SS5      5      S  5       r\R
                  R                  S\" SS5      5      S! 5       r\R
                  R                  S\" SS5      5      S" 5       r \R
                  R                  S\" SS5      5      S# 5       r!\R
                  R                  S\" SS5      5      S$ 5       r"\" SS%S9S& 5       r#\$" S'S(S)9S* 5       r%\$" S'S(S)9S+ 5       r&\$" S'S,S)9S- 5       r'\$" S'S.S)9S/ 5       r(\R
                  R                  S0/ S1Q5      \R
                  R                  S\" SS5      5      S2 5       5       r)\R
                  R                  S\" SS5      5      S3 5       r*S4r+g5)6TestAffineTransformio  r9   r   rL   c                     UR                  S/5      n[        R                  " X2R                  S//5      US9n[        XBR                  S/5      5        g )Nr   rz   r;   r<   affine_transformr   r?   r9   rA   rB   r   s        r-   test_affine_transform01+TestAffineTransform.test_affine_transform01q  sB    zz1#&&tZZ!->eL!#zz1#7r1   c                     UR                  S/5      n[        R                  " X2R                  S//5      US9n[	        XBR                  / SQ5      5        g )Nr%   r   rz   r   r}   r<   r  r;   r   r  s        r-   test_affine_transform02+TestAffineTransform.test_affine_transform02w  sA    wws|&&tZZ!->eL!#zz,'?@r1   c                     UR                  S/5      n[        R                  " X2R                  S//5      SUS9n[	        XBR                  / SQ5      5        g )Nr%   r   r&   rz   r   r  r  s        r-   test_affine_transform03+TestAffineTransform.test_affine_transform03}  sC    wws|&&tZZ!->%P!#zz,'?@r1   c                     UR                  / SQ5      n[        R                  " X2R                  S//5      SUS9n[        XBR                  / SQ5      5        g )Nr   r   r&   rz   r   r  r  s        r-   test_affine_transform04+TestAffineTransform.test_affine_transform04  sB    zz,'&&tZZ!->%P!#zz,'?@r1   rO   r]   r   c                 P   [        X25      nUR                  / SQ/ SQ/ SQ/US9nUR                  / SQ/ SQ/ SQ/US9nUR                  UR                  S5      (       a  USU-  -  nUSU-  -  n[        R
                  " XCR                  SS/SS//5      SS/US	9n[        Xe5        g )
Nr   rN   r   r   r   r   r   r&   rz   )r|   r;   r   rO   r<   r  r   r?   r9   rO   rA   rB   rj   r   s          r-   test_affine_transform05+TestAffineTransform.test_affine_transform05  s     "zz<'')05  7 ::|++-49  ; ::djj"455BIDX%H&&tZZ!Q!Q8H-I()2we=!#0r1   c           	          UR                  / SQ/ SQ/ SQ/5      n[        R                  " X2R                  SS/SS//5      SS/US9n[        XBR                  / SQ/ S	Q/ S
Q/5      5        g )Nr   r   r   r   r   r&   rz   r   r   r   r  r  s        r-   test_affine_transform06+TestAffineTransform.test_affine_transform06  ss    zz<'') * &&tZZ!Q!Q8H-I()2we=!#zz<3?3?3A (B 	Cr1   c           	          UR                  / SQ/ SQ/ SQ/5      n[        R                  " X2R                  SS/SS//5      SS/US9n[        XBR                  / SQ/ SQ/ SQ/5      5        g )	Nr   r   r   r   r   r&   rz   r   r  r  s        r-   test_affine_transform07+TestAffineTransform.test_affine_transform07  ss    zz<'') * &&tZZ!Q!Q8H-I(*Awe=!#zz<3?3?3A (B 	Cr1   c           	          UR                  / SQ/ SQ/ SQ/5      n[        R                  " X2R                  SS/SS//5      SS/US9n[        XBR                  / SQ/ S	Q/ S
Q/5      5        g )Nr   r   r   r   r   r&   rz   r   r   r   r  r  s        r-   test_affine_transform08+TestAffineTransform.test_affine_transform08  ss    zz<'') * &&tZZ!Q!Q8H-I(*Bxu>!#zz<3?3?3A (B 	Cr1   c           	         UR                  / SQ/ SQ/ SQ/5      nUS:  a  [        R                  " X1S9nOUn[        R                  " XBR                  SS/SS//5      SS/USS	9n[	        XRR                  / S
Q/ SQ/ SQ/5      5        g )Nr   r   r   r   rz   r   r&   Fr   r   r   r   )r;   r<   r~   r  r   r?   r9   rA   rB   r   r   s         r-   test_affine_transform09+TestAffineTransform.test_affine_transform09  s    zz<'') * AI,,T?HH&&xaVaV<L1M(*Bxu168 	"#zz<3?3?3A (B 	Cr1   c                     UR                  S/UR                  S9n[        R                  " X2R	                  S//5      SUS9n[        XBR	                  / SQ5      5        g )Nr2   rN   r)   rI   )r8   r9   r   r   r   r   )r}   r]   r<   r  r;   r   r  s        r-   test_affine_transform10+TestAffineTransform.test_affine_transform10  sO    wws"**w-&&tZZ#-@t-24!#zz,'?@r1   c                     UR                  / SQ5      n[        R                  " X2R                  S//5      SSUS9n[        XBR                  / SQ5      5        g )Nr   r2   r   rI   rz   rH   r  r  s        r-   test_affine_transform11+TestAffineTransform.test_affine_transform11  sE    zz23&&tZZ!->4uU!#zz,'?@r1   c                     UR                  / SQ5      n[        R                  " X2R                  S//5      SSUS9n[        US S S2   UR                  / SQ5      5        g )NrH   r)   r   r   rz   r2   r  r  s        r-   test_affine_transform12+TestAffineTransform.test_affine_transform12  sO    zz,'&&tZZ#-@!TQVW!#cc(BJJ|,DEr1   c           	          / SQ/ SQ/ SQ/nUR                  U5      n[        R                  " X2R                  SS/SS//5      SSUS9n[        XBR                  SS	/S
S/SS//5      5        g )NrH   r   r   r   r   r2   r   rz   r3   r   r5   r   r   r  r  s        r-   test_affine_transform13+TestAffineTransform.test_affine_transform13  su    !# zz$&&tZZ!Q!Q8H-I1f-24!#zzAq6Aq6Ar72K'LMr1   c                     / SQ/ SQ/ SQ/nUR                  U5      n[        R                  " X2R                  SS/SS//5      SSUS9n[        XBR                  / SQ/5      5        g )	NrH   r   r  r2   r   r   r  rz   r  r  s        r-   test_affine_transform14+TestAffineTransform.test_affine_transform14  sd    ! zz$&&tZZ!Q!Q8H-I1f-24!#zz<.'ABr1   c                     / SQ/ SQ/ SQ/nUR                  U5      n[        R                  " X2R                  SS/SS//5      SSUS9n[        XBR                  SS	//5      5        g )
NrH   r   r  r2   r   r  rz   r   r3   r  r  s        r-   test_affine_transform15+TestAffineTransform.test_affine_transform15  sh    ! zz$&&tZZ!Q!Q8H-I1f-24!#zzAq6(';<r1   c                     / SQ/ SQ/ SQ/nUR                  U5      n[        R                  " X2R                  SS/SS//5      SSUS	9n[        US
S S S24   U5        g )NrH   r   r  r           r   r)   r  rz   .r2   r  r  s        r-   test_affine_transform16+TestAffineTransform.test_affine_transform16  sg    ! zz$&&tZZ!SAs88L-Mq'-U<!#c3Q3h-6r1   c                     / SQ/ SQ/ SQ/nUR                  U5      n[        R                  " X2R                  SS/SS//5      SSUS9n[        US S S	2S
4   U5        g )NrH   r   r  r)   r   r   r  rz   r2   .r  r  s        r-   test_affine_transform17+TestAffineTransform.test_affine_transform17  sg    ! zz$&&tZZ#qAq68J-KQ'-U<!#cc3h-6r1   c                     UR                  / SQ/ SQ/ SQ/5      n[        R                  " X2R                  SS/SS//5      SSUS9n[        US S S2S S S24   U5        g )	NrH   r   r  r)   r   r  rz   r2   r  r  s        r-   test_affine_transform18+TestAffineTransform.test_affine_transform18  sh    zz<'*, - &&tZZ#qAs88L-Mq'-U<!#cc3Q3h-6r1   c                    UR                  / SQ/ SQ/ SQ/UR                  S9n[        R                  " X2R                  SS/SS//5      SSUS9n[        R                  " XBR                  S	S/SS	//5      SS
US9n[	        XC5        g )NrH   r   r  rN   r)   r   r  rz          @r)  )r;   r]   r<   r  r   r  s        r-   test_affine_transform19+TestAffineTransform.test_affine_transform19  s    zz<'*,35::  ? &&tZZ#qAs88L-Mq'-U<&&sJJa1c(7K,La'-U<!#,r1   r   z(https://github.com/cupy/cupy/issues/8394r    c                     / SQ/ SQ/ SQ/nUR                  U5      n[        R                  " X2R                  S/S//5      SSUS9n[        XBR                  SS	/5      5        g )
NrH   r   r  r   r2   r/  rz   r   r3   r  r  s        r-   test_affine_transform20+TestAffineTransform.test_affine_transform20$  c     ! zz$&&tZZ!qc
-CQ-24!#zz1a&'9:r1   c                     / SQ/ SQ/ SQ/nUR                  U5      n[        R                  " X2R                  S/S//5      SSUS9n[        XBR                  SS	/5      5        g )
NrH   r   r  r2   r   r/  rz   r   r   r  r  s        r-   test_affine_transform21+TestAffineTransform.test_affine_transform21/  r  r1   c                     UR                  / SQ5      n[        R                  " X2R                  S//5      S/SUS9n[        XBR                  / SQ5      5        g )Nr   r2   r&   )r3   rz   r   r   r2   r  r  s        r-   test_affine_transform22+TestAffineTransform.test_affine_transform22:  sK     zz,'&&tZZ!->d-24!#zz)'<=r1   c                     UR                  / SQ5      n[        R                  " X2R                  S//5      S/SUS9n[        US S S2   UR                  / SQ5      5        g )Nr   r)   r&   r  rz   r2   r   r  r  s        r-   test_affine_transform23+TestAffineTransform.test_affine_transform23B  sU     zz,'&&tZZ#-@2$-24!#cc(BJJ|,DEr1   c                 P   UR                  / SQ5      n[        5        nUR                  [        S5        [        R
                  " X2R                  S/5      SUS9nS S S 5        [        R
                  " X2R                  S//5      SUS9n[        WU5        g ! , (       d  f       NB= f)Nr   @The behavior of affine_transform with a 1-D array .* has changedr2   r&   rz   r;   r   filterUserWarningr<   r  r   r?   r9   rA   rB   suprv  rw  s          r-   test_affine_transform24+TestAffineTransform.test_affine_transform24J  s     zz,' CJJ{%& ++D**aS/2USD	 !
 ''jj1#.?5Q!$- !    =B
B%c                 P   UR                  / SQ5      n[        5        nUR                  [        S5        [        R
                  " X2R                  S/5      SUS9nS S S 5        [        R
                  " X2R                  S//5      SUS9n[        WU5        g ! , (       d  f       NB= f)Nr   r  r)   r&   rz   r  r  s          r-   test_affine_transform25+TestAffineTransform.test_affine_transform25V  s     zz,' CJJ{%& ++D**cU2CRuUD	 !
 ''jj3%.A2US!$- ! r  c           
      b   UR                  / SQ/ SQ/ SQ/5      nUS:  a  [        R                  " X1S9nOUnUR                  S5      nUR	                  S5      * nUR                  XV4SS9nUR                  XrR                  / S	Q/5      4S
S9nUR                  US5       V	s/ s H  n	[        U	5      PM     n
n	[        R                  " XEU
USS9n[        R                  " XGUSS9n[        R                  " XHUSS9nXU4 H&  n[        XR                  / SQ/ SQ/ SQ/5      5        M(     g s  sn	f )Nr   r   r   r   rz   r2   r2   r   axis)r  r   r   r   )r&   Fr   r   r   r   )
r;   r<   r~   eyer}   concatrS  rR  r  r   )r?   r9   rA   rB   r   tform_originaloffset_originaltform_h1tform_h2r,   offsrv  rw  out3r   s                  r-   test_affine_transform26+TestAffineTransform.test_affine_transform26b  s7    zz<'') * AI,,T?HH776?*99n>Q9G99h

K=(AB9K"$**_e"DE"DQa"DE''(,.3uF ''%279''%279%C%c::|7C7C7E ,F G & Fs   #D,zdoes not raisec                    UR                  / SQ/ SQ/ SQ/5      nUR                  UR                  S5      UR                  S5      * 4SS9nUR                  X1R                  / SQ/5      4S	S9n[	        [
        [        R                  X$5        g )
Nr   r   r   r2   r  r   r  )      @r2   r   r   )r;   r  r  r}   assert_raises
ValueErrorr<   r  )r?   rA   rB   r  r  s        r-   test_affine_transform27+TestAffineTransform.test_affine_transform27  s}     zz<'') * 99bffQi"''&/)9:!9D99h

K=(AB9Kj'":":DKr1   Tzbyteorder is numpy-specificr[  c           	          UR                  S5      nUR                  U5      UR                  U5      R                  UR                  R	                  5       5      UR                  UR                  R	                  5       4 H{  n[        5        nUR                  [        S5        UR                  SS/5      n[        R                  " X%US9nS S S 5        Wc  UOUn[        XqR                  SS/SS//5      5        M}     g ! , (       d  f       N:= f)N)r2   r2   r  r   r   )r}   r`  ra  rO   r_  r   r  r  r;   r<   r  r   )r?   rA   rB   r   r  matrixrb  rc  s           r-   9test_affine_transform_1d_endianness_with_output_parameterMTestAffineTransform.test_affine_transform_1d_endianness_with_output_parameter  s     wwvMM$'MM$'..tzz/F/F/HIJJ

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

;,- QF+"33DM % %,S(F%fjj1a&1a&9I.JK; %$s   ?C??
D	c                    [         R                  " S/5      nUR                  UR                  R                  5       [         R                  " U5      [         R                  " U5      R                  UR                  R                  5       5      4 HW  n[        R                  " U[         R                  " S//5      US9nUc  UOUn[        U[         R                  " S/5      5        MY     g )Nr   r   )	r[   r;   rO   r_  r`  ra  r<   r  r   )r?   rA   rB   r   rb  rc  s         r-   >test_affine_transform_multi_d_endianness_with_output_parameterRTestAffineTransform.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>Kr1   z+`out` of a different size is numpy-specificc                 ^   UR                  SUR                  S9nUR                  S5      n[        R                  " X!R                  S//5      US9  [        US S U5        [        R                  " [        5         [        R                  " US//USS9  S S S 5        g ! , (       d  f       g = f)Nr   rN   )   r   r   )r   )r   r8   )
r\   r]   r}   r<   r  r;   r   rY   r
   RuntimeErrorr?   rA   rB   r   s       r-   "test_affine_transform_output_shape6TestAffineTransform.test_affine_transform_output_shape  s    
 yy"**y-ggen  zzA3%'8E!#bq'40 ]]<($$seCe= )((s   ;B
B,rf  c                     UR                  S/5      n[        R                  " X!R                  S//5      SS9nUR                  [        R                  " S5      L d   e[        X1R                  S/5      5        g r  )r;   r<   r  rO   r[   r   r  s       r-   (test_affine_transform_with_string_output<TestAffineTransform.test_affine_transform_with_string_output  s\    zz1#&&tZZ!->sKyyBHHSM)))!#zz1#7r1   r.   )r   r   r   r   )r&   r   )r3   )r2   r5   c           	         [         R                  " SS/SS//5      n[         R                  " S5      n[         R                  " S5      US S2S S24'   [         R                  " U5      US S 2S4'   [         R                  " XASS9nUR                  U5      nUR                  U5      nUR                  U5      n[        [        R                  " XESUS	9U5        g )
Nr   r   r2   r3   r2   r3   r  r  r   rF  )r[   r;   zerosr  rollr   r<   r  )r?   r.   r9   rA   r,   affinerj   s          r-   )test_affine_transform_shift_via_grid_wrap=TestAffineTransform.test_affine_transform_shift_via_grid_wrap  s    
 JJAA  !&!rr2A2vzz%(q!t771&1JJqMF#::h'!$$Q[N	
r1   c           	         [         R                  " / SQ/ SQ/5      nUS S S2S S S24   R                  5       nUR                  U5      nUR                  U5      n[         R                  " SS/5      n[         R                  " S5      US S2S S24'   [         R                  " UR
                  5      US S 2S4'   UR                  U5      n[        [        R                  " X5SUS9U5        g )Nr  r3   r%   r   r&   r2   r3   r   rF  )	r[   r;   copyr  r  r   r   r<   r  )r?   r9   rA   r,   rj   r   s         r-   #test_affine_transform_shift_reflect7TestAffineTransform.test_affine_transform_shift_reflect  s     JJ	!# $TrT4R4Z=%%'JJqM::h'1a&!rr2A2vzz!''*q!tF#!$$QYeL	
r1   r*   N),rm   rn   ro   rp   rY   rr   rs   rt   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  xfail_xp_backendsr  r  r  r  r  r  r  r  rq   r  r  r  r  r!  r&  ru   r*   r1   r-   r  r  o  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
r1   r  c                      \ rS rSr\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r	\R
                  R                  S\" SS5      5      S 5       r
\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      \R
                  R                  S	S
S/5      S 5       5       r\R
                  R                  S\" SS5      5      \R
                  R                  SSS/5      \R
                  R                  S	S
S/5      S 5       5       5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S/ SQ5      \R
                  R                  S\" SS5      5      S 5       5       r\R
                  R                  S/ SQ5      \R
                  R                  S\" SS5      5      S 5       5       rS r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      \R
                  R                  SSS/5      S 5       5       r\R
                  R                  S/ SQ5      \R
                  R                  S\" S5      5      S  5       5       rS!rg")#	TestShifti  r9   r   rL   c                     UR                  S/5      n[        R                  " US/US9n[        XBR                  S/5      5        g )Nr   rz   r   r;   r<   r.   r   r  s        r-   test_shift01TestShift.test_shift01  s7    zz1#mmD1#U3!#zz1#7r1   c                     UR                  S/5      n[        R                  " US/US9n[        XBR	                  / SQ5      5        g )Nr%   r   rz   r   r}   r<   r.   r   r;   r  s        r-   test_shift02TestShift.test_shift02  s6    wws|mmD1#U3!#zz,'?@r1   c                     UR                  S/5      n[        R                  " USUS9n[        XBR	                  / SQ5      5        g )Nr%   r&   rz   r  r0  r  s        r-   test_shift03TestShift.test_shift03  s4    wws|mmD"E2!#zz,'?@r1   c                     UR                  / SQ5      n[        R                  " USUS9n[        XBR                  / SQ5      5        g )Nr   r   rz   r   r,  r  s        r-   test_shift04TestShift.test_shift04  s3    zz,'mmD!51!#zz,'?@r1   rO   r]   r   c                 &   [        X25      nUR                  / SQ/ SQ/ SQ/US9nUR                  / SQ/ SQ/ SQ/US9nUR                  UR                  S5      (       a  USU-  -  nUSU-  -  n[        R
                  " USS/US9n[        Xe5        g )	Nr   rN   r   r   r   r   r   rz   )r|   r;   r   rO   r<   r.   r   r  s          r-   test_shift05TestShift.test_shift05  s     "zz<'')05  7 ::|++-49  ; ::djj"455BIDX%HmmD1a&6!#0r1   r7   r   r   c                    [         R                  " / SQ/ SQ/ SQ/US9n[         R                  " / SQ/ SQ/ SQ/US9n[        R                  " UR                  S5      (       a  USU-  -  nUSU-  -  nSnXvS S 2S4'   UR                  U5      nUR                  U5      n[
        R                  " USS/XUS	9n[        X5        g )
Nr   rN   r   r   r   r  r   r   )r9   r7   r6   )r[   r;   r   r   rO   r<   r.   r   )	r?   r9   r7   rO   rA   rB   rj   r6   r   s	            r-   test_shift_with_nonzero_cval&TestShift.test_shift_with_nonzero_cval  s     zz<'')057 ::|++-49; TZZ);<<BIDX%HAzz$::h'mmD1a&tL!#0r1   c           	          UR                  / SQ/ SQ/ SQ/5      n[        R                  " USS/US9n[        XBR                  / SQ/ SQ/ S	Q/5      5        g )
Nr   r   r   r   r   rz   r   r   r   r,  r  s        r-   test_shift06TestShift.test_shift06+  X    zz<'') * mmD1a&6!#zz<3?3?3A (B 	Cr1   c           	          UR                  / SQ/ SQ/ SQ/5      n[        R                  " USS/US9n[        XBR                  / SQ/ SQ/ SQ/5      5        g )Nr   r   r   r   r   rz   r   r,  r  s        r-   test_shift07TestShift.test_shift075  rB  r1   c           	          UR                  / SQ/ SQ/ SQ/5      n[        R                  " USS/US9n[        XBR                  / SQ/ SQ/ SQ/5      5        g )	Nr   r   r   r   rz   r   r   r   r,  r  s        r-   test_shift08TestShift.test_shift08?  rB  r1   c           	          UR                  / SQ/ SQ/ SQ/5      nUS:  a  [        R                  " X1S9nOUn[        R                  " USS/USS9n[	        XRR                  / SQ/ S	Q/ S
Q/5      5        g )Nr   r   r   r   rz   Fr   r   r   r   )r;   r<   r~   r.   r   r  s         r-   test_shift09TestShift.test_shift09I  sv    zz<'') * AI,,T?HHmmHq!fEUK!#zz<3?3?3A (B 	Cr1   r.   r  c           	          [         R                  " SS/SS//5      n[         R                  " XASS9nUR                  U5      nUR                  U5      n[        [        R
                  " XASUS9U5        g )	Nr   r   r2   r3   r  r  r   rF  )r[   r;   r  r   r<   r.   )r?   r.   r9   rA   r,   rj   s         r-   test_shift_grid_wrapTestShift.test_shift_grid_wrapW  sj    
 JJAA  !771%0JJqM::h'!MM!EB	
r1   c           
          UR                  UR                  S5      S5      n[        [        R                  " XASUS9[        R                  " XASUS95        g )N   )r   r%   r   rF  r   )rS  r\   r   r<   r.   )r?   r.   r9   rA   r,   s        r-   test_shift_grid_constant1#TestShift.test_shift_grid_constant1h  sD    
 JJryy}f-!MM!FMM!5A	
r1   c           	          UR                  / SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/5      n[        [        R                  " USSSS	9U5        g )
Nr>  r?  rN   rC  rE  )r)   r)   r   r   rF  )r;   r]   r   r<   r.   )r?   rA   r,   rG  s       r-   test_shift_grid_constant_order1)TestShift.test_shift_grid_constant_order1s  s\    JJ	!#*,**  6**&8&8&: ;!MM!ZoQG	
r1   c           	      
   [         R                  " / SQ/ SQ/5      nUS S S2S S S24   R                  5       nUR                  U5      nUR                  U5      n[        [        R
                  " X3R                  SUS9U5        g )Nr  r$  r&   r   rF  )r[   r;   r%  r   r<   r.   r   )r?   r9   rA   r,   rj   s        r-   test_shift_reflectTestShift.test_shift_reflect}  st     JJ	!# $TrT4R4Z=%%'JJqM::h'!MM!WW9EB	
r1   r   FTc                     UR                  S5      n[        SXS9n[        [        R                  " XAS-  S-   40 UD6S   US   5        [        [        R                  " XA* S-  S-
  40 UD6S   US   5        g )Nr  r   )r7   r9   r   r2   r   r   r&   )r\   dictr   r<   r.   )r?   r9   r   rA   r,   kwargss         r-   test_shift_nearest_boundary%TestShift.test_shift_nearest_boundary  sy    
 IIbM9EG!MM!aZ!^6v6q91Q4	
 	"MM!Vq[1_77;QrU	
r1   rJ  c           	         [         R                  " S[        S9R                  SS5      nSnSn[        R                  U5      nUR                  [         R                  " XFUS95      nUR                  U5      n	[        [        Xf* 5      /U	R                  -  5      n
[        R                  " XX!S9U
   n[        [        R                  " XX!S9USS	9  g )
NrO  rN   r   )rM  gffffffrS   rT   rF  rU   rQ  )r[   r\   rR  rS  ra   rb   r;   rc   rT  rU  rV  r<   r.   r	   )r?   r9   r7   rA   x_npr.   rf   rg   rW  r,   rX  rG  s               r-   test_shift_vs_paddedTestShift.test_shift_vs_padded  s     yyE*222r: (,,T2::bffTh?@JJteD%01AFF:;!--$55AC 	MM!;	
r1   r*   N)rm   rn   ro   rp   rY   rr   rs   rt   r-  r1  r4  r7  r:  r=  r@  rD  rG  rJ  rM  rQ  rT  rW  r\  r`  ru   r*   r1   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<
r1   r*  c                   x   \ rS rSr\R
                  R                  S\" SS5      5      S 5       rS r	S r
\R
                  R                  S\" SS5      5      \R
                  R                  SS	S
/5      S 5       5       rS rS rS r\R
                  R                  S/ SQ5      \R
                  R                  S/ SQ5      S 5       5       r\R
                  R                  SSS/5      \R
                  R                  S/ SQ5      \R
                  R                  S/ SQ5      S 5       5       5       r\R
                  R                  SSS/5      \R
                  R"                  S 5       5       r\" SSS9\" SSS9S  5       5       rS! r\" S"S#S9S$ 5       r\" S"S#S9\" SS%S9\" SS&S9S' 5       5       5       rS(rg))*TestZoomi  r9   r   rL   c                 4   SSS/4 GH  nUR                  UR                  SUR                  S9S5      n[        R                  " XCUS9nUR
                  S:X  d   eUR                  USS S 24   S:g  5      (       d   eUR                  USS S 24   S	[        -
  :  5      (       d   eUR                  USS S 24   S
[        -   :*  5      (       d   eUR                  US[        -
  :  5      (       d   eUR                  US[        -   :*  5      (       a  GM   e   g )Nr2      rN   )r   r   rz   )r   r   r&   r   rP  r   rP  )rS  r\   r]   r<   zoomr   alleps)r?   r9   rA   zarrs        r-   
test_zoom1TestZoom.test_zoom1  s    aVA**RYYrY<fEC,,sU3C99(((66#b!e*/****66#b!e*c2333366#ad)C0111166#!c'*++++66#"s(+,,,, r1   c                     UR                  UR                  S5      S5      n[        R                  " [        R                  " US5      S5      n[	        X25        g )Nr   r)  r2   r)   )rS  r\   r<   rf  r   )r?   rA   rj  r   s       r-   
test_zoom2TestZoom.test_zoom2  s=    jj2/ll7<<Q/5!r1   c                    UR                  SS//5      n[        R                  " US5      n[        R                  " US5      n[        X1R                  SS/SS//5      5        [        XAR                  / SQ/5      5        g )Nr   r2   r  r  )r   r   r2   r2   )r;   r<   rf  r   )r?   rA   rj  rv  rw  s        r-   
test_zoom3TestZoom.test_zoom3  sg    jj1a&"||C(||C(!$

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

L>(BCr1   rO   r]   r   c           	         [        X25      nUR                  / SQ/ SQ/ SQ/US9nUR                  UR                  S5      (       a  USU-  -  n[	        5        nUR                  [        S5        [        R                  " XCR                  SS/5      S	S
US9nS S S 5        [        WS S S2S S S24   U5        g ! , (       d  f       N&= f)NrH   r   r  rN   r   r   r  r)   r   r  rz   r2   )
r|   r;   r   rO   r   r  r  r<   r  r   )r?   r9   rO   rA   rB   r  r   s          r-   test_zoom_affine01TestZoom.test_zoom_affine01  s     "zz<'*,38  : ::djj"455BID CJJ{%& **4S#J1G+1@C	 ! 	"#cc3Q3h-6 ! s   ?B77
Cc                 Z    Sn[         R                  " UR                  X"45      SU-  SS9  g )Nr         ?r   rT   )r<   rf  r  )r?   rA   dims      r-   test_zoom_infinityTestZoom.test_zoom_infinity  s&    RXXsj)28)Dr1   c                     UR                  S5      nSn[        R                  " X#SS9nUR                  S5      n[        XE5        g )N)r   r   r   )rw  r  r  r5   )r6   )r   r   r   )r  r<   rf  r   )r?   rA   rj  rf  r   refs         r-   test_zoom_zoomfactor_one!TestZoom.test_zoom_zoomfactor_one  s;    hhy!ll31-hh{#!#+r1   c                 z    UR                  S5      nSn[        R                  " X#5      nUR                  S:X  d   eg )N)r3   r   re  )gUUUUUU?gE]t?g(\?)r%   rP      )r  r<   rf  r   )r?   rA   rj  rf  r   s        r-   test_zoom_output_shape_roundoff(TestZoom.test_zoom_output_shape_roundoff  s5    hh{#.ll3%yyK'''r1   rf  )r|  )r3   r   )r   r2   )r   r   r7   )r   r   r   r   r   r   r   r   c           	      0   [         R                  " SS/SS//[         R                  S9n[         R                  " U[         R                  " U5      5      nUR                  U5      nUR                  U5      n[        [        R                  " XaSUS9U5        g )Nr   r   r2   r3   rN   rR   )r[   r;   r]   kronr}   r   r<   rf  )r?   rf  r7   rA   r_  rj   r,   s          r-   test_zoom_by_int_order0 TestZoom.test_zoom_by_int_order0  sz     zzAq6q6#*,**6774/JJt::h'!LL5	
r1   r   r  )r%   r%   )r   r   r   r   r   c                 P   [         R                  " [         R                  " U5      [        S9R	                  U5      nUR                  U5      n[        [        R                  " XbSUSS9UR                  [         R                  " U[         R                  " U5      5      5      5        g )NrN   r   T)r9   r7   	grid_mode)r[   r\   prodrR  rS  r;   r   r<   rf  r  r}   )r?   r   rf  r7   rA   r_  r,   s          r-   test_zoom_grid_by_int_order0%TestZoom.test_zoom_grid_by_int_order0  sn     yyu5==eDJJt!LLEJJrwwtRWWT]34	
r1   r   r   c                     UR                  UR                  SUR                  S9S5      n[        R                  " [
        SS9   [        R                  " USUSS94  S S S 5        g ! , (       d  f       g = f)	Nr   rN   )r3   r3   zIt is recommended to use mode)matchr2   T)r7   r  )rS  r\   r]   rY   warnsr  r<   rf  )r?   r7   rA   r,   s       r-   test_zoom_grid_mode_warnings%TestZoom.test_zoom_grid_mode_warnings  s_     JJryy"**y5v>\\+ ?ALLADD9:A A As   A&&
A4z
dask.arrayz!output=array requires buffer viewr    r   c                     UR                  UR                  S5      S5      n[        R                  " USUR	                  S5      S9  g)zTicket #643r   r)  r2   r  r   N)rS  r\   r<   rf  r  r?   rA   r,   s      r-   test_zoom_output_shapeTestZoom.test_zoom_output_shape  s5     JJryy}f-Q"((6"23r1   c                     UR                  S5      nSn[        R                  " U[        R                  " U5      5      n[        R                  " X#5      n[        XE5        g )Ng      $@r2   )r\   r<   rf  r[   arrayr	   )r?   rA   r4  factoractualrj   s         r-   test_zoom_0d_arrayTestZoom.test_zoom_0d_array&  sC    IIcNa&!12<<*)r1   r   zCuPy `zoom` needs similar fix.c                     UR                  S5      n[        [        R                  " US5      U5        [        [        R                  " US5      U5        g )Nr3   r   r|  )r  r   r<   rf  r  s      r-   test_zoom_1_gh20999TestZoom.test_zoom_1_gh20999.  s;     FF1IQ*A.Q/3r1   zread-only backendznumpy round-tripc                     UR                  S5      nUR                  U5      n[        R                  " USUS9  [	        X25        g )Nr3   r   r   )r  
zeros_liker<   rf  r   )r?   rA   r,   r   s       r-   test_zoom_1_gh20999_output#TestZoom.test_zoom_1_gh20999_output6  s7     FF1Iq!Q&)"r1   r*   N)rm   rn   ro   rp   rY   rr   rs   rt   rk  rn  rq  rt  ry  r}  r  r  r  thread_unsafer  rq   r  r  r(  r  r  ru   r*   r1   r-   rc  rc    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#r1   rc  c                      \ rS rSr\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r	\R
                  R                  S\" SS5      5      \R
                  R                  SSS	/5      S
 5       5       r
\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       r\R
                  R                  S\" SS5      5      S 5       rS rS r\" SSS9S 5       rSrg)
TestRotatei@  r9   r   rL   c                     UR                  / SQ/ SQ/ SQ/UR                  S9n[        R                  " USUS9n[	        XC5        g )Nr   r   r   r   r   rN   r   rz   r;   r]   r<   rotater   r  s        r-   test_rotate01TestRotate.test_rotate01B  sE    zz<'')02

  < nnT1E2!#,r1   c                     UR                  / SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/ SQ/UR                  S9n[        R                  " USUS9n[	        XT5        g )Nr   )r   r   r   r   rN   r   r   r   r   r   r   Z   rz   r  r?   r9   rA   rB   rj   r   s         r-   test_rotate02TestRotate.test_rotate02J  ss    zz<'')02

  < ::y(((* 24  = nnT2U3!#0r1   rO   r]   r   c                 .   [        X25      nUR                  / SQ/ SQ/ SQ/US9nUR                  / SQ/ SQ/ SQ/ SQ/ SQ/US9nUR                  UR                  S5      (       a  USU-  -  nUSU-  -  n[        R
                  " USUS	9n[        Xe5        g )
Nr   r   r   r   r   r   r   r   r   r   rN   r  r  r   r   r  rz   )r|   r;   r   rO   r<   r  r   r  s          r-   test_rotate03TestRotate.test_rotate03V  s     "zz?**,38  : ::y((((	* 27	  8
 ::djj"455BIDX%HnnT2U3!#0r1   c                     UR                  / SQ/ SQ/ SQ/UR                  S9nUR                  / SQ/ SQ/ SQ/UR                  S9n[        R                  " USSUS9n[	        XT5        g )Nr  r  rN   r   r   r   r   r   r  F)rS  r9   r  r  s         r-   test_rotate04TestRotate.test_rotate04h  sq    zz?**,35::  ? ::..079zz  C nnT2uEB!#0r1   c                    [         R                  " S5      n[        S5       H<  n[         R                  " / SQ/ SQ/ SQ/ SQ/[         R                  S9US S 2S S 2U4'   M>     UR                  U5      nUR                  / SQ/ SQ/ SQ/UR                  S9n[
        R                  " USUS	9n[        S5       H  n[        US S 2S S 2U4   U5        M     g )
N)r%   r3   r3   r3   r  r  rN   r   r  r  rz   r[   r  rt   r;   r]   r<   r  r   r?   r9   rA   rB   irj   r   s          r-   test_rotate05TestRotate.test_rotate05s  s    xx	"qAJJ	(1(1(1(3 ;=**FDAqM 
 zz$::|++-46JJ  @ nnT2U3qA%c!Q'lH= r1   c                    [         R                  " S5      n[        S5       H9  n[         R                  " / SQ/ SQ/ SQ/[         R                  S9US S 2S S 2U4'   M;     UR                  U5      nUR                  / SQ/ SQ/ SQ/ SQ/UR                  S9n[
        R                  " USUS	9n[        S5       H  n[        US S 2S S 2U4   U5        M     g )
N)r3   r%   r3   r3   r   r  rN   r  r  r  rz   r  r  s          r-   test_rotate06TestRotate.test_rotate06  s    xx	"qAJJ(4(4(6=?ZZIDAqM  zz$::y(((* 24  = nnT2U3qA%c!Q'lH= r1   c                 8   UR                  / SQ/ SQ/ SQ//S-  UR                  S9nUR                  US5      nUR                  / SQ/ SQ/ SQ/ SQ/ SQ//S-  UR                  S9nUR                  US5      n[        R                  " USS	US
9n[        XT5        g )Nr  r  r2   rN   r2   r   r   r  r  r  r  )axesr9   r;   r]   permute_dimsr<   r  r   r  s         r-   test_rotate07TestRotate.test_rotate07  s    zzO++- .0129;  E tY/::	 ) ) ) )	 + , /0	0 8:zz	  C
 ??8Y7nnT2F%@!#0r1   c                 .   UR                  / SQ/ SQ/ SQ//S-  UR                  S9nUR                  US5      nUR                  / SQ/ SQ/ SQ//S-  UR                  S9nUR                  US5      n[        R                  " USSS	US
9n[        XT5        g )Nr  r  r2   rN   r  r  r  r  F)r  rS  r9   r  r  s         r-   test_rotate08TestRotate.test_rotate08  s    zzO++- .0129;  E tY/:: / / 1 2456=?ZZ  I ??8Y7nnT2FEO!#0r1   c                     UR                  / SQ/ SQ/ SQ/S-  UR                  S9n[        [        5         [        R
                  " USSUR                  4S9  S S S 5        g ! , (       d  f       g = f)Nr  r  r2   rN   r  r   )r  )r;   r]   r  r  r<   r  rV  )r?   rA   rB   s      r-   test_rotate09TestRotate.test_rotate09  s`    zz?**,./079zz  C :&NN41dii.9 '&&s   #A""
A0c           
      .   UR                  UR                  SUR                  S9S5      nUR                  / SQ/ SQ/ SQ/ SQ/ SQ// SQ/ SQ/ S	Q/ S
Q/ SQ// SQ/ SQ/ SQ/ SQ/ SQ//UR                  S9n[        R
                  " USSS9n[        XCSSS9  g )N-   rN   )r3   r   r3   )r  r  r  )g|S2@g|S2@g>)!@)g9HD%@g9HD'@g9HD)@)gc~@gc~@gzLb @)g[ic6*@g[ic6,@g[ic6.@)g      5@g      6@g      7@)gRK<@gRK=@gRK>@)g,PA@g,PgB@g,PB@)gݠ'?@grn@@grnГ@@)gGA@gG9B@gGB@r   F)anglerS  gư>g>rV   )rS  r\   r]   r;   r<   r  r	   )r?   rA   rB   rj   r   s        r-   test_rotate10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;Dt<r1   r   z(https://github.com/cupy/cupy/issues/8400r    c                     UR                  [        R                  " [        R                  " S5      S5      5      n[        R
                  " [        R
                  " US5      S5      n[        X#5        g )Nr   )r   r      iL)r;   r[   tiler\   r<   r  r   )r?   rA   r4  r5  s       r-   test_rotate_exact_180 TestRotate.test_rotate_exact_180  sF    JJrwwryy|V45NN7>>!S148r1   r*   N)rm   rn   ro   rp   rY   rr   rs   rt   r  r  r  r  r  r  r  r  r  r  r(  r  ru   r*   r1   r-   r  r  @  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r1   r  )$r  numpyr[   numpy.testingr   scipy._lib._array_apir   r   r   r   r   r	   rY   r
   r  scipy.ndimager<    r   rr   rq   r(  
pytestmarkrh  ra   r   rs   rt   rw   r   r<  rn  r  r*  rc  r  r*   r1   r-   <module>r     s   
  +   *  ;;// KK11 &+9NOP
   E; E;P %1+.%($1 $1 ) /$1N &!IJ%1+.R; R; / KR;j &!IJJ, J, KJ,ZtD tDnx
 x
vD
 D
NL# L#^S Sr1   