
    -iij                        d dl Z d dlZd dlZd dlmZ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dZdddd	d
ddZ G d d          Z eej                  ej                            d edd                    ej                            de           G d d                                              Z eej                  ej                            d ed d                     G d d                                  Z eej                   G d d                      Z eej                    G d d                      Z! eej"                   G d d                      Z# eej$                   G d d                      Z% eej&                   G d d                       Z' eej(                   G d! d"                      Z)dS )#    N)_asarrayassert_array_almost_equalis_jax	np_compatxp_assert_equalxp_assert_closemake_xp_test_case)raises   )types-q=reflect	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                   N   e Zd Z eej                  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ej                  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ej                  ej                            dg d          ej                            d ed                    d                                     ZdS )TestBoundariesz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    l/var/www/html/bet.cuttalo.com/ml/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selfr.   expected_valuexpr&   datas         r%   test_boundarieszTestBoundaries.test_boundaries%   sx    	! 	! 	! zz---(('e"459D D DJJ~&&	( 	( 	( 	( 	(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 S )Nc                     | d         dz
  fS )Nr   g?r"   r#   s    r%   r&   z.TestBoundaries.test_boundaries2.<locals>.shiftF   r'   r(   r   r)   r*   r   r   r   )r-   r.   r/   r1   r5   s         r%   test_boundaries2zTestBoundaries.test_boundaries2:   ss    	! 	! 	! zz,,,'''e"459; ; ;JJ~&&	( 	( 	( 	( 	(r(   r.   )r   r   r   r   r   r   r0      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	        |||j
        df         ||          }d}t                              |          }	|                    t          j        |||	                    }
|                    ||z             |j
        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 > 1ir,   dtypei   i  )num.r0   r.       r.   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r2   linspacer3   map_coordinatesnewaxisndimage_to_numpy_modegetpadr   )r6   r.   r0   r8   np_datar9   r$   ynpadpad_modepaddedcoordsexpectedrL   s                 r%   test_boundary_spline_accuracyz,TestBoundaries.test_boundary_spline_accuracyO   sN    2JJ 	JMMM		LHIII)B444zz'""JJr{2rt44455#D!BJO*<EPTUUU (,,T22BF7Dx@@@AAD1H%%bj#o6*66TRRR..ttE8$T::::::r(   N)__name__
