
    Yh                        d dl Z d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlZd dlmZ d dlmZ ddlmZ ej        j        Zej        j        Z eddd	g
          gZdZdddddddZ G d d          Zej                            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)_asarrayassert_array_almost_equalis_jax	np_compatxp_assert_equalxp_assert_close)raises   )typesTcupy	jax.numpy)cpu_only
exceptions-q=reflect	symmetricwrapedgeconstant)mirrorr   grid-mirror	grid-wrapnearestgrid-constantc                      e Zd Z edd          ej                            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    x/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/ndimage/tests/test_interpolation.pyshiftz-TestBoundaries.test_boundaries.<locals>.shift0       aD3J=     )r               @r%   )   r   )cvalmodeoutput_shapeorderasarrayr   ndimagegeometric_transformselfr5   expected_valuexpr-   datas         r,   test_boundarieszTestBoundaries.test_boundaries$   sx    	! 	! 	! zz---(('e"459D D DJJ~&&	( 	( 	( 	( 	(r/   )r   r   r0   r1   )r1   r   r0   r1   )r$   r   r0   r1   )r0   r   r0   r1   )r%   r   r0   r1   c           	          d }|                     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>.shiftE   r.   r/   r   r0   r1   r$   r%   r$   )r4   r5   r6   r8   r<   s         r,   test_boundaries2zTestBoundaries.test_boundaries29   ss    	! 	! 	! zz,,,'''e"459; ; ;JJ~&&	( 	( 	( 	( 	(r/   r5   )r   r   r   r   r   r   r7      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 > 1ir3   dtypei   i  )num.r7   r5       r5   r   gh㈵>r   Hz>rtolatolN)r   pytestxfailnparangefloat64r9   linspacer:   map_coordinatesnewaxisndimage_to_numpy_modegetpadr	   )r=   r5   r7   r?   np_datar@   r+   ynpadpad_modepaddedcoordsexpectedrS   s                 r,   test_boundary_spline_accuracyz,TestBoundaries.test_boundary_spline_accuracyN   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__skip_xp_backendsrT   markparametrizerA   rF   rangerf   r)   r/   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; ; ;r/   r   r7   r0   rG   rJ   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 )NrI   r7   r   getattronesr:   spline_filterr9   rJ   r=   rJ   r7   r?   r@   outs         r,   test_spline01zTestSpline.test_spline01n   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   rI   rq   )rs   r9   r:   ru   r   rv   s         r,   test_spline02zTestSpline.test_spline02t   s_    E""zz1#Uz++#D666!#rzz1#77777r/   Tr   zoutput=dtype is numpy-specific)np_onlyr   r    c                     t          ||          }|                    g |          }t          j        |||          }||                    d|j                  k    sJ d S )NrI   outputr   rr   rv   s         r,   test_spline03zTestSpline.test_spline03z   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$   rI   r   r   r   r   )rs   rt   r:   ru   r   r9   rv   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$   rI   rq   r   )rs   rt   r:   ru   r9   r   )r=   rJ   r7   r?   r@   rw   re   s          r,   test_spline05zTestSpline.test_spline05   s    E""ww1vUw++#D666::|||+||+||+||- . . 	"#x00000r/   N)	rg   rh   ri   rx   rz   rj   r   r   r   r)   r/   r,   ro   ro   j   s        5 5 58 8 8 dx=? ? ?5 5? ?5A A A1 1 1 1 1r/   ro   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       Hr/   rq   rI   r9   r:   r;   shaper   rJ   r=   r7   r?   r@   r   rw   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/   rq   r   rI   rt   r:   r;   r   r   r9   rJ   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/   rq   r   r   r   r   rI   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   r1   r0   c                     | d         dz
  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform04.<locals>.mapping   r   r/   rq   r   r$   r   r1   rI   r   r   s         r,   test_geometric_transform04z1TestGeometricTransform.test_geometric_transform04   sv    zz,,,''	 	 	 )$057 7 7!#rzz,,,ciz'P'PQQQQQr/   rJ   rX   
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   rI   r   complex floating              ?c                 (    | d         | d         dz
  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform05.<locals>.mapping       aD!A$(##r/   rq   )rs   r9   isdtyperJ   r:   r;   r   r   )r=   r7   rJ   r?   r@   re   r   rw   s           r,   test_geometric_transform05z1TestGeometricTransform.test_geometric_transform05   s    E""zz<<<'<<'<<)05  7 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   r3   rG         r1   r   r1   rG   c                 (    | d         | d         dz
  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform06.<locals>.mapping   r   r/   rq   r   r   r3   rG   r   r   r1   r   r1   rI   r9   r:   r;   r   rJ   r   r=   r7   r?   r@   r   rw   re   s          r,   test_geometric_transform06z1TestGeometricTransform.test_geometric_transform06       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/   rq   r   r   r   r   rI   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/   rq   r   r   r   rI   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   rq   Fr7   	prefilterr   r   r   rI   )r9   r:   ru   r;   r   rJ   r   )r=   r7   r?   r@   r   filteredrw   re   s           r,   test_geometric_transform10z1TestGeometricTransform.test_geometric_transform10  s    zz<<<'<<'<<) * *	( 	( 	( 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 )Nr0   rI   c                     | d         dz  fS Nr   r0   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform13.<locals>.mapping  s    aDAI<r/   r$   rq   r   )rt   rX   r:   r;   r   r9   rJ   r   s         r,   test_geometric_transform13z1TestGeometricTransform.test_geometric_transform13  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   r0   rG   r1   r3   r$   r$   c                     d| d         z  fS )Nr0   r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform14.<locals>.mapping   s    !H;r/   r$   rq   rD   rI   )r9   r:   r;   r   rJ   r   s         r,   test_geometric_transform14z1TestGeometricTransform.test_geometric_transform14  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 )NrD   c                     | d         dz  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform15.<locals>.mapping)  r   r/   r   rq   r0   r9   r:   r;   r   r   s         r,   test_geometric_transform15z1TestGeometricTransform.test_geometric_transform15&  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 )NrD   r   rG   r3   r   g      "@
         c                 (    | d         | d         dz  fS Nr   r   r0   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform16.<locals>.mapping5  r   r/   r1   r0   rq   r   r1   r   r3   	   r   r   r   s         r,   test_geometric_transform16z1TestGeometricTransform.test_geometric_transform16/  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 )NrD   r   r   r   r   r   c                 (    | d         dz  | d         fS Nr   r0   r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform17.<locals>.mappingB  r   r/   r   r$   rq   r   r   s         r,   test_geometric_transform17z1TestGeometricTransform.test_geometric_transform17<  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 )	NrD   r   r   c                 .    | d         dz  | d         dz  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform18.<locals>.mappingO  r   r/   r   r0   rq   r   r1   r   r   s         r,   test_geometric_transform18z1TestGeometricTransform.test_geometric_transform18I  s    ! zz$	( 	( 	( )$057 7 7!#rzzAq6(';';<<<<<r/   c                     g dg dg dg}|                     |          }d }t          j        ||d|          }t          |dd d df         |           d S )	NrD   r   r   c                 (    | d         | d         dz  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform19.<locals>.mapping\  r   r/   r1   r   rq   .r0   r   r   s         r,   test_geometric_transform19z1TestGeometricTransform.test_geometric_transform19V  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 )	NrD   r   r   c                 (    | d         dz  | d         fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform20.<locals>.mappingi  r   r/   rG   r$   rq   r0   .r   r   s         r,   test_geometric_transform20z1TestGeometricTransform.test_geometric_transform20c  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 )NrD   r   r   c                 .    | d         dz  | d         dz  fS r   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform21.<locals>.mappingv  r   r/   rG   r   rq   r0   r   r   s         r,   test_geometric_transform21z1TestGeometricTransform.test_geometric_transform21p  s    ! zz$	( 	( 	( )$057 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 )
NrD   r   r   rI   c                 .    | d         dz  | d         dz  fS r   r)   r*   s    r,   mapping1zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping1  r   r/   c                 .    | d         dz  | d         dz  fS r   r)   r*   s    r,   mapping2zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping2  r   r/   r   rq   r1   r$   )r9   rX   r:   r;   r   )r=   r7   r?   r@   r   r   rw   s          r,   test_geometric_transform22z1TestGeometricTransform.test_geometric_transform22}  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 )	NrD   r   r   c                     d| d         dz  fS )Nr   r   r0   r)   r*   s    r,   r   zBTestGeometricTransform.test_geometric_transform23.<locals>.mapping      qtax= r/   r0   rq   r   r3   r   r   s         r,   test_geometric_transform23z1TestGeometricTransform.test_geometric_transform23  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 )NrD   r   r   c                     || d         |z  fS )Nr   r)   )r+   abs      r,   r   zBTestGeometricTransform.test_geometric_transform24.<locals>.mapping  r   r/   r   )r   r   r0   )r7   extra_argumentsextra_keywordsr   r3   r   r   s         r,   test_geometric_transform24z1TestGeometricTransform.test_geometric_transform24  s    ! zz$	! 	! 	! )'4ud8% % % 	"#rzz1a&'9'9:::::r/   N)rg   rh   ri   r   r   r   r   rT   rk   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r)   r/   r,   r   r      s       I 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   r0   r1   r$   r   rG   rI   c                 .    | d         dz
  | d         dz
  fS )Nr   r(   r   r)   r*   s    r,   r   zZTestGeometricTransformExtra.test_geometric_transform_grid_constant_order1.<locals>.mapping      aD3J!A$*--r/   g      ?g      ?      ?r
  g      @r2   r   r   r5   r7   )r9   rX   r   r:   r;   )r=   r?   r+   r   expected_results        r,   -test_geometric_transform_grid_constant_order1zITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1  s     JJ			!		#*,*  6 6	. 	. 	. **&8&8&8&8&8&8&: ; ;!'7./1 1 1	
 	
 	
 	
 	
