
    tKgcv                        d dl mZmZmZmZmZ d dlZd dlmZ d dl	m
Z
mZmZmZmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlZd dlZd dlmZ g dZ g dZ!d	gZ"d
gZ#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+ G d d      Z, G d de,      Z- G d de,      Z. G d d      Z/ G d d      Z0 G d de0      Z1 G d d e0      Z2 G d! d"      Z3 G d# d$e3      Z4 G d% d&e3      Z5 G d' d(      Z6 G d) d*e6      Z7 G d+ d,e6      Z8 G d- d.      Z9 G d/ d0      Z: G d1 d2      Z; G d3 d4      Z< G d5 d6      Z= G d7 d8      Z> G d9 d:      Z?ej                  j                  d;eeeg      d<        ZBy)=    )assert_assert_equalassert_array_almost_equalassert_array_almost_equal_nulpassert_array_lessN)raises)ifftfftfftnifftnrfftirfftfft2)
arangearrayasarrayzerosdotexppiswapaxesdoublecdoublerand)i    i`  i  )      $   i     c                     d| d| }t        t        j                  j                  | |z
        |t        j                  j                  |       z  |       y )Nzsize: z  rdt: )r   nplinalgnorm)xyrtolsizerdterr_msgs         b/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/fftpack/tests/test_basic.py_assert_close_in_normr+   #   sC    tfGC5)GbiinnQU+T"))..2C-CWM    c                     t        |  S Nr   )r'   s    r*   randomr/   )   s    ;r,   c                     t        |       } t        |       }t        |t              }t	        |       dt
        z  |z  z  }t        |      D ]  }t        t        ||z        |       ||<    |S Ndtype               @	r   lenr   r   r   r   ranger   r   r$   nr%   wis        r*   
direct_dftr<   -   sc    
AAAawA	
BrE!GA1X3qs8Q! Hr,   c                     t        |       } t        |       }t        |t              }t	        |      dt
        z  |z  z  }t        |      D ]   }t        t        ||z        |       |z  ||<   " |S r1   r5   r8   s        r*   direct_idftr>   7   sf    
AAAawAq	2b57A1X3qs8Q!! Hr,   c                 |    t        |       } t        t        | j                              D ]  }t	        | |      }  | S N)axis)r   r7   r6   shaper
   r$   rA   s     r*   direct_dftnrD   A   s3    
Ac!''l# $Hr,   c                 |    t        |       } t        t        | j                              D ]  }t	        | |      }  | S r@   )r   r7   r6   rB   r	   rC   s     r*   direct_idftnrF   H   s3    
Ac!''l# $Hr,   c                 f   t        |       } t        |       }t        |       dt        z  |z  z  }t	        |t
              }t        |dz  dz         D ]\  }t        t        ||z        |       }|r1|j                  |d|z  dz
  <   d|z  |k  s;|j                  |d|z  <   N|j                  |d<   ^ |S )Nr4   r2   r      r   )r   r6   r   r   r   r   r7   r   r   realimag)r$   r9   r:   rr;   r%   s         r*   direct_rdftrL   O   s    
AAA	
BrE!GAavA1a46]AaC!vvAac!eHsQw!A#66AaD  Hr,   c                 X   t        |       } t        |       }t        |t              }t	        |dz  dz         D ][  }|rOd|z  |k  r8| d|z  dz
     d| d|z     z  z   ||<   | d|z  dz
     d| d|z     z  z
  |||z
  <   E| d|z  dz
     ||<   T| d   |d<   ] t        |      j                  S )Nr2   r   rH                 ?r   )r   r6   r   r   r7   r>   rI   )r$   r9   x1r;   s       r*   direct_irdftrP   _   s    
AAA	q	 B1a46]sQw!A#a%2a!f9,1AaCE(R!A#Y.1Q3!A#a%1aDBqE  r?r,   c                   *    e Zd Zd Zd Zd Zd Zd Zy)_TestFFTBasec                 ^    d | _         d | _        t        j                  j	                  d       y N  )cdtr(   r!   r/   seedselfs    r*   setup_methodz_TestFFTBase.setup_methodp   s     
		tr,   c                 P   t        j                  g d| j                        }t        |      }t	        |j
                  | j                         t        |      }t        ||       t        j                  g d| j                        }t        t        |      t        |             y )NrH   r            @      ?rH   r   r]   y      @       @r2   rH   r   r]   y      @           )r!   r   rV   r
   r   r3   r<   r   rY   r$   r%   y1s       r*   test_definitionz_TestFFTBase.test_definitionu   sk    HH,DHH=FQWWdhh']!!B'HH^4884!#a&A7r,   c                 z   t        j                  g d| j                        }t        j                  g d| j                        }t        ||gd      }t	        |j
                  | j                         t	        |j                  d       t        |d   t        |             t        |d   t        |             y NrH   r   r]      r2   rg   r9   r   rg   r   rH   )
r!   r   r(   r
   r   r3   rV   rB   r   r<   rY   rO   x2r%   s       r*   test_n_argument_realz!_TestFFTBase.test_n_argument_real~   s~    XXitxx0XXitxx0B!QWWdhh'QWWU#!!A$z"~6!!A$z"~6r,   c                 z   t        j                  g d| j                        }t        j                  g d| j                        }t        ||gd      }t	        |j
                  | j                         t	        |j                  d       t        |d   t        |             t        |d   t        |             y )N)rH   r   r]   r^   r2   rg   rh   ri   r   rH   )	r!   r   rV   r
   r   r3   rB   r   r<   rj   s       r*   _test_n_argument_complexz%_TestFFTBase._test_n_argument_complex   s~    XXl$((3XXl$((3B!QWWdhh'QWWU#!!A$z"~6!!A$z"~6r,   c                 f    t        t        t        g        t        t        t        ddgddggd       y NrH   r   )assert_raises
ValueErrorr
   rX   s    r*   test_invalid_sizesz_TestFFTBase.test_invalid_sizes   s(    j#r*j#1qe}b9r,   N)__name__
__module____qualname__rZ   rc   rl   rn   rt    r,   r*   rR   rR   o   s    
877:r,   rR   c                       e Zd Zd Zy)TestDoubleFFTc                 X    t         j                  | _        t         j                  | _        y r.   r!   
complex128rV   float64r(   rX   s    r*   rZ   zTestDoubleFFT.setup_method       ==::r,   Nru   rv   rw   rZ   rx   r,   r*   rz   rz          r,   rz   c                   \    e Zd Zd ZdZej                  j                  de      d        Zy)TestSingleFFTc                 X    t         j                  | _        t         j                  | _        y r.   r!   	complex64rV   float32r(   rX   s    r*   rZ   zTestSingleFFT.setup_method       <<::r,   zusingle-precision FFT implementation is partially disabled, until accuracy issues with large prime powers are resolvedF)runreasonc                      y r.   rx   rX   s    r*   test_noticezTestSingleFFT.test_notice   s    r,   N)	ru   rv   rw   rZ   r   pytestmarkxfailr   rx   r,   r*   r   r      s7    KF [[50 1r,   r   c                       e Zd Zd Zd Zy)TestFloat16FFTc                 D   t        j                  g dt         j                        }t        |d      }t	        |j
                  t         j                         t	        |j                  d       t        |t        |j                  t         j                                     y )Nrf   r2   rg   rh   )rg   r!   r   float16r
   r   r3   r   rB   r   r<   astyper   )rY   rO   r%   s      r*   test_1_argument_realz#TestFloat16FFT.test_1_argument_real   s]    XXl"**5aLQWWbll+QWWe$!!Z		"**0E%FGr,   c                    t        j                  g dt         j                        }t        j                  g dt         j                        }t        ||gd      }t	        |j
                  t         j                         t	        |j                  d       t        |d   t        |j                  t         j                                     t        |d   t        |j                  t         j                                     y re   r   rj   s       r*   rl   z#TestFloat16FFT.test_n_argument_real   s    XXl"**5XXl"**5RAQWWbll+QWWf%!!A$
299RZZ3H(IJ!!A$
299RZZ3H(IJr,   N)ru   rv   rw   r   rl   rx   r,   r*   r   r      s    HKr,   r   c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	_TestIFFTBasec                 B    t         j                  j                  d       y rT   r!   r/   rW   rX   s    r*   rZ   z_TestIFFTBase.setup_method       
		tr,   c                 L   t        j                  g d| j                        }t        |      }t	        |      }t        |j                  | j                         t        ||       t        j                  g d| j                        }t        t        |      t	        |             y )Nr\   r_   )r!   r   rV   r	   r>   r   r3   r   ra   s       r*   rc   z_TestIFFTBase.test_definition   sk    HH,dhh7G^QWWdhh'!!B'HH^TXX.!$q'+a.9r,   c                    t        j                  g d| j                        }t        |      }t	        |j
                  | j                         t        |      }t        ||       t        j                  g d| j                        }t	        |j
                  | j                         t        t        |      t        |             y )NrH   r   r]   rg   rH   r   r]   rg   rH   r   r]   rg   r`   r2   )	r!   r   r(   r	   r   r3   rV   r>   r   ra   s       r*   test_definition_realz"_TestIFFTBase.test_definition_real   s}    HH&1GQWWdhh'^!!B'HH[1QWWdhh'!$q'+a.9r,   c                    dD ]  }t        |g      j                  | j                        }t        |g      j                  | j                        d|z  z   }t        t	        |            }t	        t        |            }t        |j                  | j                         t        |j                  | j                         t        ||       t        ||        y )N	rH   3   o   d      @         i   rN   )r/   r   rV   r	   r
   r   r3   r   rY   r'   r$   rb   y2s        r*   test_random_complexz!_TestIFFTBase.test_random_complex   s    6Dv%%dhh/Av%%dhh/"Q$6Ac!fBT!WB488,488,%b!,%b!, 7r,   c                 \   dD ]  }t        |g      j                  | j                        }t        t	        |            }t	        t        |            }t        |j                  | j                         t        |j                  | j                         t        ||       t        ||        y )Nr   )	r/   r   r(   r	   r
   r   r3   rV   r   r   s        r*   test_random_realz_TestIFFTBase.test_random_real   sx    6Dv%%dhh/Ac!fBT!WB488,488,%b!,%b!, 7r,   c                 <   | j                   t        j                  k(  rd}n| j                   t        j                  k(  rd}t        t
        z   D ]L  }t        j                  j                  d       t        j                  j                  |      j                  | j                         }t        t        |            }t        |||| j                          t        t        |            }t        ||||| j                          |dt        j                  j                  |      z  z   j                  | j                        }t        t        |            }t        ||||| j                          t        t        |            }t        ||||| j                          O y )Nh㈵>绽|=rU   rN   )r(   r!   r   r~   LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr/   rW   r   r   r	   r
   r+   rV   rY   r&   r'   r$   r%   s        r*   test_size_accuracyz _TestIFFTBase.test_size_accuracy   s   88rzz!DXX#D),==DIINN4 		t$++DHH5ASVA!!QdDHH=DGA!!QdDHH=R		t,,,44TXX>ASVA!!QdDHH=DGA!!QdDHH= >r,   c                 f    t        t        t        g        t        t        t        ddgddggd       y rp   )rr   rs   r	   rX   s    r*   rt   z _TestIFFTBase.test_invalid_sizes   (    j$+j$!A!ur:r,   N)
ru   rv   rw   rZ   rc   r   r   r   r   rt   rx   r,   r*   r   r      s%    :	:	-->*;r,   r   c                       e Zd Zd Zy)TestDoubleIFFTc                 X    t         j                  | _        t         j                  | _        y r.   r|   rX   s    r*   rZ   zTestDoubleIFFT.setup_method  r   r,   Nr   rx   r,   r*   r   r     r   r,   r   c                       e Zd Zd Zy)TestSingleIFFTc                 X    t         j                  | _        t         j                  | _        y r.   r   rX   s    r*   rZ   zTestSingleIFFT.setup_method
  r   r,   Nr   rx   r,   r*   r   r   	  r   r,   r   c                   >    e Zd Zd Zd Zd Z G d d      Zd Zd Zy)	_TestRFFTBasec                 B    t         j                  j                  d       y rT   r   rX   s    r*   rZ   z_TestRFFTBase.setup_method  r   r,   c                     g dg dfD ]e  }t        j                  || j                        }t        |      }t	        |      }t        ||       t        |j                  | j                         g y )Nr   	rH   r   r]   rg   rH   r   r]   rg   r`   r2   )r!   r   r(   r   rL   r   r   r3   )rY   tr$   r%   rb   s        r*   rc   z_TestRFFTBase.test_definition  sU    *,GHA$((+AQAQB%a+$((+ Ir,   c                 f    t        t        t        g        t        t        t        ddgddggd       y rp   )rr   rs   r   rX   s    r*   rt   z _TestRFFTBase.test_invalid_sizes  r   r,   c                       e Zd Zd Zd Zy)_TestRFFTBase.MockSeriesc                 8    t        j                  |      | _        y r.   )r!   r   datarY   r   s     r*   __init__z!_TestRFFTBase.MockSeries.__init__!  s    

4(DIr,   c                 r    	 t        | j                  |      S # t        $ r}t        d| d      |d }~ww xY w)Nz&'MockSeries' object has no attribute '')getattrr   AttributeError)rY   itemes      r*   __getattr__z$_TestRFFTBase.MockSeries.__getattr__$  sO    Ktyy$//! K$ &;;?&&C DIJKKs    	616N)ru   rv   rw   r   r   rx   r,   r*   
MockSeriesr      s    	)	Kr,   r   c                     t        j                  g d      }t        j                  |      }g d}t	        |       t        ||       t        |j                  |       y )N)g      ?g       @g      @g      @g      @r   )r!   r   r   r   r   r   r   )rY   r$   xsexpecteds       r*   test_non_ndarray_with_dtypez)_TestRFFTBase.test_non_ndarray_with_dtype+  sG    HH)*%%a("R 	Q!RWWh'r,   c                 t    t        t        t        t        j                  dt        j
                               y Nrg   r2   )rr   	TypeErrorr   r!   r   r   rX   s    r*   test_complex_inputz _TestRFFTBase.test_complex_input6  s    iryy",,'GHr,   N)	ru   rv   rw   rZ   rc   rt   r   r   r   rx   r,   r*   r   r     s(    ,;
	K 	K	(Ir,   r   c                       e Zd Zd Zy)TestRFFTDoublec                 X    t         j                  | _        t         j                  | _        y r.   r|   rX   s    r*   rZ   zTestRFFTDouble.setup_method;  r   r,   Nr   rx   r,   r*   r   r   :  r   r,   r   c                       e Zd Zd Zy)TestRFFTSinglec                 X    t         j                  | _        t         j                  | _        y r.   r   rX   s    r*   rZ   zTestRFFTSingle.setup_methodA  r   r,   Nr   rx   r,   r*   r   r   @  r   r,   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)_TestIRFFTBasec                 B    t         j                  j                  d       y rT   r   rX   s    r*   rZ   z_TestIRFFTBase.setup_methodG  r   r,   c                 T     g d}g d}g d}g d} fd} |||        |||       y )Nr   )rH          @      @r^   r   rg          @            @      r   r   )	rH   r   r^   r   y      @      @y      @      r   r   r   c                 "   t        t        j                  | j                              }t	        |       }t        |j                  j                         t        ||j                         t        |t        |      j                         y )Nr2   )decimal)
r   r!   r   r(   rP   r   r3   r   ndecr	   )r$   xrr%   rb   rY   s       r*   _testz-_TestIRFFTBase.test_definition.<locals>._testP  s[    bhhq12AaB$((+%aDII>%aR$))Dr,   rx   )rY   rO   x1_1rk   x2_1r   s   `     r*   rc   z_TestIRFFTBase.test_definitionJ  s1    2 :	E 	b$b$r,   c                    dD ]  }t        |g      j                  | j                        }t        t	        |            }t	        t        |            }t        |j                  | j                         t        |j                  | j                         t        ||| j                  d|z         t        ||| j                  d|z          y )Nr   zsize=%d)r   r)   )	r/   r   r(   r   r   r   r3   r   r   r   s        r*   r   z_TestIRFFTBase.test_random_realZ  s    6Dv%%dhh/AtAwBeAhB488,488,%b!TYY/84/?A%b!TYY/84/?A 7r,   c                    | j                   t        j                  k(  rd}n| j                   t        j                  k(  rd}t        t
        z   D ]  }t        j                  j                  d       t        j                  j                  |      j                  | j                         }t        t        |            }t        |||| j                          t        t        |            }t        ||||| j                           y )Nr   r   rU   )r(   r!   r   r~   r   r   r/   rW   r   r   r   r   r+   r   s        r*   r   z!_TestIRFFTBase.test_size_accuracyf  s    88rzz!DXX#D),==DIINN4 		t$++DHH5Ad1gA!!QdDHH=U1XA!!QdDHH= >r,   c                 f    t        t        t        g        t        t        t        ddgddggd       y rp   )rr   rs   r   rX   s    r*   rt   z!_TestIRFFTBase.test_invalid_sizesu  s(    j%,j%1Q%1;r,   c                 t    t        t        t        t        j                  dt        j
                               y r   )rr   r   r   r!   r   r   rX   s    r*   r   z!_TestIRFFTBase.test_complex_inputy  s    i		!2<<(HIr,   N)	ru   rv   rw   rZ   rc   r   r   rt   r   rx   r,   r*   r   r   F  s"     