__module____qualname__r	   r3   r4   rM   markparametrizer:   r?   rS   ranger_   r"   r(   r%   r   r   #   s       w233[
000	1
555	6
:::	;
777	8
666	7
555	6
;;;	<	>	 	( (	 	 43( w233[
\\\	"
,,,	
|||	$
LLL	!
\\\	"
mmm	$
===	)	+	 	( (	 	 43( w.//[V &1 &1 &1 2 2 [WeeAhh//; ; 0/2 2 0/
; ; ;r(   r   r0   r)   r@   rC   c                   V    e Zd Zd Zd Z eddgd          d             Zd Zd	 Zd
S )
TestSplinec                     t          ||          }|                    g |          }t          j        ||          }||                    d|j                  k    sJ d S )NrB   r0   r   getattronesr3   spline_filterr2   rC   r6   rC   r0   r8   r9   outs         r%   test_spline01zTestSpline.test_spline01q   sd    E""wwrw''#D666bjj#)j44444444r(   c                     t          ||          }|                    dg|          }t          j        ||          }t	          ||                    dg                     d S )Nr   rB   ri   )rk   r2   r3   rm   r   rn   s         r%   test_spline02zTestSpline.test_spline02w   s_    E""zz1#Uz++#D666!#rzz1#77777r(   Tcupyzoutput=dtype is numpy-specific)np_only
exceptionsreasonc                     t          ||          }|                    g |          }t          j        |||          }||                    d|j                  k    sJ d S )NrB   outputr   rj   rn   s         r%   test_spline03zTestSpline.test_spline03}   sh     E""wwrw''#D%>>>bjj#)j44444444r(   c                     t          ||          }|                    dg|          }t          j        ||          }t	          ||                    g d                     d S )Nr   rB   r   r   r   r   )rk   rl   r3   rm   r   r2   rn   s         r%   test_spline04zTestSpline.test_spline04   s`    E""wws%w((#D%00!#rzz,,,'?'?@@@@@r(   c                     t          ||          }|                    ddg|          }t          j        ||          }|                    g dg dg dg dg          }t          ||           d S )Nr   rB   ri   r|   )rk   rl   r3   rm   r2   r   )r6   rC   r0   r8   r9   ro   r^   s          r%   test_spline05zTestSpline.test_spline05   s    E""ww1vUw++#D666::|||+||+||+||- . . 	"#x00000r(   N)	r`   ra   rb   rp   rr   skip_xp_backendsrz   r}   r   r"   r(   r%   rg   rg   l   s        
5 5 58 8 8 dx=? ? ?5 5? ?5A A A1 1 1 1 1r(   rg   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       Hr(   ri   rB   r2   r3   r4   shaper   rC   r6   r0   r8   r9   r   ro   s         r%   test_geometric_transform01z1TestGeometricTransform.test_geometric_transform01   sp    zz1#	 	 	 )$057 7 7!#rzz1#SYz'G'GHHHHHr(   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   r(   ri   r|   rB   rl   r3   r4   r   r   r2   rC   r   s         r%   test_geometric_transform02z1TestGeometricTransform.test_geometric_transform02   sr    wws||	 	 	 )$057 7 7!#rzz,,,ciz'P'PQQQQQr(   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;r(   ri   r   r   r   r   rB   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Qr(   c                     |                     g d          }d }t          j        |||j        |          }t	          ||                     g d|j                             d S )Nr   r   r*   r)   c                     | d         dz
  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform04.<locals>.mapping   r   r(   ri   r   r   r   r*   rB   r   r   s         r%   test_geometric_transform04z1TestGeometricTransform.test_geometric_transform04   sv    zz,,,''	 	 	 )$057 7 7!#rzz,,,ciz'P'PQQQQQr(   rC   rQ   
complex128c                 \   t          ||          }|                    g dg dg dg|          }|                    g dg dg dg|          }|                    |j        d          r|d|z  z  }|d|z  z  }d }t	          j        |||j        |          }t          ||           d S )Nr|   rB   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(   ri   )rk   r2   isdtyperC   r3   r4   r   r   )r6   r0   rC   r8   r9   r^   r   ro   s           r%   test_geometric_transform05z1TestGeometricTransform.test_geometric_transform05   s    E""zz<<<'<<'<<)05  7 7 ::|||+||+||-49  ; ; ::dj"455 	&BIDX%H	$ 	$ 	$ )$057 7 7!#x00000r(   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@         r*   r   r*   r@   c                 (    | d         | d         dz
  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform06.<locals>.mapping   r   r(   ri   r   r   r,   r@   r   r   r*   r   r*   rB   r2   r3   r4   r   rC   r   r6   r0   r8   r9   r   ro   r^   s          r%   test_geometric_transform06z1TestGeometricTransform.test_geometric_transform06       zz<<<'<<'<<) * *	$ 	$ 	$ )$057 7 7::|||+||+||-47I  ? ? 	"#x00000r(   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##r(   ri   r   r   r   r   rB   r   r   s          r%   test_geometric_transform07z1TestGeometricTransform.test_geometric_transform07   r   r(   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''r(   ri   r   r   r   rB   r   r   s          r%   test_geometric_transform08z1TestGeometricTransform.test_geometric_transform08   s    zz<<<'<<'<<) * *	( 	( 	( )$057 7 7::|||+||+||-47I  ? ? 	"#x00000r(   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   r(   r   ri   Fr0   	prefilterr   r   r   rB   )r2   r3   rm   r4   r   rC   r   )r6   r0   r8   r9   r   filteredro   r^   s           r%   test_geometric_transform10z1TestGeometricTransform.test_geometric_transform10  s    zz<<<'<<'<<) * *	( 	( 	( AII,T???HHH)(GTZ05H H H::|||+||+||-47I  ? ? 	"#x00000r(   c                     |                     dg|j                  }d }t          j        ||dg|          }t	          ||                    g d|j                             d S )Nr)   rB   c                     | d         dz  fS Nr   r)   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform13.<locals>.mapping  s    aDAI<r(   r   ri   r|   )rl   rQ   r3   r4   r   r2   rC   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Qr(   c                     |                     g d          }d }t          j        ||dg|          }t          ||                     g d|j                             d S )Nr   r   r)   r@   r*   r,   r   r   c                     d| d         z  fS )Nr)   r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform14.<locals>.mapping#  s    !H;r(   r   ri   r=   rB   )r2   r3   r4   r   rC   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Qr(   c                     |                     g d          }d }t          j        ||dg|          }t          |d d d         |                     g d                     d S )Nr=   c                     | d         dz  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform15.<locals>.mapping,  r   r(   r   ri   r)   r2   r3   r4   r   r   s         r%   test_geometric_transform15z1TestGeometricTransform.test_geometric_transform15)  ss    zz,,,''	 	 	 )$!EJJJ!#ccc(BJJ|||,D,DEEEEEr(   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 )Nr=   r   r@   r,   r   g      "@
         c                 (    | d         | d         dz  fS Nr   r   r)   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform16.<locals>.mapping8  r   r(   r*   r)   ri   r   r*   r   r,   	   r   r   r   s         r%   test_geometric_transform16z1TestGeometricTransform.test_geometric_transform162  s    !!!# zz$	$ 	$ 	$ )$057 7 7!#rzzAq6Aq6Ar72K'L'LMMMMMr(   c                     g dg dg dg}|                     |          }d }t          j        ||d|          }t          ||                     g dg                     d S )Nr=   r   r   r   r   r   c                 (    | d         dz  | d         fS Nr   r)   r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform17.<locals>.mappingE  r   r(   r   r   ri   r   r   s         r%   test_geometric_transform17z1TestGeometricTransform.test_geometric_transform17?  s    ! zz$	$ 	$ 	$ )$057 7 7!#rzz<<<.'A'ABBBBBr(   c                     g dg dg dg}|                     |          }d }t          j        ||d|          }t          ||                     ddgg                     d S )	Nr=   r   r   c                 .    | d         dz  | d         dz  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform18.<locals>.mappingR  r   r(   r   r)   ri   r   r*   r   r   s         r%   test_geometric_transform18z1TestGeometricTransform.test_geometric_transform18L  s    ! zz$	( 	( 	( )$057 7 7!#rzzAq6(';';<<<<<r(   c                     g dg dg dg}|                     |          }d }t          j        ||d|          }t          |dd d df         |           d S )	Nr=   r   r   c                 (    | d         | d         dz  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform19.<locals>.mapping_  r   r(   r*   r   ri   .r)   r   r   s         r%   test_geometric_transform19z1TestGeometricTransform.test_geometric_transform19Y  s    ! zz$	$ 	$ 	$ )$057 7 7!#c33Q3h-66666r(   c                     g dg dg dg}|                     |          }d }t          j        ||d|          }t          |d d ddf         |           d S )	Nr=   r   r   c                 (    | d         dz  | d         fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform20.<locals>.mappingl  r   r(   r@   r   ri   r)   .r   r   s         r%   test_geometric_transform20z1TestGeometricTransform.test_geometric_transform20f  s    ! zz$	$ 	$ 	$ )$057 7 7!#ccc3h-66666r(   c                     g dg dg dg}|                     |          }d }t          j        ||d|          }t          |d d dd d df         |           d S )Nr=   r   r   c                 .    | d         dz  | d         dz  fS r   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform21.<locals>.mappingy  r   r(   r@   r   ri   r)   r   r   s         r%   test_geometric_transform21z1TestGeometricTransform.test_geometric_transform21s  s    ! zz$	( 	( 	( )$057 7 7!#ccc33Q3h-66666r(   c                     g dg dg dg}|                     ||j                  }d }d }t          j        ||d|          }t          j        ||d	|          }t	          ||           d S )
