
    (ph	                        S SK r S SKrS SKJr  S SKJrJrJr  S SK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  S SKJr  \R,                  R.                  r\\R,                  R1                  S	5      \" S
SS/S9/rSrSSSSSSS.r " S S5      r\R,                  R;                  S\" SS5      5      \R,                  R;                  S\5       " S S5      5       5       r\" SSS9\R,                  R;                  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)xp_assert_equalxp_assert_closeassert_array_almost_equal)is_cupyis_jax_asarrayarray_namespace)raises   )types)array_api_compatibleskip_xp_backendsTcupy	jax.numpy)cpu_only
exceptions-q=reflect	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                      \ 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>.shift1       aD3J=     )r               @r)   )   r   )cvalmodeoutput_shapeorderasarrayr   ndimagegeometric_transformselfr:   expected_valuexpr1   datas         r0   test_boundariesTestBoundaries.test_boundaries%   sE    	! zz-(''"459DJJ~&	(r4   )r   r   r5   r6   )r6   r   r5   r6   )r(   r   r5   r6   )r5   r   r5   r6   )r)   r   r5   r6   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    r0   r1   .TestBoundaries.test_boundaries2.<locals>.shiftF   r3   r4   r   r5   r6   r(   r)   r(   )r9   r:   r;   r=   rA   s         r0   test_boundaries2TestBoundaries.test_boundaries2:   sB    	! zz,'''"459;JJ~&	(r4   r:   )r   r   r   r   r   r   r<      c                 t   [        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[        U5      R                  n[        R                  " XVUS4   X!S9nSn	[        R                  U5      n
UR                  [        R                  " XIU
S95      nUR                  X-   5      US4   n[        R                  " XX!S9nUS:X  a  SOSn[        XS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 > 1ir8   dtypei   i  )num.r<   r:       r:   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r>   linspacer
   newaxisr?   map_coordinatesndimage_to_numpy_modegetpadr   )rB   r:   r<   rD   np_datarE   r/   rb   ynpadpad_modepaddedcoordsexpectedr[   s                  r0   test_boundary_spline_accuracy,TestBoundaries.test_boundary_spline_accuracyO   s    2JJMM	LLHI))B4zz'"JJr{{2rt45!!$,,##DGSL/R (,,T2BFF7x@ADH%gsl3**6R.tE$T:r4   r-   N)__name__
__module____qualname____firstlineno__r   r\   markparametrizerF   rM   rangern   __static_attributes__r-   r4   r0   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;r4   r    r<   r5   rO   rR   c                   F    \ rS rSrS rS r\" SSS9S 5       rS rS	 r	S
r
g)
TestSplinel   c                     [        X15      nUR                  / US9n[        R                  " XBS9nXSR	                  SUR
                  S9:X  d   eg )NrQ   r<   r   getattronesr?   spline_filterr>   rR   rB   rR   r<   rD   rE   outs         r0   test_spline01TestSpline.test_spline01p   sK    "wwrw'##D6jj#))j4444r4   c                     [        X15      nUR                  S/US9n[        R                  " XBS9n[	        XSR                  S/5      5        g )Nr   rQ   r|   )r~   r>   r?   r   r   r   s         r0   test_spline02TestSpline.test_spline02v   sB    "zz1#Uz+##D6!#zz1#7r4   Tzoutput=dtype is numpy-specificnp_onlyr$   c                     [        X15      nUR                  / US9n[        R                  " XBUS9nXSR	                  SUR
                  S9:X  d   eg )NrQ   outputr   r}   r   s         r0   test_spline03TestSpline.test_spline03|   sM    "wwrw'##D>jj#))j4444r4   c                     [        X15      nUR                  S/US9n[        R                  " XB5      n[	        XSR                  / SQ5      5        g )Nr(   rQ   r   r   r   r   )r~   r   r?   r   r   r>   r   s         r0   test_spline04TestSpline.test_spline04   sA    "wws%w(##D0!#zz,'?@r4   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(   rQ   r|   r   )r~   r   r?   r   r>   r   )rB   rR   r<   rD   rE   r   rm   s          r0   test_spline05TestSpline.test_spline05   sZ    "ww1vUw+##D6::|+++- . 	"#0r4   r-   N)rp   rq   rr   rs   r   r   r   r   r   r   rw   r-   r4   r0   ry   ry   l   s4    58 d+KL5 M5A1r4   ry   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    r0   mappingBTestGeometricTransform.test_geometric_transform01.<locals>.mapping       Hr4   r|   rQ   r>   r?   r@   shaper   rR   rB   r<   rD   rE   r   r   s         r0   test_geometric_transform011TestGeometricTransform.test_geometric_transform01   sN    zz1#	 ))$057!#zz1#SYYz'GHr4   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    r0   r   BTestGeometricTransform.test_geometric_transform02.<locals>.mapping   r   r4   r|   r   rQ   r   r?   r@   r   r   r>   rR   r   s         r0   test_geometric_transform021TestGeometricTransform.test_geometric_transform02   sL    wws|	 ))$057!#zz,ciiz'PQr4   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    r0   r   BTestGeometricTransform.test_geometric_transform03.<locals>.mapping       aD1H;r4   r|   r   r   r   r   rQ   r   r   s         r0   test_geometric_transform031TestGeometricTransform.test_geometric_transform03   sL    wws|	 ))$057!#zz,ciiz'PQr4   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   r6   r5   c                     U S   S-
  4$ r   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform04.<locals>.mapping   r   r4   r|   r   r(   r   r6   rQ   r   r   s         r0   test_geometric_transform041TestGeometricTransform.test_geometric_transform04   sK    zz,'	 ))$057!#zz,ciiz'PQr4   rR   r`   
complex128c                 T   [        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5      R                  nU" UR                  S5      (       a  USU-  -  nUSU-  -  nS n[
        R                  " XGUR                  US9n[        X5        g )Nr   rQ   r   complex floating              ?c                     U S   U S   S-
  4$ r   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform05.<locals>.mapping       aD!A$(##r4   r|   )	r~   r>   r
   isdtyperR   r?   r@   r   r   )	rB   r<   rR   rD   rE   rm   r   r   r   s	            r0   test_geometric_transform051TestGeometricTransform.test_geometric_transform05   s    "zz<'')05  7 ::|++-49  ; "$'//4::122BIDX%H	$ ))$057!#0r4   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   r8   rO         r6   r   r6   rO   c                     U S   U S   S-
  4$ r   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform06.<locals>.mapping   r   r4   r|   r   r   r8   rO   r   r   r6   r   r6   rQ   r>   r?   r@   r   rR   r   rB   r<   rD   rE   r   r   rm   s          r0   test_geometric_transform061TestGeometricTransform.test_geometric_transform06   p    zz<'') *	$ ))$057::|++-47II  ? 	"#0r4   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    r0   r   BTestGeometricTransform.test_geometric_transform07.<locals>.mapping       aD1Had##r4   r|   r   r   r   r   rQ   r   r   s          r0   test_geometric_transform071TestGeometricTransform.test_geometric_transform07   r   r4   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    r0   r   BTestGeometricTransform.test_geometric_transform08.<locals>.mapping       aD1HadQh''r4   r|   r   r   r   rQ   r   r   s          r0   test_geometric_transform081TestGeometricTransform.test_geometric_transform08   sp    zz<'') *	( ))$057::|++-47II  ? 	"#0r4   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    r0   r   BTestGeometricTransform.test_geometric_transform10.<locals>.mapping  r   r4   r   r|   Fr<   	prefilterr   r   r   rQ   )r>   r?   r   r@   r   rR   r   )rB   r<   rD   rE   r   filteredr   rm   s           r0   test_geometric_transform101TestGeometricTransform.test_geometric_transform10  s    zz<'') *	( AI,,T?HH))(TZZ05H::|++-47II  ? 	"#0r4   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 )Nr5   rQ   c                     U S   S-  4$ Nr   r5   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform13.<locals>.mapping  s    aDAI<r4   r(   r|   r   )r   r`   r?   r@   r   r>   rR   r   s         r0   test_geometric_transform131TestGeometricTransform.test_geometric_transform13  sP    wws"**w-	  ))$!EJ!#zz,ciiz'PQr4   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   r5   rO   r6   r8   r(   r(   c                     SU S   -  4$ )Nr5   r   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform14.<locals>.mapping"  s    !H;r4   r(   r|   rK   rQ   )r>   r?   r@   r   rR   r   s         r0   test_geometric_transform141TestGeometricTransform.test_geometric_transform14  sG    zz23	 ))$!EJ!#zz,ciiz'PQr4   c                 h    / SQnS n[         R                  " X4S/US9n[        US S S2   / SQ5        g )NrK   c                     U S   S-  4$ r   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform15.<locals>.mapping+  r   r4   r   r|   r5   r?   r@   r   r   s         r0   test_geometric_transform151TestGeometricTransform.test_geometric_transform15(  s6    	 ))$!EJ!#cc(L9r4   c                 v    / SQ/ SQ/ SQ/nS n[         R                  " X4SUS9n[        USS/S	S
