U
    /e                      @   s&  d dl mZ d dlZd dlZd dlmZ d dlZ	d dl
mZ d dlmZ d dlmZmZ dddd	d
dgZddddddddgZedddZejeddZejeddZejeddZejdedd Zejdedd Zejdedd  Zejded!d" Zejded#d$ Zd%d& Z ejdeejd'd(d)gd*d+ Z!ejd,d-d.gejdeejd'd(d)gd/d0 Z"ejd,d-d.gejdeejd'd(d)gd1d2 Z#ejd3d4d5d6d7d8gejd9d:d;d5ej$ gejd<d=d> d?d> gd@dA Z%ejd3d4d5d6d7d8gejd9d:d;d5ej$ gejd<dBd> dCd> gdDdE Z&ejddFdGgejdHdd d4d5dIdJdKdLgejdMdNdOgdNdPgdNdNggdQdR Z'ejdSdTdUgejdHdd d4d5dIdJdKdLgejdMdNdOgdNdPgdNdNggdVdW Z(dS )X    )combinations_with_replacementN)normalize_chunks)fft_wrap)	assert_eq	same_keysfftZifftrfftZirfftZhfftZihfftZfft2Zifft2ZfftnZifftnZrfft2Zirfft2ZrfftnZirfftnd   
   )   r
   chunks)r
   r   )r
   r
   funcnamec              
   C   sP   t tj| }tjtdd}t|jD ]&}tt	 |||d W 5 Q R X q$d S )N)   r   r   axis)
getattrdar   
from_arraynparrrangendimpytestraises
ValueError)r   da_fftZbad_darri r   =/tmp/pip-unpacked-wheel-dbjnr7gq/dask/array/tests/test_fft.pytest_cant_fft_chunked_axis   s
    r   c                 C   s.   t tj| }t tj| }t|t|t d S N)r   r   r   npr   darrr   r   r   np_fftr   r   r   test_fft)   s    r%   c                 C   s   t tjj| }t tj| }t|t|t t|td|td t|tddd|tddd t|tddd|tddd d S )N)   	   r   r   axes)      )r   daskarrayr   r!   r   darr3r   r#   r   r   r   test_fft2n_shapes1   s     r0   c                 C   s   t tj| }t tj| }t|td|td t|td|td t|tdd|tdd t|tddd|tddd t|tddd|tddd t|tddd|tddd d S )Nr      r   r   r+   )r   r   r   r!   r   r"   r   darr2r#   r   r   r   test_fft_n_kwarg=   s    r3   c                 C   sf   t tj| }t|td|tds&tt|tddd|tdddsHtt|td|tdrbtd S )Nr   r   r   r1   )r   r   r   r   r"   AssertionErrorr2   )r   r   r   r   r   test_fft_consistent_namesJ   s    "r5   c                	   C   s$   t t ttj W 5 Q R X d S r    )r   r   r   r   r!   Zonesr   r   r   r   test_wrap_bad_kindS   s    r6   dtypeZfloat32Zfloat64c                 C   s  t tj| }t tj| }d}d}tjt||d|}tj||d}td|j	D ]}t
t|j	|D ]}	t|}
|	D ]}|| |
|< qx||
}tt|	t|	k rtt |||	d W 5 Q R X qh|||	d}|||	d}|j|jkst|j|jkstt|| qhqTd S )N)   r&   r'   )   r9   r9   )r7   r   r   r)   )r   r!   r   r   arangeprodreshaper   r   r   r   listrechunklensetr   r   r   r7   r4   shaper   )r   r7   r$   r   rA   
chunk_sizeadZnum_axesr*   csr   Zd2rZerr   r   r   test_nd_ffts_axesX   s(    
rG   modnamez	numpy.fftscipy.fftpackc           	   
   C   s  t | }zt||}W n, tk
rD   t d|  d| d Y nX t|}t|}t|}| dkrd|krt 	t
 t| W 5 Q R X n
t|}||j||jkst||j||jkstt|||| t||dd||dd t||dd||dd t||t|d d	||t|d d	 t||d|jd d d
|||jd d d	 t||d|jd d d
||d|jd d d
 d S )N`` missing function ``.rI   r   r   r   r   )n)r   rM   )r   importorskipr   AttributeErrorskipr"   astyper2   r   r   r   r   r7   r4   rA   r   r?   	rH   r   r7   Zfft_modfuncZdarrcZdarr2cZnparrcZwfuncr   r   r   test_wrap_fftst   s4    



*rT   c           	   
   C   s@  t | }zt||}W n, tk
rD   t d|  d| d Y nX t|tj}t	|t	j}t
|}t|}||j||jkst||j||jkstt|||| t||dd||dd t||dd||dd t|||jd d |jd d fd|||jd d |jd d fd d S )	NrJ   rK   rL   r(   r)   r   r   r   r   )r   rN   r   rO   rP   r"   rQ   r>   rA   r2   r   r   r7   r4   r   rR   r   r   r   test_wrap_fftns   s$    

""rV   rM   r      r9      r8   rD   g      ?g      ?cc                 C   s   | S r    r   mr   r   r   <lambda>       r\   c                 C   s   d| d fS )Nr   r   rZ   r   r   r   r\      r]   c                 C   sL   || }t j| |}tjj| ||d}t||j|jks>tt|| d S )Nr   )	r!   r   Zfftfreqr   r   rA   r   r4   r   rM   rD   rY   Zr1Zr2r   r   r   test_fftfreq   s
    r_   c                 C   s   | d d fS )NrW   r   r   rZ   r   r   r   r\      r]   c                 C   s   d| d fS )Nr   rW   r   rZ   r   r   r   r\      r]   c                 C   sV   dd || D }t j| |}tjj| ||d}t||j|jksHtt|| d S )Nc                 S   s   g | ]}|d kr|qS )r   r   ).0cir   r   r   
<listcomp>   s      z!test_rfftfreq.<locals>.<listcomp>r   )	r!   r   Zrfftfreqr   r   rA   r   r4   r   r^   r   r   r   test_rfftfreq   s
    rc   fftshift	ifftshiftr*   rU   )r   rW   )r   rW   )r   r   rW   zshape, chunks)r   rX   r8   )rW   r9      )rW   rX   rf   c                 C   s   t tj| }t tj| }tt||}tj||d}|||}|||}	t|j	|	j	D ]B\}
}t
|
dkrt
|dkst||
kstq^t
|dks^tq^t|	| d S Nr   r   )r   r!   r   r   r:   r;   r<   r   zipr   r?   r4   r   )r   rA   r   r*   Znp_funcZda_funcrC   rD   Za_rd_reach_d_chunkseach_d_r_chunksr   r   r   test_fftshift   s    

rl   zfuncname1, funcname2)rd   re   )re   rd   c                 C   s   t tj| }t tj|}tt||}tj||d}|||||}	t|j	|	j	D ]B\}
}t
|
dkrt
|dks~t||
kstqZt
|dksZtqZt|	| d S rg   )r   r   r   r!   r:   r;   r<   r   rh   r   r?   r4   r   )Z	funcname1Z	funcname2rA   r   r*   Zda_func1Zda_func2rC   rD   ri   rj   rk   r   r   r   test_fftshift_identity   s    	rm   ))	itertoolsr   Znumpyr!   r   Z
dask.arrayr.   r   Zdask.array.fftr-   Zdask.array.corer   r   Zdask.array.utilsr   r   Zall_1d_funcnamesZall_nd_funcnamesr:   r<   r   r   r"   r2   r/   markZparametrizer   r%   r0   r3   r5   r6   rG   rT   rV   pir_   rc   rl   rm   r   r   r   r   <module>   s   
	



  