Nr=   r   r   rB   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   ri   r*   r   )r2   rQ   r3   r4   r   )r6   r0   r8   r9   r   r   ro   s          r%   test_geometric_transform22z1TestGeometricTransform.test_geometric_transform22  s    ! zz$bjz11	( 	( 	(	( 	( 	( )$*0? ? ?)#x*0? ? ?!#t,,,,,r(   c                     g dg dg dg}|                     |          }d }t          j        ||d|          }t          ||                     ddg                     d S )	Nr=   r   r   c                     d| d         dz  fS )Nr   r   r)   r"   r#   s    r%   r   zBTestGeometricTransform.test_geometric_transform23.<locals>.mapping      qtax= r(   r)   ri   r   r,   r   r   s         r%   test_geometric_transform23z1TestGeometricTransform.test_geometric_transform23  s    ! zz$	! 	! 	! )$UKKK!#rzz1a&'9'9:::::r(   c           	          g dg dg dg}|                     |          }d }t          j        ||d|dddi	          }t          ||                     d
dg                     d S )Nr=   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   r)   )r0   extra_argumentsextra_keywordsr   r,   r   r   s         r%   test_geometric_transform24z1TestGeometricTransform.test_geometric_transform24  s    ! zz$	! 	! 	! )'4ud8% % % 	"#rzz1a&'9'9:::::r(   N)r`   ra   rb   r   r   r   r   rM   rc   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r(   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F F FN N NC C C= = =7 7 77 7 77 7 7- - -$
; 
; 
;; ; ; ; ;r(   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   r)   r*   r   r   r@   rB   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      @r+   r   r   r.   r0   )r2   rQ   r   r3   r4   )r6   r8   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	
 	
 	
 	
 	
r(   r.   r   r   r   r   r   r0   r@   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  r(      rB   r      rH   r  rI   rK   )rO   rP   floatreshaperU   rV   rW   r2   tupleslicendimr3   r4   r   )r6   r0   r.   r8   r   r$   rZ   r[   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		
 	
 	
 	
 	
 	
r(   Tzendianness is numpy-specificrt   rv   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   r(   rx   )
rO   r2   rC   newbyteorder
empty_likeastyper3   r4   r   r   )r6   r8   r9   r   ro   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 	3r(   !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   r(   frx   )r2   r3   r4   rC   rO   r   )r6   r8   r9   r   ro   s        r%   +test_geometric_transform_with_string_outputzGTestGeometricTransformExtra.test_geometric_transform_with_string_output  sn    zz1#	 	 	 )$DDDyBHSMM))))!#s+++++r(   N)r`   ra   rb   r
  rM   rc   rd   re   r  r   r"  r'  r"   r(   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, , ,r(   r   c                   n   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                            dej        v p ej        d          j        dk     d	          d                         ZdS )TestMapCoordinatesr0   r   r@   rC   c                    t          |          r|dk    rt          j        d           |                    g dg dg dg          }|                    g dg dg dg          }|                    |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   ri   )r   rM   rN   r2   r   rC   rO   indicesr   r3   rS   r   )r6   r0   rC   r8   r9   r^   idxro   s           r%   test_map_coordinates01z)TestMapCoordinates.test_map_coordinates01  s    ":: 	D%!))LBCCCzz<<<'<<'<<) * * ::|||+||+||- . . ::dj"455 	0"t)#D"x-/Hj$$qjjoo%dCu===!#x00000r(   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   r+  zoutput differs. jax bug?r   r   r   r!   ri   )r   rM   rN   r2   rO   r,  r   rQ   r3   r&   rS   r   )r6   r0   r8   r9   r-  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>>>!$-----r(   	jax.numpyz`order` is required in jaxrv   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)r0   r8   r   r   r   r   r   r   r)   .r   r   r,   )	r   rO   r,  r   r2   r3   rS   r   r&   )r6   r8   r9   r-  ro   r^   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Kr(   T)rt   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   r)   r,   r@   r   rx   )rO   r2   r,  r   rC   r  r  r  r3   rS   r   )r6   r8   r9   r^   r-  ro   r   r!  s           r%   5test_map_coordinates_endianness_with_output_parameterzHTestMapCoordinates.test_map_coordinates_endianness_with_output_parameterC  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 	8r(   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&  rx   )r2   rO   r,  r   r3   rS   rC   r   )r6   r8   r9   r-  ro   s        r%   'test_map_coordinates_with_string_outputz:TestMapCoordinates.test_map_coordinates_with_string_outputW  s    zzA3%  j$$jjoo%dC<<<yBHSMM))))!#rzzA3%'8'899999r(   )cpu_only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  r)   rB   r   r*   r   r   ri   zNot enough memory available)