/SS//5        g )NrK   r   rO   r8   r   g      "@
         c                     U S   U S   S-  4$ Nr   r   r5   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform16.<locals>.mapping6  r   r4   r6   r5   r|   r   r6   r   r8   	   r   r   r   s         r0   test_geometric_transform161TestGeometricTransform.test_geometric_transform161  sM    !#	$ ))$057!#AAB'@Ar4   c                 j    / SQ/ SQ/ SQ/nS n[         R                  " X4SUS9n[        U/ SQ/5        g )NrK   r   r  r   r   r   c                     U S   S-  U S   4$ Nr   r5   r   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform17.<locals>.mappingB  r   r4   r   r(   r|   r   r   s         r0   test_geometric_transform171TestGeometricTransform.test_geometric_transform17=  s<    !	$ ))$057!#~6r4   c                 j    / SQ/ SQ/ SQ/nS n[         R                  " X4SUS9n[        USS//5        g )	NrK   r   r  c                 "    U S   S-  U S   S-  4$ r  r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform18.<locals>.mappingN  r   r4   r   r5   r|   r   r6   r   r   s         r0   test_geometric_transform181TestGeometricTransform.test_geometric_transform18I  s@    !	( ))$057!#Ax0r4   c                 t    / SQ/ SQ/ SQ/nS n[         R                  " X4SUS9n[        USS S S24   U5        g )	NrK   r   r  c                     U S   U S   S-  4$ r   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform19.<locals>.mappingZ  r   r4   r6   r   r|   .r5   r   r   s         r0   test_geometric_transform191TestGeometricTransform.test_geometric_transform19U  sF    !	$ ))$057!#c3Q3h-6r4   c                 t    / SQ/ SQ/ SQ/nS n[         R                  " X4SUS9n[        US S S2S4   U5        g )	NrK   r   r  c                     U S   S-  U S   4$ r  r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform20.<locals>.mappingf  r   r4   rO   r(   r|   r5   .r   r   s         r0   test_geometric_transform201TestGeometricTransform.test_geometric_transform20a  sF    !	$ ))$057!#cc3h-6r4   c                 z    / SQ/ SQ/ SQ/nS n[         R                  " X4SUS9n[        US S S2S S S24   U5        g )NrK   r   r  c                 "    U S   S-  U S   S-  4$ r  r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform21.<locals>.mappingr  r   r4   rO   r   r|   r5   r   r   s         r0   test_geometric_transform211TestGeometricTransform.test_geometric_transform21m  sJ    !	( ))$057!#cc3Q3h-6r4   c                     UR                  / SQ/ SQ/ SQ/UR                  S9nS nS n[        R                  " X4SUS9n[        R                  " XeS	US9n[	        Xc5        g )
