o
    Ö­j	í  ã                   @   sŒ  d dl Z d dlZd dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZmZ d dlZd dlmZ d dlmZ ddlmZ d dlmZ ejjZeej d	¡ed
ddgd�gZdZdddddddœZG dd„ dƒZej deddƒ¡ej de¡G dd„ dƒƒƒZeddd�ej ded dƒ¡G dd „ d ƒƒƒZ eddd�G d!d"„ d"ƒƒZ!G d#d$„ d$ƒZ"G d%d&„ d&ƒZ#G d'd(„ d(ƒZ$G d)d*„ d*ƒZ%G d+d,„ d,ƒZ&dS )-é    N)Úsuppress_warnings)Úxp_assert_equalÚxp_assert_closeÚassert_array_almost_equal)Úis_cupyÚis_jaxÚ_asarrayÚarray_namespace)Úraisesé   )Útypes)Úarray_api_compatibleÚskip_xp_backendsTÚcupyú	jax.numpy)Úcpu_onlyÚ
exceptionsçê-�™—q=ÚreflectÚ	symmetricÚwrapÚedgeÚconstant)Úmirrorr   úgrid-mirrorú	grid-wrapÚnearestúgrid-constantc                   @   s  e Zd Zed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d„ ƒƒZed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d„ ƒƒZej dg d¢¡ej de	dƒ¡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              	   C   s<   dd„ }|  g d¢¡}ttj||d|ddd�|  |¡ƒ d S )Nc                 S   s   | d d fS )Nr   ç      à?© ©Úxr(   r(   úc/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/ndimage/tests/test_interpolation.pyÚshift1   ó   z-TestBoundaries.test_boundaries.<locals>.shift)r   é   é   ç      @r&   )é   r   )ÚcvalÚmodeÚoutput_shapeÚorder©Úasarrayr   ÚndimageÚgeometric_transform©Úselfr3   Úexpected_valueÚxpr,   Údatar(   r(   r+   Útest_boundaries%   s   ÿýzTestBoundaries.test_boundaries)r   r   r.   r/   )r/   r   r.   r/   )r%   r   r.   r/   )r.   r   r.   r/   )r&   r   r.   r/   c                 C   s:   dd„ }|  g d¢¡}ttj||d|dd�|  |¡ƒ d S )Nc                 S   ó   | d d fS )Nr   gÍÌÌÌÌÌì?r(   r)   r(   r(   r+   r,   F   r-   z.TestBoundaries.test_boundaries2.<locals>.shift©r   r.   r/   r%   r&   ©r%   )r2   r3   r4   r6   r:   r(   r(   r+   Útest_boundaries2:   s   ÿýzTestBoundaries.test_boundaries2r3   )r   r   r   r   r   r   r5   é   c                 C   sè   t |ƒr|dvs|dkrt d¡ tjddtjd�}| |¡}| tjddd	d
�¡}t|ƒj	}t
j|||df ||d�}d}	t |¡}
| tj||	|
d�¡}| |	| ¡|df }t
j||||d�}|dkrhdnd}t||d|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 > 1iúÿÿÿr1   ©Údtypeiøÿÿÿé   iè  )Únum.©r5   r3   é    ©r3   r   gñhãˆµøä>r   çH¯¼šò×z>©ÚrtolÚatolN)r   ÚpytestÚxfailÚnpÚarangeÚfloat64r7   Úlinspacer	   Únewaxisr8   Úmap_coordinatesÚndimage_to_numpy_modeÚgetÚpadr   )r;   r3   r5   r=   Únp_datar>   r*   rV   ÚyÚnpadÚpad_modeÚpaddedÚcoordsÚexpectedrO   r(   r(   r+   Útest_boundary_spline_accuracyO   s    



z,TestBoundaries.test_boundary_spline_accuracyN)Ú__name__Ú
__module__Ú__qualname__r   rP   ÚmarkÚparametrizer?   rC   Úrangerb   r(   r(   r(   r+   r   #   s<    







úþ









úþ

r   r5   r.   rD   rF   c                   @   s@   e Zd Zdd„ Zdd„ Zeddd�dd	„ ƒZd
d„ Zdd„ ZdS )Ú
TestSplinec                 C   sB   t ||ƒ}|jg |d�}tj||d�}||jd|jd�ksJ ‚d S )NrE   ©r5   r   ©ÚgetattrÚonesr8   Úspline_filterr7   rF   ©r;   rF   r5   r=   r>   Úoutr(   r(   r+   Útest_spline01p   s   
zTestSpline.test_spline01c                 C   s>   t ||ƒ}|jdg|d�}tj||d�}t|| dg¡ƒ d S )Nr   rE   rj   )rl   r7   r8   rn   r   ro   r(   r(   r+   Útest_spline02v   s   
zTestSpline.test_spline02Tzoutput=dtype is numpy-specific©Únp_onlyr!   c                 C   sD   t ||ƒ}|jg |d�}tj|||d�}||jd|jd�ks J ‚d S )NrE   ©Úoutputr   rk   ro   r(   r(   r+   Útest_spline03|   s   
zTestSpline.test_spline03c                 C   s>   t ||ƒ}|jdg|d�}t ||¡}t|| g d¢¡ƒ d S )Nr%   rE   ©r   r   r   r   )rl   rm   r8   rn   r   r7   ro   r(   r(   r+   Útest_spline04ƒ   s   
zTestSpline.test_spline04c                 C   sZ   t ||ƒ}|jddg|d�}tj||d�}| g d¢g d¢g d¢g d¢g¡}t||ƒ d S )Nr%   rE   rj   rx   )rl   rm   r8   rn   r7   r   )r;   rF   r5   r=   r>   rp   ra   r(   r(   r+   Útest_spline05‰   s   

ýzTestSpline.test_spline05N)	rc   rd   re   rq   rr   r   rw   ry   rz   r(   r(   r(   r+   ri   l   s    

ri   r   r    c                   @   sÆ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zej 	d	d
dg¡dd„ ƒZ
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.S )/ÚTestGeometricTransformc                 C   sD   |  dg¡}dd„ }tj|||j|d�}t||j dg|jd�ƒ d S )Nr   c                 S   ó   | S ©Nr(   r)   r(   r(   r+   Úmapping›   ó   zBTestGeometricTransform.test_geometric_transform01.<locals>.mappingrj   rE   ©r7   r8   r9   Úshaper   rF   ©r;   r5   r=   r>   r~   rp   r(   r(   r+   Útest_geometric_transform01˜   s   ÿz1TestGeometricTransform.test_geometric_transform01c                 C   óF   |  dg¡}dd„ }tj|||j|d�}t||jg d¢|jd�ƒ d S )Nr%   c                 S   r|   r}   r(   r)   r(   r(   r+   r~   ¥   r   zBTestGeometricTransform.test_geometric_transform02.<locals>.mappingrj   rx   rE   ©rm   r8   r9   r�   r   r7   rF   r‚   r(   r(   r+   Útest_geometric_transform02¢   ó   ÿz1TestGeometricTransform.test_geometric_transform02c                 C   r„   )Nr%   c                 S   r@   ©Nr   r   r(   r)   r(   r(   r+   r~   ¯   r-   zBTestGeometricTransform.test_geometric_transform03.<locals>.mappingrj   ©r   r   r   r   rE   r…   r‚   r(   r(   r+   Útest_geometric_transform03¬   r‡   z1TestGeometricTransform.test_geometric_transform03c                 C   sH   |  g d¢¡}dd„ }tj|||j|d�}t||j g d¢|jd�ƒ d S )N©r%   r   r/   r.   c                 S   r@   rˆ   r(   r)   r(   r(   r+   r~   ¹   r-   zBTestGeometricTransform.test_geometric_transform04.<locals>.mappingrj   ©r   r%   r   r/   rE   r€   r‚   r(   r(   r+   Útest_geometric_transform04¶   s   ÿz1TestGeometricTransform.test_geometric_transform04rF   rT   Ú
complex128c           	      C   s¢   t ||ƒ}|jg d¢g d¢g d¢g|d�}|jg d¢g d¢g d¢g|d�}t|ƒj}||jdƒr<|d| 8 }|d| 8 }dd„ }tj|||j|d�}t||ƒ d S )	Nrx   rE   r‰   úcomplex floatingù              ð?c                 S   ó   | d | d d fS rˆ   r(   r)   r(   r(   r+   r~   Ï   ó   zBTestGeometricTransform.test_geometric_transform05.<locals>.mappingrj   )	rl   r7   r	   ÚisdtyperF   r8   r9   r�   r   )	r;   r5   rF   r=   r>   ra   r“   r~   rp   r(   r(   r+   Útest_geometric_transform05À   s,   

þþ
þþ
ÿz1TestGeometricTransform.test_geometric_transform05c                 C   óh   |  g d¢g d¢g d¢g¡}dd„ }tj|||j|d�}|j g d¢g d¢g d	¢g|jd
�}t||ƒ d S )Nr‹   ©r1   rD   é   é   ©r/   r˜   r/   rD   c                 S   r‘   rˆ   r(   r)   r(   r(   r+   r~   Û   r’   zBTestGeometricTransform.test_geometric_transform06.<locals>.mappingrj   rŒ   ©r   r1   rD   r—   ©r   r/   r˜   r/   rE   ©r7   r8   r9   r�   rF   r   ©r;   r5   r=   r>   r~   rp   ra   r(   r(   r+   Útest_geometric_transform06Ö   ó   
þÿ
þþz1TestGeometricTransform.test_geometric_transform06c                 C   sh   |  g d¢g d¢g d¢g¡}dd„ }tj|||j|d�}|j g d¢g d¢g d¢g|jd�}t||ƒ d S )	Nr‹   r–   r™   c                 S   s   | d d | d fS rˆ   r(   r)   r(   r(   r+   r~   ê   r’   zBTestGeometricTransform.test_geometric_transform07.<locals>.mappingrj   ©r   r   r   r   rE   rœ   r�   r(   r(   r+   Útest_geometric_transform07å   rŸ   z1TestGeometricTransform.test_geometric_transform07c                 C   r•   )Nr‹   r–   r™   c                 S   ó   | d d | d d fS rˆ   r(   r)   r(   r(   r+   r~   ù   ó   zBTestGeometricTransform.test_geometric_transform08.<locals>.mappingrj   r    rŒ   rš   rE   rœ   r�   r(   r(   r+   Útest_geometric_transform08ô   rŸ   z1TestGeometricTransform.test_geometric_transform08c                 C   s†   |  g d¢g d¢g d¢g¡}dd„ }|dkrtj||d�}n|}tj|||j|dd	�}|j g d
¢g d¢g d¢g|jd�}t||ƒ d S )Nr‹   r–   r™   c                 S   r¢   rˆ   r(   r)   r(   r(   r+   r~     r£   zBTestGeometricTransform.test_geometric_transform10.<locals>.mappingr   rj   F©r5   Ú	prefilterr    rŒ   rš   rE   )r7   r8   rn   r9   r�   rF   r   )r;   r5   r=   r>   r~   Úfilteredrp   ra   r(   r(   r+   Útest_geometric_transform10  s$   
þÿ
þþz1TestGeometricTransform.test_geometric_transform10c                 C   sL   |j dg|jd�}dd„ }tj||dg|d�}t||jg d¢|jd�ƒ d S )Nr.   rE   c                 S   s   | d d fS ©Nr   r.   r(   r)   r(   r(   r+   r~     r-   zBTestGeometricTransform.test_geometric_transform13.<locals>.mappingr%   rj   rx   )rm   rT   r8   r9   r   r7   rF   r‚   r(   r(   r+   Útest_geometric_transform13  s   z1TestGeometricTransform.test_geometric_transform13c                 C   sH   |  g d¢¡}dd„ }tj||dg|d�}t||j g d¢|jd�ƒ d S )N©r   r˜   r.   rD   r/   r1   r%   r%   c                 S   s   d| d  fS )Nr.   r   r(   r)   r(   r(   r+   r~   "  r-   zBTestGeometricTransform.test_geometric_transform14.<locals>.mappingr%   rj   rA   rE   )r7   r8   r9   r   rF   r‚   r(   r(   r+   Útest_geometric_transform14  s   z1TestGeometricTransform.test_geometric_transform14c                 C   s@   g d¢}dd„ }t j||dg|d�}t|d d d… g d¢ƒ d S )NrA   c                 S   s   | d d fS r©   r(   r)   r(   r(   r+   r~   +  r-   zBTestGeometricTransform.test_geometric_transform15.<locals>.mappingr—   rj   r.   ©r8   r9   r   r‚   r(   r(   r+   Útest_geometric_transform15(  s   z1TestGeometricTransform.test_geometric_transform15c                 C   sP   g d¢g d¢g d¢g}dd„ }t j||d|d�}t|dd	gd
dgddggƒ d S )NrA   ©r˜   rD   r1   r—   ©g      "@é
   é   é   c                 S   s   | d | d d fS ©Nr   r   r.   r(   r)   r(   r(   r+   r~   6  r’   zBTestGeometricTransform.test_geometric_transform16.<locals>.mapping©r/   r.   rj   r   r/   r˜   r1   é	   r²   r­   r‚   r(   r(   r+   Útest_geometric_transform161  s   þ
ÿ z1TestGeometricTransform.test_geometric_transform16c                 C   sD   g d¢g d¢g d¢g}dd„ }t j||d|d�}t|g d¢gƒ d S )NrA   r¯   ©r¶   r±   r²   r³   c                 S   s   | d d | d fS ©Nr   r.   r   r(   r)   r(   r(   r+   r~   B  r’   zBTestGeometricTransform.test_geometric_transform17.<locals>.mapping©r   r%   rj   r­   r‚   r(   r(   r+   Útest_geometric_transform17=  ó   þ
ÿz1TestGeometricTransform.test_geometric_transform17c                 C   sD   g d¢g d¢g d¢g}dd„ }t j||d|d�}t|dd	ggƒ d S )
NrA   r¯   r¸   c                 S   ó   | d d | d d fS r¹   r(   r)   r(   r(   r+   r~   N  r£   zBTestGeometricTransform.test_geometric_transform18.<locals>.mapping©r   r.   rj   r   r/   r­   r‚   r(   r(   r+   Útest_geometric_transform18I  r¼   z1TestGeometricTransform.test_geometric_transform18c                 C   sL   g d¢g d¢g d¢g}dd„ }t j||d|d�}t|dd d d	…f |ƒ d S )
NrA   r¯   r¸   c                 S   s   | d | d d fS r´   r(   r)   r(   r(   r+   r~   Z  r’   zBTestGeometricTransform.test_geometric_transform19.<locals>.mapping©r/   r—   rj   .r.   r­   r‚   r(   r(   r+   Útest_geometric_transform19U  ó   þ
ÿz1TestGeometricTransform.test_geometric_transform19c                 C   sL   g d¢g d¢g d¢g}dd„ }t j||d|d�}t|d d d…d	f |ƒ d S )
NrA   r¯   r¸   c                 S   s   | d d | d fS r¹   r(   r)   r(   r(   r+   r~   f  r’   zBTestGeometricTransform.test_geometric_transform20.<locals>.mapping©rD   r%   rj   r.   .r­   r‚   r(   r(   r+   Útest_geometric_transform20a  rÂ   z1TestGeometricTransform.test_geometric_transform20c                 C   sR   g d¢g d¢g d¢g}dd„ }t j||d|d�}t|d d d…d d d…f |ƒ d S )	NrA   r¯   r¸   c                 S   ó   | d d | d d fS r¹   r(   r)   r(   r(   r+   r~   r  r£   zBTestGeometricTransform.test_geometric_transform21.<locals>.mapping©rD   r—   rj   r.   r­   r‚   r(   r(   r+   Útest_geometric_transform21m  s   þ
ÿ"z1TestGeometricTransform.test_geometric_transform21c                 C   sd   |j g d¢g d¢g d¢g|jd�}dd„ }dd„ }tj||d	|d
�}tj||d|d
�}t||ƒ d S )NrA   r¯   r¸   rE   c                 S   rÅ   r¹   r(   r)   r(   r(   r+   Úmapping1~  r£   zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping1c                 S   r½   r¹   r(   r)   r(   r(   r+   Úmapping2�  r£   zCTestGeometricTransform.test_geometric_transform22.<locals>.mapping2rÆ   rj   ©r/   r%   )r7   rT   r8   r9   r   )r;   r5   r=   r>   rÈ   rÉ   rp   r(   r(   r+   Útest_geometric_transform22y  s   
þþÿÿz1TestGeometricTransform.test_geometric_transform22c                 C   sN   g d¢g d¢g d¢g}dd„ }t j||d|d�}| tj¡}t|dd	gƒ d S )
NrA   r¯   r¸   c                 S   s   d| d d fS )Nr   r   r.   r(   r)   r(   r(   r+   r~   �  ó   zBTestGeometricTransform.test_geometric_transform23.<locals>.mapping©r.   rj   r˜   r1   )r8   r9   ÚastyperR   Úint32r   r‚   r(   r(   r+   Útest_geometric_transform23Š  s   þz1TestGeometricTransform.test_geometric_transform23c                 C   sJ   g d¢g d¢g d¢g}dd„ }t j||d|ddd	id
�}t|ddgƒ d S )NrA   r¯   r¸   c                 S   s   || d | fS )Nr   r(   )r*   ÚaÚbr(   r(   r+   r~   ›  rÌ   zBTestGeometricTransform.test_geometric_transform24.<locals>.mappingrÍ   )r   rÒ   r.   )r5   Úextra_argumentsÚextra_keywordsr˜   r1   r­   r‚   r(   r(   r+   Útest_geometric_transform24–  s   þ
þz1TestGeometricTransform.test_geometric_transform24N)rc   rd   re   rƒ   r†   rŠ   r�   rP   rf   rg   r”   rž   r¡   r¤   r¨   rª   r¬   r®   r·   r»   r¿   rÁ   rÄ   rÇ   rË   rÐ   rÕ   r(   r(   r(   r+   r{   ”   s.    




			r{   c                   @   sh   e Zd Zdd„ Zej dg d¢¡ej dedƒ¡dd„ ƒƒZe	d	d
d�dd„ ƒZ
e	d	dd�dd„ ƒZdS )ÚTestGeometricTransformExtrac                 C   sV   |j g d¢g d¢g|jd�}dd„ }|  g d¢g d¢g¡}ttj||dd	d
�|ƒ d S )N©r   r.   r/   ©r%   r˜   rD   rE   c                 S   s   | d d | d d fS )Nr   r'   r   r(   r)   r(   r(   r+   r~   ­  r£   zZTestGeometricTransformExtra.test_geometric_transform_grid_constant_order1.<locals>.mapping©g      Ð?g      è?ç      ô?©rÚ   g      @r0   r   r   ©r3   r5   )r7   rT   r   r8   r9   )r;   r=   r*   r~   Úexpected_resultr(   r(   r+   Ú-test_geometric_transform_grid_constant_order1§  s   
ÿÿ
ÿ
ÿýzITestGeometricTransformExtra.test_geometric_transform_grid_constant_order1r3   ©r   r   r   r   r   r5   rD   c                 C   sž   dd„ }t jdtd� dd¡}d}t |¡}t j|||d�}| |¡}| |¡}tt	|| ƒg|j
 ƒ}	tj||||d�|	 }
