
    Џkh                        d dl Z d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlZd dlmZ d dlmZ ddlmZ ej&                  j(                  Zej&                  j*                  Z eddd	g
      gZdZdddddddZ G d d      Zej&                  j5                  d edd            ej&                  j5                  de       G d d                    Z edd      ej&                  j5                  d ed d             G d d                    Z edd       G d d             Z G d  d!      Z G d" d#      Z  G d$ d%      Z! G d& d'      Z" G d( d)      Z#y)*    N)suppress_warnings)_asarrayassert_array_almost_equalis_jax	np_compatxp_assert_equalxp_assert_close)raises   )typesTcupy	jax.numpy)cpu_only
exceptions-q=reflect	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                      e Zd Z edd      ej
                  j                  ddg dfdg dfd	g d
fdg dfdg dfdg dfdg dfg      d               Z edd      ej
                  j                  ddg dfdg dfd	g dfdg dfdg dfdg dfdg dfg      d               Zej
                  j                  dg d      ej
                  j                  d e	d            d               Z
y) TestBoundariesr   &CuPy does not have geometric_transformreasonzmode, expected_valuer   )      ?      @      @   r$   r$   r$   r   )r!   r"   r#   r!   r"   r#   r!   r   )r!   r"   r#   r"   r!   r"   r#   r   )r!   r"   r#   r#   r"   r!   r!   r   )r!   r"   r#   r$   r#   r"   r!   r   )r!   r"   r#   r%   r%   r%   r   )r!   r"   r#   r!   r%   r%   r%   c           
          d }|j                  g d      }t        t        j                  ||d|dd      |j                  |             y )Nc                     | d   dz   fS )Nr         ? xs    b/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/ndimage/tests/test_interpolation.pyshiftz-TestBoundaries.test_boundaries.<locals>.shift0       aD3J=     )r               @r%   )   r   )cvalmodeoutput_shapeorderasarrayr   ndimagegeometric_transformselfr5   expected_valuexpr-   datas         r,   test_boundarieszTestBoundaries.test_boundaries$   sG    	! zz-(''e"459DJJ~&	(r/   )r   r   r0   r1   )r1   r   r0   r1   )r$   r   r0   r1   )r0   r   r0   r1   )r%   r   r0   r1   c           	          d }|j                  g d      }t        t        j                  ||d|d      |j                  |             y )Nc                     | d   dz
  fS )Nr   g?r)   r*   s    r,   r-   z.TestBoundaries.test_boundaries2.<locals>.shiftE   r.   r/   r   r0   r1   r$   r%   r$   )r4   r5   r6   r8   r<   s         r,   test_boundaries2zTestBoundaries.test_boundaries29   sD    	! zz,'''e"459;JJ~&	(r/   r5   )r   r   r   r   r   r   r7      c                    t        |      r|dvs|dkD  rt        j                  d       t        j                  ddt        j
                        }|j                  |      }|j                  t        j                  ddd	
            }t        j                  |||j                  df   ||      }d}t        j                  |      }	|j                  t        j                  |||	            }
|j                  ||z         |j                  df   }t        j                  |
|||      }|dk(  rdnd}t        ||d|       y)z$Tests based on examples from gh-2640)r   r   r   r   r   r   z-Jax does not support grid- modes or order > 1ir3   dtypei   i  )num.r7   r5       r5   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r9   linspacer:   map_coordinatesnewaxisndimage_to_numpy_modegetpadr	   )r=   r5   r7   r?   np_datar@   r+   ynpadpad_modepaddedcoordsexpectedrS   s                 r,   test_boundary_spline_accuracyz,TestBoundaries.test_boundary_spline_accuracyN   s    2JMM	LLHI))B4zz'"JJr{{2rt45##D!BJJO*<EPTU (,,T2BFF7Dx@AD1H%bjj#o6**66TR.tE8$T:r/   N)__name__
__module____qualname__skip_xp_backendsrT   markparametrizerA   rF   rangerf   r)   r/   r,   r   r   "   s8   f%MN[[
0	1
5	6
:	;
7	8
6	7
5	6
;	<	>	(	 O( f%MN[[
\	"
,	
|	$
L	!
\	"
m	$
=	)	+	(	 O( [[V &1 2 [[WeAh/; 02;r/   r   r7   r0   rG   rJ   c                   H    e Zd Zd Zd Z eddgd      d        Zd Zd	 Zy
)
TestSplinec                     t        ||      }|j                  g |      }t        j                  ||      }||j	                  d|j
                        k(  sJ y )NrI   r7   r   getattronesr:   spline_filterr9   rJ   r=   rJ   r7   r?   r@   outs         r,   test_spline01zTestSpline.test_spline01n   sQ    E"wwrw'##D6bjj#))j4444r/   c                     t        ||      }|j                  dg|      }t        j                  ||      }t	        ||j                  dg             y )Nr   rI   rq   )rs   r9   r:   ru   r   rv   s         r,   test_spline02zTestSpline.test_spline02t   sH    E"zz1#Uz+##D6!#rzz1#7r/   Tr   zoutput=dtype is numpy-specific)np_onlyr   r    c                     t        ||      }|j                  g |      }t        j                  |||      }||j	                  d|j
                        k(  sJ y )NrI   outputr   rr   rv   s         r,   test_spline03zTestSpline.test_spline03z   sU     E"wwrw'##D%>bjj#))j4444r/   c                     t        ||      }|j                  dg|      }t        j                  ||      }t	        ||j                  g d             y )Nr$   rI   r   r   r   r   )rs   rt   r:   ru   r   r9   rv   s         r,   test_spline04zTestSpline.test_spline04   sG    E"wws%w(##D%0!#rzz,'?@r/   c                     t        ||      }|j                  ddg|      }t        j                  ||      }|j	                  g dg dg dg dg      }t        ||       y )Nr$   rI   rq   r   )rs   rt   r:   ru   r9   r   )r=   rJ   r7   r?   r@   rw   re   s          r,   test_spline05zTestSpline.test_spline05   s`    E"ww1vUw+##D6::|+++- . 	"#x0r/   N)	rg   rh   ri   rx   rz   rj   r   r   r   r)   r/   r,   ro   ro   j   s9    58 dx=?5?5A1r/   ro   r   r   c                       e Zd Zd Zd Zd Zd Zej                  j                  dddg      d        Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestGeometricTransformc                     |j                  dg      }d }t        j                  |||j                  |      }t	        ||j                  dg|j
                               y )Nr   c                     | S Nr)   r*   s    r,   mappingzBTestGeometricTransform.test_geometric_transform01.<locals>.mapping       Hr/   rq   rI   r9   r:   r;   shaper   rJ   r=   r7   r?   r@   r   rw   s         r,   test_geometric_transform01z1TestGeometricTransform.test_geometric_transform01   sR    zz1#	 ))$057!#rzz1#SYYz'GHr/   c                     |j                  dg      }d }t        j                  |||j                  |      }t	        ||j                  g d|j                               y )Nr$   c                     | S r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform02.<locals>.mapping   r   r/   rq   r   rI   rt   r:   r;   r   r   r9   rJ   r   s         r,   test_geometric_transform02z1TestGeometricTransform.test_geometric_transform02   sP    wws|	 ))$057!#rzz,ciiz'PQr/   c                     |j                  dg      }d }t        j                  |||j                  |      }t	        ||j                  g d|j                               y )Nr$   c                     | d   dz
  fS Nr   r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform03.<locals>.mapping       aD1H;r/   rq   r   r   r   r   rI   r   r   s         r,   test_geometric_transform03z1TestGeometricTransform.test_geometric_transform03   sP    wws|	 ))$057!#rzz,ciiz'PQr/   c                     |j                  g d      }d }t        j                  |||j                  |      }t	        ||j                  g d|j
                               y )Nr$   r   r1   r0   c                     | d   dz
  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform04.<locals>.mapping   r   r/   rq   r   r$   r   r1   rI   r   r   s         r,   test_geometric_transform04z1TestGeometricTransform.test_geometric_transform04   sO    zz,'	 ))$057!#rzz,ciiz'PQr/   rJ   rX   
complex128c                 H   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg|      }|j                  |j                  d      r|d|z  z  }|d|z  z  }d }t	        j
                  |||j                  |      }t        ||       y )Nr   rI   r   complex floating              ?c                     | d   | d   dz
  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform05.<locals>.mapping       aD!A$(##r/   rq   )rs   r9   isdtyperJ   r:   r;   r   r   )r=   r7   rJ   r?   r@   re   r   rw   s           r,   test_geometric_transform05z1TestGeometricTransform.test_geometric_transform05   s    E"zz<'')05  7 ::|++-49  ; ::djj"45BIDX%H	$ ))$057!#x0r/   c                     |j                  g dg dg dg      }d }t        j                  |||j                  |      }|j                  g dg dg dg|j                  	      }t        ||       y )
Nr   r3   rG         r1   r   r1   rG   c                     | d   | d   dz
  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform06.<locals>.mapping   r   r/   rq   r   r   r3   rG   r   r   r1   r   r1   rI   r9   r:   r;   r   rJ   r   r=   r7   r?   r@   r   rw   re   s          r,   test_geometric_transform06z1TestGeometricTransform.test_geometric_transform06   t    zz<'') *	$ ))$057::|++-47II  ? 	"#x0r/   c                     |j                  g dg dg dg      }d }t        j                  |||j                  |      }|j                  g dg dg dg|j                        }t        ||       y )Nr   r   r   c                     | d   dz
  | d   fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform07.<locals>.mapping       aD1Had##r/   rq   r   r   r   r   rI   r   r   s          r,   test_geometric_transform07z1TestGeometricTransform.test_geometric_transform07   r   r/   c                     |j                  g dg dg dg      }d }t        j                  |||j                  |      }|j                  g dg dg dg|j                  	      }t        ||       y )
Nr   r   r   c                 "    | d   dz
  | d   dz
  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform08.<locals>.mapping       aD1HadQh''r/   rq   r   r   r   rI   r   r   s          r,   test_geometric_transform08z1TestGeometricTransform.test_geometric_transform08   st    zz<'') *	( ))$057::|++-47II  ? 	"#x0r/   c                 (   |j                  g dg dg dg      }d }|dkD  rt        j                  ||      }n|}t        j                  |||j                  |d      }|j                  g d	g d
g dg|j
                        }t        ||       y )Nr   r   r   c                 "    | d   dz
  | d   dz
  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform10.<locals>.mapping  r   r/   r   rq   Fr7   	prefilterr   r   r   rI   )r9   r:   ru   r;   r   rJ   r   )r=   r7   r?   r@   r   filteredrw   re   s           r,   test_geometric_transform10z1TestGeometricTransform.test_geometric_transform10  s    zz<'') *	( AI,,T?HH))(GTZZ05H::|++-47II  ? 	"#x0r/   c                     |j                  dg|j                        }d }t        j                  ||dg|      }t	        ||j                  g d|j                               y )Nr0   rI   c                     | d   dz  fS Nr   r0   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform13.<locals>.mapping  s    aDAI<r/   r$   rq   r   )rt   rX   r:   r;   r   r9   rJ   r   s         r,   test_geometric_transform13z1TestGeometricTransform.test_geometric_transform13  sT    wws"**w-	  ))$!EJ!#rzz,ciiz'PQr/   c                     |j                  g d      }d }t        j                  ||dg|      }t        ||j                  g d|j                               y )Nr   r   r0   rG   r1   r3   r$   r$   c                     d| d   z  fS )Nr0   r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform14.<locals>.mapping   s    !H;r/   r$   rq   rD   rI   )r9   r:   r;   r   rJ   r   s         r,   test_geometric_transform14z1TestGeometricTransform.test_geometric_transform14  sK    zz23	 ))$!EJ!#rzz,ciiz'PQr/   c                     |j                  g d      }d }t        j                  ||dg|      }t        |d d d   |j                  g d             y )NrD   c                     | d   dz  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform15.<locals>.mapping)  r   r/   r   rq   r0   r9   r:   r;   r   r   s         r,   test_geometric_transform15z1TestGeometricTransform.test_geometric_transform15&  sJ    zz,'	 ))$!EJ!#cc(BJJ|,DEr/   c           	          g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        ||j                  ddgd	d
gddgg             y )NrD   r   rG   r3   r   g      "@
         c                     | d   | d   dz  fS Nr   r   r0   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform16.<locals>.mapping5  r   r/   r1   r0   rq   r   r1   r   r3   	   r   r   r   s         r,   test_geometric_transform16z1TestGeometricTransform.test_geometric_transform16/  sh    !# zz$	$ ))$057!#rzzAq6Aq6Ar72K'LMr/   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        ||j                  g dg             y )NrD   r   r   r   r   r   c                     | d   dz  | d   fS Nr   r0   r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform17.<locals>.mappingB  r   r/   r   r$   rq   r   r   s         r,   test_geometric_transform17z1TestGeometricTransform.test_geometric_transform17<  sW    ! zz$	$ ))$057!#rzz<.'ABr/   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        ||j                  ddgg             y )	NrD   r   r   c                 "    | d   dz  | d   dz  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform18.<locals>.mappingO  r   r/   r   r0   rq   r   r1   r   r   s         r,   test_geometric_transform18z1TestGeometricTransform.test_geometric_transform18I  s[    ! zz$	( ))$057!#rzzAq6(';<r/   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        |dd d df   |       y )	NrD   r   r   c                     | d   | d   dz  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform19.<locals>.mapping\  r   r/   r1   r   rq   .r0   r   r   s         r,   test_geometric_transform19z1TestGeometricTransform.test_geometric_transform19V  sX    ! zz$	$ ))$057!#c3Q3h-6r/   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        |d d ddf   |       y )	NrD   r   r   c                     | d   dz  | d   fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform20.<locals>.mappingi  r   r/   rG   r$   rq   r0   .r   r   s         r,   test_geometric_transform20z1TestGeometricTransform.test_geometric_transform20c  sX    ! zz$	$ ))$057!#cc3h-6r/   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        |d d dd d df   |       y )NrD   r   r   c                 "    | d   dz  | d   dz  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform21.<locals>.mappingv  r   r/   rG   r   rq   r0   r   r   s         r,   test_geometric_transform21z1TestGeometricTransform.test_geometric_transform21p  s\    ! zz$	( ))$057!#cc3Q3h-6r/   c                     g dg dg dg}|j                  ||j                        }d }d }t        j                  ||d|      }t        j                  ||d	|      }t	        ||       y )
NrD   r   r   rI   c                 "    | d   dz  | d   dz  fS r   r)   r*   s    r,   mapping1zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping1  r   r/   c                 "    | d   dz  | d   dz  fS r   r)   r*   s    r,   mapping2zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping2  r   r/   r   rq   r1   r$   )r9   rX   r:   r;   r   )r=   r7   r?   r@   r   r   rw   s          r,   test_geometric_transform22z1TestGeometricTransform.test_geometric_transform22}  sr    ! zz$bjjz1	(	( ))$*0?))#x*0?!#t,r/   c                     g dg dg dg}|j                  |      }d }t        j                  ||d|      }t        ||j                  ddg             y )	NrD   r   r   c                     d| d   dz  fS )Nr   r   r0   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform23.<locals>.mapping      qtax= r/   r0   rq   r   r3   r   r   s         r,   test_geometric_transform23z1TestGeometricTransform.test_geometric_transform23  sV    ! zz$	! ))$UK!#rzz1a&'9:r/   c           	          g dg dg dg}|j                  |      }d }t        j                  ||d|dddi	      }t        ||j                  d
dg             y )NrD   r   r   c                     || d   |z  fS )Nr   r)   )r+   abs      r,   r   zBTestGeometricTransform.test_geometric_transform24.<locals>.mapping  r   r/   r   )r   r   r0   )r7   extra_argumentsextra_keywordsr   r3   r   r   s         r,   test_geometric_transform24z1TestGeometricTransform.test_geometric_transform24  sd    ! zz$	! ))'4ud8% 	"#rzz1a&'9:r/   N)rg   rh   ri   r   r   r   r   rT   rk   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r)   r/   r,   r   r      s    IRRR [[Wy,&?@1 A1(1111&RRFNC=777-$
;;r/   r   c                       e Zd Zd Zej
                  j                  dg d      ej
                  j                  d ed            d               Z e	dd	      d
        Z
 e	dd	      d        Zy)TestGeometricTransformExtrac                     |j                  g dg dg|j                        }d }|j                  g dg dg      }t        t        j                  ||dd	      |       y )
Nr   r0   r1   r$   r   rG   rI   c                 "    | d   dz
  | d   dz
  fS )Nr   r(   r   r)   r*   s    r,   r   zZTestGeometricTransformExtra.test_geometric_transform_grid_constant_order1.<locals>.mapping      aD3J!A$*--r/   g      ?g      ?      ?r
  g      @r2   r   r   r5   r7   )r9   rX   r   r:   r;   )r=   r?   r+   r   expected_results        r,   -test_geometric_transform_grid_constant_order1zITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1  sj     JJ	!#*,**  6	. **&8&8&: ;!''7./1	
r/   r5   r   r   r   r   r   r7   rG   c                    d }t        j                  dt              j                  dd      }d}t        j                  |      }t        j                  |||      }|j                  |      }|j                  |      }t        t        ||       g|j                  z        }	t        j                  ||||      |	   }
t        t        j                  ||||      |
d	       y )
Nc                 "    | d   dz
  | d   dz   fS )Nr   皙?r   gffffff@r)   r*   s    r,   r   zOTestGeometricTransformExtra.test_geometric_transform_vs_padded.<locals>.mapping  r  r/      rI   r      rO   r  rP   rR   )rV   rW   floatreshaper\   r]   r^   r9   tupleslicendimr:   r;   r	   )r=   r7   r5   r?   r   r+   ra   rb   x_paddedcenter_slicer  s              r,   "test_geometric_transform_vs_paddedz>TestGeometricTransformExtra.test_geometric_transform_vs_padded  s    
	.
 IIc'//B7(,,T266!T1JJqM::h'eD4%01AFF:;!55gD77CE 	''7.35		
r/   Tzendianness is numpy-specificr{   r    c                    t        j                  dg      }d }|j                  |j                  j                         t        j                  |      t        j                  |      j                  |j                  j                               fD ]8  }t        j                  |||j                  |      }||n|}t        |dg       : y )Nr   c                     | S r   r)   r*   s    r,   r   zfTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter.<locals>.mapping  r   r/   r}   )
rV   r9   rJ   newbyteorder
empty_likeastyper:   r;   r   r   )r=   r?   r@   r   rw   returnedresults          r,   9test_geometric_transform_endianness_with_output_parameterzUTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter  s     zz1#	 JJ

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

1rzzAG9q3wi*@A  	D++;<!C	Ds   BB 	B2B--B2N)rg   rh   ri   rT   rk   rl   rm   rV   rX   r   r2  r6  rj   r:  r<  r?  skipifsysplatformintpitemsizerH  r)   r/   r,   r-  r-    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<</J72771:3F3F3J 4  5D5 1Dr/   r-  c                   \
   e Zd Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Z	ej                  j                  d edd            d        Z
ej                  j                  d edd            ej                  j                  dd	d
g      d               Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Z edd      ej                  j                  d edd            d               Z edd      ej                  j                  d edd            d               Zej                  j                  d edd            d        Zej                  j                  d edd            d         Zej                  j                  d edd            d!        Zej                  j                  d edd            d"        Z ej                  j                  d edd            d#        Z! edd$      d%        Z" e#d&d'(      d)        Z$ e#d&d'(      d*        Z% e#d&d+(      d,        Z& e#d&d-(      d.        Z'ej                  j                  d/g d0      ej                  j                  d edd            d1               Z(ej                  j                  d edd            d2        Z)y3)4TestAffineTransformr7   r   rG   c                     |j                  dg      }t        j                  ||j                  dgg      |      }t        ||j                  dg             y )Nr   rq   r9   r:   affine_transformr   r=   r7   r?   r@   rw   s        r,   test_affine_transform01z+TestAffineTransform.test_affine_transform01q  sF    zz1#&&tRZZ!->eL!#rzz1#7r/   c                     |j                  dg      }t        j                  ||j                  dgg      |      }t	        ||j                  g d             y )Nr$   r   rq   r   rt   r:   rR  r9   r   rS  s        r,   test_affine_transform02z+TestAffineTransform.test_affine_transform02w  sE    wws|&&tRZZ!->eL!#rzz,'?@r/   c                     |j                  dg      }t        j                  ||j                  dgg      d|      }t	        ||j                  g d             y )Nr$   r   r%   rq   r   rV  rS  s        r,   test_affine_transform03z+TestAffineTransform.test_affine_transform03}  sG    wws|&&tRZZ!->%P!#rzz,'?@r/   c                     |j                  g d      }t        j                  ||j                  dgg      d|      }t        ||j                  g d             y )Nr   r   r%   rq   r   rQ  rS  s        r,   test_affine_transform04z+TestAffineTransform.test_affine_transform04  sF    zz,'&&tRZZ!->%P!#rzz,'?@r/   rJ   rX   r   c                 \   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg|      }|j                  |j                  d      r|d|z  z  }|d|z  z  }t	        j
                  ||j                  ddgddgg      ddg|	      }t        ||       y )
Nr   rI   r   r   r   r   r   r%   rq   )rs   r9   r   rJ   r:   rR  r   r=   r7   rJ   r?   r@   re   rw   s          r,   test_affine_transform05z+TestAffineTransform.test_affine_transform05  s     E"zz<'')05  7 ::|++-49  ; ::djj"45BIDX%H&&tRZZ!Q!Q8H-I()2we=!#x0r/   c           	          |j                  g dg dg dg      }t        j                  ||j                  ddgddgg      ddg|      }t        ||j                  g dg d	g d
g             y )Nr   r   r   r   r   r%   rq   r   r   r   rQ  rS  s        r,   test_affine_transform06z+TestAffineTransform.test_affine_transform06  sw    zz<'') * &&tRZZ!Q!Q8H-I()2we=!#rzz<3?3?3A (B 	Cr/   c           	          |j                  g dg dg dg      }t        j                  ||j                  ddgddgg      ddg|      }t        ||j                  g dg dg dg             y )	Nr   r   r   r   r   r%   rq   r   rQ  rS  s        r,   test_affine_transform07z+TestAffineTransform.test_affine_transform07  sw    zz<'') * &&tRZZ!Q!Q8H-I(*Awe=!#rzz<3?3?3A (B 	Cr/   c           	          |j                  g dg dg dg      }t        j                  ||j                  ddgddgg      ddg|      }t        ||j                  g dg d	g d
g             y )Nr   r   r   r   r   r%   rq   r   r   r   rQ  rS  s        r,   test_affine_transform08z+TestAffineTransform.test_affine_transform08  sw    zz<'') * &&tRZZ!Q!Q8H-I(*Bxu>!#rzz<3?3?3A (B 	Cr/   c           	          |j                  g dg dg dg      }|dkD  rt        j                  ||      }n|}t        j                  ||j                  ddgddgg      ddg|d	      }t	        ||j                  g d
g dg dg             y )Nr   r   r   r   rq   r   r%   Fr   r   r   r   )r9   r:   ru   rR  r   r=   r7   r?   r@   r   rw   s         r,   test_affine_transform09z+TestAffineTransform.test_affine_transform09  s    zz<'') * AI,,T?HH&&xaVaV<L1M(*Bxu168 	"#rzz<3?3?3A (B 	Cr/   c                     |j                  dg|j                        }t        j                  ||j	                  dgg      d|      }t        ||j	                  g d             y )Nr0   rI   r(   rE   )r6   r7   r   r   r   r   )rt   rX   r:   rR  r9   r   rS  s        r,   test_affine_transform10z+TestAffineTransform.test_affine_transform10  sS    wws"**w-&&tRZZ#-@t-24!#rzz,'?@r/   c                     |j                  g d      }t        j                  ||j                  dgg      dd|      }t        ||j                  g d             y )Nr   r0   r   rE   rq   rD   rQ  rS  s        r,   test_affine_transform11z+TestAffineTransform.test_affine_transform11  sI    zz23&&tRZZ!->4uU!#rzz,'?@r/   c                     |j                  g d      }t        j                  ||j                  dgg      dd|      }t        |d d d   |j                  g d             y )NrD   r(   r   r   rq   r0   rQ  rS  s        r,   test_affine_transform12z+TestAffineTransform.test_affine_transform12  sQ    zz,'&&tRZZ#-@!TQVW!#cc(BJJ|,DEr/   c           	          g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|      }t        ||j                  dd	gd
dgddgg             y )NrD   r   r   r   r   r0   r   rq   r1   r   r3   r   r   rQ  rS  s        r,   test_affine_transform13z+TestAffineTransform.test_affine_transform13  sy    !# zz$&&tRZZ!Q!Q8H-I1f-24!#rzzAq6Aq6Ar72K'LMr/   c                     g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|      }t        ||j                  g dg             y )	NrD   r   r   r0   r   r   r   rq   rQ  rS  s        r,   test_affine_transform14z+TestAffineTransform.test_affine_transform14  sh    ! zz$&&tRZZ!Q!Q8H-I1f-24!#rzz<.'ABr/   c                     g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|      }t        ||j                  dd	gg             y )
NrD   r   r   r0   r   r   rq   r   r1   rQ  rS  s        r,   test_affine_transform15z+TestAffineTransform.test_affine_transform15  sl    ! zz$&&tRZZ!Q!Q8H-I1f-24!#rzzAq6(';<r/   c                     g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|	      }t        |d
d d df   |       y )NrD   r   r   r           r   r(   r   rq   .r0   rQ  rS  s        r,   test_affine_transform16z+TestAffineTransform.test_affine_transform16  si    ! zz$&&tRZZ!SAs88L-Mq'-U<!#c3Q3h-6r/   c                     g dg dg dg}|j                  |      }t        j                  ||j                  ddgddgg      dd|      }t        |d d d	d
f   |       y )NrD   r   r   r(   r   r   r   rq   r0   .rQ  rS  s        r,   test_affine_transform17z+TestAffineTransform.test_affine_transform17  si    ! zz$&&tRZZ#qAq68J-KQ'-U<!#cc3h-6r/   c                     |j                  g dg dg dg      }t        j                  ||j                  ddgddgg      dd|      }t        |d d dd d df   |       y )	NrD   r   r   r(   r   r   rq   r0   rQ  rS  s        r,   test_affine_transform18z+TestAffineTransform.test_affine_transform18  sj    zz<'*, - &&tRZZ#qAs88L-Mq'-U<!#cc3Q3h-6r/   c                 $   |j                  g dg dg dg|j                        }t        j                  ||j                  ddgddgg      dd|      }t        j                  ||j                  d	dgdd	gg      dd
|      }t	        ||       y )NrD   r   r   rI   r(   r   r   rq          @r   )r9   rX   r:   rR  r   rS  s        r,   test_affine_transform19z+TestAffineTransform.test_affine_transform19  s    zz<'*,35::  ? &&tRZZ#qAs88L-Mq'-U<&&sBJJa1c(7K,La'-U<!#t,r/   r   z(https://github.com/cupy/cupy/issues/8394r   c                     g dg dg dg}|j                  |      }t        j                  ||j                  dgdgg      dd|      }t        ||j                  dd	g             y )
NrD   r   r   r   r0   r   rq   r   r1   rQ  rS  s        r,   test_affine_transform20z+TestAffineTransform.test_affine_transform20$  g     ! zz$&&tRZZ!qc
-CQ-24!#rzz1a&'9:r/   c                     g dg dg dg}|j                  |      }t        j                  ||j                  dgdgg      dd|      }t        ||j                  dd	g             y )
NrD   r   r   r0   r   r   rq   r   r   rQ  rS  s        r,   test_affine_transform21z+TestAffineTransform.test_affine_transform21/  r  r/   c                     |j                  g d      }t        j                  ||j                  dgg      dgd|      }t        ||j                  g d             y )Nr   r0   r%   )r1   rq   r   r   r0   rQ  rS  s        r,   test_affine_transform22z+TestAffineTransform.test_affine_transform22:  sO     zz,'&&tRZZ!->d-24!#rzz)'<=r/   c                     |j                  g d      }t        j                  ||j                  dgg      dgd|      }t        |d d d   |j                  g d             y )Nr   r(   r%   rn  rq   r0   r   rQ  rS  s        r,   test_affine_transform23z+TestAffineTransform.test_affine_transform23B  sW     zz,'&&tRZZ#-@2$-24!#cc(BJJ|,DEr/   c                 R   |j                  g d      }t               5 }|j                  t        d       t	        j
                  ||j                  dg      d|      }d d d        t	        j
                  ||j                  dgg      d|      }t        |       y # 1 sw Y   @xY w)Nr   @The behavior of affine_transform with a 1-D array .* has changedr0   r%   rq   r9   r   filterUserWarningr:   rR  r   r=   r7   r?   r@   supr4  r5  s          r,   test_affine_transform24z+TestAffineTransform.test_affine_transform24J  s     zz,'  	TCJJ{%& ++D"**aS/2USD		T
 ''bjj1#.?5Q!$-	T 	T   A BB&c                 R   |j                  g d      }t               5 }|j                  t        d       t	        j
                  ||j                  dg      d|      }d d d        t	        j
                  ||j                  dgg      d|      }t        |       y # 1 sw Y   @xY w)Nr   r  r(   r%   rq   r  r  s          r,   test_affine_transform25z+TestAffineTransform.test_affine_transform25V  s     zz,'  	VCJJ{%& ++D"**cU2CRuUD		V
 ''bjj3%.A2US!$-	V 	Vr  c           
         |j                  g dg dg dg      }|dkD  rt        j                  ||      }n|}|j                  d      }|j	                  d       }|j                  ||fd      }|j                  ||j                  g d	g      fd
      }|j                  |d      D 	cg c]  }	t        |	       }
}	t        j                  |||
|d      }t        j                  |||d      }t        j                  |||d      }|||fD ]&  }t        ||j                  g dg dg dg             ( y c c}	w )Nr   r   r   r   rq   r0   r0   r   axis)rw  r   r   r   )r%   Fr   r   r   r   )
r9   r:   ru   eyert   concatr  r  rR  r   )r=   r7   r?   r@   r   tform_originaloffset_originaltform_h1tform_h2r+   offsr4  r5  out3rw   s                  r,   test_affine_transform26z+TestAffineTransform.test_affine_transform26b  sK    zz<'') * AI,,T?HH776?*99no>Q9G99h

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

K=(AB9Kj'":":D(Kr/   Tzbyteorder is numpy-specificr  c           	         |j                  d      }|j                  |      |j                  |      j                  |j                  j	                               |j                  |j                  j	                         fD ]}  }t               5 }|j                  t        d       |j                  ddg      }t        j                  |||      }d d d        |n|}t        ||j                  ddgddgg              y # 1 sw Y   3xY w)N)r0   r0   r  r   r}   )rt   r"  r#  rJ   r!  r   r  r  r9   r:   rR  r   )r=   r?   r@   rw   r  matrixr$  r%  s           r,   9test_affine_transform_1d_endianness_with_output_parameterzMTestAffineTransform.test_affine_transform_1d_endianness_with_output_parameter  s     wwvMM$'MM$'..tzz/F/F/HIJJ

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

;,- QF+"33D&MN %,S(F%fbjj1a&1a&9I.JK
	LN Ns   AD  D		c                    t        j                  dg      }|j                  |j                  j                         t        j                  |      t        j                  |      j                  |j                  j                               fD ]U  }t        j                  |t        j                  dgg      |      }||n|}t        |t        j                  dg             W y )Nr   r}   )	rV   r9   rJ   r!  r"  r#  r:   rR  r   )r=   r?   r@   rw   r$  r%  s         r,   >test_affine_transform_multi_d_endianness_with_output_parameterzRTestAffineTransform.test_affine_transform_multi_d_endianness_with_output_parameter  s    
 zz1#JJ

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

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

L>(BCr/   rJ   rX   r   c                    t        ||      }|j                  g dg dg dg|      }|j                  |j                  d      r|d|z  z  }t	               5 }|j                  t        d       t        j                  ||j                  ddg      d	d
|      }d d d        t        d d dd d df   |       y # 1 sw Y   !xY w)NrD   r   r   rI   r   r   r  r(   r   r   rq   r0   )
rs   r9   r   rJ   r   r  r  r:   rR  r   )r=   r7   rJ   r?   r@   r  rw   s          r,   test_zoom_affine01zTestZoom.test_zoom_affine01  s     E"zz<'*,38  : ::djj"45BID  	@CJJ{%& **4S#J1G+1@C		@ 	"#cc3Q3h-6	@ 	@s   AB99Cc                 `    d}t        j                  |j                  ||f      d|z  d       y )Nr         ?r   rO   )r:   r  r  )r=   r?   dims      r,   test_zoom_infinityzTestZoom.test_zoom_infinity  s(    RXXsCj)28)Dr/   c                     |j                  d      }d}t        j                  ||d      }|j                  d      }t        ||       y )N)r   r   r   )r  r~  r~  r3   )r4   )r   r   r   )r  r:   r  r   )r=   r?   r  r  rw   refs         r,   test_zoom_zoomfactor_onez!TestZoom.test_zoom_zoomfactor_one  s?    hhy!ll31-hh{#!#s+r/   c                 x    |j                  d      }d}t        j                  ||      }|j                  dk(  sJ y )N)r1   r   r  )gUUUUUU?gE]t?g(\?)r$   rK      )r  r:   r  r   )r=   r?   r  r  rw   s        r,   test_zoom_output_shape_roundoffz(TestZoom.test_zoom_output_shape_roundoff  s7    hh{#.ll3%yyK'''r/   r  )r9  )r1   r   )r   r0   )r   r   r5   )r   r   r   r   r   r   r   r   c                 6   t        j                  ddgddggt         j                        }t        j                  |t        j                  |            }|j                  |      }|j                  |      }t        t        j                  ||d|      |       y )Nr   r   r0   r1   rI   rM   )rV   r9   rX   kronrt   r   r:   r  )r=   r  r5   r?   r  re   r+   s          r,   test_zoom_by_int_order0z TestZoom.test_zoom_by_int_order0  s|     zzAq6q6#*,**6774/JJt::h'!LLD5	
r/   r   r  )r$   r$   )r   r   r   r   r   c                 T   t        j                  t        j                  |      t              j	                  |      }|j                  |      }t        t        j                  ||d|d      |j                  t        j                  |t        j                  |                         y )NrI   r   T)r7   r5   	grid_mode)rV   rW   prodr  r  r9   r   r:   r  r  rt   )r=   r   r  r5   r?   r  r+   s          r,   test_zoom_grid_by_int_order0z%TestZoom.test_zoom_grid_by_int_order0  sp     yyu5==eDJJt!LLDEJJrwwtRWWT]34	
r/   r   r   c                     |j                  |j                  d|j                        d      }t        j                  t
        d      5  t        j                  |d|d      f d d d        y # 1 sw Y   y xY w)	Nr   rI   )r1   r1   zIt is recommended to use mode)matchr0   T)r5   r  )r  rW   rX   rT   warnsr  r:   r  )r=   r5   r?   r+   s       r,   test_zoom_grid_mode_warningsz%TestZoom.test_zoom_grid_mode_warnings  sa     JJryy"**y5v>\\+ ?A 	;LLADD9:	; 	; 	;s   	A--A6z