rO   emptyfloat32r  r3   rS   r2   MemoryErrorrM   skip)r6   r8   nr   es        r%   test_map_coordinates_large_dataz2TestMapCoordinates.test_map_coordinates_large_data`  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)r`   ra   rb   rM   rc   rd   re   rO   rQ   r   r.  r2  r   r8  r:  r=  skipifsysplatformintpitemsizerG  r"   r(   r%   r)  r)    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: [!!4!00[3</J7271::3F3J 4  5 5D D5 5 10D D Dr(   r)  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dd          ej                            d edd                    d                         Z edd          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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                            d/g d0          ej                            d edd                    d1                         Z(ej                            d edd                    d2             Z)d3S )4TestAffineTransformr0   r   r@   c                     |                     dg          }t          j        ||                     dgg          |          }t          ||                     dg                     d S )Nr   ri   r2   r3   affine_transformr   r6   r0   r8   r9   ro   s        r%   test_affine_transform01z+TestAffineTransform.test_affine_transform01v  s\    zz1#&tRZZ!->->eLLL!#rzz1#77777r(   c                     |                     dg          }t          j        ||                    dgg          |          }t	          ||                    g d                     d S )Nr   r   ri   r|   rl   r3   rQ  r2   r   rR  s        r%   test_affine_transform02z+TestAffineTransform.test_affine_transform02|  s`    wws||&tRZZ!->->eLLL!#rzz,,,'?'?@@@@@r(   c                     |                     dg          }t          j        ||                    dgg          d|          }t	          ||                    g d                     d S )Nr   r   r   ri   r   rU  rR  s        r%   test_affine_transform03z+TestAffineTransform.test_affine_transform03  sb    wws||&tRZZ!->->%PPP!#rzz,,,'?'?@@@@@r(   c                     |                     g d          }t          j        ||                     dgg          d|          }t          ||                     g d                     d S )Nr   r   r   ri   r   rP  rR  s        r%   test_affine_transform04z+TestAffineTransform.test_affine_transform04  sf    zz,,,''&tRZZ!->->%PPP!#rzz,,,'?'?@@@@@r(   rC   rQ   r   c                    t          ||          }|                    g dg dg dg|          }|                    g dg dg dg|          }|                    |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|   rB   r   r   r   r   r   r   ri   )rk   r2   r   rC   r3   rQ  r   r6   r0   rC   r8   r9   r^   ro   s          r%   test_affine_transform05z+TestAffineTransform.test_affine_transform05  s    E""zz<<<'<<'<<)05  7 7 ::|||+||+||-49  ; ; ::dj"455 	&BIDX%H&tRZZ!Q!Q8H-I-I()2we= = =!#x00000r(   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   ri   r   r   r   rP  rR  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r(   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   ri   r   rP  rR  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r(   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   ri   r   r   r   rP  rR  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r(   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   ri   r   r   Fr   r   r   r   )r2   r3   rm   rQ  r   r6   r0   r8   r9   r   ro   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r(   c                     |                     dg|j                  }t          j        ||                    dgg          d|          }t          ||                    g d                     d S )Nr)   rB   r!   r>   )r/   r0   r   r   r   r   )rl   rQ   r3   rQ  r2   r   rR  s        r%   test_affine_transform10z+TestAffineTransform.test_affine_transform10  sq    wws"*w--&tRZZ#-@-@t-24 4 4!#rzz,,,'?'?@@@@@r(   c                     |                     g d          }t          j        ||                     dgg          dd|          }t          ||                     g d                     d S )Nr   r)   r   r>   ri   r=   rP  rR  s        r%   test_affine_transform11z+TestAffineTransform.test_affine_transform11  sk    zz22233&tRZZ!->->4uUUU!#rzz,,,'?'?@@@@@r(   c                     |                     g d          }t          j        ||                     dgg          dd|          }t          |d d d         |                     g d                     d S )Nr=   r!   r   r   ri   r)   rP  rR  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Er(   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 )Nr=   r   r   r   r   r)   r   ri   r*   r   r,   r   r   rP  rR  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Mr(   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 )	Nr=   r   r   r)   r   r   r   ri   rP  rR  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Br(   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 )
Nr=   r   r   r)   r   r   ri   r   r*   rP  rR  s        r%   test_affine_transform15z+TestAffineTransform.test_affine_transform15  s    ! zz$&tRZZ!Q!Q8H-I-I1f-24 4 4!#rzzAq6(';';<<<<<r(   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 )Nr=   r   r   r           r   r!   r   ri   .r)   rP  rR  s        r%   test_affine_transform16z+TestAffineTransform.test_affine_transform16  s    ! zz$&tRZZ!SAs88L-M-Mq'-U< < <!#c33Q3h-66666r(   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 )Nr=   r   r   r!   r   r   r   ri   r)   .rP  rR  s        r%   test_affine_transform17z+TestAffineTransform.test_affine_transform17  s    ! zz$&tRZZ#qAq68J-K-KQ'-U< < <!#ccc3h-66666r(   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 )	Nr=   r   r   r!   r   r   ri   r)   rP  rR  s        r%   test_affine_transform18z+TestAffineTransform.test_affine_transform18  s    zz<<<'<<*??, - - &tRZZ#qAs88L-M-Mq'-U< < <!#ccc33Q3h-66666r(   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 )Nr=   r   r   rB   r!   r   r   ri          @r   )r2   rQ   r3   rQ  r   rR  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,,,,,r(   rs   z(https://github.com/cupy/cupy/issues/8394r4  c                     g dg dg dg}|                     |          }t          j        ||                     dgdgg          dd|          }t          ||                     dd	g                     d S )
Nr=   r   r   r   r)   r   ri   r   r*   rP  rR  s        r%   test_affine_transform20z+TestAffineTransform.test_affine_transform20)       ! zz$&tRZZ!qc
-C-CQ-24 4 4!#rzz1a&'9'9:::::r(   c                     g dg dg dg}|                     |          }t          j        ||                     dgdgg          dd|          }t          ||                     dd	g                     d S )
Nr=   r   r   r)   r   r   ri   r   r   rP  rR  s        r%   test_affine_transform21z+TestAffineTransform.test_affine_transform214  r  r(   c                     |                     g d          }t          j        ||                     dgg          dgd|          }t          ||                     g d                     d S )Nr   r)   r   )r*   ri   r   r   r)   rP  rR  s        r%   test_affine_transform22z+TestAffineTransform.test_affine_transform22?  ss     zz,,,''&tRZZ!->->d-24 4 4!#rzz)))'<'<=====r(   c                     |                     g d          }t          j        ||                     dgg          dgd|          }t          |d d d         |                     g d                     d S )Nr   r!   r   rm  ri   r)   r   rP  rR  s        r%   test_affine_transform23z+TestAffineTransform.test_affine_transform23G  s}     zz,,,''&tRZZ#-@-@2$-24 4 4!#ccc(BJJ|||,D,DEEEEEr(   c                    |                     g d          }t          j                    5  t          j        ddt                     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   ignore@The behavior of affine_transform with a 1-D array .* has changedr)   r   ri   r2   warningscatch_warningsfilterwarningsUserWarningr3   rQ  r   r6   r0   r8   r9   r0  r1  s         r%   test_affine_transform24z+TestAffineTransform.test_affine_transform24O  s    zz,,,''$&& 	T 	T#R   +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??BBc                    |                     g d          }t          j                    5  t          j        ddt                     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!   r   ri   r  r  s         r%   test_affine_transform25z+TestAffineTransform.test_affine_transform25\  s    zz,,,''$&& 	V 	V#H%&13 3 3 +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           }|                    ||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   ri   r)   r)   r   axis)rv  r   r   r   c                 ,    g | ]}t          |          S r"   )r  ).0r$   s     r%   
<listcomp>z?TestAffineTransform.test_affine_transform26.<locals>.<listcomp>x  s    EEEQaEEEr(   )r   Fr   r   r   r   )	r2   r3   rm   eyerl   concatr  rQ  r   )r6   r0   r8   r9   r   tform_originaloffset_originaltform_h1tform_h2offsr0  r1  out3ro   s                 r%   test_affine_transform26z+TestAffineTransform.test_affine_transform26h  s    zz<<<'<<'<<) * * AII,T???HHH776??*99no>Q9GG99h