NrK   r   r  rQ   c                 "    U S   S-  U S   S-  4$ r  r-   r.   s    r0   mapping1CTestGeometricTransform.test_geometric_transform22.<locals>.mapping1~  r   r4   c                 "    U S   S-  U S   S-  4$ r  r-   r.   s    r0   mapping2CTestGeometricTransform.test_geometric_transform22.<locals>.mapping2  r   r4   r"  r|   r6   r(   )r>   r`   r?   r@   r   )rB   r<   rD   rE   r'  r*  r   s          r0   test_geometric_transform221TestGeometricTransform.test_geometric_transform22y  sk    zz<'*,35::  ?	(	( ))$*0?))#*0?!#,r4   c                     / SQ/ SQ/ SQ/nS n[         R                  " X4SUS9nUR                  [        R                  5      n[        USS/5        g )	NrK   r   r  c                     SU S   S-  4$ )Nr   r   r5   r-   r.   s    r0   r   BTestGeometricTransform.test_geometric_transform23.<locals>.mapping  s    qtax= r4   r5   r|   r   r8   )r?   r@   astyper^   int32r   r   s         r0   test_geometric_transform231TestGeometricTransform.test_geometric_transform23  sM    !	! ))$UKjj"!#1v.r4   c           	      p    / SQ/ SQ/ SQ/nS n[         R                  " X4SUSSS0S	9n[        US
S/5        g )NrK   r   r  c                     XS   U-  4$ )Nr   r-   )r/   abs      r0   r   BTestGeometricTransform.test_geometric_transform24.<locals>.mapping  s    tax= r4   r2  )r   r:  r5   )r<   extra_argumentsextra_keywordsr   r8   r   r   s         r0   test_geometric_transform241TestGeometricTransform.test_geometric_transform24  sI    !	! ))4ud8% 	"#1v.r4   r-   N)rp   rq   rr   rs   r   r   r   r   r\   rt   ru   r   r   r   r   r   r   r   r   r  r  r  r  r  r#  r-  r5  r>  rw   r-   r4   r0   r   r      s    IRRR [[Wy,&?@1 A1*1111&RR:
B
7
1
7
7
7-"
//r4   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   r5   r6   r(   r   rO   rQ   c                 "    U S   S-
  U S   S-
  4$ )Nr   r,   r   r-   r.   s    r0   r   ZTestGeometricTransformExtra.test_geometric_transform_grid_constant_order1.<locals>.mapping      aD3J!A$*--r4   g      ?g      ?      ?rI  g      @r7   r   r   r:   r<   )r>   r`   r   r?   r@   )rB   rD   r/   r   expected_results        r0   -test_geometric_transform_grid_constant_order1ITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1  sh     JJ	!#*,**  6	. **&8&8&: ;!''./1	
r4   r:   r   r   r   r   r   r<   rO   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    r0   r   OTestGeometricTransformExtra.test_geometric_transform_vs_padded.<locals>.mapping  rG  r4      rQ   r      rW   rK  rX   rZ   )r^   r_   floatreshaperd   re   rf   r>   tupleslicendimr?   r@   r   )rB   r<   r:   rD   r   r/   ri   rj   x_paddedcenter_slicerL  s              r0   "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		
r4   Tzendianness is numpy-specificr   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    r0   r   fTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter.<locals>.mapping  r   r4   r   )
r^   r>   rR   newbyteorder
empty_liker3  r?   r@   r   r   )rB   rD   rE   r   r   returnedresults          r0   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r4   !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    r0   r   XTestGeometricTransformExtra.test_geometric_transform_with_string_output.<locals>.mapping  r   r4   fr   )r>   r?   r@   rR   r^   r   )rB   rD   rE   r   r   s        r0   +test_geometric_transform_with_string_outputGTestGeometricTransformExtra.test_geometric_transform_with_string_output  sP    zz1#	 ))$DyyBHHSM)))!#s+r4   r-   N)rp   rq   rr   rs   rM  r\   rt   ru   rv   r^  r   rg  rn  rw   r-   r4   r0   rA  rA    s    
" [[V &; <[[WeAh/
 0<
4 d+IJ3 K3  d+NO, P,r4   rA  c                      \ 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\R&                  ;   =(       d    \R(                  " S5      R*                  S:  SS
9S 5       rSrg)TestMapCoordinatesi  r<   r   rO   rR   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5      R
                  nU" 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                  " XGUS9n[        X5        g )Nr   'jax map_coordinates requires order <= 1r   r   r   r   r   r   r   r   r|   )r   r\   r]   r>   r
   r   rR   r^   indicesr   r?   rc   r   )	rB   r<   rR   rD   rE   rm   r   idxr   s	            r0   test_map_coordinates01)TestMapCoordinates.test_map_coordinates01  s     "::%!)LLBCzz<'') * ::|++- . "$'//4::122"t)#D"x-/Hjj$qjjo%%du=!#0r4   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   rs  zoutput differs. jax bug?r   r   r   r,   r|   )r   r\   r]   r>   r^   rt  r   r`   r?   r1   rc   r   )rB   r<   rD   rE   ru  out1out2s          r0   test_map_coordinates02)TestMapCoordinates.test_map_coordinates02  s    "::qy||EFz||67zz<'') * jjRZZ0s