dask.arrayz!output=array requires buffer viewr   r   c                     |j                  |j                  d      d      }t        j                  |d|j	                  d             y)zTicket #643r   r   r0   r   r}   N)r  rW   r:   r  r  r=   r?   r+   s      r,   test_zoom_output_shapezTestZoom.test_zoom_output_shape  s5     JJryy}f-Q"((6"23r/   c                     |j                  d      }d}t        j                  |t        j                  |            }t        j                  ||      }t        ||       y )Ng      $@r0   )rW   r:   r  rV   arrayr	   )r=   r?   r   factoractualre   s         r,   test_zoom_0d_arrayzTestZoom.test_zoom_0d_array&  sG    IIcNa&!12<<6*)r/   r   zCuPy `zoom` needs similar fix.c                     |j                  d      }t        t        j                  |d      |       t        t        j                  |d      |       y )Nr1   r   r9  )r  r   r:   r  r  s      r,   test_zoom_1_gh20999zTestZoom.test_zoom_1_gh20999.  s;     FF1IQ*A.Q/3r/   zread-only backendznumpy round-tripc                     |j                  d      }|j                  |      }t        j                  |d|       t	        ||       y )Nr1   r   r}   )r  
zeros_liker:   r  r   )r=   r?   r+   r~   s       r,   test_zoom_1_gh20999_outputz#TestZoom.test_zoom_1_gh20999_output6  s9     FF1Iq!Q&)"r/   N)rg   rh   ri   rT   rk   rl   rm   r  r  r  r  r  r   r  r  r
  thread_unsafer  rj   r  r  r  r  r  r)   r/   r,   r  r    s   [[WeAqk2	- 3	-"
D [[WeAqk2[[Wy,&?@7 A 37E
,( [[V%EF[[V &7 8
8 G
" [[Wvv&67[[V%EF[[V &D E

E G 8

 [[Vj&%9:[[;  ;; l+NOk*MN4 O P4
* v&FG4 H4 v&FGk*=>|,>?# @ ? H#r/   r  c                   
   e Zd Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            ej                  j                  dddg      d	               Z	ej                  j                  d edd            d
        Z
ej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zej                  j                  d edd            d        Zd Zd Z edd      d        Zy)
TestRotater7   r   rG   c                     |j                  g dg dg dg|j                        }t        j                  |d|      }t	        ||       y )Nr   r   r   r   r   rI   r   rq   r9   rX   r:   rotater   rS  s        r,   test_rotate01zTestRotate.test_rotate01B  sG    zz<'')02

  < nnT1E2!#t,r/   c                     |j                  g dg dg dg|j                        }|j                  g dg dg dg dg|j                        }t        j                  |d|      }t	        ||       y )Nr   )r   r   r   r   rI   r   r   r   r   r   r   Z   rq   r!  r=   r7   r?   r@   re   rw   s         r,   test_rotate02zTestRotate.test_rotate02J  su    zz<'')02

  < ::y(((* 24  = nnT2U3!#x0r/   rJ   rX   r   c                 8   t        ||      }|j                  g dg dg dg|      }|j                  g dg dg dg dg dg|      }|j                  |j                  d      r|d|z  z  }|d|z  z  }t	        j
                  |d|	      }t        ||       y )
Nr   r   r   r   r   r   r   r   r   r   rI   r%  r&  r   r   r'  rq   )rs   r9   r   rJ   r:   r"  r   r]  s          r,   test_rotate03zTestRotate.test_rotate03V  s     E"zz?**,38  : ::y((((	* 27	  8
 ::djj"45BIDX%HnnT2U3!#x0r/   c                     |j                  g dg dg dg|j                        }|j                  g dg dg dg|j                        }t        j                  |dd|      }t	        ||       y )Nr+  r,  rI   r   r   r   r   r   r'  F)r  r7   r!  r(  s         r,   test_rotate04zTestRotate.test_rotate04h  ss    zz?**,35::  ? ::..079zz  C nnT2uEB!#x0r/   c                    t        j                  d      }t        d      D ]=  }t        j                  g dg dg dg dgt         j                        |d d d d |f<   ? |j                  |      }|j                  g dg dg dg|j                        }t        j                  |d|	      }t        d      D ]  }t        |d d d d |f   |        y )
N)r$   r1   r1   r1   r%  r&  rI   r   r   r'  rq   rV   rB  rm   r9   rX   r:   r"  r   r=   r7   r?   r@   ire   rw   s          r,   test_rotate05zTestRotate.test_rotate05s  s    xx	"q 	FAJJ	(1(1(1(3 ;=**FDAqM	F
 zz$::|++-46JJ  @ nnT2U3q 	>A%c!Q'lH=	>r/   c                    t        j                  d      }t        d      D ]:  }t        j                  g dg dg dgt         j                        |d d d d |f<   < |j                  |      }|j                  g dg dg dg dg|j                        }t        j                  |d|	      }t        d      D ]  }t        |d d d d |f   |        y )
N)r1   r$   r1   r1   r   r   rI   r%  r&  r'  rq   r2  r3  s          r,   test_rotate06zTestRotate.test_rotate06  s    xx	"q 	IAJJ(4(4(6=?ZZIDAqM	I zz$::y(((* 24  = nnT2U3q 	>A%c!Q'lH=	>r/   c                 J   |j                  g dg dg dggdz  |j                        }|j                  |d      }|j                  g dg dg dg dg dggdz  |j                        }|j                  |d      }t        j                  |dd	|
      }t        ||       y )Nr+  r,  r0   rI   r0   r   r   r%  r&  r'  r  )axesr7   r9   rX   permute_dimsr:   r"  r   r(  s         r,   test_rotate07zTestRotate.test_rotate07  s    zzO++- .0129;  E tY/::	 ) ) ) )	 + , /0	0 8:zz	  C
 ??8Y7nnT2F%@!#x0r/   c                 @   |j                  g dg dg dggdz  |j                        }|j                  |d      }|j                  g dg dg dggdz  |j                        }|j                  |d      }t        j                  |ddd	|
      }t        ||       y )Nr+  r,  r0   rI   r9  r/  r'  r  F)r:  r  r7   r;  r(  s         r,   test_rotate08zTestRotate.test_rotate08  s    zzO++- .0129;  E tY/:: / / 1 2456=?ZZ  I ??8Y7nnT2FEO!#x0r/   c                     |j                  g dg dg dgdz  |j                        }t        t              5  t	        j
                  |dd|j                  f       d d d        y # 1 sw Y   y xY w)Nr+  r,  r0   rI   r'  r   )r:  )r9   rX   r  r  r:   r"  r  )r=   r?   r@   s      r,   test_rotate09zTestRotate.test_rotate09  si    zz?**,./079zz  C :& 	:NN41dii.9	: 	: 	:s   %A''A0c           
      F   |j                  |j                  d|j                        d      }|j                  g dg dg dg dg dgg dg dg d	g d