ttj||||d�|
d	d
� d S )Nc                 S   s   | d d | d d fS )Nr   çš™™™™™Ù?r   gffffff@r(   r)   r(   r(   r+   r~   ½  r£   zOTestGeometricTransformExtra.test_geometric_transform_vs_padded.<locals>.mappingé�   rE   r³   é   rK   rÜ   rL   ©rN   )rR   rS   ÚfloatÚreshaperX   rY   rZ   r7   ÚtupleÚsliceÚndimr8   r9   r   )r;   r5   r3   r=   r~   r*   r]   r^   Úx_paddedÚcenter_slicerÝ   r(   r(   r+   Ú"test_geometric_transform_vs_padded¸  s(   


ÿÿ
ÿ
üz>TestGeometricTransformExtra.test_geometric_transform_vs_paddedTzendianness is numpy-specificrs   c                 C   sz   t  dg¡}dd„ }|j|j ¡ t  |¡t  |¡ |j ¡ ¡fD ]}tj|||j|d�}|d u r2|n|}t	|dgƒ q d S )Nr   c                 S   r|   r}   r(   r)   r(   r(   r+   r~   Û  r   zfTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameter.<locals>.mappingru   )
rR   r7   rF   ÚnewbyteorderÚ
empty_likerÎ   r8   r9   r�   r   )r;   r=   r>   r~   rp   ÚreturnedÚresultr(   r(   r+   Ú9test_geometric_transform_endianness_with_output_parameterÕ  s   þÿúzUTestGeometricTransformExtra.test_geometric_transform_endianness_with_output_parameterú!string `output` is numpy-specificc                 C   sH   |  dg¡}dd„ }tj||dd�}|jt d¡u sJ ‚t|dgƒ d S )Nr   c                 S   r|   r}   r(   r)   r(   r(   r+   r~   ê  r   zXTestGeometricTransformExtra.test_geometric_transform_with_string_output.<locals>.mappingÚfru   )r7   r8   r9   rF   rR   r   )r;   r=   r>   r~   rp   r(   r(   r+   Ú+test_geometric_transform_with_string_outputæ  s
   zGTestGeometricTransformExtra.test_geometric_transform_with_string_outputN)rc   rd   re   rÞ   rP   rf   rg   rh   rë   r   rð   ró   r(   r(   r(   r+   rÖ   ¤  s    


rÖ   c                   @   sÂ   e Zd Zej deddƒ¡ej dejej	g¡dd„ ƒƒZ
ej deddƒ¡dd„ ƒZed	d
d�dd„ ƒZedd�dd„ ƒZeddd�dd„ ƒZejjdejv pWe d¡jdk dd�dd„ ƒZdS )ÚTestMapCoordinatesr5   r   rD   rF   c           	      C   s¼   t |ƒr|dkrt d¡ | g d¢g d¢g d¢g¡}| g d¢g d¢g d¢g¡}t|ƒj}||jd	ƒr@|d
|  }|d
|  }t |j	¡}|d8 }| |¡}t
j|||d�}t||ƒ d S )Nr   ú'jax map_coordinates requires order <= 1r‹   r–   r™   r    rŒ   rš   r�   r�   rj   )r   rP   rQ   r7   r	   r“   rF   rR   Úindicesr�   r8   rW   r   )	r;   r5   rF   r=   r>   ra   r“   Úidxrp   r(   r(   r+   Útest_map_coordinates01ô  s&   