r/   r5   r   r   r   r   r   r7   rG   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/      rI   r      rO   r  rP   rR   )rV   rW   floatreshaper\   r]   r^   r9   tupleslicendimr:   r;   r	   )r=   r7   r5   r?   r   r+   ra   rb   x_paddedcenter_slicer  s              r,   "test_geometric_transform_vs_paddedz>TestGeometricTransformExtra.test_geometric_transform_vs_padded  s   
	. 	. 	.
 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r{   r    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/   r}   )
rV   r9   rJ   newbyteorder
empty_likeastyper:   r;   r   r   )r=   r?   r@   r   rw   returnedresults          r,   9test_geometric_transform_endianness_with_output_parameterzUTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter  s     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/   fr}   )r9   r:   r;   rJ   rV   r   )r=   r?   r@   r   rw   s        r,   +test_geometric_transform_with_string_outputzGTestGeometricTransformExtra.test_geometric_transform_with_string_output  sn    zz1#	 	 	 )$DDDyBHSMM))))!#s+++++r/   N)rg   rh   ri   r  rT   rk   rl   rm   r  rj   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 )TestMapCoordinatesr7   r   rG   rJ   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   rq   )r   rT   rU   r9   r   rJ   rV   indicesr   r:   rZ   r   )r=   r7   rJ   r?   r@   re   idxrw   s           r,   test_map_coordinates01z)TestMapCoordinates.test_map_coordinates01  s    ":: 	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(   rq   )r   rT   rU   r9   rV   r0  r   rX   r:   r-   rZ   r   )r=   r7   r?   r@   r1  out1out2s          r,   test_map_coordinates02z)TestMapCoordinates.test_map_coordinates02  s    ":: 	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/   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)r7   r?   r   r   r   r   r   r   r0   .r   r$   r3   )	r   rV   r0  r   r9   r:   rZ   r   r-   )r=   r?   r@   r1  rw   re   s         r,   test_map_coordinates03z)TestMapCoordinates.test_map_coordinates03$  s@   %%'.1b: : : 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)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   r0   r3   rG   r   r}   )rV   r9   r0  r   rJ   r!  r"  r#  r:   rZ   r   )r=   r?   r@   re   r1  rw   r$  r%  s           r,   5test_map_coordinates_endianness_with_output_parameterzHTestMapCoordinates.test_map_coordinates_endianness_with_output_parameter?  s     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*  r}   )r9   rV   r0  r   r:   rZ   rJ   r   )r=   r?   r@   r1  rw   s        r,   'test_map_coordinates_with_string_outputz:TestMapCoordinates.test_map_coordinates_with_string_outputS  s    zzA3%  j$$jjoo%dC<<<yBHSMM))))!#rzzA3%'8'899999r/   )r   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  r0   rI   r   r1   r!   r   rq   zNot enough memory available)
rV   emptyfloat32r  r:   rZ   r9   MemoryErrorrT   skip)r=   r?   nr   es        r,   test_map_coordinates_large_dataz2TestMapCoordinates.test_map_coordinates_large_data\  s    
	DAA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)rg   rh   ri   rT   rk   rl   rm   rV   rX   r   r2  r6  rj   r:  r<  r?  skipifsysplatformintpitemsizerH  r)   r/   r,   r-  r-    s       [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TestAffineTransformr7   r   rG   c                     |                     dg          }t          j        ||                     dgg          |          }t          ||                     dg                     d S )Nr   rq   r9   r:   affine_transformr   r=   r7   r?   r@   rw   s        r,   test_affine_transform01z+TestAffineTransform.test_affine_transform01q  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   rq   r   rt   r:   rR  r9   r   rS  s        r,   test_affine_transform02z+TestAffineTransform.test_affine_transform02w  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%   rq   r   rV  rS  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%   rq   r   rQ  rS  s        r,   test_affine_transform04z+TestAffineTransform.test_affine_transform04  sf    zz,,,''&tRZZ!->->%PPP!#rzz,,,'?'?@@@@@r/   rJ   rX   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   rI   r   r   r   r   r   r%   rq   )rs   r9   r   rJ   r:   rR  r   r=   r7   rJ   r?   r@   re   rw   s          r,   test_affine_transform05z+TestAffineTransform.test_affine_transform05  s    E""zz<<<'<<'<<)05  7 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%   rq   r   r   r   rQ  rS  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%   rq   r   rQ  rS  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%   rq   r   r   r   rQ  rS  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   rq   r   r%   Fr   r   r   r   )r9   r:   ru   rR  r   r=   r7   r?   r@   r   rw   s         r,   test_affine_transform09z+TestAffineTransform.test_affine_transform09  s    zz<<<'<<'<<) * * 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 )Nr0   rI   r(   rE   )r6   r7   r   r   r   r   )rt   rX   r:   rR  r9   r   rS  s        r,   test_affine_transform10z+TestAffineTransform.test_affine_transform10  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   r0   r   rE   rq   rD   rQ  rS  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 )NrD   r(   r   r   rq   r0   rQ  rS  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 )NrD   r   r   r   r   r0   r   rq   r1   r   r3   r   r   rQ  rS  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 )	NrD   r   r   r0   r   r   r   rq   rQ  rS  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 )
