
    xf`8                     "   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
mZ d dlmZ d dlmZ d Z G d d      Z G d d	      Zej&                  j)                  d
ej*                  ej,                  ej.                  ej0                  ej2                  ej4                  g      ej&                  j)                  dddg      ej&                  j)                  dej                  ej6                  ej8                  ej:                  ej<                  ej>                  g      d                      Z  G d d      Z!ej&                  j)                  dej                  ej:                  ejD                  ejF                  g      d        Z$ G d d      Z%y)    N)random)assert_array_almost_equalassert_array_equalassert_allclose)raisesc                 ,   t        |       }dt        j                  z  t        j                  |      t	        |      z  z  }t        j                  |      j                  dd      |z  }t        j                  | t        j                  |      z  d      S )Ny                 axis)lennppiarangefloatreshapesumexp)xLphases      </usr/lib/python3/dist-packages/scipy/fft/tests/test_numpy.pyfft1r      sj    AAIryy|E!H,-EIIaL  Q'%/E66!BFF5M/**    c                       e Zd Zd Zy)TestFFTShiftc                 H    t        t        t        j                  g dd       y )N)r
         r   )assert_raises
ValueErrorfft)selfs    r   
test_fft_nzTestFFTShift.test_fft_n   s    j#''9a8r   N)__name__
__module____qualname__r$    r   r   r   r      s    9r   r   c                   4   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej.                  j1                  dej4                  ej6                  ej8                  ej:                  ej<                  ej>                  g      d        Z ej.                  j1                  dejB                  ejD                  ejF                  ejH                  ejJ                  ejL                  ej4                  ej6                  ej8                  ej:                  ej<                  ej>                  g      d        Z'd Z(ej.                  j1                  de)jT                  e)jV                  e)jX                  e)jZ                  g      d        Z.y)	TestFFT1Dc           
      ^   d}t        |      dt        |      z  z   }t        |      }t        d|      D ]w  }t        t        j                  t        j                  |d|             |d| d       t        t        j
                  t        j                  |d|       |      |d| d       y y )Ni                 ?r
   r      )decimal)r   ranger   r"   ifftirfftrfft)r#   maxlenr   xris        r   test_identityzTestFFT1D.test_identity   s    6NRv..F^q 	;A%chhswwq1v&?1Q.02%ciiAa0A!&D&(1gr;	;r   c                    t        d      dt        d      z  z   }t        |      }t        |t        j                  |             t        |t        j                  |d             t        |t	        j
                  d      z  t        j                  |d             t        |dz  t        j                  |d             y )N   r,   backwardnormorthoforward)r   r   r   r"   r   sqrtr#   r   expects      r   test_fftzTestFFT1D.test_fft&   s    2JF2J&a!&#''!*5!&#''!**EF!&2772;"6"%''!'":	<!&2+swwqy/IJr   c           
         t        d      dt        d      z  z   }t        |t        j                  t        j                  |                   dD ]8  }t        |t        j                  t        j                  ||      |             : y )Nr8   r,   r9   r<   r=   r:   )r   r   r"   r0   r#   r   r;   s      r   	test_ifftzTestFFT1D.test_ifft/   se    2JF2J&!!SXXcggaj%9:4 	?D%388CGGAD1=?	?r   c                    t        d      dt        d      z  z   }t        j                  t        j                  |d      d      }t        |t        j                  |             t        |t        j                  |d             t        |t	        j
                  d      z  t        j                  |d	             t        |dz  t        j                  |d
             y Nr8      r,   r
   r   r   r9   r:   X  r<   r=   )r   r"   r   fft2r   r>   r?   s      r   	test_fft2zTestFFT1D.test_fft26   s    8r&"222+!4!&#((1+6!&#((1:*FG!&2777+;";"%((17";	=!&G"4"%((19"=	?r   c                    t        d      dt        d      z  z   }t        j                  t        j                  |d      d      }t        |t        j                  |             t        |t        j                  |d             t        |t        j                  d      z  t        j                  |d	             t        |dz  t        j                  |d
             y rG   )r   r"   r0   r   ifft2r   r>   r?   s      r   
test_ifft2zTestFFT1D.test_ifft2@   s    8r&"222#((11-A6!&#))A,7!&#))AJ*GH!&2777+;";"%))AG"<	>!&G"4"%))AI">	@r   c                    t        d      dt        d      z  z   }t        j                  t        j                  t        j                  |d      d      d      }t        |t        j                  |             t        |t        j                  |d             t        |t	        j
                  d	      z  t        j                  |d
             t        |d	z  t        j                  |d             y Nr8   rI   
   r,   r   r   r
   r   r9   r:   p  r<   r=   )r   r"   r   fftnr   r>   r?   s      r   	test_fftnzTestFFT1D.test_fftnJ   s    < 2f\&:#::!3!<1E!&#((1+6!&#((1:*FG!&277<+@"@"%((17";	=!&L"9"%((19"=	?r   c                    t        d      dt        d      z  z   }t        j                  t        j                  t        j                  |d      d      d      }t        |t        j                  |             t        |t        j                  |d             t        t        j                  |      t        j                  d	      z  t        j                  |d
             t        |d	z  t        j                  |d             y rQ   )r   r"   r0   r   ifftnr   r>   r?   s      r   
test_ifftnzTestFFT1D.test_ifftnT   s    < 2f\&:#::#((388AA#6Q?aH!&#))A,7!&#))AJ*GH!#))A,1F"F"%))AG"<	>!&L"9"%))AI">	@r   c           
         t        d      }|j                  d|j                  z  fD ]  }dD ]C  }t        t        j                  |||      d |dz  dz    t        j                  |||             E t        t        j                  ||      t        j                  |      z  t        j                  ||d              y )N   r   )Nr9   r<   r=   nr;   r
   )r]   r<   )r   sizer   r"   r2   r   r>   )r#   r   r]   r;   s       r   	test_rfftzTestFFT1D.test_rfft^   s    2J&&!AFF(# 	FA> 1)GGA.{A;HHQ!$/11 &chhqA&6&C&)hhqAG&DF	Fr   c           
          t        d      }t        |t        j                  t        j                  |                   dD ]8  }t        |t        j                  t        j                  ||      |             : y )Nr8   rC   r:   )r   r   r"   r1   r2   rD   s      r   
test_irfftzTestFFT1D.test_irffth   s[    2J!!SYYsxx{%;<4 	AD%399SXXad3$?A	Ar   c                    t        d      }t        j                  |      d d d df   }t        |t        j                  |             t        |t        j                  |d             t        |t        j                  d      z  t        j                  |d             t        |dz  t        j                  |d             y NrH      r9   r:   rJ   r<   r=   )r   r"   rK   r   rfft2r   r>   r?   s      r   
test_rfft2zTestFFT1D.test_rfft2o   s    8!QV$!&#))A,7!&#))AJ*GH!&2777+;";"%))AG"<	>!&G"4"%))AI">	@r   c           
          t        d      }t        |t        j                  t        j                  |                   dD ]8  }t        |t        j                  t        j                  ||      |             : y NrH   rC   r:   )r   r   r"   irfft2re   rD   s      r   test_irfft2zTestFFT1D.test_irfft2y   s\    8!!SZZ		!%=>4 	CD%3::cii5DAC	Cr   c                    t        d      }t        j                  |      d d d d d df   }t        |t        j                  |             t        |t        j                  |d             t        |t        j                  d      z  t        j                  |d             t        |dz  t        j                  |d             y NrR      r9   r:   rT   r<   r=   )r   r"   rU   r   rfftnr   r>   r?   s      r   
test_rfftnzTestFFT1D.test_rfftn   s    < !Q2A2X&!&#))A,7!&#))AJ*GH!&277<+@"@"%))AG"<	>!&L"9"%))AI">	@r   c           
          t        d      }t        |t        j                  t        j                  |                   dD ]8  }t        |t        j                  t        j                  ||      |             : y NrR   rC   r:   )r   r   r"   irfftnrn   rD   s      r   test_irfftnzTestFFT1D.test_irfftn   s\    < !!SZZ		!%=>4 	CD%3::cii5DAC	Cr   c                 B   t        d      dt        d      z  z   }t        j                  t        d      |t        d      f      }t        j                  ||d d d   j                         f      }t	        j                  |      }t        |t	        j                  |             t        |t	        j                  |d             t        |t        j                  d      z  t	        j                  |d             t        |dz  t	        j                  |d	             y )
N   r,   r
   r	   r9   r:   r8   r<   r=   )r   r   concatenateconjr"   r   hfftr>   )r#   r   x_hermr@   s       r   	test_hfftzTestFFT1D.test_hfft   s    2JF2J&Avay 9:NNFAddGLLN34!&#((6*:;!&#((6
*KL!&2772;"6"%((6"@	B!&2+"%((6	"B	Dr   c           
         t        d      dt        d      z  z   }t        j                  t        d      |t        d      f      }t        j                  ||d d d   j                         f      }t	        |t        j                  t        j                  |                   dD ]8  }t	        |t        j                  t        j                  ||      |             : y )Nru   r,   r
   r	   rC   r:   )r   r   rv   rw   r   r"   ihfftrx   )r#   r   ry   r;   s       r   
test_ihfftzTestFFT1D.test_ihfft   s    2JF2J&Avay 9:NNFAddGLLN34!&#))CHHV4D*EF4 	KD%		#((6"=DIK	Kr   c           
          t        d      }t        |t        j                  t        j                  |                   dD ]8  }t        |t        j                  t        j                  ||      |             : y rh   )r   r   r"   hfft2ihfft2rD   s      r   
test_hfft2zTestFFT1D.test_hfft2   s\    8!!SYYszz!}%=>4 	CD%399SZZ5DAC	Cr   c                    t        d      }t        j                  |      d d d df   }t        |t        j                  |             t        |t        j                  |d             t        |t        j                  d      z  t        j                  |d             t        |dz  t        j                  |d             y rc   )r   r"   rN   r   r   r   r>   r?   s      r   test_ihfft2zTestFFT1D.test_ihfft2   s    81a"f%!&#**Q-8!&#**QZ*HI!&2777+;";"%**QW"=	?!&G"4"%**QY"?	Ar   c           
          t        d      }t        |t        j                  t        j                  |                   dD ]8  }t        |t        j                  t        j                  ||      |             : y rq   )r   r   r"   hfftnihfftnrD   s      r   
test_hfftnzTestFFT1D.test_hfftn   s\    < !!SYYszz!}%=>4 	CD%399SZZ5DAC	Cr   c                    t        d      }t        j                  |      d d d d d df   }t        |t        j                  |             t        |t        j                  |d             t        |t        j                  d      z  t        j                  |d             t        |dz  t        j                  |d             y rl   )r   r"   rX   r   r   r   r>   r?   s      r   test_ihfftnzTestFFT1D.test_ihfftn   s    < 1aBQBh'!&#**Q-8!&#**QZ*HI!&277<+@"@"%**QW"=	?!&L"9"%**QY"?	Ar   opc                     t        d      }g d}|D ]H  } |t        j                  ||            }t        j                   |||      |      }t        ||       J y )NrR   )r   r
   r   r   r   r
   )r
   r   r   r
   r   r   )r   r   r
   )r   r
   r   axes)r   r   	transposer   )r#   r   r   r   aop_trtr_ops          r   	test_axeszTestFFT1D.test_axes   sW     < Q 	4Ar||Aq)*ELLAA2E%eU3	4r   c           
         t        d      }g d}|D ]  }t        t        |j                        D cg c]*  }||d d v rd|j                  |   z  n|j                  |   , c}      } |t        j                  ||      |d d d      }t        j                   |||d d |d d       |      }t        ||        y c c}w )N)         )r   r   r   r   r   r
   )sr   )r   tupler/   ndimshaper   r   r   )	r#   r   r   r   r   axr   r   r   s	            r   test_axes_subset_with_shapez%TestFFT1D.test_axes_subset_with_shape   s     :0 	4A%*166]4! -/!BQ%K1QWWR[=QWWR[H 4 5E r||Aq)U2AYVDELLAr2A!?CE%eU3	44s   /B=
c           	         t        d      }t        j                  j                  |      }|j                  dz  }t
        j
                  t
        j                  ft
        j                  t
        j                  ft
        j                  t
        j                  fg}|D ]k  \  }}|j                  d|j                  z  fD ]H  }dD ]A  } ||||      } ||||      }t        |t        j                  j                  |             C J m y )Nr8   r   rC   r\   )r   r   linalgr;   r^   r"   r0   r2   r1   r|   rx   r   )	r#   r   x_normr]   
func_pairsforwbackr;   tmps	            r   test_all_1d_norm_preservingz%TestFFT1D.test_all_1d_norm_preserving   s    2J"FFQJww)xx+ yy#((+	
 % 	CJD$ffah' C< CDqAD1Csad3C-f.0iinnS.ACCC	Cr   dtypec                 x   t        d      j                  |      }t        t        j                  t        j                  |            |       t        t        j
                  t        j                  |            |       t        t        j                  t        j                  |      t        |            |       y )Nr8   )
r   astyper   r"   r0   r1   r2   rx   r|   r   )r#   r   r   s      r   test_dtypeszTestFFT1D.test_dtypes   so     2Je$!#((3771:"6:!#))CHHQK"8!<!#((399Q<Q"@!Dr   N)/r%   r&   r'   r6   rA   rE   rL   rO   rV   rY   r_   ra   rf   rj   ro   rs   rz   r}   r   r   r   r   pytestmarkparametrizer"   rU   rX   rn   rr   r   r   r   rK   rN   re   ri   r   r   r   r   r   halfsingledouble
longdoubler   r(   r   r   r*   r*      s   ;K??@?@FA@C@C
DKCACA [[TCHHcii$'IIszz$'IIszz$; <4<4 [[TCHHcii$'IIszz$'IIszz$'HHcii$'IIszz$'IIszz$; <
4<
4C& [[Wrww		299')}}'6 7E7Er   r*   r   orderFznon-contiguousr"   c                    t         j                  j                  d      }|j                  ddd      j	                  | d      }|dk(  rt        j
                  |      }n#|d d d   }t        j                  |d d d         }|j                  j                  d	      r1t        d
      D ]"  } |||      } |||      }t        ||       $ y |j                  j                  d      rZg d}	|j                  j                  d      r|	j                  g d       |	D ]"  }
 |||
      } |||
      }t        ||       $ y t        )N*   r         F)copyr   r	   r"   r   r   )rK   rU   )r   )r
   r   )r   r   rU   ))r   )r
   )r   Nr   )r   r   RandomStaterandr   asfortranarrayascontiguousarrayr%   endswithr/   r   extendr!   )r   r   r"   rngXYr   X_resY_resr   r   s              r   test_fft_with_orderr     s/    ))


#CAr!!%e!4A|a  ddG  4R4)
||U#!H 	4D%E%E%eU3	4 
		/	0'<<  (KK01 	4BOEOE%eU3	4
 r   c                   >    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestFFTThreadSafer   )i      c                    fd}t        j                         } | }t        | j                        D cg c]  }t	        j
                  |||f       }}|D cg c]  }|j                          c} |D cg c]  }|j                          c} t        | j                        D ]  }t        |j                  d      |d       ! y c c}w c c}w c c}w )Nc                 .    |j                   |         y N)put)argsqfuncs     r   workerz.TestFFTThreadSafe._test_mtsame.<locals>.worker-  s    EE$+r   )targetr      )timeoutz6Function returned wrong value in multithreaded context)
queueQueuer/   threads	threadingThreadstartjoinr   get)	r#   r   r   r   r   expectedr5   tr   s	    `       r   _test_mtsamezTestFFTThreadSafe._test_mtsame,  s    	 KKM; DLL)+ V4)< + +qat||$ 	JAquuQu/HJ	J+s    CC;Cc                     t        j                  | j                  t         j                        }| j	                  t
        j
                  |       y )N)r   )r   onesinput_shape