þ
þ

z)TestMapCoordinates.test_map_coordinates01c                 C   s˜   t |ƒr|dkrt d¡ |dkrt d¡ | g d¢g d¢g d¢g¡}t |jtj¡}|d8 }| |¡}tj	|d|d�}tj
|||d�}t||ƒ d S )	Nr   rõ   zoutput differs. jax bug?r‹   r–   r™   r'   rj   )r   rP   rQ   r7   rR   rö   r�   rT   r8   r,   rW   r   )r;   r5   r=   r>   r÷   Úout1Úout2r(   r(   r+   Útest_map_coordinates02  s   


þ
z)TestMapCoordinates.test_map_coordinates02r   z`order` is required in jaxr    c              	   C   s�  t g d¢g d¢g d¢gd|d�}t |j¡d }| |¡}t ||¡}| g d¢g d¢g d	¢g¡}t||ƒ t|t |d
¡ƒ t |d d d…df j¡d }| |¡}t |d d d…df |¡}t|| g d¢g d¢g¡ƒ t|t |d d d…df d
¡ƒ t |d d …d d d…f j¡d }| |¡}t |d d …d d d…f |¡}t|| ddgddgddgg¡ƒ t|t |d d …d d d…f d
¡ƒ d S )Nr‹   r–   r™   ÚF)r5   r=   r   r    rŒ   rš   ©r   r   r.   .r   r%   r1   )	r   rR   rö   r�   r7   r8   rW   r   r,   )r;   r=   r>   r÷   rp   ra   r(   r(   r+   Útest_map_coordinates03  s6   þþ

þ

ÿ "
"(z)TestMapCoordinates.test_map_coordinates03T)rt   c                 C   s    t  ddgddgg¡}t  ddgddgg¡}t  |j¡}|d8 }|j|j ¡ t  |¡t  |¡ |j ¡ ¡fD ]}tj	|||d�}|d u rF|n|}t
||ƒ q6d S )Nr   r.   r1   rD   r   ru   )rR   r7   rö   r�   rF   rì   rí   rÎ   r8   rW   r   )r;   r=   r>   ra   r÷   rp   rî   rï   r(   r(   r+   Ú5test_map_coordinates_endianness_with_output_parameter:  s   üøzHTestMapCoordinates.test_map_coordinates_endianness_with_output_parameterrñ   rs   c                 C   s`   |  dgg¡}t |j¡}|  |¡}tj||dd�}|jt d¡u s$J ‚t||  dgg¡ƒ d S ©Nr   rò   ru   )r7   rR   rö   r�   r8   rW   rF   r   )r;   r=   r>   r÷   rp   r(   r(   r+   Ú'test_map_coordinates_with_string_outputN  s   
z:TestMapCoordinates.test_map_coordinates_with_string_outputÚwin32r—   z2do not run on 32 bit or windows (no sparse memory)c              
   C   s”   z7d}t j|d t jd� ||¡}d||d d …|d d …f< tj| |¡| |d g|d gg¡dd� W d S  tyI } zt 	d	¡|‚d }~ww )
Ni0u  r.   rE   r   r/   r"   r   rj   zNot enough memory available)
rR   ÚemptyÚfloat32rå   r8   rW   r7   ÚMemoryErrorrP   Úskip)r;   r=   ÚnrÑ   Úer(   r(   r+   Útest_map_coordinates_large_dataW  s   "ÿ€ÿz2TestMapCoordinates.test_map_coordinates_large_dataN)rc   rd   re   rP   rf   rg   rh   rR   rT   rŽ   rø   rû   r   rþ   rÿ   r  ÚskipifÚsysÚplatformÚintpÚitemsizer	  r(   r(   r(   r+   rô   ò  s     





ÿrô   c                   @   s˜  e Zd Zej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd	„ ƒZ	ej deddƒ¡d
d„ ƒZ
ej deddƒ¡ej dddg¡dd„ ƒƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd „ ƒZej deddƒ¡d!d"„ ƒZej deddƒ¡d#d$„ ƒZej deddƒ¡d%d&„ ƒZej deddƒ¡d'd(„ ƒZej deddƒ¡d)d*„ ƒZej deddƒ¡d+d,„ ƒZej deddƒ¡d-d.„ ƒZej deddƒ¡d/d0„ ƒZej deddƒ¡d1d2„ ƒZej deddƒ¡d3d4„ ƒZej deddƒ¡d5d6„ ƒZej deddƒ¡d7d8„ ƒZej deddƒ¡d9d:„ ƒZ d;d<„ Z!e"d=d>d?�d@dA„ ƒZ#e"d=d>d?�dBdC„ ƒZ$e"d=dDd?�dEdF„ ƒZ%e"d=dGd?�dHdI„ ƒZ&ej dJg dK¢¡ej deddƒ¡dLdM„ ƒƒZ'ej deddƒ¡dNdO„ ƒZ(dPS )QÚTestAffineTransformr5   r   rD   c                 C   s<   |  dg¡}tj||  dgg¡|d�}t||  dg¡ƒ d S )Nr   rj   ©r7   r8   Úaffine_transformr   ©r;   r5   r=   r>   rp   r(   r(   r+   Útest_affine_transform01k  s   z+TestAffineTransform.test_affine_transform01c                 C   s>   |  dg¡}tj|| dgg¡|d�}t|| g d¢¡ƒ d S )Nr%   r   rj   rx   ©rm   r8   r  r7   r   r  r(   r(   r+   Útest_affine_transform02q  s   z+TestAffineTransform.test_affine_transform02c                 C   s@   |  dg¡}tj|| dgg¡d|d�}t|| g d¢¡ƒ d S )Nr%   r   r&   rj   r‰   r  r  r(   r(   r+   Útest_affine_transform03w  s   z+TestAffineTransform.test_affine_transform03c                 C   sB   |  g d¢¡}tj||  dgg¡d|d�}t||  g d¢¡ƒ d S )Nr‹   r   r&   rj   rŒ   r  r  r(   r(   r+   Útest_affine_transform04}  s   z+TestAffineTransform.test_affine_transform04rF   rT   rŽ   c                 C   s®   t ||ƒ}|jg d¢g d¢g d¢g|d�}|jg d¢g d¢g d¢g|d�}t|ƒj}||jdƒr<|d| 8 }|d| 8 }tj|| ddgddgg¡ddg|d	�}t||ƒ d S )
Nrx   rE   r‰   r�   r�   r   r   r&   rj   )rl   r7   r	   r“   rF   r8   r  r   ©r;   r5   rF   r=   r>   ra   r“   rp   r(   r(   r+   Útest_affine_transform05ƒ  s*   

þþ
þþ
ÿz+TestAffineTransform.test_affine_transform05c                 C   sj   |  g d¢g d¢g d¢g¡}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   r   r&   rj   rŒ   rš   r›   r  r  r(   r(   r+   Útest_affine_transform06•  ó   
þÿþz+TestAffineTransform.test_affine_transform06c                 C   sj   |  g d¢g d¢g d¢g¡}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   r   r&   rj   r    r  r  r(   r(   r+   Útest_affine_transform07   r  z+TestAffineTransform.test_affine_transform07c                 C   sj   |  g d¢g d¢g d¢g¡}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   r   r&   rj   r    rŒ   rš   r  r  r(   r(   r+   Útest_affine_transform08«  r  z+TestAffineTransform.test_affine_transform08c                 C   sˆ   |  g d¢g d¢g d¢g¡}|dkrtj||d�}n|}tj||  ddgddgg¡ddg|dd	�}t||  g d
¢g d¢g d¢g¡ƒ d S )Nr‹   r–   r™   r   rj   r   r&   Fr¥   r    rŒ   rš   )r7   r8   rn   r  r   ©r;   r5   r=   r>   r§   rp   r(   r(   r+   Útest_affine_transform09¶  s   
þþþz+TestAffineTransform.test_affine_transform09c                 C   sF   |j dg|jd�}tj|| dgg¡d|d�}t|| g d¢¡ƒ d S )Nr.   rE   r'   rB   )r4   r5   ©r   r   r   r   )rm   rT   r8   r  r7   r   r  r(   r(   r+   Útest_affine_transform10Æ  s
   ÿz+TestAffineTransform.test_affine_transform10c                 C   sD   |  g d¢¡}tj||  dgg¡dd|d�}t||  g d¢¡ƒ d S )Nr«   r.   r   rB   rj   rA   r  r  r(   r(   r+   Útest_affine_transform11Í  s   z+TestAffineTransform.test_affine_transform11c                 C   sN   |  g d¢¡}tj||  dgg¡dd|d�}t|d d d… |  g d¢¡ƒ d S )NrA   r'   r   ©r—   rj   r.   r  r  r(   r(   r+   Útest_affine_transform12Ó  s   "z+TestAffineTransform.test_affine_transform12c                 C   sl   g d¢g d¢g d¢g}|  |¡}tj||  ddgddgg¡dd|d�}t||  dd	gd
dgddgg¡ƒ d S )NrA   r¯   r°   r   r   r.   rµ   rj   r/   r˜   r1   r¶   r²   r  r  r(   r(   r+   Útest_affine_transform13Ù  s   þ
ÿ&z+TestAffineTransform.test_affine_transform13c                 C   s`   g d¢g d¢g d¢g}|  |¡}tj||  ddgddgg¡dd|d�}t||  g d¢g¡ƒ d S )	NrA   r¯   r¸   r.   r   r   rº   rj   r  r  r(   r(   r+   Útest_affine_transform14ã  ó   þ
ÿz+TestAffineTransform.test_affine_transform14c                 C   s`   g d¢g d¢g d¢g}|  |¡}tj||  ddgddgg¡dd|d�}t||  dd	gg¡ƒ d S )
NrA   r¯   r¸   r.   r   r¾   rj   r   r/   r  r  r(   r(   r+   Útest_affine_transform15í  r'  z+TestAffineTransform.test_affine_transform15c                 C   sb   g d¢g d¢g d¢g}|  |¡}tj||  ddgddgg¡dd|d	�}t|d
d d d…f |ƒ d S )NrA   r¯   r¸   r   ç        r   r'   rÀ   rj   .r.   r  r  r(   r(   r+   Útest_affine_transform16÷  ó   þ
ÿz+TestAffineTransform.test_affine_transform16c                 C   sb   g d¢g d¢g d¢g}|  |¡}tj||  ddgddgg¡dd|d�}t|d d d	…d
f |ƒ d S )NrA   r¯   r¸   r'   r   r   rÃ   rj   r.   .r  r  r(   r(   r+   Útest_affine_transform17  r+  z+TestAffineTransform.test_affine_transform17c                 C   sd   |  g d¢g d¢g d¢g¡}tj||  ddgddgg¡dd|d�}t|d d d…d d d…f |ƒ d S )	NrA   r¯   r¸   r'   r   rÆ   rj   r.   r  r  r(   r(   r+   Útest_affine_transform18  s   
þÿ"z+TestAffineTransform.test_affine_transform18c                 C   s|   |j g d¢g d¢g d¢g|jd�}tj||  ddgddgg¡dd|d�}tj||  d	dgdd	gg¡dd
|d�}t||ƒ d S )NrA   r¯   r¸   rE   r'   r   rÆ   rj   ç       @rÊ   )r7   rT   r8   r  r   r  r(   r(   r+   Útest_affine_transform19  s   
þþÿÿz+TestAffineTransform.test_affine_transform19c                 C   sl   t |ƒr	t d¡ g d¢g d¢g d¢g}| |¡}tj|| dgdgg¡dd|d�}t|| d	d
g¡ƒ d S )Nú(https://github.com/cupy/cupy/issues/8394rA   r¯   r¸   r   r.   rÍ   rj   r   r/   ©r   rP   rQ   r7   r8   r  r   r  r(   r(   r+   Útest_affine_transform20  ó   
þ
ÿz+TestAffineTransform.test_affine_transform20c                 C   sl   t |ƒr	t d¡ g d¢g d¢g d¢g}| |¡}tj|| dgdgg¡dd|d�}t|| d	d
g¡ƒ d S )Nr0  rA   r¯   r¸   r.   r   rÍ   rj   r   r¶   r1  r  r(   r(   r+   Útest_affine_transform21,  r3  z+TestAffineTransform.test_affine_transform21c                 C   sF   |  g d¢¡}tj||  dgg¡dgd|d�}t||  g d¢¡ƒ d S )Nr‹   r.   r&   )r/   rj   ©r   r   r.   r  r  r(   r(   r+   Útest_affine_transform229  s
   ÿz+TestAffineTransform.test_affine_transform22c                 C   sP   |  g d¢¡}tj||  dgg¡dgd|d�}t|d d d… |  g d¢¡ƒ d S )Nr‹   r'   r&   r#  rj   r.   rŒ   r  r  r(   r(   r+   Útest_affine_transform23A  s
   ÿ"z+TestAffineTransform.test_affine_transform23c                 C   ó„   |  g d¢¡}tƒ �}| td¡ tj||  dg¡d|d�}W d   ƒ n1 s(w   Y  tj||  dgg¡d|d�}t||ƒ d S )Nr‹   ú@The behavior of affine_transform with a 1-D array .* has changedr.   r&   rj   ©r7   r   ÚfilterÚUserWarningr8   r  r   ©r;   r5   r=   r>   Úsuprù   rú   r(   r(   r+   Útest_affine_transform24I  ó   ÿüz+TestAffineTransform.test_affine_transform24c                 C   r8  )Nr‹   r9  r'   r&   rj   r:  r=  r(   r(   r+   Útest_affine_transform25U  r@  z+TestAffineTransform.test_affine_transform25c              	   C   s
  |  g d¢g d¢g d¢g¡}|dkrtj||d�}n|}| d¡}| d¡ }t||ƒj}|||fdd�}|||  g d	¢g¡fd
d�}	dd„ | |d¡D ƒ}
tj|||
|dd�}tj|||dd�}tj||	|dd�}|||fD ]}t	||  g d¢g d¢g d¢g¡ƒ qod S )Nr‹   r–   r™   r   rj   r.   ©r.   r   ©Úaxis)r)  r   r   r   c                 S   s   g | ]}t |ƒ‘qS r(   )rä   )Ú.0r*   r(   r(   r+   Ú
<listcomp>r  s    z?TestAffineTransform.test_affine_transform26.<locals>.<listcomp>)r&   Fr¥   r    rŒ   rš   )
r7   r8   rn   Úeyerm   r	   Úconcatrå   r  r   )r;   r5   r=   r>   r§   Útform_originalÚoffset_originalrH  Útform_h1Útform_h2Úoffsrù   rú   Úout3rp   r(   r(   r+   Útest_affine_transform26a  s:   
þ
þ
ÿ
ÿ
þÿz+TestAffineTransform.test_affine_transform26c                 C   s†   t |ƒr	t d¡ | g d¢g d¢g d¢g¡}t|ƒj}|| d¡| d¡ fdd�}||| g d	¢g¡fd
d�}tt	t
j||ƒ d S )NzCuPy does not raiser‹   r–   r™   r.   rB  r   rC  )ç      @r.   r   r   )r   rP   rQ   r7   r	   rH  rG  rm   Úassert_raisesÚ
ValueErrorr8   r  )r;   r=   r>   rH  rK  rL  r(   r(   r+   Útest_affine_transform27€  s   

þ
z+TestAffineTransform.test_affine_transform27Tzbyteorder is numpy-specificrs   c              	   C   s¼   |  d¡}| |¡| |¡ |j ¡ ¡|j|j ¡ fD ]@}tƒ �}| td¡ | ddg¡}t	j
|||d�}W d   ƒ n1 s@w   Y  |d u rK|n|}t|| ddgddgg¡ƒ qd S )N)r.   r.   r9  r   ru   )rm   rí   rÎ   rF   rì   r   r;  r<  r7   r8   r  r   )r;   r=   r>   rp   r>  Úmatrixrî   rï   r(   r(   r+   Ú9test_affine_transform_1d_endianness_with_output_parameterŽ  s   
þÿûözMTestAffineTransform.test_affine_transform_1d_endianness_with_output_parameterc                 C   s~   t  dg¡}|j|j ¡ t  |¡t  |¡ |j ¡ ¡fD ] }tj|t  dgg¡|d�}|d u r1|n|}t|t  dg¡ƒ qd S )Nr   ru   )	rR   r7   rF   rì   rí   rÎ   r8   r  r   )r;   r=   r>   rp   rî   rï   r(   r(   r+   Ú>test_affine_transform_multi_d_endianness_with_output_parameterŸ  s   þûzRTestAffineTransform.test_affine_transform_multi_d_endianness_with_output_parameterz+`out` of a different size is numpy-specificc                 C   sŒ   |j d|jd�}| d¡}tj|| dgg¡|d� t|d d… |ƒ t t	¡� tj|dgg|dd� W d   ƒ d S 1 s?w   Y  d S )Nr—   rE   )é   r   ru   )r³   )rv   r4   )
rS   rT   rm   r8   r  r7   r   rP   r
   ÚRuntimeError©r;   r=   r>   rp   r(   r(   r+   Ú"test_affine_transform_output_shape¬  s   
ÿ"ÿz6TestAffineTransform.test_affine_transform_output_shaperñ   c                 C   sP   |  dg¡}tj||  dgg¡dd�}|jt d¡u sJ ‚t||  dg¡ƒ d S r   )r7   r8   r  rF   rR   r   rY  r(   r(   r+   Ú(test_affine_transform_with_string_output¼  s   z<TestAffineTransform.test_affine_transform_with_string_outputr,   ©)r   r   ©r   r   )r&   r   )r/   éûÿÿÿ)r.   r1   c                 C   sš   t  ddgddgg¡}t  d¡}t  d¡|d d…d d…f< t  |¡|d d …df< t j||dd�}| |¡}| |¡}| |¡}ttj||d|d	�|ƒ d S )
Nr   r   r.   r/   ©r.   r/   r]  rC  r   rÜ   )rR   r7   ÚzerosrG  Úrollr   r8   r  )r;   r,   r5   r=   r*   Úaffinera   r(   r(   r+   Ú)test_affine_transform_shift_via_grid_wrapÃ  s   
ÿ



þz=TestAffineTransform.test_affine_transform_shift_via_grid_wrapc                 C   s¬   t  g d¢g d¢g¡}|d d d…d d d…f  ¡ }| |¡}| |¡}t  ddg¡}t  d¡|d d…d d…f< t  |j¡|d d …df< | |¡}ttj||d|d�|ƒ d S )Nr5  ©r/   r%   r˜   r&   r.   r/   r   rÜ   )	rR   r7   Úcopyr`  rG  r�   r   r8   r  )r;   r5   r=   r*   ra   rb  r(   r(   r+   Ú#test_affine_transform_shift_reflectÙ  s   
ÿ


þz7TestAffineTransform.test_affine_transform_shift_reflectN))rc   rd   re   rP   rf   rg   rh   r  r  r  r  r  r  r  r  r  r!  r"  r$  r%  r&  r(  r*  r,  r-  r/  r2  r4  r6  r7  r?  rA  rO  rS  r   rU  rV  rZ  r[  rc  rf  r(   r(   r(   r+   r  i  s�    














	
	
	
	
	













ÿ


ÿr  c                   @   s4  e Zd Zej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd	„ ƒZ	ej deddƒ¡d
d„ ƒZ
ej deddƒ¡ej dddg¡dd„ ƒƒZej deddƒ¡ej dddg¡ej dddg¡dd„ ƒƒƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej dg d¢¡ej deddƒ¡d d!„ ƒƒZej dg d¢¡ej deddƒ¡d"d#„ ƒƒZd$d%„ Zej deddƒ¡d&d'„ ƒZej deddƒ¡ej d(d)d*g¡d+d,„ ƒƒZej dg d-¢¡ej dedƒ¡d.d/„ ƒƒZd0S )1Ú	TestShiftr5   r   rD   c                 C   s4   |  dg¡}tj|dg|d�}t||  dg¡ƒ d S )Nr   rj   r   ©r7   r8   r,   r   r  r(   r(   r+   Útest_shift01ï  s   zTestShift.test_shift01c                 C   s6   |  dg¡}tj|dg|d�}t|| g d¢¡ƒ d S )Nr%   r   rj   r‰   ©rm   r8   r,   r   r7   r  r(   r(   r+   Útest_shift02õ  s   zTestShift.test_shift02c                 C   s4   |  dg¡}tj|d|d�}t|| g d¢¡ƒ d S )Nr%   r&   rj   r   rj  r  r(   r(   r+   Útest_shift03û  s   zTestShift.test_shift03c                 C   s6   |  g d¢¡}tj|d|d�}t||  g d¢¡ƒ d S )Nr‹   r   rj   rŒ   rh  r  r(   r(   r+   Útest_shift04  s   zTestShift.test_shift04rF   rT   rŽ   c                 C   sš   t ||ƒ}|jg d¢g d¢g d¢g|d�}|jg d¢g d¢g d¢g|d�}t|ƒj}||jdƒr<|d| 8 }|d| 8 }tj|ddg|d�}t||ƒ d S )	Nrx   rE   r‰   r�   r�   r   r   rj   )rl   r7   r	   r“   rF   r8   r,   r   r  r(   r(   r+   Útest_shift05  s&   

þþ
þþ
zTestShift.test_shift05r3   r   r   c           
      C   s¼   t jg d¢g d¢g d¢g|d�}t jg d¢g d¢g d¢g|d�}t|ƒj}||jdƒr7|d| 8 }|d| 8 }d}||d d …df< | |¡}| |¡}tj|ddg|||d	�}	t|	|ƒ d S )
