a
    BCCfR                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ eejdgZejjZdd	 Zd
d ZG dd dZG dd dZeddejdejej ej!ej"ej#ej$gejdddgejdejej%ej&ej'ej(ej)gdd Z*G dd dZ+eddejdejej'ej,ej-gdd Z.eddgd G d!d" d"Z/eddgd ejdejej'ej,ej-ej&ej)ej0ej1ej2ej3g
d#d$ Z4dS )%    N)random)assert_array_almost_equalassert_allclose)raises)array_api_compatible)array_namespacesizexp_assert_closexp_assert_equalskip_if_array_apic                 C   sz   | t j t jt jt jt jt jt jt jt jt j	t j
t jfv r@|j}n6| t jt jt jt jt jt jfv rh|j}ntd|  |S )NzUnknown FFT function: )fftfftnfft2ifftifftnifft2hffthfftnhfft2irfftirfftnirfft2
complex128rfftrfftnrfft2ihfftihfftnihfft2float64
ValueError)funcxpdtype r$   V/var/www/html/django/DPS/env/lib/python3.9/site-packages/scipy/fft/tests/test_basic.pyget_expected_input_dtype   s    r&   c                 C   sR   t | }dtj t|t|  }t|dd| }tj| t| ddS )Ny                 axis)lennppiZarangefloatZreshapesumexp)xLZphaser$   r$   r%   fft1%   s    r3   c                   @   s   e Zd Zdd ZdS )TestFFTShiftc                 C   sD   |j g d|jd}|jdkr0tttj|d ntttj|d d S )Nr(         r#   torchr   )asarrayr   __name__assert_raisesRuntimeErrorr   r    )selfr"   r1   r$   r$   r%   
test_fft_n.   s    
zTestFFTShift.test_fft_nN)r;   
__module____qualname__r?   r$   r$   r$   r%   r4   ,   s   r4   c                   @   s  e Zd Zdd Zdd Zdd Zeddgd	d
d Zeddgd	dd Zeddgd	dd Z	eddgd	dd Z
dd Zdd Zeddgd	dd Zeddgd	dd Zeddgd	dd Zeddgd	dd Zdd Zd d! Zeddgd	d"d# Zeddgd	d$d% Zeddgd	d&d' Zeddgd	d(d) Zd*d+ Zeddgd	ejd,ejejejejgd-d. Z eddgd	ejd,ej!ej"gd/d0 Z#eddgd	ejd,ejejejejgd1d2 Z$eddgd	ejd,ej%ej&ej'ej(ej)ej*ej!ej"gd3d4 Z+d5d6 Z,ed7d8ejd9e-j.e-j/gd:d; Z0ejd9d<d=gd>d? Z1ejd9d@dAgdBdC Z2dDS )E	TestFFT1Dc              	   C   s   d}| t|dt|  }| t|}td|D ]^}ttt|d| |d| ddd ttt|d| ||d| ddd q6d S )Ni                 ?r(   r   g&.>rtolZatol)r:   r   ranger	   r   r   r   r   )r>   r"   maxlenr1   Zxrir$   r$   r%   test_identity8   s    ,zTestFFT1D.test_identityc              	   C   s   t ddt d  }|t|}||}tt|| ttj|dd| ttj|dd|||jd|jd  ttj|dd|d  d S )N   rC   backwardnormorthor8   forward)r   r:   r3   r	   r   sqrtr   r>   r"   r1   expectr$   r$   r%   test_fft@   s    
zTestFFT1D.test_fftc                 C   s\   | tddtd  }ttt|| dD ]"}ttjtj||d|d| q4d S )NrJ   rC   rK   rN   rO   rL   )r:   r   r	   r   r   r>   r"   r1   rM   r$   r$   r%   	test_ifftJ   s    zTestFFT1D.test_ifftr9   1torch.fft not yet implemented by array-api-compatreasonsc              	   C   s   | tddtd  }tjtj|dddd}tt|| ttj|dd| ttj|dd|||j d	|jd
  ttj|dd|d	  d S NrJ      rC   r(   r)   r   rK   rL   rN   X  r8   rO   )r:   r   r   r	   r   rP   r   rQ   r$   r$   r%   	test_fft2P   s    zTestFFT1D.test_fft2c              	   C   s   | tddtd  }tjtj|dddd}tt|| ttj|dd| ttj|dd|||j d	|jd
  ttj|dd|d	  d S rZ   )r:   r   r   r   r	   r   rP   r   rQ   r$   r$   r%   
