U
    ;vf                     @   sd   d Z ddlZddlmZ ddlmZmZ G dd dZG dd dZG d	d
 d
Z	G dd dZ
dS )zfTest functions for fftpack.helper module

Copied from fftpack.helper by Pearu Peterson, October 2005

    N)assert_array_almost_equal)fftpic                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestFFTShiftc              
   C   s   ddddddddd	g	}dddd	dddddg	}t t|| t t|| dddddd
dddd	g
}d
dddd	dddddg
}t t|| t t|| d S )Nr               r   r   fftshift	ifftshift)selfxy r   ?/tmp/pip-unpacked-wheel-sdaoq5e2/numpy/fft/tests/test_helper.pytest_definition   s    zTestFFTShift.test_definitionc                 C   s2   dD ](}t j|f}ttt|| qd S )N)r   r	   	   d      )nprandomr   r   r   r   )r   nr   r   r   r   test_inverse   s    zTestFFTShift.test_inversec                 C   s   dddgdddgddd	gg}d	ddgdddgdddgg}t tj|d
d| t tj|ddtj|dd t tj|d
d| t tj|ddtj|dd t t|| t t|| d S )Nr   r   r   r   r	   r
   r   r   r   r   r   axesr   r   )r   freqsZshiftedr   r   r   test_axes_keyword   s    zTestFFTShift.test_axes_keywordc                 C   sv  ddgddgddgg}ddgddgddgg}t tj|dd| t tj|dd| t tj|dd| t tj|dgd| ddgddgddgg}t tj|dd| t tj|dd| ddgddgddgg}t tj|d	d| t tj|d	d| t tj|ddgd| t tj|ddgd| t tj|d
d| t tj|d
d| t t|| t t|| d
S )z1 Test 2D input, which has uneven dimension sizes r   r   r   r   r	      r    r"   r   Nr   )r   r#   Z
shift_dim0Z
shift_dim1Zshift_dim_bothr   r   r   test_uneven_dims)   s<    zTestFFTShift.test_uneven_dimsc                    s   ddl mmm m d
 fdd	}d fdd	}tdD ]Z}tdD ]L}d	D ]B}tj||}t	t
||||| t	t
||||| q\qTqHdS )z\ Test that the new (>=v1.15) implementation (see #10073) is equal to the original (<=v1.14) r   )asarrayconcatenatearangetakeNc           	         s~   | }|j }|dkr$tt|}nt|tr4|f}|}|D ]<}|j| }|d d } || |f}|||}q<|S )z& How fftshift was implemented in v1.14Nr   r   ndimlistrange
isinstanceintshape	r   r!   tmpr,   r   kr   p2Zmylistr)   r'   r(   r*   r   r   original_fftshiftZ   s    

z>TestFFTShift.test_equal_to_original.<locals>.original_fftshiftc           	         s   | }|j }|dkr$tt|}nt|tr4|f}|}|D ]@}|j| }||d d  } || |f}|||}q<|S )z( How ifftshift was implemented in v1.14 Nr   r   r+   r2   r6   r   r   original_ifftshiftj   s    

z?TestFFTShift.test_equal_to_original.<locals>.original_ifftshift   )r   r   Nr"   r   )N)N)Z
numpy.corer'   r(   r)   r*   r.   r   r   Zrandr   r   r   r   )r   r7   r8   ijZaxes_keywordinpr   r6   r   test_equal_to_originalV   s    z#TestFFTShift.test_equal_to_originalN)__name__
__module____qualname__r   r   r$   r&   r=   r   r   r   r   r      s
   
-r   c                   @   s   e Zd Zdd ZdS )TestFFTFreqc              
   C   s   ddddddddd	g	}t d
td
 | t d
t td
t | dddddddddd	g
}t dtd | t dt tdt | d S )Nr   r   r   r   r	   r
   r   r   r   r   r   
   )r   r   Zfftfreqr   r   r   r   r   r   r      s    zTestFFTFreq.test_definitionNr>   r?   r@   r   r   r   r   r   rA      s   rA   c                   @   s   e Zd Zdd ZdS )TestRFFTFreqc                 C   s~   dddddg}t dtd | t dt tdt | ddddddg}t dtd | t dt tdt | d S )	Nr   r   r   r   r	   r   r%   rB   )r   r   Zrfftfreqr   rC   r   r   r   r      s    zTestRFFTFreq.test_definitionNrD   r   r   r   r   rE      s   rE   c                   @   s   e Zd Zdd ZdS )
TestIRFFTNc                 C   s2   t jd\}}|d|  }d}tj||d d S )N)r   r9          y              ?)r   r    )r   r   r   Zirfftn)r   arZaiar!   r   r   r   test_not_last_axis_success   s    z%TestIRFFTN.test_not_last_axis_successN)r>   r?   r@   rK   r   r   r   r   rF      s   rF   )__doc__Znumpyr   Znumpy.testingr   r   r   r   rA   rE   rF   r   r   r   r   <module>   s   }