Nrx   rE   r‰   r�   r�   rP  r   r   )r5   r3   r2   )rR   r7   r	   r“   rF   r8   r,   r   )
r;   r5   r3   rF   r=   r>   ra   r“   r2   rp   r(   r(   r+   Útest_shift_with_nonzero_cval  s,   
þþ
þþ


z&TestShift.test_shift_with_nonzero_cvalc                 C   sV   |  g d¢g d¢g d¢g¡}tj|ddg|d�}t||  g d¢g d¢g d	¢g¡ƒ d S )
Nr‹   r–   r™   r   r   rj   rŒ   rš   r›   rh  r  r(   r(   r+   Útest_shift060  ó   
þþzTestShift.test_shift06c                 C   sV   |  g d¢g d¢g d¢g¡}tj|ddg|d�}t||  g d¢g d¢g d¢g¡ƒ d S )Nr‹   r–   r™   r   r   rj   r    rh  r  r(   r(   r+   Útest_shift07:  rq  zTestShift.test_shift07c                 C   sV   |  g d¢g d¢g d¢g¡}tj|ddg|d�}t||  g d¢g d¢g d¢g¡ƒ d S )	Nr‹   r–   r™   r   rj   r    rŒ   rš   rh  r  r(   r(   r+   Útest_shift08D  rq  zTestShift.test_shift08c                 C   st   |  g d¢g d¢g d¢g¡}|dkrtj||d�}n|}tj|ddg|dd�}t||  g d¢g d	¢g d
¢g¡ƒ d S )Nr‹   r–   r™   r   rj   Fr¥   r    rŒ   rš   )r7   r8   rn   r,   r   r  r(   r(   r+   Útest_shift09N  s   
þþzTestShift.test_shift09r,   r\  c                 C   sV   t  ddgddgg¡}t j||dd�}| |¡}| |¡}ttj||d|d�|ƒ d S )	Nr   r   r.   r/   r]  rC  r   rÜ   )rR   r7   ra  r   r8   r,   )r;   r,   r5   r=   r*   ra   r(   r(   r+   Útest_shift_grid_wrap\  s   
ÿ

þzTestShift.test_shift_grid_wrapc                 C   s<   |  | d¡d¡}ttj||d|d�tj||d|d�ƒ d S )Né   )r˜   r%   r   rÜ   r   )rå   rS   r   r8   r,   )r;   r,   r5   r=   r*   r(   r(   r+   Útest_shift_grid_constant1m  s
   þz#TestShift.test_shift_grid_constant1c                 C   sN   |j g d¢g d¢g|jd�}|  g d¢g d¢g¡}ttj|dddd	�|ƒ d S )
Nr×   rØ   rE   rÙ   rÛ   )r'   r'   r   r   rÜ   )r7   rT   r   r8   r,   )r;   r=   r*   rÝ   r(   r(   r+   Útest_shift_grid_constant_order1x  s   
ÿÿ
ÿþz)TestShift.test_shift_grid_constant_order1c                 C   sd   t  g d¢g d¢g¡}|d d d…d d d…f  ¡ }| |¡}| |¡}ttj||jd|d�|ƒ d S )Nr5  rd  r&   r   rÜ   )rR   r7   re  r   r8   r,   r�   )r;   r5   r=   r*   ra   r(   r(   r+   Útest_shift_reflect‚  s   
ÿ

þzTestShift.test_shift_reflectr¦   FTc                 C   sr   |  d¡}td||d�}ttj||d d fi |¤Žd |d ƒ ttj|| d d fi |¤Žd |d ƒ d S )NrW  r   )r3   r5   r¦   r.   r   r   r&   )rS   Údictr   r8   r,   )r;   r5   r¦   r=   r*   Úkwargsr(   r(   r+   Útest_shift_nearest_boundary�  s   
$ÿ&ÿz%TestShift.test_shift_nearest_boundaryrß   c                 C   s–   t jdtd� dd¡}d}d}t |¡}| t j|||d�¡}| |¡}	tt	|| ƒg|	j
 ƒ}
