
    ^Mh	                     ,   d dl Z d dlZd dlmZ d dlmZmZmZ d dl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 d dlmZ ej        j        Zeej                            d	           ed
ddg          gZdZdddddddZ G d d          Zej                            d edd                    ej                            de           G d d                                  Z edd          ej                            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&dS )-    N)suppress_warnings)xp_assert_equalxp_assert_closeassert_array_almost_equal)is_cupyis_jax_asarrayarray_namespace)raises   )types)array_api_compatibleskip_xp_backendsTcupy	jax.numpy)cpu_only
exceptions-q=reflect	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                      e Zd Z edd          e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                            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                            dg d          ej                            d e	d                    d                         Z
dS ) 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 }|                     g d          }t          t          j        ||d|dd          |                     |                     d S )Nc                     | d         dz   fS )Nr         ? xs    f/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/ndimage/tests/test_interpolation.pyshiftz-TestBoundaries.test_boundaries.<locals>.shift1       aD3J=     )r               @r(   )   r   )cvalmodeoutput_shapeorderasarrayr   ndimagegeometric_transformselfr8   expected_valuexpr0   datas         r/   test_boundarieszTestBoundaries.test_boundaries%   sx    	! 	! 	! zz---(('e"459D D DJJ~&&	( 	( 	( 	( 	(r2   )r   r   r3   r4   )r4   r   r3   r4   )r'   r   r3   r4   )r3   r   r3   r4   )r(   r   r3   r4   c           	          d }|                     g d          }t          t          j        ||d|d          |                     |                     d S )Nc                     | d         dz
  fS )Nr   g?r,   r-   s    r/   r0   z.TestBoundaries.test_boundaries2.<locals>.shiftF   r1   r2   r   r3   r4   r'   r(   r'   )r7   r8   r9   r;   r?   s         r/   test_boundaries2zTestBoundaries.test_boundaries2:   ss    	! 	! 	! zz,,,'''e"459; ; ;JJ~&&	( 	( 	( 	( 	(r2   r8   )r   r   r   r   r   r   r:      c                    t          |          r|dvs|dk    rt          j        d           t          j        ddt          j                  }|                    |          }|                    t          j        ddd	
                    }t          |          j	        }t          j        |||df         ||          }d}	t                              |          }
|                    t          j        ||	|
                    }|                    |	|z             |df         }t          j        ||||          }|dk    rdnd}t          ||d|           dS )z$Tests based on examples from gh-2640)r   r   r   r   r   r   z-Jax does not support grid- modes or order > 1ir6   dtypei   i  )num.r:   r8       r8   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r<   linspacer
   newaxisr=   map_coordinatesndimage_to_numpy_modegetpadr   )r@   r8   r:   rB   np_datarC   r.   r]   ynpadpad_modepaddedcoordsexpectedrV   s                  r/   test_boundary_spline_accuracyz,TestBoundaries.test_boundary_spline_accuracyO   sX    2JJ 	JMMM		LHIII)B444zz'""JJr{2rt44455!!$$,#D!GSL/TRRR (,,T22BF7Dx@@@AAD1H%%gsl3*66TRRR..ttE8$T::::::r2   N)__name__
__module____qualname__r   rW   markparametrizerD   rI   rangeri   r,   r2   r/   r    r    #   s       f%MNNN[
000	1
555	6
:::	;
777	8
666	7
555	6
;;;	<	>	 	( (	 	 ON( f%MNNN[
\\\	"
,,,	
|||	$
LLL	!
\\\	"
mmm	$
===	)	+	 	( (	 	 ON( [V &1 &1 &1 2 2 [WeeAhh//; ; 0/2 2; ; ;r2   r    r:   r3   rJ   rM   c                   R    e Zd Zd Zd Z edd          d             Zd Zd Zd	S )

TestSplinec                     t          ||          }|                    g |          }t          j        ||          }||                    d|j                  k    sJ d S )NrL   r:   r   getattronesr=   spline_filterr<   rM   r@   rM   r:   rB   rC   outs         r/   test_spline01zTestSpline.test_spline01p   sd    E""wwrw''#D666bjj#)j44444444r2   c                     t          ||          }|                    dg|          }t          j        ||          }t	          ||                    dg                     d S )Nr   rL   rs   )ru   r<   r=   rw   r   rx   s         r/   test_spline02zTestSpline.test_spline02v   s_    E""zz1#Uz++#D666!#rzz1#77777r2   Tzoutput=dtype is numpy-specificnp_onlyr#   c                     t          ||          }|                    g |          }t          j        |||          }||                    d|j                  k    sJ d S )NrL   outputr   rt   rx   s         r/   test_spline03zTestSpline.test_spline03|   sf    E""wwrw''#D%>>>bjj#)j44444444r2   c                     t          ||          }|                    dg|          }t          j        ||          }t	          ||                    g d                     d S )Nr'   rL   r   r   r   r   )ru   rv   r=   rw   r   r<   rx   s         r/   test_spline04zTestSpline.test_spline04   s`    E""wws%w((#D%00!#rzz,,,'?'?@@@@@r2   c                     t          ||          }|                    ddg|          }t          j        ||          }|                    g dg dg dg dg          }t          ||           d S )Nr'   rL   rs   r   )ru   rv   r=   rw   r<   r   )r@   rM   r:   rB   rC   ry   rh   s          r/   test_spline05zTestSpline.test_spline05   s    E""ww1vUw++#D666::|||+||+||+||- . . 	"#x00000r2   N)	rj   rk   rl   rz   r|   r   r   r   r   r,   r2   r/   rq   rq   l   s        5 5 58 8 8 d+KLLL5 5 ML5A A A1 1 1 1 1r2   rq   r!   r"   c                       e Zd Zd Zd Zd Zd Ze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dS )TestGeometricTransformc                     |                     dg          }d }t          j        |||j        |          }t	          ||                     dg|j                             d S )Nr   c                     | S Nr,   r-   s    r/   mappingzBTestGeometricTransform.test_geometric_transform01.<locals>.mapping       Hr2   rs   rL   r<   r=   r>   shaper   rM   r@   r:   rB   rC   r   ry   s         r/   test_geometric_transform01z1TestGeometricTransform.test_geometric_transform01   sp    zz1#	 	 	 )$057 7 7!#rzz1#SYz'G'GHHHHHr2   c                     |                     dg          }d }t          j        |||j        |          }t	          ||                    g d|j                             d S )Nr'   c                     | S r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform02.<locals>.mapping   r   r2   rs   r   rL   rv   r=   r>   r   r   r<   rM   r   s         r/   test_geometric_transform02z1TestGeometricTransform.test_geometric_transform02   sr    wws||	 	 	 )$057 7 7!#rzz,,,ciz'P'PQQQQQr2   c                     |                     dg          }d }t          j        |||j        |          }t	          ||                    g d|j                             d S )Nr'   c                     | d         dz
  fS Nr   r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform03.<locals>.mapping       aD1H;r2   rs   r   r   r   r   rL   r   r   s         r/   test_geometric_transform03z1TestGeometricTransform.test_geometric_transform03   sr    wws||	 	 	 )$057 7 7!#rzz,,,ciz'P'PQQQQQr2   c                     |                     g d          }d }t          j        |||j        |          }t	          ||                     g d|j                             d S )Nr'   r   r4   r3   c                     | d         dz
  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform04.<locals>.mapping   r   r2   rs   r   r'   r   r4   rL   r   r   s         r/   test_geometric_transform04z1TestGeometricTransform.test_geometric_transform04   sv    zz,,,''	 	 	 )$057 7 7!#rzz,,,ciz'P'PQQQQQr2   rM   r[   
complex128c                 p   t          ||          }|                    g dg dg dg|          }|                    g dg dg dg|          }t          |          j        } ||j        d          r|d|z  z  }|d|z  z  }d }t          j        |||j        |          }t          ||           d S )Nr   rL   r   complex floating              ?c                 (    | d         | d         dz
  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform05.<locals>.mapping       aD!A$(##r2   rs   )	ru   r<   r
   isdtyperM   r=   r>   r   r   )	r@   r:   rM   rB   rC   rh   r   r   ry   s	            r/   test_geometric_transform05z1TestGeometricTransform.test_geometric_transform05   s	   E""zz<<<'<<'<<)05  7 7 ::|||+||+||-49  ; ; "$''/74:122 	&BIDX%H	$ 	$ 	$ )$057 7 7!#x00000r2   c                     |                     g dg dg dg          }d }t          j        |||j        |          }|                     g dg dg dg|j        	          }t          ||           d S )
Nr   r6   rJ         r4   r   r4   rJ   c                 (    | d         | d         dz
  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform06.<locals>.mapping   r   r2   rs   r   r   r6   rJ   r   r   r4   r   r4   rL   r<   r=   r>   r   rM   r   r@   r:   rB   rC   r   ry   rh   s          r/   test_geometric_transform06z1TestGeometricTransform.test_geometric_transform06       zz<<<'<<'<<) * *	$ 	$ 	$ )$057 7 7::|||+||+||-47I  ? ? 	"#x00000r2   c                     |                     g dg dg dg          }d }t          j        |||j        |          }|                     g dg dg dg|j                  }t          ||           d S )Nr   r   r   c                 (    | d         dz
  | d         fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform07.<locals>.mapping       aD1Had##r2   rs   r   r   r   r   rL   r   r   s          r/   test_geometric_transform07z1TestGeometricTransform.test_geometric_transform07   r   r2   c                     |                     g dg dg dg          }d }t          j        |||j        |          }|                     g dg dg dg|j        	          }t          ||           d S )
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''r2   rs   r   r   r   rL   r   r   s          r/   test_geometric_transform08z1TestGeometricTransform.test_geometric_transform08   s    zz<<<'<<'<<) * *	( 	( 	( )$057 7 7::|||+||+||-47I  ? ? 	"#x00000r2   c                 ,   |                     g dg dg dg          }d }|dk    rt          j        ||          }n|}t          j        |||j        |d          }|                     g d	g d
g dg|j                  }t          ||           d S )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   r2   r   rs   Fr:   	prefilterr   r   r   rL   )r<   r=   rw   r>   r   rM   r   )r@   r:   rB   rC   r   filteredry   rh   s           r/   test_geometric_transform10z1TestGeometricTransform.test_geometric_transform10  s    zz<<<'<<'<<) * *	( 	( 	( AII,T???HHH)(GTZ05H H H::|||+||+||-47I  ? ? 	"#x00000r2   c                     |                     dg|j                  }d }t          j        ||dg|          }t	          ||                    g d|j                             d S )Nr3   rL   c                     | d         dz  fS Nr   r3   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform13.<locals>.mapping  s    aDAI<r2   r'   rs   r   )rv   r[   r=   r>   r   r<   rM   r   s         r/   test_geometric_transform13z1TestGeometricTransform.test_geometric_transform13  ss    wws"*w--	  	  	  )$!EJJJ!#rzz,,,ciz'P'PQQQQQr2   c                     |                     g d          }d }t          j        ||dg|          }t          ||                     g d|j                             d S )Nr   r   r3   rJ   r4   r6   r'   r'   c                     d| d         z  fS )Nr3   r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform14.<locals>.mapping"  s    !H;r2   r'   rs   rG   rL   )r<   r=   r>   r   rM   r   s         r/   test_geometric_transform14z1TestGeometricTransform.test_geometric_transform14  sr    zz22233	 	 	 )$!EJJJ!#rzz,,,ciz'P'PQQQQQr2   c                 |    g d}d }t          j        ||dg|          }t          |d d d         g d           d S )NrG   c                     | d         dz  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform15.<locals>.mapping+  r   r2   r   rs   r3   r=   r>   r   r   s         r/   test_geometric_transform15z1TestGeometricTransform.test_geometric_transform15(  s[    ||	 	 	 )$!EJJJ!#ccc(LLL99999r2   c                     g dg dg dg}d }t          j        ||d|          }t          |ddgd	d
gddgg           d S )NrG   r   rJ   r6   r   g      "@
         c                 (    | d         | d         dz  fS Nr   r   r3   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform16.<locals>.mapping6  r   r2   r4   r3   rs   r   r4   r   r6   	   r   r   r   s         r/   test_geometric_transform16z1TestGeometricTransform.test_geometric_transform161  sz    !!!#	$ 	$ 	$ )$057 7 7!#AAB'@AAAAAr2   c                 x    g dg dg dg}d }t          j        ||d|          }t          |g dg           d S )NrG   r   r   r   r   r   c                 (    | d         dz  | d         fS Nr   r3   r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform17.<locals>.mappingB  r   r2   r   r'   rs   r   r   s         r/   test_geometric_transform17z1TestGeometricTransform.test_geometric_transform17=  sk    !	$ 	$ 	$ )$057 7 7!#~66666r2   c                 x    g dg dg dg}d }t          j        ||d|          }t          |ddgg           d S )	NrG   r   r   c                 .    | d         dz  | d         dz  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform18.<locals>.mappingN  r   r2   r   r3   rs   r   r4   r   r   s         r/   test_geometric_transform18z1TestGeometricTransform.test_geometric_transform18I  sk    !	( 	( 	( )$057 7 7!#Ax00000r2   c                     g dg dg dg}d }t          j        ||d|          }t          |dd d df         |           d S )	NrG   r   r   c                 (    | d         | d         dz  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform19.<locals>.mappingZ  r   r2   r4   r   rs   .r3   r   r   s         r/   test_geometric_transform19z1TestGeometricTransform.test_geometric_transform19U  ss    !	$ 	$ 	$ )$057 7 7!#c33Q3h-66666r2   c                     g dg dg dg}d }t          j        ||d|          }t          |d d ddf         |           d S )	NrG   r   r   c                 (    | d         dz  | d         fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform20.<locals>.mappingf  r   r2   rJ   r'   rs   r3   .r   r   s         r/   test_geometric_transform20z1TestGeometricTransform.test_geometric_transform20a  ss    !	$ 	$ 	$ )$057 7 7!#ccc3h-66666r2   c                     g dg dg dg}d }t          j        ||d|          }t          |d d dd d df         |           d S )NrG   r   r   c                 .    | d         dz  | d         dz  fS r   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform21.<locals>.mappingr  r   r2   rJ   r   rs   r3   r   r   s         r/   test_geometric_transform21z1TestGeometricTransform.test_geometric_transform21m  sy    !	( 	( 	( )$057 7 7!#ccc33Q3h-66666r2   c                     |                     g dg dg dg|j                  }d }d }t          j        ||d|          }t          j        ||d	|          }t	          ||           d S )
NrG   r   r   rL   c                 .    | d         dz  | d         dz  fS r   r,   r-   s    r/   mapping1zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping1~  r   r2   c                 .    | d         dz  | d         dz  fS r   r,   r-   s    r/   mapping2zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping2  r   r2   r   rs   r4   r'   )r<   r[   r=   r>   r   )r@   r:   rB   rC   r   r   ry   s          r/   test_geometric_transform22z1TestGeometricTransform.test_geometric_transform22y  s    zz<<<'<<*??,35:  ? ?	( 	( 	(	( 	( 	( )$*0? ? ?)#x*0? ? ?!#t,,,,,r2   c                     g dg dg dg}d }t          j        ||d|          }|                    t          j                  }t          |ddg           d S )	NrG   r   r   c                     d| d         dz  fS )Nr   r   r3   r,   r-   s    r/   r   zBTestGeometricTransform.test_geometric_transform23.<locals>.mapping      qtax= r2   r3   rs   r   r6   )r=   r>   astyperY   int32r   r   s         r/   test_geometric_transform23z1TestGeometricTransform.test_geometric_transform23  su    !	! 	! 	! )$UKKKjj""!#1v.....r2   c           	      ~    g dg dg dg}d }t          j        ||d|dddi	          }t          |d
dg           d S )NrG   r   r   c                     || d         |z  fS )Nr   r,   )r.   abs      r/   r   zBTestGeometricTransform.test_geometric_transform24.<locals>.mapping  r   r2   r   )r   r  r3   )r:   extra_argumentsextra_keywordsr   r6   r   r   s         r/   test_geometric_transform24z1TestGeometricTransform.test_geometric_transform24  st    !	! 	! 	! )'4ud8% % % 	"#1v.....r2   N)rj   rk   rl   r   r   r   r   rW   rm   rn   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r,   r2   r/   r   r      s       I I IR R RR R RR R R [Wy,&?@@1 1 A@1*1 1 11 1 11 1 11 1 1&R R RR R R: : :
B 
B 
B
7 
7 
7
1 
1 
1
7 
7 
7
7 
7 
7
7 
7 
7- - -"
/ 
/ 
// / / / /r2   r   c                      e Zd Zd Zej                            dg d          ej                            d ed                    d                         Z e	dd	          d
             Z
 e	dd	          d             ZdS )TestGeometricTransformExtrac                     |                     g dg dg|j                  }d }|                     g dg dg          }t          t          j        ||dd	          |           d S )
Nr   r3   r4   r'   r   rJ   rL   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$*--r2   g      ?g      ?      ?r  g      @r5   r   r   r8   r:   )r<   r[   r   r=   r>   )r@   rB   r.   r   expected_results        r/   -test_geometric_transform_grid_constant_order1zITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1  s     JJ			!		#*,*  6 6	. 	. 	. **&8&8&8&8&8&8&: ; ;!'7./1 1 1	
 	
 	
 	
 	
r2   r8   r   r   r   r   r   r:   rJ   c                    d }t          j        dt                                        dd          }d}t                              |          }t          j        |||          }|                    |          }|                    |          }t          t          ||           g|j
        z            }	t          j        ||||          |	         }
t          t          j        ||||          |
d	           d S )
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  r2      rL   r      rR   r  rS   rU   )rY   rZ   floatreshaper_   r`   ra   r<   tupleslicendimr=   r>   r   )r@   r:   r8   rB   r   r.   rd   re   x_paddedcenter_slicer  s              r/   "test_geometric_transform_vs_paddedz>TestGeometricTransformExtra.test_geometric_transform_vs_padded  s   
	. 	. 	.
 Ic'''//B77(,,T226!T111JJqMM::h''eD4%001AF:;;!5gD7 7 77CE 	'7.35 5 5		
 	
 	
 	
 	
 	