test_ifft2[   s    zTestFFT1D.test_ifft2c              	   C   s   | tddtd  }tjtjtj|dddddd}tt|| ttj|dd| ttj|d	d|||j d
|jd  ttj|dd|d
  d S NrJ   r\   
   rC   r6   r)   r(   r   rK   rL   rN   p  r8   rO   )r:   r   r   r	   r   rP   r   rQ   r$   r$   r%   	test_fftnf   s    "zTestFFT1D.test_fftnc              	   C   s   | tddtd  }tjtjtj|dddddd}tt|| ttj|dd| ttj|d	dt|||j d
|jd  ttj|dd|d
  d S r`   )r:   r   r   r   r	   r   rP   r   rQ   r$   r$   r%   
test_ifftnq   s    "zTestFFT1D.test_ifftnc              
   C   s   |j td|jd}t|dt| fD ]}dD ]B}ttj|||dtj|j ||jd||dd |d d   q0ttj||ddtj||d||j ||jd  q(d S )	N   r8   r6   )NrK   rN   rO   nrM   r(   rN   )rh   )	r:   r   r   r   r	   r   r   r   rP   )r>   r"   r1   rh   rM   r$   r$   r%   	test_rfft~   s    "zTestFFT1D.test_rfftc                 C   sP   | td}ttt|| dD ]"}ttjtj||d|d| q(d S )NrJ   rT   rL   )r:   r   r	   r   r   r   rU   r$   r$   r%   
test_irfft   s    zTestFFT1D.test_irfftc              	   C   s   |j td|jd}t|j ||jdd d d df }tt|| ttj|dd| ttj|dd|||j d|jd  ttj|dd|d  d S 	Nr[   r8      rK   rL   rN   r]   rO   )	r:   r   r   r   r   r   r	   r   rP   rQ   r$   r$   r%   
test_rfft2   s    &zTestFFT1D.test_rfft2c                 C   sP   | td}ttt|| dD ]"}ttjtj||d|d| q(d S Nr[   rT   rL   )r:   r   r	   r   r   r   rU   r$   r$   r%   test_irfft2   s    zTestFFT1D.test_irfft2c              	   C   s   |j td|jd}t|j ||jdd d d d d df }tt|| ttj|dd| ttj|dd|||j d|jd  ttj|dd|d  d S 	Nra   r8      rK   rL   rN   rc   rO   )	r:   r   r   r   r   r   r	   r   rP   rQ   r$   r$   r%   
test_rfftn   s    ,zTestFFT1D.test_rfftnc                 C   sP   | td}ttt|| dD ]"}ttjtj||d|d| q(d S Nra   rT   rL   )r:   r   r	   r   r   r   rU   r$   r$   r%   test_irfftn   s    zTestFFT1D.test_irfftnc              	   C   s   t ddt d  }tt d|t df}t||d d d  f}||}||}|t|}tt|| ttj|dd| ttj|dd||	|jd|j
d	  ttj|d
d|d  d S )N   rC   r(   r'   rK   rL   rN   rJ   r8   rO   )r   r,   concatenateconjr:   realr   r	   r   rP   r   )r>   r"   r1   x_hermrR   r$   r$   r%   	test_hfft   s    

zTestFFT1D.test_hfftc                 C   s   t ddt d  }tt d|t df}t||d d d  f}||}||}ttt|| dD ]"}ttjtj||d|d| qvd S )Nru   rC   r(   r'   rT   rL   )	r   r,   rv   rw   r:   r	   r   r   r   )r>   r"   r1   ry   rM   r$   r$   r%   
test_ihfft   s    

zTestFFT1D.test_ihfftc                 C   sP   | td}ttt|| dD ]"}ttjtj||d|d| q(d S rn   )r:   r   r	   r   r   r   rU   r$   r$   r%   
test_hfft2   s    zTestFFT1D.test_hfft2c              	   C   s   |j td|jd}t|j ||jdd d d df }tt|| ttj|dd| ttj|dd|||j d|jd  ttj|dd|d  d S rk   )	r:   r   r   r   r   r   r	   r   rP   rQ   r$   r$   r%   test_ihfft2   s    &zTestFFT1D.test_ihfft2c                 C   sP   | td}ttt|| dD ]"}ttjtj||d|d| q(d S rs   )r:   r   r	   r   r   r   rU   r$   r$   r%   
test_hfftn   s    zTestFFT1D.test_hfftnc              	   C   s   |j td|jd}t|j ||jdd d d d d df }t|t| t|tj|dd ttj|dd|||j d|jd  ttj|dd|d  d S rp   )	r:   r   r   r   r   r   r	   r   rP   rQ   r$   r$   r%   test_ihfftn   s    ,zTestFFT1D.test_ihfftnc           
      C   sl   t ||}|jtd|d}g d}t|}|D ]6}||j||d}|j|||d|d}	t||	 q0d S )Nra   r8   )r   r(   r6   r   r6   r(   )r(   r   r6   r(   r6   r   )r6   r   r(   )r6   r(   r   axes)r&   r:   r   r   permute_dimsr	   )
r>   opr"   r#   r1   r   xp_testaop_trtr_opr$   r$   r%   _check_axes   s    
zTestFFT1D._check_axesr   c                 C   s   |  || d S Nr   r>   r   r"   r$   r$   r%   test_axes_standard  s    zTestFFT1D.test_axes_standardc                 C   s   |  || d S r   r   r   r$   r$   r%   test_axes_non_standard  s    z TestFFT1D.test_axes_non_standardc           	         s   t ||}|jtd|dg d}t}|D ]t t fddtjD }||j d|d d dd	}|j||d d  d d d	 d}t|| q0d S )
N         r8   r   r   r   c                    s4   g | ],}| d d v r&dj |  nj | qS Nr6   shape.0axr   r1   r$   r%   
<listcomp>  s   zBTestFFT1D.test_axes_subset_with_shape_standard.<locals>.<listcomp>r   r6   r   r(   sr   	r&   r:   r   r   tuplerF   ndimr   r	   	r>   r   r"   r#   r   r   r   r   r   r$   r   r%   $test_axes_subset_with_shape_standard  s    
 z.TestFFT1D.test_axes_subset_with_shape_standardc           	         s   t ||}|jtd|dg d}t}|D ]t t fddtjD }||j d|d d dd	}|j||d d  d d d	 d}t|| q0d S )
Nr   r8   r   c                    s4   g | ],}| d d v r&dj |  nj | qS r   r   r   r   r$   r%   r   .  s   zFTestFFT1D.test_axes_subset_with_shape_non_standard.<locals>.<listcomp>r   r6   r   r   r   r   r$   r   r%   (test_axes_subset_with_shape_non_standard!  s    
 (z2TestFFT1D.test_axes_subset_with_shape_non_standardc                 C   s   |j td|jd}t|}|j|}t|d }tjtj	ftj
tjftjtjfg}|D ]\}}|tjkr|j ||jd}|j|}t|dt| fD ]<}dD ]2}	||||	d}
||
||	d}
t|j|
| qqqZd S )NrJ   r8   r6   rT   rg   )r:   r   r   r   ZlinalgZvector_normr   r   r   r   r   r   r   r   r	   )r>   r"   r1   r   Zx_normrh   Z
func_pairsZforwbackrM   tmpr$   r$   r%   test_all_1d_norm_preserving5  s"    



z%TestFFT1D.test_all_1d_norm_preservingTZnp_onlyr#   c                 C   s   t d|}tjtjtjtji}||| }tt|}t	t
|}tt||jd }t|| t|| t|| |j|jksJ |jttj|jksJ |jttj|jksJ d S )NrJ   r   )r   astyper,   float16	complex64
longdoubleclongdoubler   r   r   r   r   r   r   r   r#   Zresult_typefloat32)r>   r#   r1   Z
out_dtypesZ	x_complexres_fftres_rfftres_hfftr$   r$   r%   test_dtypes_nonstandardL  s    


z!TestFFT1D.test_dtypes_nonstandardr   r   c                 C   sr   |j tdt||d}tt|}tt||jd }ddd| }t	|||dd t	|||dd d S )NrJ   r8   r   iUMu?:0yE>)r   r   rD   )
r:   r   getattrr   r   r   r   r   r   r	   )r>   r#   r"   r1   r   r   rE   r$   r$   r%   test_dtypes_real^  s    zTestFFT1D.test_dtypes_realr   r   c                 C   sJ   |j tdt||d}tt|}ddd| }t|||dd d S )NrJ   r8   r   r   )r   r   r   rD   )r:   r   r   r   r   r	   )r>   r#   r"   r1   r   rE   r$   r$   r%   test_dtypes_complexi  s    zTestFFT1D.test_dtypes_complexN)3r;   r@   rA   rI   rS   rV   r   r^   r_   rd   re   ri   rj   rm   ro   rr   rt   rz   r{   r|   r}   r~   r   r   pytestmarkparametrizer   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%   rB   6   s   

	
	
	

	

	








rB   Tr   r#   orderFznon-contiguousr   c                 C   s   t jd}|dddj| dd}|dkr8t |}n"|d d d }t |d d d }|jd	rt	d
D ]&}|||d}|||d}t
|| qnn`|jdrg d}	|jdr|	g d |	D ]&}
|||
d}|||
d}t
|| qntd S )N*   r         F)copyr   r'   r   r7   r)   )r   r   )r   )r(   r6   )r   r6   r   ))r   )r(   )r6   Nr   )r,   r   ZRandomStateZrandr   ZasfortranarrayZascontiguousarrayr;   endswithrF   r   extendr    )r#   r   r   rngXYr*   ZX_resZY_resr   r   r$   r$   r%   test_fft_with_orderr  s(    r   c                   @   sR   e Zd ZdZdZddddZdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestFFTThreadSafer   )i      Nr"   c                   s~   fddt    } fddt| jD }dd |D  dd |D  t| jD ]}tjdd|d	d
 q^d S )Nc                    s   |  |   d S r   )put)argsq)r!   r$   r%   worker  s    z.TestFFTThreadSafe._test_mtsame.<locals>.workerc                    s   g | ]}t j fd qS ))targetr   )	threadingThread)r   rH   )r   r   r   r$   r%   r     s   z2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S   s   g | ]}|  qS r$   )startr   r1   r$   r$   r%   r         c                 S   s   g | ]}|  qS r$   )joinr   r$   r$   r%   r     r      )timeoutz6Function returned wrong value in multithreaded context)err_msg)queueQueuerF   threadsr
   get)r>   r!   r"   r   expectedtrH   r$   )r   r!   r   r   r%   _test_mtsame  s    zTestFFTThreadSafe._test_mtsamec                 C   s(   |j | j|jd}| jtj||d d S Nr8   r   )onesinput_shaper   r   r   r>   r"   r   r$   r$   r%   rS     s    zTestFFTThreadSafe.test_fftc                 C   s$   | | jd}| jtj||d d S Ny      ?        r   )fullr   r   r   r   r   r$   r$   r%   rV     s    zTestFFTThreadSafe.test_ifftc                 C   s"   | | j}| jtj||d d S Nr   )r   r   r   r   r   r   r$   r$   r%   ri     s    zTestFFTThreadSafe.test_rfftc                 C   s$   | | jd}| jtj||d d S r   )r   r   r   r   r   r   r$   r$   r%   rj     s    zTestFFTThreadSafe.test_irfftc                 C   s(   |j | j|jd}| jtj||d d S r   )r   r   r   r   r   r   r   r$   r$   r%   rz     s    zTestFFTThreadSafe.test_hfftc                 C   s"   | | j}| jtj||d d S r   )r   r   r   r   r   r   r$   r$   r%   r{     s    zTestFFTThreadSafe.test_ihfft)r;   r@   rA   r   r   r   rS   rV   ri   rj   rz   r{   r$   r$   r$   r%   r     s   r   r!   c                 C   sj   t d*}|| dd tdD }W d    n1 s:0    Y  | td}|D ]}t|| qVd S )Nr6   c                 S   s   g | ]}t d qS )d   )r,   r   )r   _r$   r$   r%   r     r   z%test_multiprocess.<locals>.<listcomp>r   r   )multiprocessingZPoolmaprF   r,   r   r   )r!   presrR   r1   r$   r$   r%   test_multiprocess  s
    8r   r9   rW   rX   c                   @   s   e Zd Zdd ZdS )
TestIRFFTNc                 C   s<   t jd\}}|d|  }||}d}tj||d d S )N)r6   r   r       rC   )r   )r,   r   r:   r   r   )r>   r"   arZair   r   r$   r$   r%   test_not_last_axis_success  s
    
z%TestIRFFTN.test_not_last_axis_successN)r;   r@   rA   r   r$   r$   r$   r%   r     s   r   c                 C   sZ   | t jt jt jfv r|j}n|j}|jdkrV|jg d|d}| | tt	| |dd d S )Nnumpyr5   r8   r6   )workers)
r   r   r   r   r   r   r;   r:   r<   r    )r!   r"   r#   r1   r$   r$   r%   test_non_standard_params  s    
r   )5r   r   r   r   r,   r   Znumpy.randomr   Znumpy.testingr   r   r   r<   Z	scipy.fftr   Zscipy.conftestr   Zscipy._lib._array_apir   r   r	   r
   r   ZusefixturesZ
pytestmarkr   r&   r3   r4   rB   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%   <module>   sb   
  >2