tj||||d�|
 }ttj|	|||d�|dd	� d S )
Nrá   rE   r³   )rà   gffffffÀrJ   rK   rÜ   rL   rã   )rR   rS   rä   rå   rX   rY   r7   rZ   ræ   rç   rè   r8   r,   r   )r;   r5   r3   r=   Úx_npr,   r]   r^   ré   r*   rê   rÝ   r(   r(   r+   Útest_shift_vs_paddedž  s"   

ÿÿ
ýzTestShift.test_shift_vs_paddedN)rc   rd   re   rP   rf   rg   rh   ri  rk  rl  rm  rn  ro  rp  rr  rs  rt  ru  rw  rx  ry  r|  r~  r(   r(   r(   r+   rg  í  sV    




	
	
	
ÿÿ

rg  c                   @   s&  e Zd Zej deddƒ¡dd„ ƒZdd„ Zdd	„ Z	ej deddƒ¡ej d
ddg¡dd„ ƒƒZ
dd„ Zdd„ Zdd„ Zej dg d¢¡ej dg d¢¡dd„ ƒƒZej dddg¡ej dg d¢¡ej dg d¢¡dd „ ƒƒƒZej dd!d"g¡ejjd#d$„ ƒƒZed%d&d'�d(d)„ ƒZd*d+„ Zd,S )-ÚTestZoomr5   r   rD   c                 C   sÚ   dddgfD ]d}|  |jd|jd�d¡}tj|||d�}|jdks#J ‚| |dd d …f dk¡s2J ‚| |dd d …f d	t k¡sCJ ‚| |dd d …f d
t k¡sTJ ‚| |dt k¡s_J ‚| |dt k¡sjJ ‚qd S )Nr.   é   rE   )r˜   r˜   rj   )r±   r±   r&   r   rv  r˜   râ   )rå   rS   rT   r8   Úzoomr�   ÚallÚeps)r;   r5   r=   ÚzÚarrr(   r(   r+   Ú
test_zoom1¸  s   ""øzTestZoom.test_zoom1c                 C   s4   |  | d¡d¡}t t |d¡d¡}t||ƒ d S )Nr³   rÊ   r.   r'   )rå   rS   r8   r�  r   )r;   r=   r…  rp   r(   r(   r+   Ú
test_zoom2Ä  s   zTestZoom.test_zoom2c                 C   s^   |  ddgg¡}t |d¡}t |d¡}t||  ddgddgg¡ƒ t||  g d¢g¡ƒ d S )Nr   r.   rB  r¾   )r   r   r.   r.   )r7   r8   r�  r   )r;   r=   r…  rù   rú   r(   r(   r+   Ú
test_zoom3É  s
   zTestZoom.test_zoom3rF   rT   rŽ   c                 C   s¾   t ||ƒ}|jg d¢g d¢g d¢g|d�}t|ƒj}||jdƒr&|d| 8 }tƒ �}| td¡ tj	|| ddg¡d	d
