
    doij                        S SK r S SKrS SKrS SKJr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rSSSS	S
SS.r " S S5      r\" \R2                  5      \R&                  R5                  S\" SS5      5      \R&                  R5                  S\5       " S S5      5       5       5       r\" \R:                  5      \R&                  R5                  S\" S S5      5       " S S5      5       5       r\" \R:                  5       " S S5      5       r\" \R@                  5       " S S5      5       r!\" \RD                  5       " S S5      5       r#\" \RH                  5       " S S5      5       r%\" \RL                  5       " S S 5      5       r'\" \RP                  5       " S! S"5      5       r)g)#    N)_asarrayassert_array_almost_equalis_jax	np_compatxp_assert_equalxp_assert_closemake_xp_test_case)raises   )types-q=reflect	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                   8   \ rS rSr\" \R                  5      \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                  5      \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                  5      \R                  R                  S/ SQ5      \R                  R                  S\" S5      5      S 5       5       5       rSrg)TestBoundaries#   z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    b/var/www/html/land-ocr/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selfr0   expected_valuexpr'   datas         r&   test_boundariesTestBoundaries.test_boundaries%   sE    	! zz-(''"459DJJ~&	(r*   )r   r   r+   r,   )r,   r   r+   r,   )r   r   r+   r,   )r+   r   r+   r,   )r   r   r+   r,   c           
          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>.shiftF   r)   r*   r   r+   r,   r   r   r   )r/   r0   r1   r3   r7   s         r&   test_boundaries2TestBoundaries.test_boundaries2:   sB    	! zz,'''"459;JJ~&	(r*   r0   )r   r   r   r   r   r   r2      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 > 1ir.   dtypei   i  )num.r2   r0       r0   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r4   linspacer5   map_coordinatesnewaxisndimage_to_numpy_modegetpadr   )r8   r0   r2   r:   np_datar;   r%   ynpadpad_modepaddedcoordsexpectedrQ   s                 r&   test_boundary_spline_accuracy,TestBoundaries.test_boundary_spline_accuracyO   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:r*   r#   N)__name__
__module____qualname____firstlineno__r	   r5   r6   rR   markparametrizer<   rC   rX   rangerd   __static_attributes__r#   r*   r&   r   r   #   sO   w223[[
0	1
5	6
:	;
7	8
6	7
5	6
;	<	>	(	 4( w223[[
\	"
,	
|	$
L	!
\	"
m	$
=	)	+	(	 4( w../[[V &1 2 [[WeAh/; 02 0
;r*   r   r2   r+   rE   rH   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)
TestSplinel   c                     [        X15      nUR                  / US9n[        R                  " XBS9nXSR	                  SUR
                  S9:X  d   eg )NrG   r2   r   getattronesr5   spline_filterr4   rH   r8   rH   r2   r:   r;   outs         r&   test_spline01TestSpline.test_spline01q   sK    "wwrw'##D6jj#))j4444r*   c                     [        X15      nUR                  S/US9n[        R                  " XBS9n[	        XSR                  S/5      5        g )Nr   rG   rr   )rt   r4   r5   rv   r   rw   s         r&   test_spline02TestSpline.test_spline02w   sB    "zz1#Uz+##D6!#zz1#7r*   Tcupyzoutput=dtype is numpy-specific)np_only
exceptionsreasonc                     [        X15      nUR                  / US9n[        R                  " XBUS9nXSR	                  SUR
                  S9:X  d   eg )NrG   outputr   rs   rw   s         r&   test_spline03TestSpline.test_spline03}   sO     "wwrw'##D>jj#))j4444r*   c                     [        X15      nUR                  S/US9n[        R                  " XB5      n[	        XSR                  / SQ5      5        g )Nr   rG   r   r   r   r   )rt   ru   r5   rv   r   r4   rw   s         r&   test_spline04TestSpline.test_spline04   sA    "wws%w(##D0!#zz,'?@r*   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   rG   rr   r   )rt   ru   r5   rv   r4   r   )r8   rH   r2   r:   r;   rx   rc   s          r&   test_spline05TestSpline.test_spline05   sZ    "ww1vUw+##D6::|+++- . 	"#0r*   r#   N)rf   rg   rh   ri   ry   r|   skip_xp_backendsr   r   r   rm   r#   r*   r&   ro   ro   l   s9    
58 dx=?5?5A1r*   ro   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       Hr*   rr   rG   r4   r5   r6   shaper   rH   r8   r2   r:   r;   r   rx   s         r&   test_geometric_transform011TestGeometricTransform.test_geometric_transform01   sN    zz1#	 ))$057!#zz1#SYYz'GHr*   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   r*   rr   r   rG   ru   r5   r6   r   r   r4   rH   r   s         r&   test_geometric_transform021TestGeometricTransform.test_geometric_transform02   sL    wws|	 ))$057!#zz,ciiz'PQr*   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;r*   rr   r   r   r   r   rG   r   r   s         r&   test_geometric_transform031TestGeometricTransform.test_geometric_transform03   sL    wws|	 ))$057!#zz,ciiz'PQr*   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   r,   r+   c                     U S   S-
  4$ r   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform04.<locals>.mapping   r   r*   rr   r   r   r   r,   rG   r   r   s         r&   test_geometric_transform041TestGeometricTransform.test_geometric_transform04   sK    zz,'	 ))$057!#zz,ciiz'PQr*   rH   rV   
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   rG   r   complex floating              ?c                     U S   U S   S-
  4$ r   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform05.<locals>.mapping       aD!A$(##r*   rr   )rt   r4   isdtyperH   r5   r6   r   r   )r8   r2   rH   r:   r;   rc   r   rx   s           r&   test_geometric_transform051TestGeometricTransform.test_geometric_transform05   s    "zz<'')05  7 ::|++-49  ; ::djj"455BIDX%H	$ ))$057!#0r*   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.   rE         r,   r   r,   rE   c                     U S   U S   S-
  4$ r   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform06.<locals>.mapping   r   r*   rr   r   r   r.   rE   r   r   r,   r   r,   rG   r4   r5   r6   r   rH   r   r8   r2   r:   r;   r   rx   rc   s          r&   test_geometric_transform061TestGeometricTransform.test_geometric_transform06   p    zz<'') *	$ ))$057::|++-47II  ? 	"#0r*   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##r*   rr   r   r   r   r   rG   r   r   s          r&   test_geometric_transform071TestGeometricTransform.test_geometric_transform07   r   r*   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''r*   rr   r   r   r   rG   r   r   s          r&   test_geometric_transform081TestGeometricTransform.test_geometric_transform08   sp    zz<'') *	( ))$057::|++-47II  ? 	"#0r*   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   r*   r   rr   Fr2   	prefilterr   r   r   rG   )r4   r5   rv   r6   r   rH   r   )r8   r2   r:   r;   r   filteredrx   rc   s           r&   test_geometric_transform101TestGeometricTransform.test_geometric_transform10  s    zz<'') *	( AI,,T?HH))(TZZ05H::|++-47II  ? 	"#0r*   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 )Nr+   rG   c                     U S   S-  4$ Nr   r+   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform13.<locals>.mapping  s    aDAI<r*   r   rr   r   )ru   rV   r5   r6   r   r4   rH   r   s         r&   test_geometric_transform131TestGeometricTransform.test_geometric_transform13  sP    wws"**w-	  ))$!EJ!#zz,ciiz'PQr*   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   r+   rE   r,   r.   r   r   c                     SU S   -  4$ )Nr+   r   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform14.<locals>.mapping#  s    !H;r*   r   rr   rA   rG   )r4   r5   r6   r   rH   r   s         r&   test_geometric_transform141TestGeometricTransform.test_geometric_transform14   sG    zz23	 ))$!EJ!#zz,ciiz'PQr*   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 )NrA   c                     U S   S-  4$ r   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform15.<locals>.mapping,  r   r*   r   rr   r+   r4   r5   r6   r   r   s         r&   test_geometric_transform151TestGeometricTransform.test_geometric_transform15)  sH    zz,'	 ))$!EJ!#cc(BJJ|,DEr*   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 )NrA   r   rE   r.   r   g      "@
         c                     U S   U S   S-  4$ Nr   r   r+   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform16.<locals>.mapping8  r   r*   r,   r+   rr   r   r,   r   r.   	   r   r   r   s         r&   test_geometric_transform161TestGeometricTransform.test_geometric_transform162  sd    !# zz$	$ ))$057!#zzAq6Aq6Ar72K'LMr*   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 )NrA   r   r   r   r   r   c                     U S   S-  U S   4$ Nr   r+   r   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform17.<locals>.mappingE  r   r*   r   r   rr   r   r   s         r&   test_geometric_transform171TestGeometricTransform.test_geometric_transform17?  sS    ! zz$	$ ))$057!#zz<.'ABr*   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 )	NrA   r   r   c                 "    U S   S-  U S   S-  4$ r  r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform18.<locals>.mappingR  r   r*   r   r+   rr   r   r,   r   r   s         r&   test_geometric_transform181TestGeometricTransform.test_geometric_transform18L  sW    ! zz$	( ))$057!#zzAq6(';<r*   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 )	NrA   r   r   c                     U S   U S   S-  4$ r   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform19.<locals>.mapping_  r   r*   r,   r   rr   .r+   r   r   s         r&   test_geometric_transform191TestGeometricTransform.test_geometric_transform19Y  sV    ! zz$	$ ))$057!#c3Q3h-6r*   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 )	NrA   r   r   c                     U S   S-  U S   4$ r  r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform20.<locals>.mappingl  r   r*   rE   r   rr   r+   .r   r   s         r&   test_geometric_transform201TestGeometricTransform.test_geometric_transform20f  sV    ! zz$	$ ))$057!#cc3h-6r*   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 )NrA   r   r   c                 "    U S   S-  U S   S-  4$ r  r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform21.<locals>.mappingy  r   r*   rE   r   rr   r+   r   r   s         r&   test_geometric_transform211TestGeometricTransform.test_geometric_transform21s  sZ    ! zz$	( ))$057!#cc3Q3h-6r*   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 )
NrA   r   r   rG   c                 "    U S   S-  U S   S-  4$ r  r#   r$   s    r&   mapping1CTestGeometricTransform.test_geometric_transform22.<locals>.mapping1  r   r*   c                 "    U S   S-  U S   S-  4$ r  r#   r$   s    r&   mapping2CTestGeometricTransform.test_geometric_transform22.<locals>.mapping2  r   r*   r  rr   r,   r   )r4   rV   r5   r6   r   )r8   r2   r:   r;   r   r#  rx   s          r&   test_geometric_transform221TestGeometricTransform.test_geometric_transform22  sj    ! zz$jjz1	(	( ))$*0?))#*0?!#,r*   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 )	NrA   r   r   c                     SU S   S-  4$ )Nr   r   r+   r#   r$   s    r&   r   BTestGeometricTransform.test_geometric_transform23.<locals>.mapping  s    qtax= r*   r+   rr   r   r.   r   r   s         r&   test_geometric_transform231TestGeometricTransform.test_geometric_transform23  sR    ! zz$	! ))$UK!#zz1a&'9:r*   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 )NrA   r   r   c                     XS   U-  4$ )Nr   r#   )r%   abs      r&   r   BTestGeometricTransform.test_geometric_transform24.<locals>.mapping  s    tax= r*   r+  )r   r1  r+   )r2   extra_argumentsextra_keywordsr   r.   r   r   s         r&   test_geometric_transform241TestGeometricTransform.test_geometric_transform24  s`    ! zz$	! ))4ud8% 	"#zz1a&'9:r*   r#   N)rf   rg   rh   ri   r   r   r   r   rR   rj   rk   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r&  r,  r5  rm   r#   r*   r&   r   r      s    IRRR [[Wy,&?@1 A1(1111&RRFNC=777-$
;;r*   r   c                       \ 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   r+   r,   r   r   rE   rG   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$*--r*   g      ?g      ?      ?r@  g      @r-   r   r   r0   r2   )r4   rV   r   r5   r6   )r8   r:   r%   r   expected_results        r&   -test_geometric_transform_grid_constant_order1ITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1  sh     JJ	!#*,**  6	. **&8&8&: ;!''./1	
r*   r0   r   r   r   r   r   r2   rE   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  r>  r*      rG   r      rM   rB  rN   rP   )rT   rU   floatreshaperZ   r[   r\   r4   tupleslicendimr5   r6   r   )r8   r2   r0   r:   r   r%   r_   r`   x_paddedcenter_slicerC  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		
r*   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   r*   r   )
rT   r4   rH   newbyteorder
empty_likeastyper5   r6   r   r   )r8   r:   r;   r   rx   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r*   !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   r*   fr   )r4   r5   r6   rH   rT   r   )r8   r:   r;   r   rx   s        r&   +test_geometric_transform_with_string_outputGTestGeometricTransformExtra.test_geometric_transform_with_string_output  sP    zz1#	 ))$DyyBHHSM)))!#s+r*   r#   N)rf   rg   rh   ri   rD  rR   rj   rk   rl   rU  r   r`  rg  rm   r#   r*   r&   r8  r8    s    
" [[V &; <[[WeAh/
 0<
4 d+IJ3 K3  d+NO, P,r*   r8  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  r2   r   rE   rH   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   rr   )r   rR   rS   r4   r   rH   rT   indicesr   r5   rX   r   )r8   r2   rH   r:   r;   rc   idxrx   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=!#0r*   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   rl  zoutput differs. jax bug?r   r   r   r"   rr   )r   rR   rS   r4   rT   rm  r   rV   r5   r'   rX   r   )r8   r2   r:   r;   rn  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>!$-r*   	jax.numpyz`order` is required in jaxr   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)r2   r:   r   r   r   r   r   r   r+   .r   r   r.   )	r   rT   rm  r   r4   r5   rX   r   r'   )r8   r:   r;   rn  rx   rc   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Kr*   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   r+   r.   rE   r   r   )rT   r4   rm  r   rH   r[  r\  r]  r5   rX   r   )r8   r:   r;   rc   rn  rx   r^  r_  s           r&   5test_map_coordinates_endianness_with_output_parameterHTestMapCoordinates.test_map_coordinates_endianness_with_output_parameterC  s     zzAq6Aq6*+::1v1v./jj$qJJJJ##%MM(#MM(#**8>>+F+F+HI	
C ..tEH$,S(F%f7
r*   rb  rW  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   rf  r   )r4   rT   rm  r   r5   rX   rH   r   )r8   r:   r;   rn  rx   s        r&   'test_map_coordinates_with_string_output:TestMapCoordinates.test_map_coordinates_with_string_outputW  st    zzA3% jj$jjo%%d<yyBHHSM)))!#zzA3%'89r*   )cpu_only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  r+   rG   r   r,   r   r   rr   zNot enough memory available)
rT   emptyfloat32rO  r5   rX   r4   MemoryErrorrR   skip)r8   r:   nr0  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)rf   rg   rh   ri   rR   rj   rk   rl   rT   rV   r   ro  rt  r   r{  r~  r  skipifsysplatformintpitemsizer  rm   r#   r*   r&   rj  rj    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r*   rj  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TestAffineTransformis  r2   r   rE   c                     UR                  S/5      n[        R                  " X2R                  S//5      US9n[        XBR                  S/5      5        g )Nr   rr   r4   r5   affine_transformr   r8   r2   r:   r;   rx   s        r&   test_affine_transform01+TestAffineTransform.test_affine_transform01v  sB    zz1#&&tZZ!->eL!#zz1#7r*   c                     UR                  S/5      n[        R                  " X2R                  S//5      US9n[	        XBR                  / SQ5      5        g )Nr   r   rr   r   ru   r5   r  r4   r   r  s        r&   test_affine_transform02+TestAffineTransform.test_affine_transform02|  sA    wws|&&tZZ!->eL!#zz,'?@r*   c                     UR                  S/5      n[        R                  " X2R                  S//5      SUS9n[	        XBR                  / SQ5      5        g )Nr   r   r   rr   r   r  r  s        r&   test_affine_transform03+TestAffineTransform.test_affine_transform03  sC    wws|&&tZZ!->%P!#zz,'?@r*   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   rr   r   r  r  s        r&   test_affine_transform04+TestAffineTransform.test_affine_transform04  sB    zz,'&&tZZ!->%P!#zz,'?@r*   rH   rV   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   rG   r   r   r   r   r   r   rr   )rt   r4   r   rH   r5   r  r   r8   r2   rH   r:   r;   rc   rx   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=!#0r*   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   rr   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r*   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   rr   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r*   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   rr   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r*   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   rr   r   r   Fr   r   r   r   )r4   r5   rv   r  r   r8   r2   r:   r;   r   rx   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r*   c                     UR                  S/UR                  S9n[        R                  " X2R	                  S//5      SUS9n[        XBR	                  / SQ5      5        g )Nr+   rG   r"   rB   )r1   r2   r   r   r   r   )ru   rV   r5   r  r4   r   r  s        r&   test_affine_transform10+TestAffineTransform.test_affine_transform10  sO    wws"**w-&&tZZ#-@t-24!#zz,'?@r*   c                     UR                  / SQ5      n[        R                  " X2R                  S//5      SSUS9n[        XBR                  / SQ5      5        g )Nr   r+   r   rB   rr   rA   r  r  s        r&   test_affine_transform11+TestAffineTransform.test_affine_transform11  sE    zz23&&tZZ!->4uU!#zz,'?@r*   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 )NrA   r"   r   r   rr   r+   r  r  s        r&   test_affine_transform12+TestAffineTransform.test_affine_transform12  sO    zz,'&&tZZ#-@!TQVW!#cc(BJJ|,DEr*   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 )NrA   r   r   r   r   r+   r   rr   r,   r   r.   r   r   r  r  s        r&   test_affine_transform13+TestAffineTransform.test_affine_transform13  su    !# zz$&&tZZ!Q!Q8H-I1f-24!#zzAq6Aq6Ar72K'LMr*   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 )	NrA   r   r   r+   r   r   r  rr   r  r  s        r&   test_affine_transform14+TestAffineTransform.test_affine_transform14  sd    ! zz$&&tZZ!Q!Q8H-I1f-24!#zz<.'ABr*   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 )
NrA   r   r   r+   r   r	  rr   r   r,   r  r  s        r&   test_affine_transform15+TestAffineTransform.test_affine_transform15  sh    ! zz$&&tZZ!Q!Q8H-I1f-24!#zzAq6(';<r*   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 )NrA   r   r   r           r   r"   r  rr   .r+   r  r  s        r&   test_affine_transform16+TestAffineTransform.test_affine_transform16  sg    ! zz$&&tZZ!SAs88L-Mq'-U<!#c3Q3h-6r*   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 )NrA   r   r   r"   r   r   r  rr   r+   .r  r  s        r&   test_affine_transform17+TestAffineTransform.test_affine_transform17  sg    ! zz$&&tZZ#qAq68J-KQ'-U<!#cc3h-6r*   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 )	NrA   r   r   r"   r   r  rr   r+   r  r  s        r&   test_affine_transform18+TestAffineTransform.test_affine_transform18  sh    zz<'*, - &&tZZ#qAs88L-Mq'-U<!#cc3Q3h-6r*   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 )NrA   r   r   rG   r"   r   r  rr          @r%  )r4   rV   r5   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<!#,r*   r~   z(https://github.com/cupy/cupy/issues/8394rw  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 )
NrA   r   r   r   r+   r+  rr   r   r,   r  r  s        r&   test_affine_transform20+TestAffineTransform.test_affine_transform20)  c     ! zz$&&tZZ!qc
-CQ-24!#zz1a&'9:r*   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 )
NrA   r   r   r+   r   r+  rr   r   r   r  r  s        r&   test_affine_transform21+TestAffineTransform.test_affine_transform214  r  r*   c                     UR                  / SQ5      n[        R                  " X2R                  S//5      S/SUS9n[        XBR                  / SQ5      5        g )Nr   r+   r   )r,   rr   r   r   r+   r  r  s        r&   test_affine_transform22+TestAffineTransform.test_affine_transform22?  sK     zz,'&&tZZ!->d-24!#zz)'<=r*   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  rr   r+   r   r  r  s        r&   test_affine_transform23+TestAffineTransform.test_affine_transform23G  sU     zz,'&&tZZ#-@2$-24!#cc(BJJ|,DEr*   c                 r   UR                  / SQ5      n[        R                  " 5          [        R                  " S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   ignore@The behavior of affine_transform with a 1-D array .* has changedr+   r   rr   r4   warningscatch_warningsfilterwarningsUserWarningr5   r  r   r8   r2   r:   r;   rr  rs  s         r&   test_affine_transform24+TestAffineTransform.test_affine_transform24O  s     zz,'$$&##R ++D**aS/2USD ' ''jj1#.?5Q!$- '&   AB((
B6c                 r   UR                  / SQ5      n[        R                  " 5          [        R                  " S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   rr   r  r  s         r&   test_affine_transform25+TestAffineTransform.test_affine_transform25\  s     zz,'$$&##H%&13 ++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   rr   r+   r+   r   axis)r  r   r   r   )r   Fr   r   r   r   )
r4   r5   rv   eyeru   concatrO  rN  r  r   )r8   r2   r:   r;   r   tform_originaloffset_originaltform_h1tform_h2r%   offsrr  rs  out3rx   s                  r&   test_affine_transform26+TestAffineTransform.test_affine_transform26h  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   r+   r  r   r  )      @r+   r   r   )r4   r  r  ru   assert_raises
ValueErrorr5   r  )r8   r:   r;   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Kr*   Tzbyteorder is numpy-specificrW  c           	      B   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[
        R                  " 5          [
        R                  " SS[        5        UR                  SS/5      n[        R                  " X$US9nS S S 5        Wc  UOUn[        XaR                  SS/SS//5      5        M     g ! , (       d  f       N:= f)N)r+   r+   r  r  r   r   )ru   r\  r]  rH   r[  r  r  r  r  r4   r5   r  r   )r8   r:   r;   rx   matrixr^  r_  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 ((*'',-8: QF+"33DM + %,S(F%fjj1a&1a&9I.JK; +*s   AD
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   )	rT   r4   rH   r[  r\  r]  r5   r  r   )r8   r:   r;   rx   r^  r_  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r*   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   rG   )   r   r   )r   )r   r1   )
rU   rV   ru   r5   r  r4   r   rR   r
   RuntimeErrorr8   r:   r;   rx   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,rb  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  )r4   r5   r  rH   rT   r   r  s       r&   (test_affine_transform_with_string_output<TestAffineTransform.test_affine_transform_with_string_output  s\    zz1#&&tZZ!->sKyyBHHSM)))!#zz1#7r*   r'   )r   r   r   r   )r   r   )r,   )r+   r.   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   r+   r,   r+   r,   r  r  r   rB  )rT   r4   zerosr  rollr   r5   r  )r8   r'   r2   r:   r%   affinerc   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	
r*   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  r,   r   r   r   r+   r,   r   rB  )	rT   r4   copyr  r  r   r   r5   r  )r8   r2   r:   r%   rc   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	
r*   r#   N),rf   rg   rh   ri   rR   rj   rk   rl   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  r   r  r  r  r  r"  r'  rm   r#   r*   r&   r  r  s  s    [[WeAqk28 38
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2[[Wy,&?@1 A 31 [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2A 3A [[WeAqk2A 3A
 [[WeAqk2F 3F
 [[WeAqk2N 3N [[WeAqk2C 3C [[WeAqk2= 3= [[WeAqk27 37 [[WeAqk27 37 [[WeAqk27 37 [[WeAqk2- 3- v&PQ[[WeAqk2; 3 R; v&PQ[[WeAqk2; 3 R; [[WeAqk2> 3> [[WeAqk2F 3F [[WeAqk2
. 3
. [[WeAqk2	. 3	. [[WeAqk2G 3G: v&67L 8L d+HIL JL  d+HI
? J
? d<== d+NO8 P8 [[WGI[[WeAqk2
 3I
& [[WeAqk2
 3
r*   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  r2   r   rE   c                     UR                  S/5      n[        R                  " US/US9n[        XBR                  S/5      5        g )Nr   rr   r   r4   r5   r'   r   r  s        r&   test_shift01TestShift.test_shift01  s7    zz1#mmD1#U3!#zz1#7r*   c                     UR                  S/5      n[        R                  " US/US9n[        XBR	                  / SQ5      5        g )Nr   r   rr   r   ru   r5   r'   r   r4   r  s        r&   test_shift02TestShift.test_shift02  s6    wws|mmD1#U3!#zz,'?@r*   c                     UR                  S/5      n[        R                  " USUS9n[        XBR	                  / SQ5      5        g )Nr   r   rr   r  r1  r  s        r&   test_shift03TestShift.test_shift03  s4    wws|mmD"E2!#zz,'?@r*   c                     UR                  / SQ5      n[        R                  " USUS9n[        XBR                  / SQ5      5        g )Nr   r   rr   r   r-  r  s        r&   test_shift04TestShift.test_shift04  s3    zz,'mmD!51!#zz,'?@r*   rH   rV   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   rG   r   r   r   r   r   rr   )rt   r4   r   rH   r5   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!#0r*   r0   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   rG   r   r   r   r  r   r   )r2   r0   r/   )rT   r4   r   r   rH   r5   r'   r   )	r8   r2   r0   rH   r:   r;   rc   r/   rx   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!#0r*   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   rr   r   r   r   r-  r  s        r&   test_shift06TestShift.test_shift062  X    zz<'') * mmD1a&6!#zz<3?3?3A (B 	Cr*   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   rr   r   r-  r  s        r&   test_shift07TestShift.test_shift07<  rC  r*   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   rr   r   r   r   r-  r  s        r&   test_shift08TestShift.test_shift08F  rC  r*   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   rr   Fr   r   r   r   )r4   r5   rv   r'   r   r  s         r&   test_shift09TestShift.test_shift09P  sv    zz<'') * AI,,T?HHmmHq!fEUK!#zz<3?3?3A (B 	Cr*   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   r+   r,   r  r  r   rB  )rT   r4   r   r   r5   r'   )r8   r'   r2   r:   r%   rc   s         r&   test_shift_grid_wrapTestShift.test_shift_grid_wrap^  sj    
 JJAA  !771%0JJqM::h'!MM!EB	
r*   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   rB  r   )rO  rU   r   r5   r'   )r8   r'   r2   r:   r%   s        r&   test_shift_grid_constant1#TestShift.test_shift_grid_constant1o  sD    
 JJryy}f-!MM!FMM!5A	
r*   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;  rG   r?  rA  )r"   r"   r   r   rB  )r4   rV   r   r5   r'   )r8   r:   r%   rC  s       r&   test_shift_grid_constant_order1)TestShift.test_shift_grid_constant_order1z  s\    JJ	!#*,**  6**&8&8&: ;!MM!ZoQG	
r*   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   rB  )rT   r4   r&  r   r5   r'   r   )r8   r2   r:   r%   rc   s        r&   test_shift_reflectTestShift.test_shift_reflect  st     JJ	!# $TrT4R4Z=%%'JJqM::h'!MM!WW9EB	
r*   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   )r0   r2   r   r+   r   r   r   )rU   dictr   r5   r'   )r8   r2   r   r:   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	
r*   rF  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 )
NrK  rG   r   )rI  gffffffrL   rM   rB  rN   rM  )rT   rU   rN  rO  rZ   r[   r4   r\   rP  rQ  rR  r5   r'   r   )r8   r2   r0   r:   x_npr'   r_   r`   rS  r%   rT  rC  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!;	
r*   r#   N)rf   rg   rh   ri   rR   rj   rk   rl   r.  r2  r5  r8  r;  r>  rA  rE  rH  rK  rN  rR  rU  rX  r]  ra  rm   r#   r*   r&   r+  r+    sl    [[WeAqk28 38
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2A 3A
 [[WeAqk2[[Wy,&?@1 A 31 [[WeAqk2[[Vj/%BC[[Wy,&?@1 A D 31( [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WeAqk2C 3C [[WGI[[WeAqk2
 3I
 [[WGI[[WeAqk2
 3I

 [[WeAqk2
 3
 [[WeAqk2[[[5$-8

 9 3

 [[V &; <[[WeAh/
 0<
r*   r+  c                   F   \ 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      S 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  r2   r   rE   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 )Nr+      rG   )r   r   rr   )r   r   r   r   rQ  r   rL  )rO  rU   rV   r5   zoomr   alleps)r8   r2   r:   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(+,,,, r*   c                     UR                  UR                  S5      S5      n[        R                  " [        R                  " US5      S5      n[	        X25        g )Nr   r%  r+   r"   )rO  rU   r5   rg  r   )r8   r:   rk  rx   s       r&   
test_zoom2TestZoom.test_zoom2  s=    jj2/ll7<<Q/5!r*   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   r+   r  r	  )r   r   r+   r+   )r4   r5   rg  r   )r8   r:   rk  rr  rs  s        r&   
test_zoom3TestZoom.test_zoom3  sg    jj1a&"||C(||C(!$

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

L>(BCr*   rH   rV   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[        R
                  " 5          [        R                  " S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)NrA   r   r   rG   r   r   r  r  r"   r   r  rr   r+   )rt   r4   r   rH   r  r  r  r  r5   r  r   )r8   r2   rH   r:   r;   rx   s         r&   test_zoom_affine01TestZoom.test_zoom_affine01  s     "zz<'*,38  : ::djj"455BID$$&##H%&13 **4S#J1G+1@C	 ' 	"#cc3Q3h-6 '&s   #AC
Cc                 Z    Sn[         R                  " UR                  X"45      SU-  SS9  g )Nr         ?r   rM   )r5   rg  r  )r8   r:   dims      r&   test_zoom_infinityTestZoom.test_zoom_infinity  s&    RXXsj)28)Dr*   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   )rx  r  r  r.   )r/   )r   r   r   )r  r5   rg  r   )r8   r:   rk  rg  rx   refs         r&   test_zoom_zoomfactor_one!TestZoom.test_zoom_zoomfactor_one  s;    hhy!ll31-hh{#!#+r*   c                 z    UR                  S5      nSn[        R                  " X#5      nUR                  S:X  d   eg )N)r,   r   rf  )gUUUUUU?gE]t?g(\?)r   rI      )r  r5   rg  r   )r8   r:   rk  rg  rx   s        r&   test_zoom_output_shape_roundoff(TestZoom.test_zoom_output_shape_roundoff  s5    hh{#.ll3%yyK'''r*   rg  )rz  )r,   r   )r   r+   )r   r   r0   )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   r+   r,   rG   rK   )rT   r4   rV   kronru   r   r5   rg  )r8   rg  r0   r:   r`  rc   r%   s          r&   test_zoom_by_int_order0 TestZoom.test_zoom_by_int_order0  sz     zzAq6q6#*,**6774/JJt::h'!LL5	
r*   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 )NrG   r   T)r2   r0   	grid_mode)rT   rU   prodrN  rO  r4   r   r5   rg  r  ru   )r8   r   rg  r0   r:   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	
r*   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   rG   )r,   r,   zIt is recommended to use mode)matchr+   T)r0   r  )rO  rU   rV   rR   warnsr  r5   rg  )r8   r0   r:   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 viewrw  rv  c                     UR                  UR                  S5      S5      n[        R                  " USUR	                  S5      S9  g)zTicket #643r   r%  r+   r  r   N)rO  rU   r5   rg  r  r8   r:   r%   s      r&   test_zoom_output_shapeTestZoom.test_zoom_output_shape&  s5     JJryy}f-Q"((6"23r*   c                     UR                  S5      nSn[        R                  " U[        R                  " U5      5      n[        R                  " X#5      n[        XE5        g )Ng      $@r+   )rU   r5   rg  rT   arrayr   )r8   r:   r0  factoractualrc   s         r&   test_zoom_0d_arrayTestZoom.test_zoom_0d_array-  sC    IIcNa&!12<<*)r*   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 )Nr,   r   rz  )r  r   r5   rg  r  s      r&   test_zoom_1_gh20999TestZoom.test_zoom_1_gh209995  s;     FF1IQ*A.Q/3r*   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 )Nr,   r   r   )r  
zeros_liker5   rg  r   )r8   r:   r%   r   s       r&   test_zoom_1_gh20999_output#TestZoom.test_zoom_1_gh20999_output=  s7     FF1Iq!Q&)"r*   r#   N)rf   rg   rh   ri   rR   rj   rk   rl   rl  ro  rr  ru  rz  r~  r  r  r  r  r   r  r  r)  r  r  rm   r#   r*   r&   rd  rd    s    [[WeAqk2	- 3	-"
D [[WeAqk2[[Wy,&?@7 A 37E
,( [[V%EF[[V &7 8
8 G
" [[Wvv&67[[V%EF[[V &D E

E G 8

 [[Vj&%9:; ;; l+NOk*MN4 O P4
* v&FG4 H4 v&FGk*=>|,>?# @ ? H#r*   rd  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)
TestRotateiG  r2   r   rE   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   rG   r   rr   r4   rV   r5   rotater   r  s        r&   test_rotate01TestRotate.test_rotate01J  sE    zz<'')02

  < nnT1E2!#,r*   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   rG   r   r   r   r   r   r   Z   rr   r  r8   r2   r:   r;   rc   rx   s         r&   test_rotate02TestRotate.test_rotate02R  ss    zz<'')02

  < ::y(((* 24  = nnT2U3!#0r*   rH   rV   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   rG   r  r  r   r   r  rr   )rt   r4   r   rH   r5   r  r   r  s          r&   test_rotate03TestRotate.test_rotate03^  s     "zz?**,38  : ::y((((	* 27	  8
 ::djj"455BIDX%HnnT2U3!#0r*   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  rG   r   r   r   r   r   r  F)rO  r2   r  r  s         r&   test_rotate04TestRotate.test_rotate04p  sq    zz?**,35::  ? ::..079zz  C nnT2uEB!#0r*   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   r,   r,   r,   r  r  rG   r   r  r  rr   rT   r  rl   r4   rV   r5   r  r   r8   r2   r:   r;   irc   rx   s          r&   test_rotate05TestRotate.test_rotate05{  s    xx	"qAJJ	(1(1(1(3 ;=**FDAqM 
 zz$::|++-46JJ  @ nnT2U3qA%c!Q'lH= r*   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)r,   r   r,   r,   r   r  rG   r  r  r  rr   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= r*   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  r+   rG   r+   r   r   r  r  r  r  )axesr2   r4   rV   permute_dimsr5   r  r   r  s         r&   test_rotate07TestRotate.test_rotate07  s    zzO++- .0129;  E tY/::	 ) ) ) )	 + , /0	0 8:zz	  C
 ??8Y7nnT2F%@!#0r*   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  r+   rG   r  r  r  r  F)r  rO  r2   r  r  s         r&   test_rotate08TestRotate.test_rotate08  s    zzO++- .0129;  E tY/:: / / 1 2456=?ZZ  I ??8Y7nnT2FEO!#0r*   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  r+   rG   r  r   )r  )r4   rV   r  r  r5   r  rR  )r8   r:   r;   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-   rG   )r,   r   r,   )r  r  r  )g|S2@g|S2@g>)!@)g9HD%@g9HD'@g9HD)@)gc~@gc~@gzLb @)g[ic6*@g[ic6,@g[ic6.@)g      5@g      6@g      7@)gRK<@gRK=@gRK>@)g,PA@g,PgB@g,PB@)gݠ'?@grn@@grnГ@@)gGA@gG9B@gGB@r   F)anglerO  gư>g>rO   )rO  rU   rV   r4   r5   r  r   )r8   r:   r;   rc   rx   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<r*   r~   z(https://github.com/cupy/cupy/issues/8400rw  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)r4   rT   tilerU   r5   r  r   )r8   r:   r0  r1  s       r&   test_rotate_exact_180 TestRotate.test_rotate_exact_180  sF    JJrwwryy|V45NN7>>!S148r*   r#   N)rf   rg   rh   ri   rR   rj   rk   rl   r  r  r  r  r  r  r  r  r  r  r)  r  rm   r#   r*   r&   r  r  G  s    [[WeAqk2- 3- [[WeAqk2	1 3	1 [[WeAqk2[[Wy,&?@1 A 31  [[WeAqk21 31 [[WeAqk2> 3> [[WeAqk2> 3> [[WeAqk21 31 [[WeAqk2
1 3
1:=2 v&PQ Rr*   r  )*r  r  numpyrT   scipy._lib._array_apir   r   r   r   r   r   r	   rR   r
   r  scipy.ndimager5    r   rj   r   r)  ri  rZ   r   rv   rk   rl   ro   r6   r   r8  rX   rj  r  r  r'   r+  rg  rd  r  r  r#   r*   r&   <module>r     s   
      *  ;;// KK11    F; F;R 7(()%1+.%($1 $1 ) / *$1N 7../%1+.R; R; / 0R;j 7../J, J, 0J,Z 7**+tD tD ,tDn 7++,y
 y
 -y
x 7==!D
 D
 "D
N 7<< K# K# !K#\ 7>>"S S #Sr*   