NrD   r   r   r0   r   r   rq   r   r1   rQ  rS  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 )NrD   r   r   r           r   r(   r   rq   .r0   rQ  rS  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 )NrD   r   r   r(   r   r   r   rq   r0   .rQ  rS  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 )	NrD   r   r   r(   r   r   rq   r0   rQ  rS  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 )NrD   r   r   rI   r(   r   r   rq          @r   )r9   rX   r:   rR  r   rS  s        r,   test_affine_transform19z+TestAffineTransform.test_affine_transform19  s    zz<<<'<<*??,35:  ? ? &tRZZ#qAs88L-M-Mq'-U< < <&sBJJa1c(7K,L,La'-U< < <!#t,,,,,r/   r   z(https://github.com/cupy/cupy/issues/8394r   c                     g dg dg dg}|                     |          }t          j        ||                     dgdgg          dd|          }t          ||                     dd	g                     d S )
NrD   r   r   r   r0   r   rq   r   r1   rQ  rS  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 )
NrD   r   r   r0   r   r   rq   r   r   rQ  rS  s        r,   test_affine_transform21z+TestAffineTransform.test_affine_transform21/  r  r/   c                     |                     g d          }t          j        ||                     dgg          dgd|          }t          ||                     g d                     d S )Nr   r0   r%   )r1   rq   r   r   r0   rQ  rS  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%   rn  rq   r0   r   rQ  rS  s        r,   test_affine_transform23z+TestAffineTransform.test_affine_transform23B  s}     zz,,,''&tRZZ#-@-@2$-24 4 4!#ccc(BJJ|||,D,DEEEEEr/   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 changedr0   r%   rq   r9   r   filterUserWarningr:   rR  r   r=   r7   r?   r@   supr4  r5  s          r,   test_affine_transform24z+TestAffineTransform.test_affine_transform24J  s    zz,,,''   	TCJJ{%& & & +D"**aS//2U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%   rq   r  r  s          r,   test_affine_transform25z+TestAffineTransform.test_affine_transform25V  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           }|                    ||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   rq   r0   r0   r   axis)rw  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Er/   )r%   Fr   r   r   r   )	r9   r:   ru   eyert   concatr  rR  r   )r=   r7   r?   r@   r   tform_originaloffset_originaltform_h1tform_h2offsr4  r5  out3rw   s                 r,   test_affine_transform26z+TestAffineTransform.test_affine_transform26b  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   r0   r  r   r  )      @r0   r   r   )r9   r  r  rt   assert_raises
ValueErrorr:   rR  )r=   r?   r@   r  r  s        r,   test_affine_transform27z+TestAffineTransform.test_affine_transform27  s     zz<<<'<<'<<) * * 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           	      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)r0   r0   r  r   r}   )rt   r"  r#  rJ   r!  r   r  r  r9   r:   rR  r   )r=   r?   r@   rw   r  matrixr$  r%  s           r,   9test_affine_transform_1d_endianness_with_output_parameterzMTestAffineTransform.test_affine_transform_1d_endianness_with_output_parameter  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}   )	rV   r9   rJ   r!  r"  r#  r:   rR  r   )r=   r?   r@   rw   r$  r%  s         r,   >test_affine_transform_multi_d_endianness_with_output_parameterzRTestAffineTransform.test_affine_transform_multi_d_endianness_with_output_parameter  s    
 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   rI   )   r   r}   )r   )r~   r6   )