|d�}W d   ƒ n1 sIw   Y  t
|d d d…d d d…f |ƒ d S )NrA   r¯   r¸   rE   r�   r�   r9  r'   r   rÆ   rj   r.   )rl   r7   r	   r“   rF   r   r;  r<  r8   r  r   )r;   r5   rF   r=   r>   r“   r>  rp   r(   r(   r+   Útest_zoom_affine01Ñ  s&   

þþ
ÿÿü"zTestZoom.test_zoom_affine01c                 C   s&   d}t j| ||f¡d| dd� d S )Nr—   ç      ð?r   rK   )r8   r�  r`  )r;   r=   Údimr(   r(   r+   Útest_zoom_infinityã  s   "zTestZoom.test_zoom_infinityc                 C   s6   |  d¡}d}tj||dd�}|  d¡}t||ƒ d S )N)r   r˜   r˜   )rŠ  r.  r.  r1   )r2   )r   r±   r±   )r`  r8   r�  r   )r;   r=   r…  r�  rp   Úrefr(   r(   r+   Útest_zoom_zoomfactor_oneè  s
   

z!TestZoom.test_zoom_zoomfactor_onec                 C   s,   |  d¡}d}t ||¡}|jdksJ ‚d S )N)r/   r²   r€  )gUUUUUUõ?gÑE]tÑõ?g�Âõ(\�ò?)r%   rG   é   )r`  r8   r�  r�   )r;   r=   r…  r�  rp   r(   r(   r+   Útest_zoom_output_shape_roundoffñ  s   
z(TestZoom.test_zoom_output_shape_roundoffr�  )rý   )r/   r˜   )r—   r.   )r—   r—   r3   )r   r   r   r   r   r   r   r   c                 C   s^   t jddgddggt jd�}t  |t  |¡¡}| |¡}| |¡}ttj||d|d�|ƒ d S )Nr   r   r.   r/   rE   rI   )rR   r7   rT   Úkronrm   r   r8   r�  )r;   r�  r3   r=   r}  ra   r*   r(   r(   r+   Útest_zoom_by_int_order0÷  s   
	ÿÿ

þz TestZoom.test_zoom_by_int_order0r�   r_  )r%   r%   )r   r   r   r   r   c              
   C   sV   t jt  |¡td� |¡}| |¡}ttj||d|dd�| t  	|t  