jjo}}T3e4&&t>!$-r4   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)r<   rD   r   r   r   r   r   r   r5   .r   r(   r8   )	r	   r^   rt  r   r>   r?   rc   r   r1   )rB   rD   rE   ru  r   rm   s         r0   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Kr4   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   r5   r8   rO   r   r   )r^   r>   rt  r   rR   rc  rd  r3  r?   rc   r   )rB   rD   rE   rm   ru  r   re  rf  s           r0   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
r4   ri  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   rm  r   )r>   r^   rt  r   r?   rc   rR   r   )rB   rD   rE   ru  r   s        r0   'test_map_coordinates_with_string_output:TestMapCoordinates.test_map_coordinates_with_string_outputN  st    zzA3% jj$jjo%%d<yyBHHSM)))!#zzA3%'89r4   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  r5   rQ   r   r6   r%   r   r|   zNot enough memory available)
r^   emptyfloat32rX  r?   rc   r>   MemoryErrorr\   skip)rB   rD   nr9  es        r0   test_map_coordinates_large_data2TestMapCoordinates.test_map_coordinates_large_dataW  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)rp   rq   rr   rs   r\   rt   ru   rv   r^   r`   r   rv  r{  r   r  r  r  skipifsysplatformintpitemsizer  rw   r-   r4   r0   rq  rq    s$   [[WeAqk2[[Wrzz2==&AB1 C 31, [[WeAqk2. 3.$ k*FGL HL4 d#8 $8& d+NO: P: [[3<</J2771:3F3F3J 4  5D5Dr4   rq  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\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" 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                  S,/ S-Q5      \R
                  R                  S\" SS5      5      S. 5       5       r(\R
                  R                  S\" SS5      5      S/ 5       r)S0r*g1)2TestAffineTransformii  r<   r   rO   c                     UR                  S/5      n[        R                  " X2R                  S//5      US9n[        XBR                  S/5      5        g )Nr   r|   r>   r?   affine_transformr   rB   r<   rD   rE   r   s        r0   test_affine_transform01+TestAffineTransform.test_affine_transform01k  sB    zz1#&&tZZ!->eL!#zz1#7r4   c                     UR                  S/5      n[        R                  " X2R                  S//5      US9n[	        XBR                  / SQ5      5        g )Nr(   r   r|   r   r   r?   r  r>   r   r  s        r0   test_affine_transform02+TestAffineTransform.test_affine_transform02q  sA    wws|&&tZZ!->eL!#zz,'?@r4   c                     UR                  S/5      n[        R                  " X2R                  S//5      SUS9n[	        XBR                  / SQ5      5        g )Nr(   r   r)   r|   r   r  r  s        r0   test_affine_transform03+TestAffineTransform.test_affine_transform03w  sC    wws|&&tZZ!->%P!#zz,'?@r4   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)   r|   r   r  r  s        r0   test_affine_transform04+TestAffineTransform.test_affine_transform04}  sB    zz,'&&tZZ!->%P!#zz,'?@r4   rR   r`   r   c                 h   [        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5      R                  nU" 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[        Xu5        g )
Nr   rQ   r   r   r   r   r   r)   r|   )r~   r>   r
   r   rR   r?   r  r   rB   r<   rR   rD   rE   rm   r   r   s           r0   test_affine_transform05+TestAffineTransform.test_affine_transform05  s     "zz<'')05  7 ::|++-49  ; "$'//4::122BIDX%H&&tZZ!Q!Q8H-I()2we=!#0r4   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)   r|   r   r   r   r  r  s        r0   test_affine_transform06+TestAffineTransform.test_affine_transform06  ss    zz<'') * &&tZZ!Q!Q8H-I()2we=!#zz<3?3?3A (B 	Cr4   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)   r|   r   r  r  s        r0   test_affine_transform07+TestAffineTransform.test_affine_transform07  ss    zz<'') * &&tZZ!Q!Q8H-I(*Awe=!#zz<3?3?3A (B 	Cr4   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)   r|   r   r   r   r  r  s        r0   test_affine_transform08+TestAffineTransform.test_affine_transform08  ss    zz<'') * &&tZZ!Q!Q8H-I(*Bxu>!#zz<3?3?3A (B 	Cr4   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   r|   r   r)   Fr   r   r   r   )r>   r?   r   r  r   rB   r<   rD   rE   r   r   s         r0   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r4   c                     UR                  S/UR                  S9n[        R                  " X2R	                  S//5      SUS9n[        XBR	                  / SQ5      5        g )Nr5   rQ   r,   rL   )r;   r<   r   r   r   r   )r   r`   r?   r  r>   r   r  s        r0   test_affine_transform10+TestAffineTransform.test_affine_transform10  sO    wws"**w-&&tZZ#-@t-24!#zz,'?@r4   c                     UR                  / SQ5      n[        R                  " X2R                  S//5      SSUS9n[        XBR                  / SQ5      5        g )Nr   r5   r   rL   r|   rK   r  r  s        r0   test_affine_transform11+TestAffineTransform.test_affine_transform11  sE    zz23&&tZZ!->4uU!#zz,'?@r4   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 )NrK   r,   r   r   r|   r5   r  r  s        r0   test_affine_transform12+TestAffineTransform.test_affine_transform12  sO    zz,'&&tZZ#-@!TQVW!#cc(BJJ|,DEr4   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 )NrK   r   r   r   r   r5   r  r|   r6   r   r8   r  r   r  r  s        r0   test_affine_transform13+TestAffineTransform.test_affine_transform13  su    !# zz$&&tZZ!Q!Q8H-I1f-24!#zzAq6Aq6Ar72K'LMr4   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 )	NrK   r   r  r5   r   r   r
  r|   r  r  s        r0   test_affine_transform14+TestAffineTransform.test_affine_transform14  sd    ! zz$&&tZZ!Q!Q8H-I1f-24!#zz<.'ABr4   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 )
NrK   r   r  r5   r   r  r|   r   r6   r  r  s        r0   test_affine_transform15+TestAffineTransform.test_affine_transform15  sh    ! zz$&&tZZ!Q!Q8H-I1f-24!#zzAq6(';<r4   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 )NrK   r   r  r           r   r,   r  r|   .r5   r  r  s        r0   test_affine_transform16+TestAffineTransform.test_affine_transform16  sg    ! zz$&&tZZ!SAs88L-Mq'-U<!#c3Q3h-6r4   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 )NrK   r   r  r,   r   r   r  r|   r5   .r  r  s        r0   test_affine_transform17+TestAffineTransform.test_affine_transform17  sg    ! zz$&&tZZ#qAq68J-KQ'-U<!#cc3h-6r4   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 )	NrK   r   r  r,   r   r"  r|   r5   r  r  s        r0   test_affine_transform18+TestAffineTransform.test_affine_transform18  sh    zz<'*, - &&tZZ#qAs88L-Mq'-U<!#cc3Q3h-6r4   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 )NrK   r   r  rQ   r,   r   r"  r|          @r,  )r>   r`   r?   r  r   r  s        r0   test_affine_transform19+TestAffineTransform.test_affine_transform19  s    zz<'*,35::  ? &&tZZ#qAs88L-Mq'-U<&&sJJa1c(7K,La'-U<!#,r4   c                    [        U5      (       a  [        R                  " S5        / 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 )N(https://github.com/cupy/cupy/issues/8394rK   r   r  r   r5   r2  r|   r   r6   r   r\   r]   r>   r?   r  r   r  s        r0   test_affine_transform20+TestAffineTransform.test_affine_transform20  w    2;;LLCD! zz$&&tZZ!qc
-CQ-24!#zz1a&'9:r4   c                    [        U5      (       a  [        R                  " S5        / 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 )Nr  rK   r   r  r5   r   r2  r|   r   r  r  r  s        r0   test_affine_transform21+TestAffineTransform.test_affine_transform21,  r  r4   c                     UR                  / SQ5      n[        R                  " X2R                  S//5      S/SUS9n[        XBR                  / SQ5      5        g )Nr   r5   r)   )r6   r|   r   r   r5   r  r  s        r0   test_affine_transform22+TestAffineTransform.test_affine_transform229  sK     zz,'&&tZZ!->d-24!#zz)'<=r4   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  r|   r5   r   r  r  s        r0   test_affine_transform23+TestAffineTransform.test_affine_transform23A  sU     zz,'&&tZZ#-@2$-24!#cc(BJJ|,DEr4   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 changedr5   r)   r|   r>   r   filterUserWarningr?   r  r   rB   r<   rD   rE   supry  rz  s          r0   test_affine_transform24+TestAffineTransform.test_affine_transform24I  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)   r|   r  r  s          r0   test_affine_transform25+TestAffineTransform.test_affine_transform25U  s     zz,' CJJ{%& ++D**cU2CRuUD	 !
 ''jj3%.A2US!$- ! r  c           
      h   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[        XV5      R                  nU" XV4SS9nU" XR                  / 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                  " XHUSS9n[        R                  " XIU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   r|   r5   r5   r   axis)r  r   r   r   )r)   Fr   r   r   r   )r>   r?   r   eyer   r
   concatrX  rW  r  r   )rB   r<   rD   rE   r   tform_originaloffset_originalr  tform_h1tform_h2r/   offsry  rz  out3r   s                   r0   test_affine_transform26+TestAffineTransform.test_affine_transform26a  s;    zz<'') * AI,,T?HH776?* AHH>;!DHjj+&?@qI"$**_e"DE"DQa"DE''(,.3uF ''%279''%279%C%c::|7C7C7E ,F G & Fs   &D/c                 p   [        U5      (       a  [        R                  " S5        UR                  / SQ/ SQ/ SQ/5      n[	        U5      R
                  nU" UR                  S5      UR                  S5      * 4SS9nU" XAR                  / S	Q/5      4S
S9n[        [        [        R                  X%5        g )NzCuPy does not raiser   r   r   r5   r  r   r  )      @r5   r   r   )r   r\   r]   r>   r
   r  r  r   assert_raises
ValueErrorr?   r  )rB   rD   rE   r  r  r  s         r0   test_affine_transform27+TestAffineTransform.test_affine_transform27  s    2;;LL./ zz<'') * !&--BFF1I'78B8ZZ%>?aHj'":":DKr4   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)r5   r5   r  r   r   )r   rd  r3  rR   rc  r   r  r  r>   r?   r  r   )rB   rD   rE   r   r  matrixre  rf  s           r0   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>   rR   rc  rd  r3  r?   r  r   )rB   rD   rE   r   re  rf  s         r0   >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r4   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   rQ   )   r   r   )r   )r   r;   )
r_   r`   r   r?   r  r>   r   r\   r   RuntimeErrorrB   rD   rE   r   s       r0   "test_affine_transform_output_shape6TestAffineTransform.test_affine_transform_output_shape  s    
 yy"**y-ggen  zzA3%'8E!#bq'40 ]]<($$seCe= )((s   ;B
B,ri  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  rR   r^   r   r  s       r0   (test_affine_transform_with_string_output<TestAffineTransform.test_affine_transform_with_string_output  s\    zz1#&&tZZ!->sKyyBHHSM)))!#zz1#7r4   r1   )r   r   r   r   )r)   r   )r6   )r5   r8   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   r5   r6   r5   r6   r  r  r   rK  )r^   r>   zerosr  rollr   r?   r  )rB   r1   r<   rD   r/   affinerm   s          r0   )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	
r4   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  r6   r(   r   r)   r5   r6   r   rK  )	r^   r>   copyr#  r  r   r   r?   r  )rB   r<   rD   r/   rm   r%  s         r0   #test_affine_transform_shift_reflect7TestAffineTransform.test_affine_transform_shift_reflect  s     JJ	!# $TrT4R4Z=%%'JJqM::h'1a&!rr2A2vzz!''*q!tF#!$$QYeL	
r4   r-   N)+rp   rq   rr   rs   r\   rt   ru   rv   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+  rw   r-   r4   r0   r  r  i  s   [[WeAqk28 38
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2[[Wy,&?@1 A 31  [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2A 3A [[WeAqk2A 3A
 [[WeAqk2F 3F
 [[WeAqk2N 3N [[WeAqk2C 3C [[WeAqk2= 3= [[WeAqk27 37 [[WeAqk27 37 [[WeAqk27 37 [[WeAqk2- 3- [[WeAqk2
; 3
; [[WeAqk2
; 3
; [[WeAqk2> 3> [[WeAqk2F 3F [[WeAqk2	. 3	. [[WeAqk2	. 3	. [[WeAqk2G 3G<L d+HIL JL  d+HI
? J
? d<== d+NO8 P8 [[WGI[[WeAqk2
 3I
& [[WeAqk2
 3
r4   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  r<   r   rO   c                     UR                  S/5      n[        R                  " US/US9n[        XBR                  S/5      5        g )Nr   r|   r   r>   r?   r1   r   r  s        r0   test_shift01TestShift.test_shift01  s7    zz1#mmD1#U3!#zz1#7r4   c                     UR                  S/5      n[        R                  " US/US9n[        XBR	                  / SQ5      5        g )Nr(   r   r|   r   r   r?   r1   r   r>   r  s        r0   test_shift02TestShift.test_shift02  s6    wws|mmD1#U3!#zz,'?@r4   c                     UR                  S/5      n[        R                  " USUS9n[        XBR	                  / SQ5      5        g )Nr(   r)   r|   r  r4  r  s        r0   test_shift03TestShift.test_shift03  s4    wws|mmD"E2!#zz,'?@r4   c                     UR                  / SQ5      n[        R                  " USUS9n[        XBR                  / SQ5      5        g )Nr   r   r|   r   r0  r  s        r0   test_shift04TestShift.test_shift04  s3    zz,'mmD!51!#zz,'?@r4   rR   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5      R                  nU" UR                  S5      (       a  USU-  -  nUSU-  -  n[
        R                  " USS/US9n[        Xu5        g )	Nr   rQ   r   r   r   r   r   r|   )r~   r>   r
   r   rR   r?   r1   r   r  s           r0   test_shift05TestShift.test_shift05  s     "zz<'')05  7 ::|++-49  ; "$'//4::122BIDX%HmmD1a&6!#0r4   r:   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[        U5      R                  nU" UR                  S5      (       a  USU-  -  nUSU-  -  nSnXS 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   rQ   r   r   r   r	  r   r   )r<   r:   r9   )r^   r>   r
   r   rR   r?   r1   r   )
rB   r<   r:   rR   rD   rE   rm   r   r9   r   s
             r0   test_shift_with_nonzero_cval&TestShift.test_shift_with_nonzero_cval  s     zz<'')057 ::|++-49; "$'//4::122BIDX%HAzz$::h'mmD1a&tL!#0r4   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   r|   r   r   r   r0  r  s        r0   test_shift06TestShift.test_shift060  X    zz<'') * mmD1a&6!#zz<3?3?3A (B 	Cr4   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   r|   r   r0  r  s        r0   test_shift07TestShift.test_shift07:  rF  r4   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|   r   r   r   r0  r  s        r0   test_shift08TestShift.test_shift08D  rF  r4   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   r|   Fr   r   r   r   )r>   r?   r   r1   r   r  s         r0   test_shift09TestShift.test_shift09N  sv    zz<'') * AI,,T?HHmmHq!fEUK!#zz<3?3?3A (B 	Cr4   r1   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   r5   r6   r  r  r   rK  )r^   r>   r$  r   r?   r1   )rB   r1   r<   rD   r/   rm   s         r0   test_shift_grid_wrapTestShift.test_shift_grid_wrap\  sj    
 JJAA  !771%0JJqM::h'!MM!EB	
r4   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   rK  r   )rX  r_   r   r?   r1   )rB   r1   r<   rD   r/   s        r0   test_shift_grid_constant1#TestShift.test_shift_grid_constant1m  sD    
 JJryy}f-!MM!FMM!5A	
r4   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 )
NrC  rD  rQ   rH  rJ  )r,   r,   r   r   rK  )r>   r`   r   r?   r1   )rB   rD   r/   rL  s       r0   test_shift_grid_constant_order1)TestShift.test_shift_grid_constant_order1x  s\    JJ	!#*,**  6**&8&8&: ;!MM!ZoQG	
r4   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   rK  )r^   r>   r*  r   r?   r1   r   )rB   r<   rD   r/   rm   s        r0   test_shift_reflectTestShift.test_shift_reflect  st     JJ	!# $TrT4R4Z=%%'JJqM::h'!MM!WW9EB	
r4   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   )r:   r<   r   r5   r   r   r)   )r_   dictr   r?   r1   )rB   r<   r   rD   r/   kwargss         r0   test_shift_nearest_boundary%TestShift.test_shift_nearest_boundary  sy    
 IIbM9EG!MM!aZ!^6v6q91Q4	
 	"MM!Vq[1_77;QrU	