rW   rX   rt   r:   rR  r9   r   rT   r
   RuntimeErrorr=   r?   r@   rw   s       r,   "test_affine_transform_output_shapez6TestAffineTransform.test_affine_transform_output_shape  s   
 yy"*y--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>  )r9   r:   rR  rJ   rV   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   )r1   )r0   r3   c                    t          j        ddgddgg          }t          j        d          }t          j        d          |d dd df<   t          j        |          |d d df<   t          j        ||d          }|                    |          }|                    |          }|                    |          }t          t          j        ||d|	          |           d S )
Nr   r   r0   r1   r0   r1   r  r  r   r  )rV   r9   zerosr  rollr   r:   rR  )r=   r-   r7   r?   r+   affinere   s          r,   )test_affine_transform_shift_via_grid_wrapz=TestAffineTransform.test_affine_transform_shift_via_grid_wrap  s    
 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  r1   r$   r   r%   r0   r1   r   r  )	rV   r9   copyr  r  r   r   r:   rR  )r=   r7   r?   r+   re   r  s         r,   #test_affine_transform_shift_reflectz7TestAffineTransform.test_affine_transform_shift_reflect  s     J			!		# $ $TTrT44R4Z=%%''JJqMM::h''1a&!!rr2A2vz!'**qqq!tF##!$QYeLLL	
 	
 	
 	
 	