r2   Tzendianness is numpy-specificr}   c                    t          j        dg          }d }|j        |j                                        t          j        |          t          j        |                              |j                                                  fD ]6}t          j        |||j        |          }||n|}t          |dg           7d S )Nr   c                     | S r   r,   r-   s    r/   r   zfTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter.<locals>.mapping  r   r2   r   )
rY   r<   rM   newbyteorder
empty_liker   r=   r>   r   r   )r@   rB   rC   r   ry   returnedresults          r/   9test_geometric_transform_endianness_with_output_parameterzUTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter  s     z1#	 	 	 J
 7 7 9 9M$''M$''..tz/F/F/H/HIIK 	3 	3C 24$*:=? ? ?H$,SS(F%fqc2222	3 	3r2   !string `output` is numpy-specificc                     |                     dg          }d }t          j        ||d          }|j        t	          j        d          u sJ t          |dg           d S )Nr   c                     | S r   r,   r-   s    r/   r   zXTestGeometricTransformExtra.test_geometric_transform_with_string_output.<locals>.mapping  r   r2   fr   )r<   r=   r>   rM   rY   r   )r@   rB   rC   r   ry   s        r/   +test_geometric_transform_with_string_outputzGTestGeometricTransformExtra.test_geometric_transform_with_string_output  sn    zz1#	 	 	 )$DDDyBHSMM))))!#s+++++r2   N)rj   rk   rl   r  rW   rm   rn   ro   r"  r   r)  r.  r,   r2   r/   r  r    s        
 
 