r4   rO  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 )
NrT  rQ   r   )rR  gffffffrV   rW   rK  rX   rV  )r^   r_   rW  rX  rd   re   r>   rf   rY  rZ  r[  r?   r1   r   )rB   r<   r:   rD   x_npr1   ri   rj   r\  r/   r]  rL  s               r0   test_shift_vs_paddedTestShift.test_shift_vs_padded  s     yyE*222r: (,,T2::bffTh?@JJteD%01AFF:;!--$55AC 	MM!;	
r4   r-   N)rp   rq   rr   rs   r\   rt   ru   rv   r1  r5  r8  r;  r>  rA  rD  rH  rK  rN  rQ  rU  rX  r[  r`  rd  rw   r-   r4   r0   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<
r4   r.  c                      \ 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 5       rS  rS!rg")#TestZoomi  r<   r   rO   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 )Nr5      rQ   )r   r   r|   )r   r   r)   r   rT  r   rU  )rX  r_   r`   r?   zoomr   alleps)rB   r<   rD   zarrs        r0   
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(+,,,, r4   c                     UR                  UR                  S5      S5      n[        R                  " [        R                  " US5      S5      n[	        X25        g )Nr   r,  r5   r,   )rX  r_   r?   rj  r   )rB   rD   rn  r   s       r0   
test_zoom2TestZoom.test_zoom2  s=    jj2/ll7<<Q/5!r4   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   r5   r  r  )r   r   r5   r5   )r>   r?   rj  r   )rB   rD   rn  ry  rz  s        r0   
test_zoom3TestZoom.test_zoom3  sg    jj1a&"||C(||C(!$

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