A><Jr,   r   c                       e Zd Zd Zy)TestIRFFTDoublec                 f    t         j                  | _        t         j                  | _        d| _        y )N   )r!   r}   rV   r~   r(   r   rX   s    r*   rZ   zTestIRFFTDouble.setup_method  s    ==::	r,   Nr   rx   r,   r*   r   r     s    r,   r   c                       e Zd Zd Zy)TestIRFFTSinglec                 f    t         j                  | _        t         j                  | _        d| _        y )Nr`   )r!   r   rV   r   r(   r   rX   s    r*   rZ   zTestIRFFTSingle.setup_method  s    <<::	r,   Nr   rx   r,   r*   r   r     s    r,   r   c                       e Zd Zd Zd Zd Zy)Testfft2c                 B    t         j                  j                  d       y rT   r   rX   s    r*   rZ   zTestfft2.setup_method  r   r,   c                     t        j                  d      }t        |dd      }t         j                  j	                  |dd      }t        ||       y)z-FFT returns wrong result with axes parameter.rg   rg   r      r  rB   axes)sr  N)numpyonesr   r
   r   r   rY   r$   r%   y_rs       r*   test_regression_244zTestfft2.test_regression_244  sB     JJy!&x0iinnQ&xn8!!S)r,   c                 h    t        t        t        g g       t        t        t        ddgddggd       y )NrH   r   rg   r  )rr   rs   r   rX   s    r*   rt   zTestfft2.test_invalid_sizes  s+    j$-j$!Q!Q(8'Br,   N)ru   rv   rw   rZ   r  rt   rx   r,   r*   r   r     s    *Cr,   r   c                   F   e Zd Zd Zd Zej                  j                  dee	z         d        Z
ej                  j                  deez         d        Zd Zej                  j                  dee	z         d        Zej                  j                  deez         d        Zy	)
TestFftnSinglec                 B    t         j                  j                  d       y rT   r   rX   s    r*   rZ   zTestFftnSingle.setup_method  r   r,   c                 6   g dg dg dg}t        t        j                  |t        j                              }t	        |j
                  t        j                  k(  d       t        j                  t        |      t        j                        }t        ||       y )NrH   r   r]   rg   r`         r  	   z-double precision output with single precision)msg)r   r!   r   r   r   r3   r   r   r
  s       r*   rc   zTestFftnSingle.test_definition  sl     !RZZ()2<<'C	E hhtAw-&q#.r,   r'   c                    t         j                  j                  ||      dt         j                  j                  ||      z  z   }t        |j                  j                  t         j                              }t        |j                  j                  t         j                              j                  t         j                        }t        |j                  t         j                         t        ||d       y )NrN     r!   r/   r   r   rI   r   r   r~   r   r   r3   r   r   s        r*   test_size_accuracy_smallz'TestFftnSingle.test_size_accuracy_small  s    IINN4&BIINN4,F)FF!&&--