complex128r   r"   r#   r   s     r   rA   zTestFFTThreadSafe.test_fft>  s0    GGD$$BMM:#''1%r   c                     t        j                  | j                  d      }| j                  t        j
                  |       y Ny      ?        )r   fullr   r   r"   r0   r   s     r   rE   zTestFFTThreadSafe.test_ifftB  s,    GGD$$d+#((A&r   c                     t        j                  | j                        }| j                  t        j
                  |       y r   )r   r   r   r   r"   r2   r   s     r   r_   zTestFFTThreadSafe.test_rfftF  s*    GGD$$%#((A&r   c                     t        j                  | j                  d      }| j                  t        j
                  |       y r   )r   r   r   r   r"   r1   r   s     r   ra   zTestFFTThreadSafe.test_irfftJ  s,    GGD$$d+#))Q'r   c                     t        j                  | j                  t         j                        }| j	                  t
        j                  |       y r   )r   r   r   	complex64r   r"   rx   r   s     r   rz   zTestFFTThreadSafe.test_hfftN  s0    GGD$$bll3#((A&r   c                     t        j                  | j                        }| j                  t        j
                  |       y r   )r   r   r   r   r"   r|   r   s     r   r}   zTestFFTThreadSafe.test_ihfftR  s*    GGD$$%#))Q'r   N)r%   r&   r'   r   r   r   rA   rE   r_   ra   rz   r}   r(   r   r   r   r   (  s0    GKJ$&''('(r   r   r   c           
      6   t        j                  d      5 }|j                  | t        d      D cg c]  }t	        j
                  d       c}      }d d d         | t	        j
                  d            }D ]  }t        ||        y c c}w # 1 sw Y   =xY w)Nr   r   d   )multiprocessingPoolmapr/   r   r   r   )r   p_resr@   r   s         r   test_multiprocessr   W  s     
		a	  <AeeDq:A2773<:;< "''#,F #6"# ;< <s   BB
B
BBc                       e Zd Zd Zy)
TestIRFFTNc                     t         j                  j                  d      \  }}|d|z  z   }d}t        j                  ||       y )N)r   r   r       r,   )r   )r   r   r"   rr   )r#   arair   r   s        r   test_not_last_axis_successz%TestIRFFTN.test_not_last_axis_successe  s<    !!.1BBJ 	

14 r   N)r%   r&   r'   r   r(   r   r   r   r   c  s    !r   r   )&r   r   r   numpyr   r   numpy.randomr   numpy.testingr   r   r   r   r    	scipy.fftr"   r   r   r*   r   r   float32float64	longfloatr   r   longcomplexrK   rU   r0   rN   rX   r   r   r2   r1   r   r   r(   r   r   <module>r     sR        
 
 + +9 9eE eEP 	RZZ	r}}bnn	67 3(8"9:	#((CHH	399cii	)*	* ;	7:,( ,(^ #''388SXXsyy!IJ# K#	! 	!r   