g dgg dg dg dg dg dgg|j                        }t	        j
                  |dd      }t        ||dd       y )N-   rI   )r1   r   r1   )rw  rw  rw  )g|S2@g|S2@g>)!@)g9HD%@g9HD'@g9HD)@)gc~@gc~@gzLb @)g[ic6*@g[ic6,@g[ic6.@)g      5@g      6@g      7@)gRK<@gRK=@gRK>@)g,PA@g,PgB@g,PB@)gݠ'?@grn@@grnГ@@)gGA@gG9B@gGB@r   F)angler  gư>g>rQ   )r  rW   rX   r9   r:   r"  r	   )r=   r?   r@   re   rw   s        r,   test_rotate10zTestRotate.test_rotate10  s    zz"))Bbjj)99E :: / D G /	 1
 !E D 2 D G	 I
 !0 G G / /	 12 :<  E  nnTU;XDt<r/   r   z(https://github.com/cupy/cupy/issues/8400r   c                     |j                  t        j                  t        j                  d      d            }t	        j
                  t	        j
                  |d      d      }t        ||       y )Nr   )r   r      iL)r9   rV   tilerW   r:   r"  r   )r=   r?   r   r   s       r,   test_rotate_exact_180z TestRotate.test_rotate_exact_180  sH    JJrwwryy|V45NN7>>!S1481r/   N)rg   rh   ri   rT   rk   rl   rm   r#  r)  r-  r0  r5  r7  r=  r?  rA  rE  r  rI  r)   r/   r,   r  r  @  s   [[WeAqk2- 3- [[WeAqk2	1 3	1 [[WeAqk2[[Wy,&?@1 A 31  [[WeAqk21 31 [[WeAqk2> 3> [[WeAqk2> 3> [[WeAqk21 31 [[WeAqk2
1 3
1:=2 v&PQ Rr/   r  )$rJ  numpyrV   numpy.testingr   scipy._lib._array_apir   r   r   r   r   r	   rT   r
   r  scipy.ndimager:    r   rk   rj   r  
pytestmarkr  r\   r   rl   rm   ro   r   r  r-  rO  r  r  r  r)   r/   r,   <module>rP     s   
  +   *  ;;// KK11 &+9NOP
   E; E;P %1+.%($1 $1 ) /$1N &!IJ%1+.R; R; / KR;j &!IJJ, J, KJ,ZtD tDnx
 x
vD
 D
NL# L#^S Sr/   