r/   N)*rg   rh   ri   rT   rk   rl   rm   rT  rW  rY  r[  r^  r`  rb  rd  rg  rj  rl  ro  rq  rs  ru  rx  rz  r|  r  xfail_xp_backendsr  r  r  r  r  r  r  r  rj   r  r  r  r  r  r  r)   r/   r,   rO  rO  o  s       [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/   rO  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 )!	TestShiftr7   r   rG   c                     |                     dg          }t          j        |dg|          }t          ||                     dg                     d S )Nr   rq   r   r9   r:   r-   r   rS  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   rq   r   rt   r:   r-   r   r9   rS  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%   rq   ri  r  rS  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   rq   r   r  rS  s        r,   test_shift04zTestShift.test_shift04  sS    zz,,,''mD!5111!#rzz,,,'?'?@@@@@r/   rJ   rX   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   rI   r   r   r   r   r   rq   )rs   r9   r   rJ   r:   r-   r   r]  s          r,   test_shift05zTestShift.test_shift05  s     E""zz<<<'<<'<<)05  7 7 ::|||+||+||-49  ; ; ::dj"455 	&BIDX%HmD1a&666!#x00000r/   r5   r   r   c                    t          j        g dg dg dg|          }t          j        g dg dg dg|          }t          j        |j        d          r|d|z  z  }|d|z  z  }d}||d d df<   |                    |          }|                    |          }t          j        |ddg|||	          }t          ||           d S )
Nr   rI   r   r   r   r  r   r   )r7   r5   r4   )rV   r9   r   r   rJ   r:   r-   r   )	r=   r7   r5   rJ   r?   r@   re   r4   rw   s	            r,   test_shift_with_nonzero_cvalz&TestShift.test_shift_with_nonzero_cval  s    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   rq   r   r   r   r  rS  s        r,   test_shift06zTestShift.test_shift06+      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   rq   r   r  rS  s        r,   test_shift07zTestShift.test_shift075  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   rq   r   r   r   r  rS  s        r,   test_shift08zTestShift.test_shift08?  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   rq   Fr   r   r   r   )r9   r:   ru   r-   r   rf  s         r,   test_shift09zTestShift.test_shift09I  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   r0   r1   r  r  r   r  )rV   r9   r  r   r:   r-   )r=   r-   r7   r?   r+   re   s         r,   test_shift_grid_wrapzTestShift.test_shift_grid_wrapW  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  rW   r   r:   r-   )r=   r-   r7   r?   r+   s        r,   test_shift_grid_constant1z#TestShift.test_shift_grid_constant1h  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  rI   r	  r  )r(   r(   r   r   r  )r9   rX   r   r:   r-   )r=   r?   r+   r  s       r,   test_shift_grid_constant_order1z)TestShift.test_shift_grid_constant_order1s  s    JJ			!		#*,*  6 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  )rV   r9   r  r   r:   r-   r   )r=   r7   r?   r+   re   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   )r5   r7   r   r0   r   r   r%   )rW   dictr   r:   r-   )r=   r7   r   r?   r+   kwargss         r,   test_shift_nearest_boundaryz%TestShift.test_shift_nearest_boundary  s    
 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  rI   r   )r  gffffffrN   rO   r  rP   r  )rV   rW   r  r  r\   r]   r9   r^   r  r  r  r:   r-   r	   )r=   r7   r5   r?   x_npr-   ra   rb   r  r+   r  r  s               r,   test_shift_vs_paddedzTestShift.test_shift_vs_padded  s    yE***222r:: (,,T22::bfT4h???@@JJteD4%001AF:;;!-e$e5 5 55AC 	M!UU;;;	
 	
 	
 	
 	
 	
r/   N)rg   rh   ri   rT   rk   rl   rm   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)   r/   r,   r  r    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          ej        j        d                         Z edd           edd          d                         Zd  Z ed!d"          d#             Z ed!d"           edd$           edd%          d&                                     Zd'S )(TestZoomr7   r   rG   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 )Nr0      rI   )r   r   rq   )r   r   r%   r   r  r   r  )r  rW   rX   r:   zoomr   alleps)r=   r7   r?   zarrs        r,   
test_zoom1zTestZoom.test_zoom1  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   r0   r(   )r  rW   r:   r  r   )r=   r?   r  rw   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   r0   r  r   )r   r   r0   r0   )r9   r:   r  r   )r=   r?   r  r4  r5  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/   rJ   rX   r   c                    t          ||          }|                    g dg dg dg|          }|                    |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 )NrD   r   r   rI   r   r   r  r(   r   r   rq   r0   )
rs   r9   r   rJ   r   r  r  r:   rR  r   )r=   r7   rJ   r?   r@   r  rw   s          r,   test_zoom_affine01zTestZoom.test_zoom_affine01  s^    E""zz<<<'<<*??,38  : : ::dj"455 	BID   	@CJJ{%& & & *4S#J1G1G+1@ @ @C		@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	"#ccc33Q3h-66666s   "A
B88B<?B<c                 h    d}t          j        |                    ||f          d|z  d           d S )Nr         ?r   rO   )r:   r  r  )r=   r?   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~  r3   )r4   )r   r   r   )r  r:   r  r   )r=   r?   r  r  rw   refs         r,   test_zoom_zoomfactor_onez!TestZoom.test_zoom_zoomfactor_one  sU    hhy!!l31---hh{##!#s+++++r/   c                 x    |                     d          }d}t          j        ||          }|j        dk    sJ d S )N)r1   r   r  )gUUUUUU?gE]t?g(\?)r$   rK      )r  r:   r  r   )r=   r?   r  r  rw   s        r,   test_zoom_output_shape_roundoffz(TestZoom.test_zoom_output_shape_roundoff  sB    hh{##.l3%%yK''''''r/   r  )r9  )r1   r   )r   r0   )r   r   r5   )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   r0   r1   rI   rM   )rV   r9   rX   kronrt   r   r:   r  )r=   r  r5   r?   r  re   r+   s          r,   test_zoom_by_int_order0z TestZoom.test_zoom_by_int_order0  s     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 )NrI   r   T)r7   r5   	grid_mode)rV   rW   prodr  r  r9   r   r:   r  r  rt   )r=   r   r  r5   r?   r  r+   s          r,   test_zoom_grid_by_int_order0z%TestZoom.test_zoom_grid_by_int_order0  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   rI   )r1   r1   zIt is recommended to use mode)matchr0   T)r5   r  )r  rW   rX   rT   warnsr  r:   r  )r=   r5   r?   r+   s       r,   test_zoom_grid_mode_warningsz%TestZoom.test_zoom_grid_mode_warnings  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 viewr   r   c                     |                     |                    d          d          }t          j        |d|                    d                     dS )zTicket #643r   r   r0   r   r}   N)r  rW   r:   r  r  r=   r?   r+   s      r,   test_zoom_output_shapezTestZoom.test_zoom_output_shape  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      $@r0   )rW   r:   r  rV   arrayr	   )r=   r?   r   factoractualre   s         r,   test_zoom_0d_arrayzTestZoom.test_zoom_0d_array&  sX    IIcNNa&!1!122<6**)))))r/   r   zCuPy `zoom` needs similar fix.c                     |                     d          }t          t          j        |d          |           t          t          j        |d          |           d S )Nr1   r   r9  )r  r   r:   r  r  s      r,   test_zoom_1_gh20999zTestZoom.test_zoom_1_gh20999.  sQ     FF1IIQ**A...Q//33333r/   zread-only backendznumpy round-tripc                     |                     d          }|                    |          }t          j        |d|           t	          ||           d S )Nr1   r   r}   )r  
zeros_liker:   r  r   )r=   r?   r+   r~   s       r,   test_zoom_1_gh20999_outputz#TestZoom.test_zoom_1_gh20999_output6  sQ     FF1IIq!!Q&))))"""""r/   N)rg   rh   ri   rT   rk   rl   rm   r  r  r  r  r   r  r  r	  r  thread_unsafer  rj   r  r  r  r  r  r)   r/   r,   r  r    s       [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 )
TestRotater7   r   rG   c                     |                     g dg dg dg|j                  }t          j        |d|          }t	          ||           d S )Nr   r   r   r   r   rI   r   rq   r9   rX   r:   rotater   rS  s        r,   test_rotate01zTestRotate.test_rotate01B  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   rI   r   r   r   r   r   r   Z   rq   r$  r=   r7   r?   r@   re   rw   s         r,   test_rotate02zTestRotate.test_rotate02J  s    zz<<<'<<'<<)02
  < < ::yyy(yy(yy(yy* 24  = = nT2U333!#x00000r/   rJ   rX   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   rI   r(  r)  r   r   r*  rq   )rs   r9   r   rJ   r:   r%  r   r]  s          r,   test_rotate03zTestRotate.test_rotate03V  s     E""zz???*??*??,38  : : ::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/  rI   r   r   r   r   r   r*  F)r  r7   r$  r+  s         r,   test_rotate04zTestRotate.test_rotate04h  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$   r1   r1   r1   r(  r)  rI   r   r#  r*  rq   rV   rB  rm   r9   rX   r:   r%  r   r=   r7   r?   r@   ire   rw   s          r,   test_rotate05zTestRotate.test_rotate05s  s#   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)r1   r$   r1   r1   r   r#  rI   r(  r)  r*  rq   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/  r0   rI   r0   r   r   r(  r)  r*  r  )axesr7   r9   rX   permute_dimsr:   r%  r   r+  s         r,   test_rotate07zTestRotate.test_rotate07  s    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/  r0   rI   r<  r2  r*  r  F)r=  r  r7   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/  r0   rI   r*  r   )r=  )r9   rX   r  r  r:   r%  r  )r=   r?   r@   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-   rI   )r1   r   r1   )rw  rw  rw  )g|S2@g|S2@g>)!@)g9HD%@g9HD'@g9HD)@)gc~@gc~@gzLb @)g[ic6*@g[ic6,@g[ic6.@)g      5@g      6@g      7@)gRK<@gRK=@gRK>@)g,PA@g,PgB@g,PB@)gݠ'?@grn@@grnГ@@)gGA@gG9B@gGB@r   F)angler  gư>g>rQ   )r  rW   rX   r9   r:   r%  r	   )r=   r?   r@   re   rw   s        r,   test_rotate10zTestRotate.test_rotate10  s   zz"))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/   r   z(https://github.com/cupy/cupy/issues/8400r   c                     |                     t          j        t          j        d          d                    }t	          j        t	          j        |d          d          }t          ||           d S )Nr   )r   r      iL)r9   rV   tilerW   r:   r%  r   )r=   r?   r   r   s       r,   test_rotate_exact_180z TestRotate.test_rotate_exact_180  sZ    JJrwry||V4455N7>!S114881r/   N)rg   rh   ri   rT   rk   rl   rm   r&  r,  r0  r3  r8  r:  r@  rB  rD  rH  r  rL  r)   r/   r,   r!  r!  @  sA       [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!  )$rJ  numpyrV   numpy.testingr   scipy._lib._array_apir   r   r   r   r   r	   rT   r
   r  scipy.ndimager:    r   rk   rj   r  
pytestmarkr  r\   r   rl   rm   ro   r   r  r-  rO  r  r  r!  r)   r/   r,   <module>rS     s   



     + + + + + +                 * * * * * *            ;/ K1 &+9NOOOP
    E; E; E; E; E; E; E; E;P %%1++..%(($1 $1 $1 $1 $1 $1 $1 )( /.$1N &!IJJJ%%1++..R; R; R; R; R; R; R; /. KJR;j &!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x
 x
 x
 x
 x
 x
 x
 x
vD
 D
 D
 D
 D
 D
 D
 D
NL# L# L# L# L# L# L# L#^S S S S S S S S S Sr/   