o
    5BiR                     @   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}|S | t jt jt jt jt jt jfv r6|j}|S td|  )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$   Z/var/www/html/Trade-python/venv/lib/python3.10/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piarangefloatreshapesumexp)xLphaser$   r$   r%   fft1%   s   r6   c                   @      e Zd Zdd ZdS )TestFFTShiftc                 C   sF   |j g d|jd}|jdkrtttj|d d S tttj|d d S )Nr(         r#   torchr   )asarrayr   __name__assert_raisesRuntimeErrorr   r    )selfr"   r3   r$   r$   r%   
test_fft_n.   s   
zTestFFTShift.test_fft_nN)r?   
__module____qualname__rC   r$   r$   r$   r%   r8   ,   s    r8   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 qd S )Ni                 ?r(   r   g&.>rtolatol)r>   r   ranger	   r   r   r   r   )rB   r"   maxlenr3   xrir$   r$   r%   test_identity8   s   ,0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   rG   backwardnormorthor<   forward)r   r>   r6   r	   r   sqrtr   rB   r"   r3   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| qd S )NrP   rG   rQ   rT   rU   rR   )r>   r   r	   r   r   rB   r"   r3   rS   r$   r$   r%   	test_ifftJ   s
    zTestFFT1D.test_ifftr=   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rP      rG   r(   r)   r   rQ   rR   rT   X  r<   rU   )r>   r   r   r	   r   rV   r   rW   r$   r$   r%   	test_fft2P      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 r`   )r>   r   r   r   r	   r   rV   r   rW   r$   r$   r%   
test_ifft2[   re   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rP   rb   
   rG   r:   r)   r(   r   rQ   rR   rT   p  r<   rU   )r>   r   r   r	   r   rV   r   rW   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 rg   )r>   r   r   r   r	   r   rV   r   rW   r$   r$   r%   
test_ifftnq   s   "zTestFFT1D.test_ifftnc              
   C   s   |j td|jd}t|dt| fD ]A}dD ]!}ttj|||dtj|j ||jd||dd |d d   qttj||ddtj||d||j ||jd  qd S )	N   r<   r:   )NrQ   rT   rU   nrS   r(   rT   )ro   )	r>   r   r   r   r	   r   r   r   rV   )rB   r"   r3   ro   rS   r$   r$   r%   	test_rfft~   s   "zTestFFT1D.test_rfftc                 C   P   | td}ttt|| dD ]}ttjtj||d|d| qd S )NrP   rZ   rR   )r>   r   r	   r   r   r   r[   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 	Nra   r<      rQ   rR   rT   rc   rU   )	r>   r   r   r   r   r   r	   r   rV   rW   r$   r$   r%   
test_rfft2   s   &zTestFFT1D.test_rfft2c                 C   rq   Nra   rZ   rR   )r>   r   r	   r   r   r   r[   r$   r$   r%   test_irfft2   
    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 	Nrh   r<      rQ   rR   rT   rj   rU   )	r>   r   r   r   r   r   r	   r   rV   rW   r$   r$   r%   
test_rfftn   s   ,zTestFFT1D.test_rfftnc                 C   rq   Nrh   rZ   rR   )r>   r   r	   r   r   r   r[   r$   r$   r%   test_irfftn   rx   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   rG   r(   r'   rQ   rR   rT   rP   r<   rU   )r   r,   concatenateconjr>   realr   r	   r   rV   r   )rB   r"   r3   x_hermrX   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| q;d S )Nr~   rG   r(   r'   rZ   rR   )	r   r,   r   r   r>   r	   r   r   r   )rB   r"   r3   r   rS   r$   r$   r%   
test_ihfft   s   

 zTestFFT1D.test_ihfftc                 C   rq   rv   )r>   r   r	   r   r   r   r[   r$   r$   r%   
test_hfft2   rx   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 rs   )	r>   r   r   r   r   r   r	   r   rV   rW   r$   r$   r%   test_ihfft2   s   &zTestFFT1D.test_ihfft2c                 C   rq   r|   )r>   r   r	   r   r   r   r[   r$   r$   r%   
test_hfftn   rx   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 ry   )	r>   r   r   r   r   r   r	   r   rV   rW   r$   r$   r%   test_ihfftn   s   ,zTestFFT1D.test_ihfftnc           
      C   sl   t ||}|jtd|d}g d}t|}|D ]}||j||d}|j|||d|d}	t||	 qd S )Nrh   r<   )r   r(   r:   r   r:   r(   )r(   r   r:   r(   r:   r   )r:   r   r(   )r:   r(   r   axes)r&   r>   r   r   permute_dimsr	   )
rB   opr"   r#   r3   r   xp_testaop_trtr_opr$   r$   r%   _check_axes   s   
zTestFFT1D._check_axesr   c                 C      |  || d S Nr   rB   r   r"   r$   r$   r%   test_axes_standard     zTestFFT1D.test_axes_standardc                 C   r   r   r   r   r$   r$   r%   test_axes_non_standard  r   z TestFFT1D.test_axes_non_standardc           	            t ||}|jtd|dg d}t}|D ]: t fddtjD }||j d|d d dd	}|j||d d  d d d	 d}t|| qd S )
N         r<   r   r   r   c                    4   g | ]}| d d v rdj |  nj | qS Nr:   shape.0axr   r3   r$   r%   
<listcomp>      ,zBTestFFT1D.test_axes_subset_with_shape_standard.<locals>.<listcomp>r   r:   r   r(   sr   	r&   r>   r   r   tuplerK   ndimr   r	   	rB   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           	         r   )
Nr   r<   r   c                    r   r   r   r   r   r$   r%   r   .  r   zFTestFFT1D.test_axes_subset_with_shape_non_standard.<locals>.<listcomp>r   r:   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rD|j ||jd}|j|}t|dt| fD ]}dD ]}	||||	d}
||
||	d}
t|j|
| qRqNq-d S )NrP   r<   r:   rZ   rn   )r>   r   r   r   linalgvector_normr   r   r   r   r   r   r   r   r	   )rB   r"   r3   r   x_normro   
func_pairsforwbackrS   tmpr$   r$   r%   test_all_1d_norm_preserving5  s(   



z%TestFFT1D.test_all_1d_norm_preservingT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sKJ |jttj|jksXJ |jttj|jkseJ d S )NrP   r   )r   astyper,   float16	complex64
longdoubleclongdoubler   r   r   r   r   r   r   r   r#   result_typefloat32)rB   r#   r3   
out_dtypes	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 )NrP   r<   r   iUMu?:0yE>)r   r   rH   )
r>   r   getattrr   r   r   r   r   r   r	   )rB   r#   r"   r3   r   r   rI   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 )NrP   r<   r   r   )r   r   r   rH   )r>   r   r   r   r   r	   )rB   r#   r"   r3   r   rI   r$   r$   r%   test_dtypes_complexi  s   zTestFFT1D.test_dtypes_complexN)3r?   rD   rE   rO   rY   r\   r   rd   rf   rk   rl   rp   rr   ru   rw   r{   r}   r   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%   rF   6   s    

	
	
	

	

	








rF   Tr   r#   orderFznon-contiguousr   c                 C   s   t jd}|dddj| dd}|dkrt |}n|d d d }t |d d d }|jd	rMt	d
D ]}|||d}|||d}t
|| q7d S |jdr|g d}	|jdrd|	g d |	D ]}
|||
d}|||
d}t
|| qfd S t)N*   r         F)copyr   r'   r   r;   r)   )r   r   )r   )r(   r:   )r   r:   r   ))r   )r(   )r:   Nr   )r,   r   RandomStaterandr   asfortranarrayascontiguousarrayr?   endswithrK   r   extendr    )r#   r   r   rngXYr*   X_res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   rN   )r   r   r   r$   r%   r     s    z2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S      g | ]}|  qS r$   )startr   r3   r$   r$   r%   r         c                 S   r   r$   )joinr   r$   r$   r%   r     r      )timeoutz6Function returned wrong value in multithreaded context)err_msg)queueQueuerK   threadsr
   get)rB   r!   r"   r   expectedtrN   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 Nr<   r   )onesinput_shaper   r   r   rB   r"   r   r$   r$   r%   rY        zTestFFTThreadSafe.test_fftc                 C   $   | | jd}| jtj||d d S Ny      ?        r   )fullr  r   r   r   r  r$   r$   r%   r\        zTestFFTThreadSafe.test_ifftc                 C   "   | | j}| jtj||d d S Nr   )r   r  r   r   r   r  r$   r$   r%   rp        zTestFFTThreadSafe.test_rfftc                 C   r  r  )r  r  r   r   r   r  r$   r$   r%   rr     r  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%   r     r  zTestFFTThreadSafe.test_hfftc                 C   r  r	  )r   r  r   r   r   r  r$   r$   r%   r     r
  zTestFFTThreadSafe.test_ihfft)r?   rD   rE   r   r  r   rY   r\   rp   rr   r   r   r$   r$   r$   r%   r     s    r   r!   c                 C   sj   t d}|| dd tdD }W d    n1 sw   Y  | td}|D ]}t|| q+d S )Nr:   c                 S   s   g | ]}t d qS )d   )r,   r   )r   _r$   r$   r%   r     s    z%test_multiprocess.<locals>.<listcomp>r   r  )multiprocessingPoolmaprK   r,   r   r   )r!   presrX   r3   r$   r$   r%   test_multiprocess  s   r  r=   r]   r^   c                   @   r7   )
TestIRFFTNc                 C   s<   t jd\}}|d|  }||}d}tj||d d S )N)r:   r   r       rG   )r   )r,   r   r>   r   r   )rB   r"   arair   r   r$   r$   r%   test_not_last_axis_success  s
   
z%TestIRFFTN.test_not_last_axis_successN)r?   rD   rE   r  r$   r$   r$   r%   r    s    r  c                 C   s^   | t jt jt jfv r|j}n|j}|jdkr-|jg d|d}| | tt	| |dd d S d S )Nnumpyr9   r<   r:   )workers)
r   r   r   r   r   r   r?   r>   r@   r    )r!   r"   r#   r3   r$   r$   r%   test_non_standard_params  s   
r  )5r   r   r  r  r,   r   numpy.randomr   numpy.testingr   r   r   r@   	scipy.fftr   scipy.conftestr   scipy._lib._array_apir   r   r	   r
   r   usefixtures
pytestmarkr   r&   r6   r8   rF   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>   sd    
  >2