" [V &; &; &; < <[WeeAhh//
 
 0/< <
4 d+IJJJ3 3 KJ3  d+NOOO, , PO, , ,r2   r  c                   ,   e Zd Zej                            d edd                    ej                            dej        ej	        g          d                         Z
ej                            d edd                    d             Z edd	          d
             Z ed          d             Z edd          d             Zej                            dej        v p ej        d          j        dk     d	          d             ZdS )TestMapCoordinatesr:   r   rJ   rM   c                    t          |          r|dk    rt          j        d           |                    g dg dg dg          }|                    g dg dg dg          }t	          |          j        } ||j        d	          r|d
|z  z
  }|d
|z  z
  }t          j        |j	                  }|dz  }|                    |          }t          j        |||          }t          ||           d S )Nr   'jax map_coordinates requires order <= 1r   r   r   r   r   r   r   r   rs   )r   rW   rX   r<   r
   r   rM   rY   indicesr   r=   r^   r   )	r@   r:   rM   rB   rC   rh   r   idxry   s	            r/   test_map_coordinates01z)TestMapCoordinates.test_map_coordinates01  s!    ":: 	D%!))LBCCCzz<<<'<<'<<) * * ::|||+||+||- . . "$''/74:122 	0"t)#D"x-/Hj$$qjjoo%dCu===!#x00000r2   c                    t          |          r4|dk    rt          j        d           |dk    rt          j        d           |                    g dg dg dg          }t	          j        |j        t          j                  }|dz  }|                    |          }t          j	        |d|          }t          j
        |||          }t          ||           d S )	Nr   r2  zoutput differs. jax bug?r   r   r   r+   rs   )r   rW   rX   r<   rY   r3  r   r[   r=   r0   r^   r   )r@   r:   rB   rC   r4  out1out2s          r/   test_map_coordinates02z)TestMapCoordinates.test_map_coordinates02  s    ":: 	8qyy|EFFFzz|6777zz<<<'<<'<<) * * jRZ00s
jjoo}T3e444&tS>>>!$-----r2   r   z`order` is required in jaxr"   c           
      H   t          g dg dg dgd|          }t          j        |j                  dz
  }|                    |          }t          j        ||          }|                    g dg dg d	g          }t          ||           t          |t          j        |d
                     t          j        |d d ddf         j                  dz
  }|                    |          }t          j        |d d ddf         |          }t          ||                    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
  }|                    |          }t          j        |d d d d df         |          }t          ||                    ddgddgddgg                     t          |t          j        |d d d d df         d
                     d S )Nr   r   r   F)r:   rB   r   r   r   r   r   r   r3   .r   r'   r6   )	r	   rY   r3  r   r<   r=   r^   r   r0   )r@   rB   rC   r4  ry   rh   s         r/   test_map_coordinates03z)TestMapCoordinates.test_map_coordinates03  s@   %%'.1b: : : j$$q(jjoo%dC00::|||+||+||- . . 	"#x000!#w}T6'B'BCCCjccc3h-..2jjoo%d33Q38nc::!#rzz<<<3?<<3A (B (B 	C 	C 	C!#w}T##A#s(^V'L'LMMMjaaa1f+,,q0jjoo%d111ccc6lC88!#rzzAq6Aq6Aq62J'K'KLLL!#w}T!!!SSqS&\6'J'JKKKKKr2   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                                        t          j        |          t          j        |                              |j                                                  fD ]/}t          j	        |||          }||n|}t          ||           0d S )Nr   r3   r6   rJ   r   r   )rY   r<   r3  r   rM   r%  r&  r   r=   r^   r   )r@   rB   rC   rh   r4  ry   r'  r(  s           r/   5test_map_coordinates_endianness_with_output_parameterzHTestMapCoordinates.test_map_coordinates_endianness_with_output_parameter:  s     zAq6Aq6*++:1v1v.//j$$qJJ##%%M(##M(##**8>+F+F+H+HII	
 	8 	8C .tSEEEH$,SS(F%fh7777	8 	8r2   r*  r}   c                 B   |                     dgg          }t          j        |j                  }|                     |          }t	          j        ||d          }|j        t          j        d          u sJ t          ||                     dgg                     d S Nr   r-  r   )r<   rY   r3  r   r=   r^   rM   r   )r@   rB   rC   r4  ry   s        r/   'test_map_coordinates_with_string_outputz:TestMapCoordinates.test_map_coordinates_with_string_outputN  s    zzA3%  j$$jjoo%dC<<<yBHSMM))))!#rzzA3%'8'899999r2   win32r   z2do not run on 32 bit or windows (no sparse memory)c                 x   	 d}t          j        |dz  t           j                                      ||          }d||dz
  d |dz
  d f<   t	          j        |                    |          |                    |dz
  g|dz
  gg          d           d S # t          $ r}t          j	        d	          |d }~ww xY w)
Ni0u  r3   rL   r   r4   r$   r   rs   zNot enough memory available)
rY   emptyfloat32r  r=   r^   r<   MemoryErrorrW   skip)r@   rB   nr  es        r/   test_map_coordinates_large_dataz2TestMapCoordinates.test_map_coordinates_large_dataW  s    

	DAARZ00088A>>A !Aa!effa!effn#