KKK=(A(AB9KK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r(   zdoes not raisec                 b   |                     g dg dg dg          }|                    |                    d          |                    d           fd          }|                    ||                     g dg          fd	          }t	          t
          t          j        ||           d S )
Nr   r   r   r)   r  r   r  )      @r)   r   r   )r2   r  r  rl   assert_raises
ValueErrorr3   rQ  )r6   r8   r9   r  r  s        r%   test_affine_transform27z+TestAffineTransform.test_affine_transform27  s     zz<<<'<<'<<) * * 99bffQii"''&//)9:!9DD99h

KKK=(A(AB9KKj'":D(KKKKKr(   Tzbyteorder is numpy-specificr  c           	      `   |                     d          }|                    |          |                    |                              |j                                                  |j        |j                                        fD ]}t          j                    5  t          j        ddt                     |	                    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)r)   r)   r  r  r   rx   )rl   r  r  rC   r  r  r  r  r  r2   r3   rQ  r   )r6   r8   r9   ro   matrixr   r!  s          r%   9test_affine_transform_1d_endianness_with_output_parameterzMTestAffineTransform.test_affine_transform_1d_endianness_with_output_parameter  s    wwvMM$''MM$''..tz/F/F/H/HIIJ
 7 7 9 9; 
	L 
	LC (** N N',-8: : : 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
C33C7	:C7	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   rx   )	rO   r2   rC   r  r  r  r3   rQ  r   )r6   r8   r9   ro   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>>>>	? 	?r(   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   rB   )   r   rx   )r   )ry   r/   )
rP   rQ   rl   r3   rQ  r2   r   rM   r
   RuntimeErrorr6   r8   r9   ro   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 r<  )r2   r3   rQ  rC   rO   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7r(   r&   )r   r   r   r   )r   r   )r*   )r)   r,   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   r)   r*   r)   r*   r  r  r   r  )rO   r2   zerosr  rollr   r3   rQ  )r6   r&   r0   r8   r$   affiner^   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	
 	
 	
 	
 	