+,!&&--

+,33BLLARXXr||,&r2t4r,   c                    t         j                  j                  |d      dt         j                  j                  |d      z  z   }t        |j                  j                  t         j                              }t        |j                  j                  t         j                              j                  t         j                        }t        |j                  t         j                         t        ||d       y )Nr]   rN   r  r  r   s        r*   test_size_accuracy_largez'TestFftnSingle.test_size_accuracy_large  s    IINN4#ba)@&@@!&&--

+,!&&--

+,33BLLARXXr||,&r2t4r,   c                 .   g dg dg dg}t        t        j                  |t        j                              }t	        |j
                  t        j                         t        j                  t        |      t        j                        }t        ||       y )Nr  r  r  )r   r!   r   r   r   r3   r   r   r
  s       r*   test_definition_float16z&TestFftnSingle.test_definition_float16  sa     !RZZ()QWWbll+hhtAw-&q#.r,   c                    t         j                  j                  ||      dt         j                  j                  ||      z  z   }t        |j                  j                  t         j                              }t        |j                  j                  t         j                              j                  t         j                        }t        |j                  t         j                         t        ||d       y )NrN   g    Ar!   r/   r   r   rI   r   r   r~   r   r   r3   r   r   s        r*   test_float16_input_smallz'TestFftnSingle.test_float16_input_small  s    IINN4&BIINN4,F)FF!&&--