1rzzAG9q3wi*@AA       	D 	D 	D+;<<!C	Ds   BB 
B9B44B9N)rj   rk   rl   rW   rm   rn   ro   rY   r[   r   r5  r9  r   r=  r?  rB  skipifsysplatformintpitemsizerK  r,   r2   r/   r0  r0    s       [WeeAqkk22[Wrz2=&ABB1 1 CB 321, [WeeAqkk22. . 32.$ k*FGGGL L HGL4 d###8 8 $#8& d+NOOO: : PO: [3</J7271::3F3J 4  5 5D D5 5D D Dr2   r0  c                   `   e Zd Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Z	ej                            d edd                    d             Z
ej                            d edd                    ej                            dd	d
g          d                         Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d              Z d! Z! e"d"d#$          d%             Z# e"d"d#$          d&             Z$ e"d"d'$          d(             Z% e"d"d)$          d*             Z&ej                            d+g d,          ej                            d edd                    d-                         Z'ej                            d edd                    d.             Z(d/S )0TestAffineTransformr:   r   rJ   c                     |                     dg          }t          j        ||                     dgg          |          }t          ||                     dg                     d S )Nr   rs   r<   r=   affine_transformr   r@   r:   rB   rC   ry   s        r/   test_affine_transform01z+TestAffineTransform.test_affine_transform01k  s\    zz1#&tRZZ!->->eLLL!#rzz1#77777r2   c                     |                     dg          }t          j        ||                    dgg          |          }t	          ||                    g d                     d S )Nr'   r   rs   r   rv   r=   rU  r<   r   rV  s        r/   test_affine_transform02z+TestAffineTransform.test_affine_transform02q  s`    wws||&tRZZ!->->eLLL!#rzz,,,'?'?@@@@@r2   c                     |                     dg          }t          j        ||                    dgg          d|          }t	          ||                    g d                     d S )Nr'   r   r(   rs   r   rY  rV  s        r/   test_affine_transform03z+TestAffineTransform.test_affine_transform03w  sb    wws||&tRZZ!->->%PPP!#rzz,,,'?'?@@@@@r2   c                     |                     g d          }t          j        ||                     dgg          d|          }t          ||                     g d                     d S )Nr   r   r(   rs   r   rT  rV  s        r/   test_affine_transform04z+TestAffineTransform.test_affine_transform04}  sf    zz,,,''&tRZZ!->->%PPP!#rzz,,,'?'?@@@@@r2   rM   r[   r   c                    t          ||          }|                    g dg dg dg|          }|                    g dg dg dg|          }t          |          j        } ||j        d          r|d|z  z  }|d|z  z  }t          j        ||                    ddgddgg          ddg|	          }t          ||           d S )
Nr   rL   r   r   r   r   r   r(   rs   )ru   r<   r
   r   rM   r=   rU  r   r@   r:   rM   rB   rC   rh   r   ry   s           r/   test_affine_transform05z+TestAffineTransform.test_affine_transform05  s    E""zz<<<'<<'<<)05  7 7 ::|||+||+||-49  ; ; "$''/74:122 	&BIDX%H&tRZZ!Q!Q8H-I-I()2we= = =!#x00000r2   c           	          |                     g dg dg dg          }t          j        ||                     ddgddgg          ddg|          }t          ||                     g dg d	g d
g                     d S )Nr   r   r   r   r   r(   rs   r   r   r   rT  rV  s        r/   test_affine_transform06z+TestAffineTransform.test_affine_transform06  s    zz<<<'<<'<<) * * &tRZZ!Q!Q8H-I-I()2we= = =!#rzz<<<3?<<3?<<3A (B (B 	C 	C 	C 	C 	Cr2   c           	          |                     g dg dg dg          }t          j        ||                     ddgddgg          ddg|          }t          ||                     g dg dg dg                     d S )	Nr   r   r   r   r   r(   rs   r   rT  rV  s        r/   test_affine_transform07z+TestAffineTransform.test_affine_transform07  s    zz<<<'<<'<<) * * &tRZZ!Q!Q8H-I-I(*Awe= = =!#rzz<<<3?<<3?<<3A (B (B 	C 	C 	C 	C 	Cr2   c           	          |                     g dg dg dg          }t          j        ||                     ddgddgg          ddg|          }t          ||                     g dg d	g d
g                     d S )Nr   r   r   r   r   r(   rs   r   r   r   rT  rV  s        r/   test_affine_transform08z+TestAffineTransform.test_affine_transform08  s    zz<<<'<<'<<) * * &tRZZ!Q!Q8H-I-I(*Bxu> > >!#rzz<<<3?<<3?<<3A (B (B 	C 	C 	C 	C 	Cr2   c           	      @   |                     g dg dg dg          }|dk    rt          j        ||          }n|}t          j        ||                     ddgddgg          ddg|d	          }t	          ||                     g d
g dg dg                     d S )Nr   r   r   r   rs   r   r(   Fr   r   r   r   )r<   r=   rw   rU  r   r@   r:   rB   rC   r   ry   s         r/   test_affine_transform09z+TestAffineTransform.test_affine_transform09  s    zz<<<'<<'<<) * * AII,T???HHH&xaVaV<L1M1M(*Bxu168 8 8 	"#rzz<<<3?<<3?<<3A (B (B 	C 	C 	C 	C 	Cr2   c                     |                     dg|j                  }t          j        ||                    dgg          d|          }t          ||                    g d                     d S )Nr3   rL   r+   rH   )r9   r:   r   r   r   r   )rv   r[   r=   rU  r<   r   rV  s        r/   test_affine_transform10z+TestAffineTransform.test_affine_transform10  sq    wws"*w--&tRZZ#-@-@t-24 4 4!#rzz,,,'?'?@@@@@r2   c                     |                     g d          }t          j        ||                     dgg          dd|          }t          ||                     g d                     d S )Nr   r3   r   rH   rs   rG   rT  rV  s        r/   test_affine_transform11z+TestAffineTransform.test_affine_transform11  sk    zz22233&tRZZ!->->4uUUU!#rzz,,,'?'?@@@@@r2   c                     |                     g d          }t          j        ||                     dgg          dd|          }t          |d d d         |                     g d                     d S )NrG   r+   r   r   rs   r3   rT  rV  s        r/   test_affine_transform12z+TestAffineTransform.test_affine_transform12  ss    zz,,,''&tRZZ#-@-@!TQVWWW!#ccc(BJJ|||,D,DEEEEEr2   c           	         g dg dg dg}|                     |          }t          j        ||                     ddgddgg          dd|          }t          ||                     dd	gd
dgddgg                     d S )NrG   r   r   r   r   r3   r   rs   r4   r   r6   r   r   rT  rV  s        r/   test_affine_transform13z+TestAffineTransform.test_affine_transform13  s    !!!# zz$&tRZZ!Q!Q8H-I-I1f-24 4 4!#rzzAq6Aq6Ar72K'L'LMMMMMr2   c                     g dg dg dg}|                     |          }t          j        ||                     ddgddgg          dd|          }t          ||                     g dg                     d S )	NrG   r   r   r3   r   r   r   rs   rT  rV  s        r/   test_affine_transform14z+TestAffineTransform.test_affine_transform14  s    ! zz$&tRZZ!Q!Q8H-I-I1f-24 4 4!#rzz<<<.'A'ABBBBBr2   c                     g dg dg dg}|                     |          }t          j        ||                     ddgddgg          dd|          }t          ||                     dd	gg                     d S )
NrG   r   r   r3   r   r   rs   r   r4   rT  rV  s        r/   test_affine_transform15z+TestAffineTransform.test_affine_transform15  s    ! zz$&tRZZ!Q!Q8H-I-I1f-24 4 4!#rzzAq6(';';<<<<<r2   c                     g dg dg dg}|                     |          }t          j        ||                     ddgddgg          dd|	          }t          |d
d d df         |           d S )NrG   r   r   r           r   r+   r   rs   .r3   rT  rV  s        r/   test_affine_transform16z+TestAffineTransform.test_affine_transform16  s    ! zz$&tRZZ!SAs88L-M-Mq'-U< < <!#c33Q3h-66666r2   c                     g dg dg dg}|                     |          }t          j        ||                     ddgddgg          dd|          }t          |d d d	d
f         |           d S )NrG   r   r   r+   r   r   r   rs   r3   .rT  rV  s        r/   test_affine_transform17z+TestAffineTransform.test_affine_transform17  s    ! zz$&tRZZ#qAq68J-K-KQ'-U< < <!#ccc3h-66666r2   c                     |                     g dg dg dg          }t          j        ||                     ddgddgg          dd|          }t          |d d dd d df         |           d S )	NrG   r   r   r+   r   r   rs   r3   rT  rV  s        r/   test_affine_transform18z+TestAffineTransform.test_affine_transform18  s    zz<<<'<<*??, - - &tRZZ#qAs88L-M-Mq'-U< < <!#ccc33Q3h-66666r2   c                 8   |                     g dg dg dg|j                  }t          j        ||                     ddgddgg          dd|          }t          j        ||                     d	dgdd	gg          dd
|          }t	          ||           d S )NrG   r   r   rL   r+   r   r   rs          @r   )r<   r[   r=   rU  r   rV  s        r/   test_affine_transform19z+TestAffineTransform.test_affine_transform19  s    zz<<<'<<*??,35:  ? ? &tRZZ#qAs88L-M-Mq'-U< < <&sBJJa1c(7K,L,La'-U< < <!#t,,,,,r2   c                 6   t          |          rt          j        d           g dg dg dg}|                    |          }t	          j        ||                    dgdgg          dd|          }t          ||                    d	d
g                     d S )N(https://github.com/cupy/cupy/issues/8394rG   r   r   r   r3   r   rs   r   r4   r   rW   rX   r<   r=   rU  r   rV  s        r/   test_affine_transform20z+TestAffineTransform.test_affine_transform20      2;; 	ELCDDD! zz$&tRZZ!qc
-C-CQ-24 4 4!#rzz1a&'9'9:::::r2   c                 6   t          |          rt          j        d           g dg dg dg}|                    |          }t	          j        ||                    dgdgg          dd|          }t          ||                    d	d
g                     d S )Nr  rG   r   r   r3   r   r   rs   r   r   r  rV  s        r/   test_affine_transform21z+TestAffineTransform.test_affine_transform21,  r  r2   c                     |                     g d          }t          j        ||                     dgg          dgd|          }t          ||                     g d                     d S )Nr   r3   r(   )r4   rs   r   r   r3   rT  rV  s        r/   test_affine_transform22z+TestAffineTransform.test_affine_transform229  ss     zz,,,''&tRZZ!->->d-24 4 4!#rzz)))'<'<=====r2   c                     |                     g d          }t          j        ||                     dgg          dgd|          }t          |d d d         |                     g d                     d S )Nr   r+   r(   rq  rs   r3   r   rT  rV  s        r/   test_affine_transform23z+TestAffineTransform.test_affine_transform23A  s}     zz,,,''&tRZZ#-@-@2$-24 4 4!#ccc(BJJ|||,D,DEEEEEr2   c                    |                     g d          }t                      5 }|                    t          d           t	          j        ||                     dg          d|          }d d d            n# 1 swxY w Y   t	          j        ||                     dgg          d|          }t          ||           d S )Nr   @The behavior of affine_transform with a 1-D array .* has changedr3   r(   rs   r<   r   filterUserWarningr=   rU  r   r@   r:   rB   rC   supr7  r8  s          r/   test_affine_transform24z+TestAffineTransform.test_affine_transform24I  s    zz,,,''   	TCJJ{%& & & +D"**aS//2USSSD		T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T
 'bjj1#.?.?5QQQ!$-----   AA::A>A>c                    |                     g d          }t                      5 }|                    t          d           t	          j        ||                     dg          d|          }d d d            n# 1 swxY w Y   t	          j        ||                     dgg          d|          }t          ||           d S )Nr   r  r+   r(   rs   r  r  s          r/   test_affine_transform25z+TestAffineTransform.test_affine_transform25U  s    zz,,,''   	VCJJ{%& & & +D"**cU2C2CRuUUUD		V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V
 'bjj3%.A.A2USSS!$-----r  c           
         |                     g dg dg dg          }|dk    rt          j        ||          }n|}|                    d          }|                    d           }t          ||          j        } |||fd          } |||                     g d	g          fd
          }	d |                    |d          D             }