L>(BCr4   rR   r`   r   c           	         [        X25      nUR                  / SQ/ SQ/ SQ/US9n[        U5      R                  nU" 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)NrK   r   r  rQ   r   r   r  r,   r   r"  r|   r5   )r~   r>   r
   r   rR   r   r  r  r?   r  r   )rB   r<   rR   rD   rE   r   r  r   s           r0   test_zoom_affine01TestZoom.test_zoom_affine01  s     "zz<'*,38  : "$'//4::122BID CJJ{%& **4S#J1G+1@C	 ! 	"#cc3Q3h-6 ! s   $?C
Cc                 Z    Sn[         R                  " UR                  X"45      SU-  SS9  g )Nr         ?r   rW   )r?   rj  r#  )rB   rD   dims      r0   test_zoom_infinityTestZoom.test_zoom_infinity  s&    RXXsj)28)Dr4   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   )r{  r  r  r8   )r9   )r   r   r   )r#  r?   rj  r   )rB   rD   rn  rj  r   refs         r0   test_zoom_zoomfactor_one!TestZoom.test_zoom_zoomfactor_one  s;    hhy!ll31-hh{#!#+r4   c                 z    UR                  S5      nSn[        R                  " X#5      nUR                  S:X  d   eg )N)r6   r   ri  )gUUUUUU?gE]t?g(\?)r(   rS      )r#  r?   rj  r   )rB   rD   rn  rj  r   s        r0   test_zoom_output_shape_roundoff(TestZoom.test_zoom_output_shape_roundoff  s5    hh{#.ll3%yyK'''r4   rj  )r  )r6   r   )r   r5   )r   r   r:   )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   r5   r6   rQ   rU   )r^   r>   r`   kronr   r   r?   rj  )rB   rj  r:   rD   rc  rm   r/   s          r0   test_zoom_by_int_order0 TestZoom.test_zoom_by_int_order0  sz     zzAq6q6#*,**6774/JJt::h'!LL5	
r4   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 )NrQ   r   T)r<   r:   	grid_mode)r^   r_   prodrW  rX  r>   r   r?   rj  r  r   )rB   r   rj  r:   rD   rc  r/   s          r0   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	
r4   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  rQ   )r6   r6   zIt is recommended to use mode)matchr5   T)r:   r  )rX  r_   r`   r\   warnsr  r?   rj  )rB   r:   rD   r/   s       r0   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Tz!inplace output= is numpy-specificr   c                     UR                  UR                  S5      S5      n[        R                  " USUR	                  S5      S9  g)zTicket #643r   r,  r5   r"  r   N)rX  r_   r?   rj  r#  )rB   rD   r/   s      r0   test_zoom_output_shapeTestZoom.test_zoom_output_shape%  s5     JJryy}f-Q"((6"23r4   c                     UR                  S5      nSn[        R                  " U[        R                  " U5      5      n[        R                  " X#5      n[        XE5        g )Ng      $@r5   )r_   r?   rj  r^   arrayr   )rB   rD   r9  factoractualrm   s         r0   test_zoom_0d_arrayTestZoom.test_zoom_0d_array+  sC    IIcNa&!12<<*)r4   r-   N)rp   rq   rr   rs   r\   rt   ru   rv   ro  rr  ru  rx  r}  r  r  r  r  thread_unsafer  r   r  r  rw   r-   r4   r0   rg  rg    s   [[WeAqk2	- 3	-"
D [[WeAqk2[[Wy,&?@7 A 37 E
,( [[V%EF[[V &7 8
8 G
" [[Wvv&67[[V%EF[[V &D E

E G 8

 [[Vj&%9:[[;  ;; d+NO4 P4
*r4   rg  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 rSrg)
TestRotatei4  r<   r   rO   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   rQ   r   r|   r>   r`   r?   rotater   r  s        r0   test_rotate01TestRotate.test_rotate016  sE    zz<'')02

  < nnT1E2!#,r4   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   rQ   r   r   r   r   r   r   Z   r|   r  rB   r<   rD   rE   rm   r   s         r0   test_rotate02TestRotate.test_rotate02>  ss    zz<'')02

  < ::y(((* 24  = nnT2U3!#0r4   rR   r`   r   c                 F   [        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5      R                  nU" UR                  S5      (       a  USU-  -  nUSU-  -  n[
        R                  " USUS	9n[        Xu5        g )
Nr   r   r   r   r   r   r   r   r   r   rQ   r  r  r   r   r  r|   )r~   r>   r
   r   rR   r?   r  r   r  s           r0   test_rotate03TestRotate.test_rotate03J  s     "zz?**,38  : ::y((((	* 27	  8
 "$'//4::122BIDX%HnnT2U3!#0r4   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  rQ   r   r   r   r   r   r  F)rX  r<   r  r  s         r0   test_rotate04TestRotate.test_rotate04]  sq    zz?**,35::  ? ::..079zz  C nnT2uEB!#0r4   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(   r6   r6   r6   r  r  rQ   r   r  r  r|   r^   r  rv   r>   r`   r?   r  r   rB   r<   rD   rE   irm   r   s          r0   test_rotate05TestRotate.test_rotate05h  s    xx	"qAJJ	(1(1(1(3 ;=**FDAqM 
 zz$::|++-46JJ  @ nnT2U3qA%c!Q'lH= r4   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)r6   r(   r6   r6   r   r  rQ   r  r  r  r|   r  r  s          r0   test_rotate06TestRotate.test_rotate06x  s    xx	"qAJJ(4(4(6=?ZZIDAqM  zz$::y(((* 24  = nnT2U3qA%c!Q'lH= r4   c                 >   UR                  / SQ/ SQ/ SQ//S-  UR                  S9n[        U5      R                  nU" US5      nUR                  / SQ/ SQ/ SQ/ SQ/ SQ//S-  UR                  S9nU" US5      n[        R
                  " USS	US
9n[        Xe5        g )Nr  r  r5   rQ   r5   r   r   r  r  r  r  )axesr<   r>   r`   r
   permute_dimsr?   r  r   rB   r<   rD   rE   r  rm   r   s          r0   test_rotate07TestRotate.test_rotate07  s    zzO++- .0129;  E 't,99D),::	 ) ) ) )	 + , /0	0 8:zz	  C
  )4nnT2F%@!#0r4   c                 ^   UR                  / SQ/ SQ/ SQ//S-  UR                  S9n[        U5      R                  nU" US5      nUR                  / SQ/ SQ/ SQ//S-  UR                  S9n[        U5      R                  nU" US5      n[        R
                  " USSS	US
9n[        Xe5        g )Nr  r  r5   rQ   r  r  r  r  F)r  rX  r<   r  r  s          r0   test_rotate08TestRotate.test_rotate08  s    zzO++- .0129;  E 't,99D),:: / / 1 2456=?ZZ  I 't,99)4nnT2FEO!#0r4   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  r5   rQ   r  r   )r  )r>   r`   r
  r  r?   r  r[  )rB   rD   rE   s      r0   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-   rQ   )r6   r   r6   )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)anglerX  gư>g>rY   )rX  r_   r`   r>   r?   r  r   )rB   rD   rE   rm   r   s        r0   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<r4   c                 
   [        U5      (       a  [        R                  " S5        [        R                  " UR                  S5      S5      n[        R                  " [        R                  " US5      S5      n[        X#5        g )Nz(https://github.com/cupy/cupy/issues/8400r   )r   r      iL)	r   r\   r]   r^   tiler_   r?   r  r   )rB   rD   r9  r:  s       r0   test_rotate_exact_180 TestRotate.test_rotate_exact_180  sS    2;;LLCDGGBIIaL&)NN7>>!S148r4   r-   N)rp   rq   rr   rs   r\   rt   ru   rv   r  r  r  r  r  r  r  r  r  r  r  rw   r-   r4   r0   r  r  4  s   [[WeAqk2- 3- [[WeAqk2	1 3	1 [[WeAqk2[[Wy,&?@1 A 31" [[WeAqk21 31 [[WeAqk2> 3> [[WeAqk2> 3> [[WeAqk21 31 [[WeAqk21 31:=0r4   r  )'r  numpyr^   numpy.testingr   scipy._lib._array_apir   r   r   r   r   r	   r
   r\   r   r
  scipy.ndimager?    r   scipy.conftestr   rt   r   usefixtures
pytestmarkrl  rd   r    ru   rv   ry   r   rA  rq  r  r.  rg  r  r-   r4   r0   <module>r     s   
  +  M L  *   /;;// "FKK$;$;<N$O&+9NPR
   F; F;R %1+.%(#1 #1 ) /#1L &!IJ%1+.K/ K/ / KK/\ &!IJJ, J, KJ,ZtD tDnA
 A
HF
 F
R{* {*|X Xr4   