+,!&&--

+,33BLLARXXr||,&r2s3r,   c                    t         j                  j                  |d      dt         j                  j                  |d      z  z   }t        |j                  j                  t         j                              }t        |j                  j                  t         j                              j                  t         j                        }t        |j                  t         j                         t        ||d       y )Nr]   rN   g    >Ar#  r   s        r*   test_float16_input_largez'TestFftnSingle.test_float16_input_large  s    IINN4#ba)@&@@!&&--

+,!&&--

+,33BLLARXXr||,&r2s3r,   N)ru   rv   rw   rZ   rc   r   r   parametrizeSMALL_COMPOSITE_SIZESSMALL_PRIME_SIZESr  r   r   r  r!  r$  r&  rx   r,   r*   r  r    s    	/ [[V%:=N%NO5 P5 [[V%:=N%NO5 P5/ [[V%:=N%NO4 P4 [[V%:=N%NO4 P4r,   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestFftnc                 B    t         j                  j                  d       y rT   r   rX   s    r*   rZ   zTestFftn.setup_method  r   r,   c                     g dg dg dg}t        |      }t        |t        |             t        d      }t        t        |      t        |             t        d      }t        t        |      t        |             y )Nr  r  r        r`   rg   r]   r/  )r   r   rD   r/   rY   r$   r%   s      r*   rc   zTestFftn.test_definition  sc     G!![^48!$q';q>:=!!$q';q>:r,   c                 :   g dg dg dg}g dg dg dg}g dg dg d	g}g dg dg dg}g dg dg dg}g dg dg d	g}g d
g dg dg}g dg dg dg}g dg dg dg}	g dg dg dg}
g dg dg dg}g dg dg dg}g dg dg dg}g dg dg dg}g dg dg dg}g d
g dg dg}g dg dg dg}g dg dg dg}|||	g}|
||g}|||g}|||g}|||g}t        |||g      }t        t        |      t        |d             t        t        |      t        |d             t        t        |d      t        |d              t        |d!      }t        t        |d"d#      t        |             t        |d$      }t        t        t        |d"d#      d"d%      t        |             t        |d&      }t        t        t        |d"d#      d#d%      t        |             t        |d'      }t        t        |d%d#      t        |             t        |d(      }t        t        |d%d"      t        |             t        |d)      }t        t        |      |d*          t        t        |      |d+          t        t        |      |d,          t        |d-      }t        t        |      |d*          t        t        |      |d+          t        t        |      |d,          t        |d.      }t        t        |d d d d d*f         |d d d d d*f          t        t        |d d d d d+f         |d d d d d+f          t        t        |d d d d d,f         |d d d d d,f          t        |d/      }t        t        |d d d*d d f         |d d d*d d f          t        t        |d d d+d d f         |d d d+d d f          t        t        |d d d,d d f         |d d d,d d f          t        |d0      }t        t        |      t        |d*   d%d"             t        t        |      t        |d+   d%d"             t        t        |      t        |d,   d%d"             t        |d1      }t        t        |      t        |d d d*d d f   d"d%             t        t        |      t        |d d d+d d f   d"d%             t        t        |      t        |d d d,d d f   d"d%             t        |d2      }t        t        |      t        |d d d d d*f   d"d%             t        t        |      t        |d d d d d+f   d"d%             t        t        |	      t        |d d d d d,f   d"d%             t        |d3      }t	        d4      D ]7  }t	        d4      D ]'  }t        t        |||d d f         |||d d f          ) 9 t        |d5      }t	        d4      D ]7  }t	        d4      D ]'  }t        t        ||d d |f         ||d d |f          ) 9 t        |d6      }t	        d4      D ]7  }t	        d4      D ]'  }t        t        |d d ||f         |d d ||f          ) 9 t        |d7      }t        ||       y )8Nr  r  r  )
         )   r      )         )   r/     )         )   r0     )rH   r4  r<  )rg   r7  r>  )r  r9  rA  )r   r5  r/  )r`   r   r?  )r  r:  r0  )r]   r6  r=  )r  r8  r@  )r  r;  rB  )rH   rg   r  )r4  r7  r9  )r<  r>  rA  )r   r`   r  )r5  r   r:  )r/  r?  r0  )r]   r  r  )r6  r8  r;  )r=  r@  rB  )r  r  r  r   rH   r   )r   r   )r   rC  )r   rH   r   rC  r  )r   r   rH   r  )rH   r   r   )rH   r   r   )r   r   rH   r  rC  r   rH   r   rH   r   r  )r  rC  rC  r  )rC  r  )r  r  rC  r]   r  r   rx   )r   r   r   r   r7   r
   )rY   plane1plane2plane3	ki_plane1	ki_plane2	ki_plane3	jk_plane1	jk_plane2	jk_plane3	kj_plane1	kj_plane2	kj_plane3	ij_plane1	ij_plane2	ij_plane3	ik_plane1	ik_plane2	ik_plane3	ijk_space	ikj_space	jik_space	jki_space	kij_spacer$   r%   r;   js                               r*   test_axes_argumentzTestFftn.test_axes_argument  sU        !!#	 !!#	 !!#	 !  "	 !  "	 !  "	 !<1	!<1	!<1	 	 "!!#	 "!!#	 !  "	 !  "	 !  "	 	95		95		95		95		95	666*+!$q'"&q|"<	>!$q'4	+BC!$qv"6QW8MN#!(1b""5tIG#!(8Ar2+>B"G"&y/	3#!(8Ar2+>B"G"&y/	3#!(1b""5tIG#!(1b""5tIG"!$v,!5!$v,!5!$v,!5 !$v,!5!$v,!5!$v,!5"!$qAqz"2AaAgJ?!$qAqz"2AaAgJ?!$qAqz"2AaAgJ?"!$qAqz"2AaAgJ?!$qAqz"2AaAgJ?!$qAqz"2AaAgJ?"!$y/8AaD"b3IJ!$y/8AaD"b3IJ!$y/8AaD"b3IJ"!$y/"*1Q1W:r2">	@!$y/"*1Q1W:r2">	@!$y/"*1Q1W:r2">	@ "!$y/"*1Q1W:r2">	@!$y/"*1Q1W:r2">	@!$y/"*1Q1W:r2">	@ qA1X)#a1aj/1Q1W:F   qA1X)#a1aj/1Q1W:F   qA1X)#a1aj/1Q1W:F   !!Q'r,   c                     g dg dg}g dg dg dg dg}t        |d      }t        |t        |             t        |d      }t        |t        |d d	              y )
Nr  r  rH   r   r]   r   rg   r`   r  r   r   r   r   r   rg   rg   rB   )r]   rg   rC  )r   r   rY   small_xlarge_x1r%   s       r*   test_shape_argumentzTestFftn.test_shape_argumentt  s_        "
 '!!T(^4'!!T(3B-%89r,   c                     g dg dg dg}t        g dg dg dg dg      }t        |dd	
      }t        |t        |             t        |dd
      }t        |t        t        t        |dd            dd             y )Nr  r  r  rf  rg  )r  r  r  r   rh  ri  rF  r  rH  rC  r  )r   r   r   r   rk  s       r*   test_shape_axes_argumentz!TestFftn.test_shape_axes_argument  s     ,&&&( ) X6!!T(^4X6!!X(B+,b"&6 	7r,   c                    t         j                  j                  d      }t        |dd      }t        |t	        |dd             t         j                  j                  d      }t        |dd      }t        |t	        |d	d             t         j                  j                  d
      }t        |dd      }t        |t         j                  j                  |dd             y )N)r4  r`   r]   r  rI  )r  )r  rB   rC  r  )rA   r9   rJ  r  r   r  r   )r  r  )r  r/   r   r   r
   r2  s      r*   test_shape_axes_argument2z"TestFftn.test_shape_axes_argument2  s    LL.d+!!Sq%9: LL.d+!!Sq%9: LL	*0!!"'))..V."L	Nr,   c                     t        d      }t        t        d      5  t        |d       d d d        y # 1 sw Y   y xY w)Nr   zBwhen given, axes and shape arguments have to be of the same lengthmatch)r  r  r   rH   rj  )r   rr   rs   r   )rY   r$   s     r*   test_shape_argument_morez!TestFftn.test_shape_argument_more  s7    ):"<= ,'= = =s   4=c                     t        t        d      5  t        g g       d d d        t        t        d      5  t        ddgddggd       d d d        y # 1 sw Y   6xY w# 1 sw Y   y xY wNz4invalid number of data points \(\[1, 0\]\) specifiedrt  z5invalid number of data points \(\[4, -3\]\) specifiedrH   r   r  )rr   rs   r   rX   s    r*   rt   zTestFftn.test_invalid_sizes  sk    :"67 "J7
 :"78 1a&1a&!7+8 87 7
8 8   AA A A)N)ru   rv   rw   rZ   rc   rd  rn  rp  rr  rv  rt   rx   r,   r*   r+  r+    s-    ;D(L:7N"(	,r,   r+  c                   N   e Zd ZdZdZd Zej                  j                  de	j                  e	j                  dfe	j                  e	j                  dfg      d        Zej                  j                  dddg      ej                  j                  dg d	      d
               Zd Zy)	TestIfftnNc                 B    t         j                  j                  d       y rT   r   rX   s    r*   rZ   zTestIfftn.setup_method  r   r,   zdtype,cdtype,maxnlpr  i  c                 Z   t        j                  g dg dg dg|      }t        |      }t        |j                  |       t        |t        |      |       t        d      }t        t        |      t        |      |       t        d      }t        t        |      t        |      |       y )Nr  r  r  r2   r.  r1  )r!   r   r   r   r3   r   rF   r/   )rY   r3   cdtypemaxnlpr$   r%   s         r*   rc   zTestIfftn.test_definition  s     HHi!(-/ !HQWWf%&q,q/6B8&uQxa&I=!&uQxa&Ir,   r  r'   )rH   r   r       r   \   c                     t        ||g      dt        ||g      z  z   }t        t        t        |            ||       t        t        t        |            ||       y )NrN   )r/   r   r   r   )rY   r  r'   r$   s       r*   r   zTestIfftn.test_random_complex  sM     D$< 2fdD\&:#::&uT!W~q&A&tE!H~q&Ar,   c                     t        t        d      5  t        g g       d d d        t        t        d      5  t        ddgddggd       d d d        y # 1 sw Y   6xY w# 1 sw Y   y xY wrx  )rr   rs   r   rX   s    r*   rt   zTestIfftn.test_invalid_sizes  sk    :"67 2$K7
 :"78 Aq6Aq6"G,8 87 7
8 8ry  )ru   rv   rw   r3   r~  rZ   r   r   r'  r!   r~   r}   r   r   rc   r   rt   rx   r,   r*   r{  r{    s    EF [[2!zz2==$?!zz2<<>@AJAJ [[Xd|4[[V%;<B = 5B
	-r,   r{  c                       e Zd Zd Zy)	FakeArrayc                 4    || _         |j                  | _        y r.   )_data__array_interface__r   s     r*   r   zFakeArray.__init__  s    
#'#;#; r,   N)ru   rv   rw   r   rx   r,   r*   r  r    s    <r,   r  c                       e Zd Zd ZddZy)
FakeArray2c                     || _         y r.   r  r   s     r*   r   zFakeArray2.__init__  s	    
r,   Nc                     | j                   S r.   r  )rY   r3   copys      r*   	__array__zFakeArray2.__array__  s    zzr,   )NN)ru   rv   rw   r   r  rx   r,   r*   r  r    s    r,   r  c                   d   e Zd ZdZej
                  ej                  fZeej                  ej                  fz   Z
g dZd Zd Zej                  j!                  de
      ej                  j!                  de      ej                  j!                  ddd	g      ej                  j!                  d
g d      d                             Zej                  j!                  de      ej                  j!                  de      ej                  j!                  ddd	g      ej                  j!                  d
g d      d                             Zd Zej                  j!                  de
      ej                  j!                  ddd	g      ej                  j!                  d
g d      d                      Zy)TestOverwritez4Check input overwrite behavior of the FFT functions.)r  r9  r  c           	          |j                         }d t        t        fD ]\  } | ||      |||       dj                  |j                  |j
                  |j                  |||      }|rLt        ||d|z         ^ y )Nc                     | S r.   rx   )r$   s    r*   <lambda>z&TestOverwrite._check.<locals>.<lambda>  s    qr,   overwrite_xz-{}({}{!r}, {!r}, axis={!r}, overwrite_x={!r})zspurious overwrite in %s)r)   )r  r  r  formatru   r3   rB   r   )	rY   r$   routinefftsizerA   r  rk   fakesigs	            r*   _checkzTestOverwrite._check  sq    VVX )Z8DDHgtEAHH  !''177GT;PCR,F,LM 9r,   c                    t         j                  j                  d       t        j                  |t         j                        r=t        j                  j
                  | dt        j                  j
                  | z  z   }nt        j                  j
                  | }|j                  |      }| j                  |||||       y )NrU   rN   r  )r!   r/   rW   
issubdtypecomplexfloatingrandnr   r  )	rY   r  r3   rB   rA   overwritable_dtypesr  r  r   s	            r*   	_check_1dzTestOverwrite._check_1d  s    
		t== 2 2399??E*R		0G-GGD99??E*D{{5!D'7D + 	 	-r,   r3   r  r  TFz
shape,axes))r9  rC  )r9  r   r   )r   r9  rH   c           	          t         j                  t         j                  f}| j                  t        ||||||       | j                  t
        ||||||       y r.   )r!   r}   r   r  r
   r	   rY   r3   r  r  rB   r  overwritables          r*   test_fft_ifftzTestOverwrite.test_fft_ifft  sL     r||4sE5$	-tUE4	-r,   c           	          | j                   }| j                  t        ||||||       | j                  t        ||||||       y r.   )real_dtypesr  r   r   r  s          r*   test_rfft_irfftzTestOverwrite.test_rfft_irfft  sE     ''ueUD,	-tUE4	-r,   c                 X  
 t         j                  j                  d       t        j                  |t         j                        r=t        j                  j
                  | dt        j                  j
                  | z  z   }nt        j                  j
                  | }|j                  |      }
fd
||}nt        t        j                  ||            } 
|      D ]H  }	| j                  |||	||       |j                  dkD  s)| j                  |j                  ||	||       J y )NrU   rN   c              3      K   t        |       dk  rd y | d   dz  | d   | d   dz  fD ]  } | dd        D ]
  }|f|z      y w)Nr   rx   r   rH   )r6   )shprc  restfftshape_iters      r*   r  z2TestOverwrite._check_nd_one.<locals>.fftshape_iter.  s]     3x1}a&!)SVSVAX6A -c!"g 6 dTk) !7 7s   AA	r  rH   )r!   r/   rW   r  r  r  r   tupletaker  ndimT)rY   r  r3   rB   r  r  r  r   
part_shapefftshaper  s             @r*   _check_nd_onezTestOverwrite._check_nd_one%  s    
		t== 2 2399??E*R		0G-GGD99??E*D{{5!	* <Jrwwud34J%j1HKKgx$/  1yy1}DFFGXt(3  5	 2r,   ))r  N)r  rK  )r  rK  )r  rH   )r  r9  N)r  r   rH   )r  r9  r   r  )r  rG  )r  rK  )r  r  )r  )r   )r  N)r  rE  c                     t         j                  t         j                  f}| j                  t        |||||       | j                  t
        |||||       y r.   )r!   r}   r   r  r   r   )rY   r3   r  rB   r  r  s         r*   test_fftn_ifftnzTestOverwrite.test_fftn_ifftnB  sL      r||44t\&	(5%l&	(r,   N)ru   rv   rw   __doc__r!   r   r~   r  r   r}   dtypesfftsizesr  r  r   r   r'  r  r  r  r  rx   r,   r*   r  r    s   >::rzz*KBLL"--88FHN
- [[Wf-[[Y1[[]T5M:[[\ ,: ;-; ; 2 .- [[Wk2[[Y1[[]T5M:[[\ ,: ;-; ; 2 3-5: [[Wf-[[]T5M:[[\ ,E F(F ; .(r,   r  funcc                    t         j                  j                  dd      } | |d      } | |t        j                  ddg            }t	        ||        | |d      } | |t        j                  dg            }t	        ||        | |dd	
      } | |t        j                  ddg      t        j                  ddg      
      }t	        ||       y )Nr4  )r`   r`   rj  r`   rI  rD  rC  )rg   r  )rH   r   r  rg   r  rH   r   )r!   r/   r   r   r   )r  aexpectactuals       r*   test_shape_axes_ndarrayr  Y  s     			r2A!6"F!288QF+,F !% F!"((B5/*F !6/F!288QF+"((Aq62BCF r,   )Cnumpy.testingr   r   r   r   r   r   r   rr   scipy.fftpackr	   r
   r   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r!   	numpy.fftnumpy.randomr   r   r(  r   r)  r+   r/   r<   r>   rD   rF   rL   rP   rR   rz   r   r   r   r   r   r   r   r   r   r   r   r   r  r+  r{  r  r  r  r   r'  r  rx   r,   r*   <module>r     s  N N  * C C C. . .    
  	   
N   #: #:LL 
L 
K K&E; E;P] ] (I (IV] ] 4J 4Jtn n C C$:4 :4zU, U,p(- (-V< < h( h(V $t!45! 6!r,   