t          j        |||
|d          }t          j        |||d          }t          j        ||	|d          }|||fD ].}t          ||                     g dg dg dg                     /d S )Nr   r   r   r   rs   r3   r3   r   axis)rz  r   r   r   c                 ,    g | ]}t          |          S r,   )r  ).0r.   s     r/   
<listcomp>z?TestAffineTransform.test_affine_transform26.<locals>.<listcomp>r  s    EEEQaEEEr2   )r(   Fr   r   r   r   )
r<   r=   rw   eyerv   r
   concatr  rU  r   )r@   r:   rB   rC   r   tform_originaloffset_originalr  tform_h1tform_h2offsr7  r8  out3ry   s                  r/   test_affine_transform26z+TestAffineTransform.test_affine_transform26a  s    zz<<<'<<'<<) * * AII,T???HHH776??* AAH6>?;!DDD6Hbjj+++&?&?@qIIIEE"**_e"D"DEEE'.(,.3uF F F '(%279 9 9'(%279 9 9$% 	G 	GC%c2::|||7C||7C||7E ,F ,F G G G G	G 	Gr2   c                    t          |          rt          j        d           |                    g dg dg dg          }t	          |          j        } ||                    d          |                    d           fd          } |||                    g d	g          fd
          }t          t          t          j        ||           d S )NzCuPy does not raiser   r   r   r3   r  r   r  )      @r3   r   r   )r   rW   rX   r<   r
   r  r  rv   assert_raises
ValueErrorr=   rU  )r@   rB   rC   r  r  r  s         r/   test_affine_transform27z+TestAffineTransform.test_affine_transform27  s    2;; 	0L./// zz<<<'<<'<<) * * !&&-6BFF1II'78BBB68RZZ%>%>?aHHHj'":D(KKKKKr2   Tzbyteorder is numpy-specificr}   c           	      V   |                     d          }|                    |          |                    |                              |j                                                  |j        |j                                        fD ]}t                      5 }|                    t          d           |                    ddg          }t          j
        |||          }d d d            n# 1 swxY w Y   ||n|}t          ||                    ddgddgg                     d S )N)r3   r3   r  r   r   )rv   r&  r   rM   r%  r   r  r  r<   r=   rU  r   )r@   rB   rC   ry   r  matrixr'  r(  s           r/   9test_affine_transform_1d_endianness_with_output_parameterzMTestAffineTransform.test_affine_transform_1d_endianness_with_output_parameter  sx    wwvMM$''MM$''..tz/F/F/H/HIIJ
 7 7 9 9; 
	L 
	LC #$$ N

;,- - - QF++"3D&MMMN N N N N N N N N N N N N N N %,SS(F%fbjj1a&1a&9I.J.JKKKK
	L 
	Ls   A
C..C2	5C2	c                    t          j        dg          }|j        |j                                        t          j        |          t          j        |                              |j                                                  fD ]V}t          j        |t          j        dgg          |          }||n|}t          |t          j        dg                     Wd S )Nr   r   )	rY   r<   rM   r%  r&  r   r=   rU  r   )r@   rB   rC   ry   r'  r(  s         r/   >test_affine_transform_multi_d_endianness_with_output_parameterzRTestAffineTransform.test_affine_transform_multi_d_endianness_with_output_parameter  s    
 z1#J
 7 7 9 9M$''M$''..tz/F/F/H/HIIK 	? 	?C /bj1#6G6GPSTTTH$,SS(F%fbj!oo>>>>	? 	?r2   z+`out` of a different size is numpy-specificc                    |                     d|j                  }|                    d          }t          j        ||                    dgg          |           t          |d d         |           t          j        t                    5  t          j        |dgg|d           d d d            d S # 1 swxY w Y   d S )Nr   rL   )   r   r   )r   )r   r9   )