|¡¡¡ƒ d S )NrE   r   T)r5   r3   Ú	grid_mode)rR   rS   Úprodrä   rå   r7   r   r8   r�  r‘  rm   )r;   r�   r�  r3   r=   r}  r*   r(   r(   r+   Útest_zoom_grid_by_int_order0  s   
þz%TestZoom.test_zoom_grid_by_int_order0r   r   c                 C   s`   |  |jd|jd�d¡}tjtdd�� tj|d|dd�f W d   ƒ d S 1 s)w   Y  d S )	Nr¶   rE   )r/   r/   zIt is recommended to use mode)Úmatchr.   T)r3   r“  )rå   rS   rT   rP   Úwarnsr<  r8   r�  )r;   r3   r=   r*   r(   r(   r+   Útest_zoom_grid_mode_warnings  s   ÿ"þz%TestZoom.test_zoom_grid_mode_warningsTz!inplace output= is numpy-specificrs   c                 C   s,   |  | d¡d¡}tj|d| d¡d� dS )zTicket #643r³   rÊ   r.   rÆ   ru   N)rå   rS   r8   r�  r`  )r;   r=   r*   r(   r(   r+   Útest_zoom_output_shape%  s   zTestZoom.test_zoom_output_shapec                 C   s:   |  d¡}d}t |t |¡¡}t ||¡}t||ƒ d S )Ng      $@r.   )rS   r8   r�  rR   Úarrayr   )r;   r=   rÑ   ÚfactorÚactualra   r(   r(   r+   Útest_zoom_0d_array+  s
   
zTestZoom.test_zoom_0d_arrayN)rc   rd   re   rP   rf   rg   rh   r†  r‡  rˆ  r‰  rŒ  rŽ  r�  r’  r•  Úthread_unsafer˜  r   r™  r�  r(   r(   r(   r+   r  ¶  s0    
	

r  c                   @   s  e Zd Zej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡ej dd	d
g¡dd„ ƒƒZ	ej deddƒ¡dd„ ƒZ
ej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZej deddƒ¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )Ú
TestRotater5   r   rD   c                 C   s@   |j g d¢g d¢g d¢g|jd�}tj|d|d�}t||ƒ d S )Nr    ©r   r   r   r   rE   r   rj   ©r7   rT   r8   Úrotater   r  r(   r(   r+   Útest_rotate016  s   
þþzTestRotate.test_rotate01c                 C   sh   |j g d¢g d¢g d¢g|jd�}|j g d¢g d¢g d¢g d¢g|jd�}tj|d|d�}t||ƒ d S )Nr    )r   r   r   r   rE   ©r   r   r   ©r   r   r   éZ   rj   r¡  ©r;   r5   r=   r>   ra   rp   r(   r(   r+   Útest_rotate02>  s   
þþ
ýýzTestRotate.test_rotate02rF   rT   rŽ   c                 C   s¢   t ||ƒ}|jg d¢g d¢g d¢g|d�}|jg d¢g d¢g d¢g d¢g d¢g|d�}t|ƒj}||jdƒrB|d| 8 }|d| 8 }tj|d|d	�}t||ƒ d S )
N©r   r   r   r   r   ©r   r   r   r   r   rE   r¤  r¥  r�   r�   r¦  rj   )rl   r7   r	   r“   rF   r8   r¢  r   r  r(   r(   r+   Útest_rotate03J  s*   

þþ
üü
zTestRotate.test_rotate03c                 C   sd   |j g d¢g d¢g d¢g|jd�}|j g d¢g d¢g d¢g|jd�}tj|dd|d�}t||ƒ d S )Nr©  rª  rE   ©r   r   r   r   r   r¦  F)rå   r5   r¡  r§  r(   r(   r+   Útest_rotate04]  s   
þþ
þþzTestRotate.test_rotate04c                 C   s¼   t  d¡}tdƒD ]}t jg d¢g d¢g d¢g d¢gt jd�|d d …d d …|f< q	| |¡}|jg d¢g d¢g d¢g|jd�}tj|d|d	�}tdƒD ]}t|d d …d d …|f |ƒ qKd S )
N)r%   r/   r/   r/   r¤  r¥  rE   r    r   r¦  rj   ©rR   r  rh   r7   rT   r8   r¢  r   ©r;   r5   r=   r>   Úira   rp   r(   r(   r+   Útest_rotate05h  s(   

ýý

þþÿzTestRotate.test_rotate05c                 C   s¼   t  d¡}tdƒD ]}t jg d¢g d¢g d¢gt jd�|d d …d d …|f< q	| |¡}|jg d¢g d¢g d¢g d¢g|jd�}tj|d|d	�}tdƒD ]}t|d d …d d …|f |ƒ qKd S )
N)r/   r%   r/   r/   r    r   rE   r¤  r¥  r¦  rj   r®  r¯  r(   r(   r+   Útest_rotate06x  s(   

þþ

ýýÿzTestRotate.test_rotate06c                 C   sš   |j g d¢g d¢g d¢ggd |jd�}t|ƒj}||dƒ}|j g d¢g d¢g d¢g d¢g d¢ggd |jd�}||dƒ}tj|dd	|d
�}t||ƒ d S )Nr©  rª  r.   rE   ©r.   r   r   r¤  r¥  r¦  r]  )Úaxesr5   ©r7   rT   r	   Úpermute_dimsr8   r¢  r   ©r;   r5   r=   r>   r¶  ra   rp   r(   r(   r+   Útest_rotate07ˆ  s.   
þþþ


üüü
zTestRotate.test_rotate07c                 C   sš   |j g d¢g d¢g d¢ggd |jd�}t|ƒj}||dƒ}|j g d¢g d¢g d¢ggd |jd�}t|ƒj}||dƒ}tj|ddd	|d
�}t||ƒ d S )Nr©  rª  r.   rE   r³  r¬  r¦  r]  F)r´  rå   r5   rµ  r·  r(   r(   r+   Útest_rotate08˜  s,   
þþþ


þþþ

zTestRotate.test_rotate08c                 C   sj   |j g d¢g d¢g d¢gd |jd�}ttƒ� tj|dd|jfd� W d   ƒ d S 1 s.w   Y  d S )Nr©  rª  r.   rE   r¦  r   )r´  )r7   rT   rQ  rR  r8   r¢  rè   )r;   r=   r>   r(   r(   r+   Útest_rotate09§  s   
þþþ
"ÿzTestRotate.test_rotate09c              	   C   s¬   |  |jd|jd�d¡}|jg d¢g d¢g d¢g d¢g d¢gg d¢g d¢g d	¢g d
¢g d¢gg d¢g d¢g d¢g d¢g d¢gg|jd�}tj|ddd�}t||ddd� d S )Né-   rE   )r/   r˜   r/   )r)  r)  r)  )g|ÀÕS2@g|ÀÕS2@g>àê)!@)g9ÚHD¾°%@g9ÚHD¾°'@g9ÚHD¾°)@)gõc™~Å@gõc™~Å@gz‰±L¿b @)gä[ic6ò*@gä[ic6ò,@gä[ic6ò.@)g      5@g      6@g      7@)gRKÎä†<@gRKÎä†=@gRKÎä†>@)g¡�Ó,PçA@g¡�Ó,PgB@g¡�Ó,PçB@)gã’ÛÝ '?@grÉínÐ@@grÉínÐ“@@)gñýG…µ¹A@gñýG…µ9B@gñýG…µ¹B@r³   F)Úanglerå   g�íµ ÷Æ°>g�íµ ÷ÆÀ>rM   )rå   rS   rT   r7   r8   r¢  r   )r;   r=   r>   ra   rp   r(   r(   r+   Útest_rotate10®  s0   
üüüöòzTestRotate.test_rotate10c                 C   sF   t |ƒr	t d¡ t | d¡d¡}t t |d¡d¡}t||ƒ d S )Nz(https://github.com/cupy/cupy/issues/8400r˜   )r˜   r   é´   iLÿÿÿ)	r   rP   rQ   rR   ÚtilerS   r8   r¢  r   )r;   r=   rÑ   rÒ   r(   r(   r+   Útest_rotate_exact_180Æ  s
   
z TestRotate.test_rotate_exact_180N)rc   rd   re   rP   rf   rg   rh   r£  r¨  r«  r­  r±  r²  r¸  r¹  rº  r½  rÀ  r(   r(   r(   r+   rŸ  4  s*    







rŸ  )'r  ÚnumpyrR   Únumpy.testingr   Úscipy._lib._array_apir   r   r   r   r   r   r	   rP   r
   rQ  Úscipy.ndimager8   Ú r   Úscipy.conftestr   rf   r   ÚusefixturesÚ
pytestmarkrƒ  rX   r   rg   rh   ri   r{   rÖ   rô   r  rg  r  rŸ  r(   r(   r(   r+   Ú<module>   sT    ÿú
I
&  
Mw    J~