r(   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  r*   r   r   r   r)   r*   r   r  )	rO   r2   copyr  r  r   r   r3   rQ  )r6   r0   r8   r$   r^   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	
 	
 	
 	
 	
r(   N)*r`   ra   rb   rM   rc   rd   re   rS  rV  rX  rZ  r]  r_  ra  rc  rf  ri  rk  rn  rp  rr  rt  rw  ry  r{  r~  xfail_xp_backendsr  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r"   r(   r%   rN  rN  s  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- v&PQQQ[WeeAqkk22; ; 32 RQ; v&PQQQ[WeeAqkk22; ; 32 RQ; [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: v&6777L L 87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
 
 
r(   rN  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 )!	TestShiftr0   r   r@   c                     |                     dg          }t          j        |dg|          }t          ||                     dg                     d S )Nr   ri   r   r2   r3   r&   r   rR  s        r%   test_shift01zTestShift.test_shift01  sM    zz1#mD1#U333!#rzz1#77777r(   c                     |                     dg          }t          j        |dg|          }t          ||                    g d                     d S )Nr   r   ri   r   rl   r3   r&   r   r2   rR  s        r%   test_shift02zTestShift.test_shift02  sQ    wws||mD1#U333!#rzz,,,'?'?@@@@@r(   c                     |                     dg          }t          j        |d|          }t          ||                    g d                     d S )Nr   r   ri   rh  r  rR  s        r%   test_shift03zTestShift.test_shift03  sO    wws||mD"E222!#rzz,,,'?'?@@@@@r(   c                     |                     g d          }t          j        |d|          }t          ||                     g d                     d S )Nr   r   ri   r   r  rR  s        r%   test_shift04zTestShift.test_shift04  sS    zz,,,''mD!5111!#rzz,,,'?'?@@@@@r(   rC   rQ   r   c                 N   t          ||          }|                    g dg dg dg|          }|                    g dg dg dg|          }|                    |j        d          r|d|z  z  }|d|z  z  }t	          j        |ddg|          }t          ||           d S )	Nr|   rB   r   r   r   r   r   ri   )rk   r2   r   rC   r3   r&   r   r\  s          r%   test_shift05zTestShift.test_shift05  s     E""zz<<<'<<'<<)05  7 7 ::|||+||+||-49  ; ; ::dj"455 	&BIDX%HmD1a&666!#x00000r(   r.   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|   rB   r   r   r   r  r   r   )r0   r.   r-   )rO   r2   r   r   rC   r3   r&   r   )	r6   r0   r.   rC   r8   r9   r^   r-   ro   s	            r%   test_shift_with_nonzero_cvalz&TestShift.test_shift_with_nonzero_cval  s    z<<<'<<'<<)057 7 7 :|||+||+||-49; ; ; TZ);<< 	&BIDX%HAzz$::h''mD1a&DtLLL!#x00000r(   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   ri   r   r   r   r  rR  s        r%   test_shift06zTestShift.test_shift062      zz<<<'<<'<<) * * mD1a&666!#rzz<<<3?<<3?<<3A (B (B 	C 	C 	C 	C 	Cr(   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   ri   r   r  rR  s        r%   test_shift07zTestShift.test_shift07<  r  r(   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   ri   r   r   r   r  rR  s        r%   test_shift08zTestShift.test_shift08F  r  r(   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   ri   Fr   r   r   r   )r2   r3   rm   r&   r   re  s         r%   test_shift09zTestShift.test_shift09P  s    zz<<<'<<'<<) * * AII,T???HHHmHq!fEUKKK!#rzz<<<3?<<3?<<3A (B (B 	C 	C 	C 	C 	Cr(   r&   r  c                    t          j        ddgddgg          }t          j        ||d          }|                    |          }|                    |          }t          t	          j        ||d|          |           d S )	Nr   r   r)   r*   r  r  r   r  )rO   r2   r  r   r3   r&   )r6   r&   r0   r8   r$   r^   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	
 	
 	
 	
 	
r(   c           	          |                     |                    d          d          }t          t          j        ||d|          t          j        ||d|                     d S )N   )r   r   r   r  r   )r  rP   r   r3   r&   )r6   r&   r0   r8   r$   s        r%   test_shift_grid_constant1z#TestShift.test_shift_grid_constant1o  si    
 JJryy}}f--!M!UFFFM!U5AAA	
 	
 	
 	
 	
r(   c                     |                     g dg dg|j                  }|                     g dg dg          }t          t          j        |ddd	          |           d S )
Nr  r  rB   r  r  )r!   r!   r   r   r  )r2   rQ   r   r3   r&   )r6   r8   r$   r	  s       r%   test_shift_grid_constant_order1z)TestShift.test_shift_grid_constant_order1z  s    JJ			!		#*,*  6 6**&8&8&8&8&8&8&: ; ;!M!ZoQGGG	
 	
 	
 	
 	
r(   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  )rO   r2   r  r   r3   r&   r   )r6   r0   r8   r$   r^   s        r%   test_shift_reflectzTestShift.test_shift_reflect  s     J			!		# $ $TTrT44R4Z=%%''JJqMM::h''!M!QW9EBBB	
 	
 	
 	
 	
r(   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   )r.   r0   r   r)   r   r   r   )rP   dictr   r3   r&   )r6   r0   r   r8   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	
 	
 	
 	
 	
r(   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  rB   r   )r  gffffffrG   rH   r  rI   r  )rO   rP   r  r  rU   rV   r2   rW   r  r  r  r3   r&   r   )r6   r0   r.   r8   x_npr&   rZ   r[   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;;;	
 	
 	
 	
 	
 	
r(   N)r`   ra   rb   rM   rc   rd   re   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"   r(   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/< <
 
 
r(   r  c                      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          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d'S )(TestZoomr0   r   r@   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 )Nr)      rB   )r   r   ri   )r   r   r   r   r  r   r  )r  rP   rQ   r3   zoomr   alleps)r6   r0   r8   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(+,,,,,,	- 	-r(   c                     |                     |                    d          d          }t          j        t          j        |d          d          }t	          ||           d S )Nr   r   r)   r!   )r  rP   r3   r  r   )r6   r8   r  ro   s       r%   
test_zoom2zTestZoom.test_zoom2  sR    jj2//l7<Q//55S!!!!!r(   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   r)   r  r   )r   r   r)   r)   )r2   r3   r  r   )r6   r8   r  r0  r1  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Cr(   rC   rQ   r   c                    t          ||          }|                    g dg dg dg|          }|                    |j        d          r|d|z  z  }t	          j                    5  t	          j        ddt                     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 )Nr=   r   r   rB   r   r   r  r  r!   r   r   ri   r)   )rk   r2   r   rC   r  r  r  r  r3   rQ  r   )r6   r0   rC   r8   r9   ro   s         r%   test_zoom_affine01zTestZoom.test_zoom_affine01  sg    E""zz<<<'<<*??,38  : : ::dj"455 	BID$&& 	@ 	@#H%&13 3 3 *4S#J1G1G+1@ @ @C		@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	"#ccc33Q3h-66666s   'A
B==CCc                 h    d}t          j        |                    ||f          d|z  d           d S )Nr         ?r   rH   )r3   r  r  )r6   r8   dims      r%   test_zoom_infinityzTestZoom.test_zoom_infinity  s8    RXXsCj))28)DDDDDDr(   c                     |                     d          }d}t          j        ||d          }|                     d          }t          ||           d S )N)r   r   r   )r  r}  r}  r,   )r-   )r   r   r   )r  r3   r  r   )r6   r8   r  r  ro   refs         r%   test_zoom_zoomfactor_onez!TestZoom.test_zoom_zoomfactor_one  sU    hhy!!l31---hh{##!#s+++++r(   c                 x    |                     d          }d}t          j        ||          }|j        dk    sJ d S )N)r*   r   r  )gUUUUUU?gE]t?g(\?)r   rD      )r  r3   r  r   )r6   r8   r  r  ro   s        r%   test_zoom_output_shape_roundoffz(TestZoom.test_zoom_output_shape_roundoff  sB    hh{##.l3%%yK''''''r(   r  )r7  )r*   r   )r   r)   )r   r   r.   )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   r)   r*   rB   rF   )rO   r2   rQ   kronrl   r   r3   r  )r6   r  r.   r8   r  r^   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	
 	
 	
 	
 	
r(   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 )NrB   r   T)r0   r.   	grid_mode)rO   rP   prodr  r  r2   r   r3   r  r	  rl   )r6   r   r  r.   r8   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	
 	
 	
 	
 	
r(   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   rB   )r*   r*   zIt is recommended to use mode)matchr)   T)r.   r  )r  rP   rQ   rM   warnsr  r3   r  )r6   r.   r8   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z
dask.arrayz!output=array requires buffer viewr4  r3  c                     |                     |                    d          d          }t          j        |d|                    d                     dS )zTicket #643r   r   r)   r   rx   N)r  rP   r3   r  r  r6   r8   r$   s      r%   test_zoom_output_shapezTestZoom.test_zoom_output_shape&  sJ     JJryy}}f--Q"((6"2"2333333r(   c                     |                     d          }d}t          j        |t          j        |                    }t          j        ||          }t          ||           d S )Ng      $@r)   )rP   r3   r  rO   arrayr   )r6   r8   r   factoractualr^   s         r%   test_zoom_0d_arrayzTestZoom.test_zoom_0d_array-  sX    IIcNNa&!1!122<6**)))))r(   rs   zCuPy `zoom` needs similar fix.c                     |                     d          }t          t          j        |d          |           t          t          j        |d          |           d S )Nr*   r   r7  )r  r   r3   r  r  s      r%   test_zoom_1_gh20999zTestZoom.test_zoom_1_gh209995  sQ     FF1IIQ**A...Q//33333r(   zread-only backendznumpy round-tripc                     |                     d          }|                    |          }t          j        |d|           t	          ||           d S )Nr*   r   rx   )r  
zeros_liker3   r  r   )r6   r8   r$   ry   s       r%   test_zoom_1_gh20999_outputz#TestZoom.test_zoom_1_gh20999_output=  sQ     FF1IIq!!Q&))))"""""r(   N)r`   ra   rb   rM   rc   rd   re   r  r  r  r  r  r  r  r
  r  r  r   r  r  r  r  r  r"   r(   r%   r  r    s        [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::; ; ;:; l+NOOOk*MNNN4 4 ON PO4