rZ   r[   rv   r=   rU  r<   r   rW   r   RuntimeErrorr@   rB   rC   ry   s       r/   "test_affine_transform_output_shapez6TestAffineTransform.test_affine_transform_output_shape  s   
 yy"*y--ggenn rzzA3%'8'8EEEE!#bqb'4000 ]<(( 	= 	=$seCe= = = =	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   B77B;>B;r*  c                    |                     dg          }t          j        ||                     dgg          d          }|j        t	          j        d          u sJ t          ||                     dg                     d S rA  )r<   r=   rU  rM   rY   r   r  s       r/   (test_affine_transform_with_string_outputz<TestAffineTransform.test_affine_transform_with_string_output  sw    zz1#&tRZZ!->->sKKKyBHSMM))))!#rzz1#77777r2   r0   )r   r   r   r   )r(   r   )r4   )r3   r6   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          }|                    |          }|                    |          }|                    |          }t          t          j        ||d|	          |           d S )
Nr   r   r3   r4   r3   r4   r  r  r   r  )rY   r<   zerosr  rollr   r=   rU  )r@   r0   r:   rB   r.   affinerh   s          r/   )test_affine_transform_shift_via_grid_wrapz=TestAffineTransform.test_affine_transform_shift_via_grid_wrap  s    
 JAA  ! !&!!rr2A2vz%((qqq!t71e&111JJqMMF##::h''!$Q[NNN	
 	
 	
 	
 	
r2   c                    t          j        g dg dg          }|d d dd d df                                         }|                    |          }|                    |          }t          j        ddg          }t          j        d          |d dd df<   t          j        |j                  |d d df<   |                    |          }t          t          j        ||d|          |           d S )Nr  r4   r'   r   r(   r3   r4   r   r  )	rY   r<   copyr  r  r   r   r=   rU  )r@   r:   rB   r.   rh   r  s         r/   #test_affine_transform_shift_reflectz7TestAffineTransform.test_affine_transform_shift_reflect  s     J			!		# $ $TTrT44R4Z=%%''JJqMM::h''1a&!!rr2A2vz!'**qqq!tF##!$QYeLLL	
 	
 	
 	
 	
r2   N))rj   rk   rl   rW   rm   rn   ro   rW  rZ  r\  r^  ra  rc  re  rg  rj  rm  ro  rr  rt  rv  rx  r{  r}  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r,   r2   r/   rR  rR  i  s       [WeeAqkk228 8 328
 [WeeAqkk22A A 32A
 [WeeAqkk22A A 32A
 [WeeAqkk22A A 32A
 [WeeAqkk22[Wy,&?@@1 1 A@ 321  [WeeAqkk22C C 32C [WeeAqkk22C C 32C [WeeAqkk22C C 32C [WeeAqkk22C C 32C [WeeAqkk22A A 32A [WeeAqkk22A A 32A
 [WeeAqkk22F F 32F
 [WeeAqkk22N N 32N [WeeAqkk22C C 32C [WeeAqkk22= = 32= [WeeAqkk227 7 327 [WeeAqkk227 7 327 [WeeAqkk227 7 327 [WeeAqkk22- - 32- [WeeAqkk22
; 
; 32
; [WeeAqkk22
; 
; 32
; [WeeAqkk22> > 32> [WeeAqkk22F F 32F [WeeAqkk22	. 	. 32	. [WeeAqkk22	. 	. 32	. [WeeAqkk22G G 32G<L L L d+HIIIL L JIL  d+HIII
? 
? JI
? d<  = = = d+NOOO8 8 PO8 [WGGGI I[WeeAqkk22
 
 32I I
& [WeeAqkk22
 
 32
 
 
r2   rR  c                   `   e Zd Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Z	ej                            d edd                    d             Z
ej                            d edd                    ej                            dd	d
g          d                         Zej                            d edd                    ej                            dddg          ej                            dd	d
g          d                                     Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            dg d          ej                            d edd                    d                         Zej                            dg d          ej                            d edd                    d                         Zd Zej                            d edd                    d             Zej                            d edd                    ej                            dddg          d                         Zej                            dg d          ej                            d ed                    d                         Zd S )!	TestShiftr:   r   rJ   c                     |                     dg          }t          j        |dg|          }t          ||                     dg                     d S )Nr   rs   r   r<   r=   r0   r   rV  s        r/   test_shift01zTestShift.test_shift01  sM    zz1#mD1#U333!#rzz1#77777r2   c                     |                     dg          }t          j        |dg|          }t          ||                    g d                     d S )Nr'   r   rs   r   rv   r=   r0   r   r<   rV  s        r/   test_shift02zTestShift.test_shift02  sQ    wws||mD1#U333!#rzz,,,'?'?@@@@@r2   c                     |                     dg          }t          j        |d|          }t          ||                    g d                     d S )Nr'   r(   rs   rl  r  rV  s        r/   test_shift03zTestShift.test_shift03  sO    wws||mD"E222!#rzz,,,'?'?@@@@@r2   c                     |                     g d          }t          j        |d|          }t          ||                     g d                     d S )Nr   r   rs   r   r  rV  s        r/   test_shift04zTestShift.test_shift04  sS    zz,,,''mD!5111!#rzz,,,'?'?@@@@@r2   rM   r[   r   c                 b   t          ||          }|                    g dg dg dg|          }|                    g dg dg dg|          }t          |          j        } ||j        d          r|d|z  z  }|d|z  z  }t          j        |ddg|          }t          ||           d S )	Nr   rL   r   r   r   r   r   rs   )ru   r<   r
   r   rM   r=   r0   r   r`  s           r/   test_shift05zTestShift.test_shift05  s     E""zz<<<'<<'<<)05  7 7 ::|||+||+||-49  ; ; "$''/74:122 	&BIDX%HmD1a&666!#x00000r2   r8   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<   |                    |          }|                    |          }t          j        |ddg|||	          }	t          |	|           d S )
Nr   rL   r   r   r   r  r   r   )r:   r8   r7   )rY   r<   r
   r   rM   r=   r0   r   )
r@   r:   r8   rM   rB   rC   rh   r   r7   ry   s
             r/   test_shift_with_nonzero_cvalz&TestShift.test_shift_with_nonzero_cval  s    z<<<'<<'<<)057 7 7 :|||+||+||-49; ; ; "$''/74:122 	&BIDX%HAzz$::h''mD1a&DtLLL!#x00000r2   c           	          |                     g dg dg dg          }t          j        |ddg|          }t          ||                     g dg dg d	g                     d S )
Nr   r   r   r   r   rs   r   r   r   r  rV  s        r/   test_shift06zTestShift.test_shift060      zz<<<'<<'<<) * * mD1a&666!#rzz<<<3?<<3?<<3A (B (B 	C 	C 	C 	C 	Cr2   c           	          |                     g dg dg dg          }t          j        |ddg|          }t          ||                     g dg dg dg                     d S )Nr   r   r   r   r   rs   r   r  rV  s        r/   test_shift07zTestShift.test_shift07:  r  r2   c           	          |                     g dg dg dg          }t          j        |ddg|          }t          ||                     g dg dg dg                     d S )	Nr   r   r   r   rs   r   r   r   r  rV  s        r/   test_shift08zTestShift.test_shift08D  r  r2   c           	         |                     g dg dg dg          }|dk    rt          j        ||          }n|}t          j        |ddg|d          }t	          ||                     g dg d	g d
g                     d S )Nr   r   r   r   rs   Fr   r   r   r   )r<   r=   rw   r0   r   ri  s         r/   test_shift09zTestShift.test_shift09N  s    zz<<<'<<'<<) * * AII,T???HHHmHq!fEUKKK!#rzz<<<3?<<3?<<3A (B (B 	C 	C 	C 	C 	Cr2   r0   r  c                    t          j        ddgddgg          }t          j        ||d          }|                    |          }|                    |          }t          t	          j        ||d|          |           d S )	Nr   r   r3   r4   r  r  r   r  )rY   r<   r  r   r=   r0   )r@   r0   r:   rB   r.   rh   s         r/   test_shift_grid_wrapzTestShift.test_shift_grid_wrap\  s    
 JAA  ! !71e%000JJqMM::h''!M!UEBBB	
 	
 	
 	
 	
r2   c           	          |                     |                    d          d          }t          t          j        ||d|          t          j        ||d|                     d S )N   )r   r'   r   r  r   )r  rZ   r   r=   r0   )r@   r0   r:   rB   r.   s        r/   test_shift_grid_constant1z#TestShift.test_shift_grid_constant1m  si    
 JJryy}}f--!M!UFFFM!U5AAA	
 	
 	
 	
 	
r2   c                     |                     g dg dg|j                  }|                     g dg dg          }t          t          j        |ddd	          |           d S )
Nr
  r  rL   r  r  )r+   r+   r   r   r  )r<   r[   r   r=   r0   )r@   rB   r.   r  s       r/   test_shift_grid_constant_order1z)TestShift.test_shift_grid_constant_order1x  s    JJ			!		#*,*  6 6**&8&8&8&8&8&8&: ; ;!M!ZoQGGG	
 	
 	
 	
 	
r2   c                 (   t          j        g dg dg          }|d d dd d df                                         }|                    |          }|                    |          }t          t	          j        ||j        d|          |           d S )Nr  r  r(   r   r  )rY   r<   r  r   r=   r0   r   )r@   r:   rB   r.   rh   s        r/   test_shift_reflectzTestShift.test_shift_reflect  s     J			!		# $ $TTrT44R4Z=%%''JJqMM::h''!M!QW9EBBB	
 	
 	
 	
 	
r2   r   FTc                 "   |                     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                    d S )Nr  r   )r8   r:   r   r3   r   r   r(   )rZ   dictr   r=   r0   )r@   r:   r   rB   r.   kwargss         r/   test_shift_nearest_boundaryz%TestShift.test_shift_nearest_boundary  s    
 IIbMM9EYGGG!M!UaZ!^66v66q91Q4	
 	
 	
 	"M!eVq[1_7777;QrU	
 	
 	
 	
 	
r2   r  c                    t          j        dt                                        dd          }d}d}t                              |          }|                    t          j        |||                    }|                    |          }	t          t          ||           g|	j
        z            }