* * * v&FGGG4 4 HG4 v&FGGGk*=>>>|,>???# # @? ?> HG# # #r(   r  c                   l   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 edd          d             ZdS )
TestRotater0   r   r@   c                     |                     g dg dg dg|j                  }t          j        |d|          }t	          ||           d S )Nr   r   r   r   r   rB   r   ri   r2   rQ   r3   rotater   rR  s        r%   test_rotate01zTestRotate.test_rotate01J  sf    zz<<<'<<'<<)02
  < < nT1E222!#t,,,,,r(   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   rB   r   r   r   r   r   r   Z   ri   r$  r6   r0   r8   r9   r^   ro   s         r%   test_rotate02zTestRotate.test_rotate02R  s    zz<<<'<<'<<)02
  < < ::yyy(yy(yy(yy* 24  = = nT2U333!#x00000r(   rC   rQ   r   c                 V   t          ||          }|                    g dg dg dg|          }|                    g dg dg dg dg dg|          }|                    |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   rB   r(  r)  r   r   r*  ri   )rk   r2   r   rC   r3   r%  r   r\  s          r%   test_rotate03zTestRotate.test_rotate03^  s     E""zz???*??*??,38  : : ::yyy(yy(yy(yy(yy	* 27	  8 8
 ::dj"455 	&BIDX%HnT2U333!#x00000r(   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/  rB   r   r   r   r   r   r*  F)r  r0   r$  r+  s         r%   test_rotate04zTestRotate.test_rotate04p  s    zz???*??*??,35:  ? ? ::..079z  C C nT2uEBBB!#x00000r(   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   r*   r*   r*   r(  r)  rB   r   r#  r*  ri   rO   rA  re   r2   rQ   r3   r%  r   r6   r0   r8   r9   ir^   ro   s          r%   test_rotate05zTestRotate.test_rotate05{  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====	> 	>r(   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)r*   r   r*   r*   r   r#  rB   r(  r)  r*  ri   r5  r6  s          r%   test_rotate06zTestRotate.test_rotate06  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====	> 	>r(   c                 ^   |                     g dg dg dggdz  |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/  r)   rB   r)   r   r   r(  r)  r*  r  )axesr0   r2   rQ   permute_dimsr3   r%  r   r+  s         r%   test_rotate07zTestRotate.test_rotate07  s    zzOOO+OO+OO- .0129;  E E tY//::			 )		 )		 )		 )			 + , /0	0 8:z	  C C
 ??8Y77nT2F%@@@!#x00000r(   c                 T   |                     g dg dg dggdz  |j                  }|                    |d          }|                     g dg dg dggdz  |j                  }|                    |d          }t          j        |ddd	|
          }t          ||           d S )Nr.  r/  r)   rB   r<  r2  r*  r  F)r=  r  r0   r>  r+  s         r%   test_rotate08zTestRotate.test_rotate08  s    zzOOO+OO+OO- .0129;  E E tY//:: / / 1 2456=?Z  I I ??8Y77nT2FEOOO!#x00000r(   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/  r)   rB   r*  r   )r=  )r2   rQ   r  r  r3   r%  r  )r6   r8   r9   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-   rB   )r*   r   r*   )rv  rv  rv  )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>rJ   )r  rP   rQ   r2   r3   r%  r   )r6   r8   r9   r^   ro   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<<<<<<r(   rs   z(https://github.com/cupy/cupy/issues/8400r4  c                     |                     t          j        t          j        d          d                    }t	          j        t	          j        |d          d          }t          ||           d S )Nr   )r   r      iL)r2   rO   tilerP   r3   r%  r   )r6   r8   r   r   s       r%   test_rotate_exact_180z TestRotate.test_rotate_exact_180  sZ    JJrwry||V4455N7>!S114881r(   N)r`   ra   rb   rM   rc   rd   re   r&  r,  r0  r3  r8  r:  r@  rB  rD  rH  r  rL  r"   r(   r%   r!  r!  G  sC        [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: : := = =2 v&PQQQ  RQ  r(   r!  )*rI  r  numpyrO   scipy._lib._array_apir   r   r   r   r   r   r	   rM   r
   r  scipy.ndimager3    r   rc   r   r  r  rU   r   rm   rd   re   rg   r4   r   r   rS   r)  rQ  rN  r&   r  r  r  r%  r!  r"   r(   r%   <module>rQ     s    



                        * * * * * *            ;/ K1     F; F; F; F; F; F; F; F;R 7())%%1++..%(($1 $1 $1 $1 $1 $1 $1 )( /. *)$1N 7.//%%1++..R; R; R; R; R; R; R; /. 0/R;j 7.//J, J, J, J, J, J, J, 0/J,Z 7*++tD tD tD tD tD tD tD ,+tDn 7+,,y
 y
 y
 y
 y
 y
 y
 -,y
x 7=!!D
 D
 D
 D
 D
 D
 D
 "!D
N 7<  K# K# K# K# K# K# K# ! K#\ 7>""S S S S S S S #"S S Sr(   