t          j        ||||          |
         }t          t          j        |	|||          |d	           d S )
Nr  rL   r   )r  gffffffrQ   rR   r  rS   r  )rY   rZ   r  r  r_   r`   r<   ra   r  r  r  r=   r0   r   )r@   r:   r8   rB   x_npr0   rd   re   r   r.   r!  r  s               r/   test_shift_vs_paddedzTestShift.test_shift_vs_padded  s    yE***222r:: (,,T22::bfT4h???@@JJteD4%001AF:;;!-e$e5 5 55AC 	M!UU;;;	
 	
 	
 	
 	
 	
r2   N)rj   rk   rl   rW   rm   rn   ro   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r,   r2   r/   r  r    s       [WeeAqkk228 8 328
 [WeeAqkk22A A 32A
 [WeeAqkk22A A 32A
 [WeeAqkk22A A 32A
 [WeeAqkk22[Wy,&?@@1 1 A@ 321 [WeeAqkk22[Vj/%BCC[Wy,&?@@1 1 A@ DC 321* [WeeAqkk22C C 32C [WeeAqkk22C C 32C [WeeAqkk22C C 32C [WeeAqkk22C C 32C [WGGGI I[WeeAqkk22
 
 32I I
 [WGGGI I[WeeAqkk22
 
 32I I

 
 
 [WeeAqkk22
 
 32
 [WeeAqkk22[[5$-88

 

 98 32

 [V &; &; &; < <[WeeAhh//
 
 0/< <
 
 
r2   r  c                   6   e Zd Zej                            d edd                    d             Zd Zd Z	ej                            d edd                    ej                            ddd	g          d
                         Z
d Zd Zd Zej                            dg d          ej                            dg d          d                         Zej                            dddg          ej                            dg d          ej                            dg d          d                                     Zej                            dddg          ej        j        d                         Z edd          d             Zd Zd S )!TestZoomr:   r   rJ   c                 N   dddgfD ]}|                     |                    d|j                  d          }t          j        |||          }|j        dk    sJ |                    |dd d f         dk              sJ |                    |dd d f         d	t          z
  k              sJ |                    |dd d f         d
t          z   k              sJ |                    |dt          z
  k              sJ |                    |dt          z   k              sJ d S )Nr3      rL   )r   r   rs   )r   r   r(   r   r  r   r  )r  rZ   r[   r=   zoomr   alleps)r@   r:   rB   zarrs        r/   
test_zoom1zTestZoom.test_zoom1  s8   aV 	- 	-A**RYYrY<<fEEC,sAU333C9((((66#b!!!e*/*****66#b!!!e*c23333366#ad)C01111166#!c'*+++++66#"s(+,,,,,,	- 	-r2   c                     |                     |                    d          d          }t          j        t          j        |d          d          }t	          ||           d S )Nr   r   r3   r+   )r  rZ   r=   r  r   )r@   rB   r  ry   s       r/   
test_zoom2zTestZoom.test_zoom2  sR    jj2//l7<Q//55S!!!!!r2   c                 (   |                     ddgg          }t          j        |d          }t          j        |d          }t          ||                     ddgddgg                     t          ||                     g dg                     d S )Nr   r3   r  r   )r   r   r3   r3   )r<   r=   r  r   )r@   rB   r  r7  r8  s        r/   
test_zoom3zTestZoom.test_zoom3  s    jj1a&""|C((|C((!$

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

LLL>(B(BCCCCCr2   rM   r[   r   c                    t          ||          }|                    g dg dg dg|          }t          |          j        } ||j        d          r|d|z  z  }t                      5 }|                    t          d           t          j	        ||                    ddg          d	d
|          }d d d            n# 1 swxY w Y   t          |d d dd d df         |           d S )NrG   r   r   rL   r   r   r  r+   r   r   rs   r3   )ru   r<   r
   r   rM   r   r  r  r=   rU  r   )r@   r:   rM   rB   rC   r   r  ry   s           r/   test_zoom_affine01zTestZoom.test_zoom_affine01  sl    E""zz<<<'<<*??,38  : : "$''/74:122 	BID   	@CJJ{%& & & *4S#J1G1G+1@ @ @C		@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	"#ccc33Q3h-66666s   ,A
CC	Cc                 h    d}t          j        |                    ||f          d|z  d           d S )Nr         ?r   rR   )r=   r  r  )r@   rB   dims      r/   test_zoom_infinityzTestZoom.test_zoom_infinity  s8    RXXsCj))28)DDDDDDr2   c                     |                     d          }d}t          j        ||d          }|                     d          }t          ||           d S )N)r   r   r   )r  r  r  r6   )r7   )r   r   r   )r  r=   r  r   )r@   rB   r  r  ry   refs         r/   test_zoom_zoomfactor_onez!TestZoom.test_zoom_zoomfactor_one  sU    hhy!!l31---hh{##!#s+++++r2   c                 x    |                     d          }d}t          j        ||          }|j        dk    sJ d S )N)r4   r   r  )gUUUUUU?gE]t?g(\?)r'   rN      )r  r=   r  r   )r@   rB   r  r  ry   s        r/   test_zoom_output_shape_roundoffz(TestZoom.test_zoom_output_shape_roundoff  sB    hh{##.l3%%yK''''''r2   r  )r<  )r4   r   )r   r3   )r   r   r8   )r   r   r   r   r   r   r   r   c                 @   t          j        ddgddggt           j                  }t          j        |t          j        |                    }|                    |          }|                    |          }t          t          j        ||d|          |           d S )Nr   r   r3   r4   rL   rP   )rY   r<   r[   kronrv   r   r=   r  )r@   r  r8   rB   r  rh   r.   s          r/   test_zoom_by_int_order0z TestZoom.test_zoom_by_int_order0  s     zAq6q6#*,*6 6 674//JJt::h''!LD555	
 	
 	
 	
 	
r2   r   r  )r'   r'   )r   r   r   r   r   c                 n   t          j        t          j        |          t                                        |          }|                    |          }t          t          j        ||d|d          |                    t          j	        |t          j
        |                                         d S )NrL   r   T)r:   r8   	grid_mode)rY   rZ   prodr  r  r<   r   r=   r  r  rv   )r@   r   r  r8   rB   r  r.   s          r/   test_zoom_grid_by_int_order0z%TestZoom.test_zoom_grid_by_int_order0  s     yu555==eDDJJt!LDEEEJJrwtRWT]]3344	
 	
 	
 	
 	
r2   r   r   c                     |                     |                    d|j                  d          }t          j        t
          d          5  t          j        |d|d          f d d d            d S # 1 swxY w Y   d S )	Nr   rL   )r4   r4   zIt is recommended to use mode)matchr3   T)r8   r  )r  rZ   r[   rW   warnsr  r=   r  )r@   r8   rB   r.   s       r/   test_zoom_grid_mode_warningsz%TestZoom.test_zoom_grid_mode_warnings  s     JJryy"*y55v>>\+ ?A A A 	; 	;LADD999::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s   A33A7:A7Tz!inplace output= is numpy-specificr}   c                     |                     |                    d          d          }t          j        |d|                    d                     dS )zTicket #643r   r   r3   r   r   N)r  rZ   r=   r  r  )r@   rB   r.   s      r/   test_zoom_output_shapezTestZoom.test_zoom_output_shape%  sJ     JJryy}}f--Q"((6"2"2333333r2   c                     |                     d          }d}t          j        |t          j        |                    }t          j        ||          }t          ||           d S )Ng      $@r3   )rZ   r=   r  rY   arrayr   )r@   rB   r  factoractualrh   s         r/   test_zoom_0d_arrayzTestZoom.test_zoom_0d_array+  sX    IIcNNa&!1!122<6**)))))r2   N)rj   rk   rl   rW   rm   rn   ro   r  r  r  r   r  r  r
  r  r  thread_unsafer  r   r  r  r,   r2   r/   r  r    sk       [WeeAqkk22	- 	- 32	-" " "
D D D [WeeAqkk22[Wy,&?@@7 7 A@ 327 E E E
, , ,( ( ( [V%E%E%EFF[V &7 &7 &7 8 8
 
8 8 GF
" [Wvv&677[V%E%E%EFF[V &D &D &D E E

 

E E GF 87

 [Vj&%9::[; ;  ;:; d+NOOO4 4 PO4
* * * * *r2   r  c                   F   e Zd Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    ej                            dddg          d	                         Z	ej                            d edd                    d
             Z
ej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zej                            d edd                    d             Zd Zd Zd ZdS )
TestRotater:   r   rJ   c                     |                     g dg dg dg|j                  }t          j        |d|          }t	          ||           d S )Nr   r   r   r   r   rL   r   rs   r<   r[   r=   rotater   rV  s        r/   test_rotate01zTestRotate.test_rotate016  sf    zz<<<'<<'<<)02
  < < nT1E222!#t,,,,,r2   c                     |                     g dg dg dg|j                  }|                     g dg dg dg dg|j                  }t          j        |d|          }t	          ||           d S )Nr   )r   r   r   r   rL   r   r   r   r   r   r   Z   rs   r"  r@   r:   rB   rC   rh   ry   s         r/   test_rotate02zTestRotate.test_rotate02>  s    zz<<<'<<'<<)02
  < < ::yyy(yy(yy(yy* 24  = = nT2U333!#x00000r2   rM   r[   r   c                 j   t          ||          }|                    g dg dg dg|          }|                    g dg dg dg dg dg|          }t          |          j        } ||j        d          r|d|z  z  }|d|z  z  }t          j        |d|	          }t          ||           d S )
Nr   r   r   r   r   r   r   r   r   r   rL   r&  r'  r   r   r(  rs   )ru   r<   r
   r   rM   r=   r#  r   r`  s           r/   test_rotate03zTestRotate.test_rotate03J  s     E""zz???*??*??,38  : : ::yyy(yy(yy(yy(yy	* 27	  8 8
 "$''/74:122 	&BIDX%HnT2U333!#x00000r2   c                     |                     g dg dg dg|j                  }|                     g dg dg dg|j                  }t          j        |dd|          }t	          ||           d S )Nr,  r-  rL   r   r   r   r   r   r(  F)r  r:   r"  r)  s         r/   test_rotate04zTestRotate.test_rotate04]  s    zz???*??*??,35:  ? ? ::..079z  C C nT2uEBBB!#x00000r2   c                    t          j        d          }t          d          D ]8}t          j        g dg dg dg dgt           j                  |d d d d |f<   9|                    |          }|                    g dg dg dg|j                  }t          j        |d|	          }t          d          D ]}t          |d d d d |f         |            d S )
N)r'   r4   r4   r4   r&  r'  rL   r   r!  r(  rs   rY   rE  ro   r<   r[   r=   r#  r   r@   r:   rB   rC   irh   ry   s          r/   test_rotate05zTestRotate.test_rotate05h  s#   x	""q 	F 	FAJ			(1		(1		(1		(3 ;=*F F FDAAAqMM zz$::|||+||+||-46J  @ @ nT2U333q 	> 	>A%c!!!QQQ'lH====	> 	>r2   c                    t          j        d          }t          d          D ]5}t          j        g dg dg dgt           j                  |d d d d |f<   6|                    |          }|                    g dg dg dg dg|j                  }t          j        |d|	          }t          d          D ]}t          |d d d d |f         |            d S )
N)r4   r'   r4   r4   r   r!  rL   r&  r'  r(  rs   r3  r4  s          r/   test_rotate06zTestRotate.test_rotate06x  s!   x	""q 	I 	IAJ(4(4(6=?ZI I IDAAAqMM zz$::yyy(yy(yy(yy* 24  = = nT2U333q 	> 	>A%c!!!QQQ'lH====	> 	>r2   c                 ^   |                     g dg dg dggdz  |j                  }t          |          j        } ||d          }|                     g dg dg dg dg dggdz  |j                  } ||d          }t	          j        |dd	|
          }t          ||           d S )Nr,  r-  r3   rL   r3   r   r   r&  r'  r(  r  )axesr:   r<   r[   r
   permute_dimsr=   r#  r   r@   r:   rB   rC   r=  rh   ry   s          r/   test_rotate07zTestRotate.test_rotate07  s   zzOOO+OO+OO- .0129;  E E 't,,9|D),,::			 )		 )		 )		 )			 + , /0	0 8:z	  C C
  <)44nT2F%@@@!#x00000r2   c                 |   |                     g dg dg dggdz  |j                  }t          |          j        } ||d          }|                     g dg dg dggdz  |j                  }t          |          j        } ||d          }t	          j        |ddd	|
          }t          ||           d S )Nr,  r-  r3   rL   r:  r0  r(  r  F)r;  r  r:   r<  r>  s          r/   test_rotate08zTestRotate.test_rotate08  s   zzOOO+OO+OO- .0129;  E E 't,,9|D),,:: / / 1 2456=?Z  I I 't,,9<)44nT2FEOOO!#x00000r2   c                     |                     g dg dg dgdz  |j                  }t          t                    5  t	          j        |dd|j        f           d d d            d S # 1 swxY w Y   d S )Nr,  r-  r3   rL   r(  r   )r;  )r<   r[   r  r  r=   r#  r  )r@   rB   rC   s      r/   test_rotate09zTestRotate.test_rotate09  s    zz???*??*??,./079z  C C :&& 	: 	:N41di.9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   A))A-0A-c           
      R   |                     |                    d|j                  d          }|                    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           d S )N-   rL   )r4   r   r4   )rz  rz  rz  )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>rT   )r  rZ   r[   r<   r=   r#  r   )r@   rB   rC   rh   ry   s        r/   test_rotate10zTestRotate.test_rotate10  s   zz"))Bbj)999EE :: / D D D G G G /	 1
 !E D D D D D 2 2 2 D D D G G G	 I
 !0 G G G G G G / /	 12 :<  E E  nTU;;;XDt<<<<<<r2   c                    t          |          rt          j        d           t          j        |                    d          d          }t          j        t          j        |d          d          }t          ||           d S )Nz(https://github.com/cupy/cupy/issues/8400r   )r   r      iL)	r   rW   rX   rY   tilerZ   r=   r#  r   )r@   rB   r  r  s       r/   test_rotate_exact_180z TestRotate.test_rotate_exact_180  sp    2;; 	ELCDDDGBIIaLL&))N7>!S114881r2   N)rj   rk   rl   rW   rm   rn   ro   r$  r*  r.  r1  r6  r8  r?  rA  rC  rG  rK  r,   r2   r/   r  r  4  s"       [WeeAqkk22- - 32- [WeeAqkk22	1 	1 32	1 [WeeAqkk22[Wy,&?@@1 1 A@ 321" [WeeAqkk221 1 321 [WeeAqkk22> > 32> [WeeAqkk22> > 32> [WeeAqkk221 1 321 [WeeAqkk221 1 321: : := = =0    r2   r  )'rM  numpyrY   numpy.testingr   scipy._lib._array_apir   r   r   r   r   r	   r
   rW   r   r  scipy.ndimager=    r   scipy.conftestr   rm   r   usefixtures
pytestmarkr  r_   r    rn   ro   rq   r   r  r0  rR  r  r  r  r,   r2   r/   <module>rT     s   



     + + + + + +          M L L L L L L L L L L L  * * * * * *             / / / / / /;/ "FK$;$;<N$O$O&+9NPPPR
    F; F; F; F; F; F; F; F;R %%1++..%((#1 #1 #1 #1 #1 #1 #1 )( /.#1L &!IJJJ%%1++..K/ K/ K/ K/ K/ K/ K/ /. KJK/\ &!IJJJJ, J, J, J, J, J, J, KJJ,ZtD tD tD tD tD tD tD tDnA
 A
 A
 A
 A
 A
 A
 A
HF
 F
 F
 F
 F
 F
 F
 F
R{* {* {* {* {* {* {* {*|X X X X X X X X X Xr2   