
    ^MhZw                     X   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@        A                    d;eeeg          d<             ZBdS )=    )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                            | |z
            |t          j                            |           z  |           d S )Nzsize: z  rdt: )r   nplinalgnorm)xyrtolsizerdterr_msgs         ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/fftpack/tests/test_basic.py_assert_close_in_normr+   #   sT    )t))C))GbinnQU++T")..2C2C-CWMMMM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<   -   s}    

AAAawA	
BrE!GA1XX    3qs88Q!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   s    

AAAawAq		2b57A1XX " "3qs88Q!!Hr,   c                     t          |           } t          t          | j                            D ]}t	          | |          } | S N)axis)r   r7   r6   shaper
   r$   rA   s     r*   direct_dftnrD   A   sE    

Ac!'ll##  Hr,   c                     t          |           } t          t          | j                            D ]}t	          | |          } | S r@   )r   r7   r6   rB   r	   rC   s     r*   direct_idftnrF   H   sE    

Ac!'ll##  Hr,   c                    t          |           } t          |           }t          |           dt          z  |z  z  }t	          |t
                    }t          |dz  dz             D ]U}t          t          ||z            |           }|r'|j	        |d|z  dz
  <   d|z  |k     r|j
        |d|z  <   K|j	        |d<   V|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! 	vAac!eHsQww!A#6AaDDHr,   c                    t          |           } t          |           }t          |t                    }t	          |dz  dz             D ]n}|r_d|z  |k     rD| d|z  dz
           d| d|z           z  z   ||<   | d|z  dz
           d| d|z           z  z
  |||z
  <   Q| d|z  dz
           ||<   c| d         |d<   ot          |          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]]   	sQww!A#a%2a!f9,1AaCE(R!A#Y.1Q3!A#a%1aDBqEEr??r,   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )_TestFFTBasec                 `    d | _         d | _        t          j                            d           d S N  )cdtr(   r!   r/   seedselfs    r*   setup_methodz_TestFFTBase.setup_methodp   s*    
	tr,   c                 ^   t          j        g d| j                  }t          |          }t	          |j        | j                   t          |          }t          ||           t          j        g d| j                  }t          t          |          t          |                     d S )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   s    H,,,DH===FFQWdh''']]!!B'''H^^^48444!#a&&A77777r,   c                    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          |                     d S 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    Xiiitx000Xiiitx000B!QWdh'''QWU###!!A$z"~~666!!A$z"~~66666r,   c                    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          |                     d S )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    Xlll$(333Xlll$(333B!QWdh'''QWU###!!A$z"~~666!!A$z"~~66666r,   c                     t          t          t          g            t          t          t          ddgddggd           d S NrH   r   )assert_raises
ValueErrorr
   rX   s    r*   test_invalid_sizesz_TestFFTBase.test_invalid_sizes   s:    j#r***j#1qe}b99999r,   N)__name__
__module____qualname__rZ   rc   rl   rn   rt    r,   r*   rR   rR   o   s_          
8 8 87 7 77 7 7: : : : :r,   rR   c                       e Zd Zd ZdS )TestDoubleFFTc                 J    t           j        | _        t           j        | _        d S 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                   b    e Zd Zd ZdZej                            de          d             ZdS )TestSingleFFTc                 J    t           j        | _        t           j        | _        d S 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                     d S 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      s\          KF [500  10  r,   r   c                       e Zd Zd Zd ZdS )TestFloat16FFTc                 H   t          j        g dt           j                  }t          |d          }t	          |j        t           j                   t	          |j        d           t          |t          |
                    t           j                                       d S )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}    Xlll"*555aLLLQWbl+++QWe$$$!!Z		"*0E0E%F%FGGGG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          |
                    t           j                                       t          |d         t          |
                    t           j                                       d S re   r   rj   s       r*   rl   z#TestFloat16FFT.test_n_argument_real   s    Xlll"*555Xlll"*555RAQWbl+++QWf%%%!!A$
299RZ3H3H(I(IJJJ!!A$
299RZ3H3H(I(IJJJJJr,   N)ru   rv   rw   r   rl   rx   r,   r*   r   r      s:        H H HK K K K Kr,   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	_TestIFFTBasec                 D    t           j                            d           d S rT   r!   r/   rW   rX   s    r*   rZ   z_TestIFFTBase.setup_method       
	tr,   c                 Z   t          j        g d| j                  }t          |          }t	          |          }t          |j        | j                   t          ||           t          j        g d| j                  }t          t          |          t	          |                     d S )Nr\   r_   )r!   r   rV   r	   r>   r   r3   r   ra   s       r*   rc   z_TestIFFTBase.test_definition   s    H,,,dh77GG^^QWdh'''!!B'''H^^^TX..!$q''+a..99999r,   c                    t          j        g d| j                  }t          |          }t	          |j        | j                   t          |          }t          ||           t          j        g d| j                  }t	          |j        | j                   t          t          |          t          |                     d S )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    H&&&11GGQWdh'''^^!!B'''H[[[111QWdh'''!$q''+a..99999r,   c                    dD ]}t          |g                              | j                  }t          |g                              | j                  d|z  z   }t          t	          |                    }t	          t          |                    }t          |j        | j                   t          |j        | j                   t          ||           t          ||           d S )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    6 	- 	-Dv%%dh//Av%%dh//"Q$6Ac!ffBT!WWB48,,,48,,,%b!,,,%b!,,,,	- 	-r,   c                 x   dD ]}t          |g                              | j                  }t          t	          |                    }t	          t          |                    }t          |j        | j                   t          |j        | j                   t          ||           t          ||           d S )Nr   )	r/   r   r(   r	   r
   r   r3   rV   r   r   s        r*   test_random_realz_TestIFFTBase.test_random_real   s    6 	- 	-Dv%%dh//Ac!ffBT!WWB48,,,48,,,%b!,,,%b!,,,,	- 	-r,   c                 R   | j         t          j        k    rd}n| j         t          j        k    rd}t          t
          z   D ]f}t          j                            d           t          j                            |          	                    | j                   }t          t          |                    }t          ||||| j                    t          t          |                    }t          ||||| j                    |dt          j                            |          z  z   	                    | j                  }t          t          |                    }t          ||||| j                    t          t          |                    }t          ||||| j                    hd S )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   sV   8rz!!DDX##D),== 	> 	>DINN4   	t$$++DH55ASVVA!!QdDH===DGGA!!QdDH===R	t,,,,44TX>>ASVVA!!QdDH===DGGA!!QdDH====	> 	>r,   c                     t          t          t          g            t          t          t          ddgddggd           d S 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dS )TestDoubleIFFTc                 J    t           j        | _        t           j        | _        d S 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dS )TestSingleIFFTc                 J    t           j        | _        t           j        | _        d S r.   r   rX   s    r*   rZ   zTestSingleIFFT.setup_method
  r   r,   Nr   rx   r,   r*   r   r   	  r   r,   r   c                   F    e Zd Zd Zd Zd Z G d d          Zd Zd ZdS )	_TestRFFTBasec                 D    t           j                            d           d S 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                   fd S )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  s    ***,G,G,GH 	, 	,A$(+++AQAQB%a+++$(++++	, 	,r,   c                     t          t          t          g            t          t          t          ddgddggd           d S rp   )rr   rs   r   rX   s    r*   rt   z _TestRFFTBase.test_invalid_sizes  r   r,   c                       e Zd Zd Zd ZdS )_TestRFFTBase.MockSeriesc                 8    t          j        |          | _        d S r.   )r!   r   datarY   r   s     r*   __init__z!_TestRFFTBase.MockSeries.__init__!  s    
4((DIIIr,   c                 z    	 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__$  sp    Kty$///! K K K$ &C;?&C &C &C D DIJKKs    
:5:N)ru   rv   rw   r   r   rx   r,   r*   
MockSeriesr      s7        	) 	) 	)	K 	K 	K 	K 	Kr,   r   c                     t          j        g d          }t                              |          }g d}t	          |           t          ||           t          |j        |           d S )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+  si    H)))**%%a(("??R 	Q!!!RWh'''''r,   c                 x    t          t          t          t          j        dt          j                             d S Nrg   r2   )rr   	TypeErrorr   r!   r   r   rX   s    r*   test_complex_inputz _TestRFFTBase.test_complex_input6  s+    iry",'G'G'GHHHHHr,   N)	ru   rv   rw   rZ   rc   rt   r   r   r   rx   r,   r*   r   r     s          , , ,; ; ;
	K 	K 	K 	K 	K 	K 	K 	K	( 	( 	(I I I I Ir,   r   c                       e Zd Zd ZdS )TestRFFTDoublec                 J    t           j        | _        t           j        | _        d S 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dS )TestRFFTSinglec                 J    t           j        | _        t           j        | _        d S r.   r   rX   s    r*   rZ   zTestRFFTSingle.setup_methodA  r   r,   Nr   rx   r,   r*   r   r   @  r   r,   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )_TestIRFFTBasec                 D    t           j                            d           d S rT   r   rX   s    r*   rZ   z_TestIRFFTBase.setup_methodG  r   r,   c                 b     g d}g d}g d}g d} fd} |||            |||           d S )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                   d S )Nr2   )decimal)
r   r!   r   r(   rP   r   r3   r   ndecr	   )r$   xrr%   rb   rY   s       r*   _testz-_TestIRFFTBase.test_definition.<locals>._testP  sz    bhq11122AaB$(+++%aDI>>>>%aR$)DDDDDDr,   rx   )rY   rO   x1_1rk   x2_1r   s   `     r*   rc   z_TestIRFFTBase.test_definitionJ  sq    222   :::	E 	E 	E 	E 	E 	b$b$r,   c                    dD ]}t          |g                              | j                  }t          t	          |                    }t	          t          |                    }t          |j        | j                   t          |j        | j                   t          ||| j        d|z             t          ||| j        d|z             d S )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    6 		A 		ADv%%dh//AtAwwBeAhhB48,,,48,,,%b!TY/84/?A A A A%b!TY/84/?A A A A A		A 		Ar,   c                    | j         t          j        k    rd}n| j         t          j        k    rd}t          t
          z   D ]}t          j                            d           t          j                            |          	                    | j                   }t          t          |                    }t          ||||| j                    t          t          |                    }t          ||||| j                    d S )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    8rz!!DDX##D),== 	> 	>DINN4   	t$$++DH55Ad1ggA!!QdDH===U1XXA!!QdDH====	> 	>r,   c                     t          t          t          g            t          t          t          ddgddggd           d S rp   )rr   rs   r   rX   s    r*   rt   z!_TestIRFFTBase.test_invalid_sizesu  s:    j%,,,j%1Q%1;;;;;r,   c                 x    t          t          t          t          j        dt          j                             d S r   )rr   r   r   r!   r   r   rX   s    r*   r   z!_TestIRFFTBase.test_complex_inputy  s+    i	!2<(H(H(HIIIIIr,   N)	ru   rv   rw   rZ   rc   r   r   rt   r   rx   r,   r*   r   r   F  sv             
A 
A 
A> > >< < <J J J J Jr,   r   c                       e Zd Zd ZdS )TestIRFFTDoublec                 X    t           j        | _        t           j        | _        d| _        d S )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dS )TestIRFFTSinglec                 X    t           j        | _        t           j        | _        d| _        d S )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dS )Testfft2c                 D    t           j                            d           d S rT   r   rX   s    r*   rZ   zTestfft2.setup_method  r   r,   c                     t          j        d          }t          |dd          }t           j                            |dd          }t          ||           dS )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  sV     Jy!!&x000innQ&xn88!!S)))))r,   c                     t          t          t          g g           t          t          t          ddgddggd           d S )NrH   r   rg   r  )rr   rs   r   rX   s    r*   rt   zTestfft2.test_invalid_sizes  s=    j$---j$!Q!Q(8'BBBBBr,   N)ru   rv   rw   rZ   r  rt   rx   r,   r*   r   r     sF          * * *C C C C Cr,   r   c                   X   e Zd Zd Zd Zej                            dee	z             d             Z
ej                            deez             d             Zd Zej                            dee	z             d             Zej                            deez             d             Zd	S )
TestFftnSinglec                 D    t           j                            d           d S rT   r   rX   s    r*   rZ   zTestFftnSingle.setup_method  r   r,   c                 4   g dg dg dg}t          t          j        |t          j                            }t	          |j        t          j        k    d           t          j        t          |          t          j                  }t          ||           d S )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  s    YYYYYY !RZ(())2<'C	E 	E 	E 	E htAww--&q#.....r,   r'   c                    t           j                            d          }|                    ||f          d|                    ||f          z  z   }t          |j                            t           j                            }t          |j                            t           j                                                t           j                  }t          |j
        t           j                   t          ||d           d S )NrU   rN     r!   r/   default_rngr   rI   r   r   r~   r   r   r3   r   rY   r'   rngr$   rb   r   s         r*   test_size_accuracy_smallz'TestFftnSingle.test_size_accuracy_small  s    i##D))JJd|$$r#**dD\*B*B'BB!&--
++,,!&--
++,,33BLAARXr|,,,&r2t44444r,   c                    t           j                            d          } |j        |df          d |j        |df          z  z   }t          |j                            t           j                            }t          |j                            t           j                                                t           j                  }t          |j
        t           j                   t          ||d           d S )NrU   r]   rN   r  r  )rY   r'   r   r$   rb   r   s         r*   test_size_accuracy_largez'TestFftnSingle.test_size_accuracy_large  s    y$$T**DKq	""RT1I(>(>%>>!&--
++,,!&--
++,,33BLAARXr|,,,&r2t44444r,   c                 *   g dg dg dg}t          t          j        |t          j                            }t	          |j        t          j                   t          j        t          |          t          j                  }t          ||           d S )Nr  r  r  )r   r!   r   r   r   r3   r   r   r
  s       r*   test_definition_float16z&TestFftnSingle.test_definition_float16  s~    YYYYYY !RZ(())QWbl+++htAww--&q#.....r,   c                    t           j                            d          }|                    ||f          d|                    ||f          z  z   }t          |j                            t           j                            }t          |j                            t           j                                                t           j                  }t          |j
        t           j                   t          ||d           d S )NrU   rN   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    i##D))JJd|$$rCJJd|,D,D'DD!&--
++,,!&--
++,,33BLAARXr|,,,&r2s33333r,   c                    t           j                            d          }|                    |df          d|                    |df          z  z   }t          |j                            t           j                            }t          |j                            t           j                                                t           j                  }t          |j
        t           j                   t          ||d           d S )NrU   r]   rN   g    >Ar&  r  s         r*   test_float16_input_largez'TestFftnSingle.test_float16_input_large  s    i##D))JJay!!Bszz4)'<'<$<<!&--
++,,!&--
++,,33BLAARXr|,,,&r2s3333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O5 5 PO5 [V%:=N%NOO5 5 PO5/ / / [V%:=N%NOO4 4 PO4 [V%:=N%NOO4 4 PO4 4 4r,   r  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestFftnc                 D    t           j                            d           d S rT   r   rX   s    r*   rZ   zTestFftn.setup_method  r   r,   c                 X   g dg dg dg}t          |          }t          |t          |                     t          d          }t          t          |          t          |                     t          d          }t          t          |          t          |                     d S )Nr  r  r        r`   rg   r]   r2  )r   r   rD   r/   rY   r$   r%   s      r*   rc   zTestFftn.test_definition  s    YYYYYY GG!![^^4448!$q'';q>>:::=!!!$q'';q>>:::::r,   c                 B   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 ]G}t	          d4          D ]5}t          t          |||d d f                   |||d d f                    6Ht          |d5          }t	          d4          D ]G}t	          d4          D ]5}t          t          ||d d |f                   ||d d |f                    6Ht          |d6          }t	          d4          D ]G}t	          d4          D ]5}t          t          |d d ||f                   |d d ||f                    6Ht          |d7          }t          ||           d S )8Nr  r  r  )
         )   r      )         )   r2     )         )   r3     )rH   r7  r?  )rg   r:  rA  )r  r<  rD  )r   r8  r2  )r`   r   rB  )r  r=  r3  )r]   r9  r@  )r  r;  rC  )r  r>  rE  )rH   rg   r  )r7  r:  r<  )r?  rA  rD  )r   r`   r  )r8  r   r=  )r2  rB  r3  )r]   r  r  )r9  r;  r>  )r@  rC  rE  )r  r  r  r   rH   r   )r   r   )r   rF  )r   rH   r   rF  r  )r   r   rH   r  )rH   r   r   )rH   r   r   )r   r   rH   r  rF  r   rH   r   rH   r   r  )r  rF  rF  r  )rF  r  )r  r  rF  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  s
   )))))) ,,,,,,  ,,,,,,  YY!\\!\\#	 YY!\\!\\#	 YY!\\!\\#	 ![[ [[ [["	 ![[ [[ [["	 ![[ [[ [["	 YY!\\<<<1	YY!\\<<<1	YY!\\<<<1	YYYYYY 	 "\\!\\!\\#	 "\\!\\!\\#	 ![[ [[ [["	 ![[ [[ [["	 ![[ [[ [["	 	95		95		95		95		95	666*++!$q''"&q|"<"<"<	> 	> 	>!$q''4	+B+B+BCCC!$qv"6"6"6QW8M8M8MNNN###!(1b""5"5tIGGG###!(8Ar2+>+>B"G"G"&y//	3 	3 	3###!(8Ar2+>+>B"G"G"&y//	3 	3 	3###!(1b""5"5tIGGG###!(1b""5"5tIGGG"""!$v,,!555!$v,,!555!$v,,!555   !$v,,!555!$v,,!555!$v,,!555"""!$qAAAqz"2"2AaaaAgJ???!$qAAAqz"2"2AaaaAgJ???!$qAAAqz"2"2AaaaAgJ???"""!$qAqqqz"2"2AaaaAAAgJ???!$qAqqqz"2"2AaaaAAAgJ???!$qAqqqz"2"2AaaaAAAgJ???"""!$y//8AaD"b3I3IJJJ!$y//8AaD"b3I3IJJJ!$y//8AaD"b3I3IJJJ"""!$y//"*1QQQ111W:r2">">	@ 	@ 	@!$y//"*1QQQ111W:r2">">	@ 	@ 	@!$y//"*1QQQ111W:r2">">	@ 	@ 	@ """!$y//"*1QQQ1W:r2">">	@ 	@ 	@!$y//"*1QQQ1W:r2">">	@ 	@ 	@!$y//"*1QQQ1W:r2">">	@ 	@ 	@ q 	G 	GA1XX G G)#a1aaaj//1Q111W:FFFFGq 	G 	GA1XX G G)#a111aj//1Q1W:FFFFGq 	G 	GA1XX G G)#a1aj//1QQQ1W:FFFFG !!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	                              d S )
Nr  r  rH   r   r]   r   rg   r`   r  r   r   r   r   r   rg   rg   rB   )r]   rg   rF  )r   r   rY   small_xlarge_x1r%   s       r*   test_shape_argumentzTestFftn.test_shape_argumentx  s    9999 LL LL LL LL"
 '''!!T(^^444'''!!T(3B3-%8%899999r,   c                 J   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                     d S )Nr  r  r  ri  rj  )r  r  r  r   rk  rl  rI  r  rK  rF  r  )r   r   r   r   rn  s       r*   test_shape_axes_argumentz!TestFftn.test_shape_axes_argument  s    999999 ,,,&,,&,,&,,( ) ) X666!!T(^^444X666!!X(B++,,b"&6 &6 	7 	7 	7 	7 	7r,   c                    t           j                            d          }t          |dd          }t          |t	          |dd                     t           j                            d          }t          |dd          }t          |t	          |d	d                     t           j                            d
          }t          |dd          }t          |t           j                            |dd                     d S )N)r7  r`   r]   r  rL  )r  )r  rB   rF  r  )rA   r9   rM  r  r   r  r   )r  r  )r  r/   r   r   r
   r5  s      r*   test_shape_axes_argument2z"TestFftn.test_shape_axes_argument2  s    L..d+++!!Sq%9%9%9::: L..d+++!!Sq%9%9%9::: L	**000!!"')..V."L"L	N 	N 	N 	N 	Nr,   c                     t          d          }t          t          d          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nr   zBwhen given, axes and shape arguments have to be of the same lengthmatch)r  r  r   rH   rm  )r   rr   rs   r   )rY   r$   s     r*   test_shape_argument_morez!TestFftn.test_shape_argument_more  s    ):"<= = = 	( 	( ,''''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(s   AA	A	c                    t          t          d          5  t          g g           d d d            n# 1 swxY w Y   t          t          d          5  t          ddgddggd           d d d            d S # 1 swxY w Y   d S Nz4invalid number of data points \(\[1, 0\]\) specifiedrw  z5invalid number of data points \(\[4, -3\]\) specifiedrH   r   r  )rr   rs   r   rX   s    r*   rt   zTestFftn.test_invalid_sizes  s#   :"67 7 7 	 	 "JJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 :"78 8 8 	, 	, 1a&1a&!7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,   488A99A= A=N)ru   rv   rw   rZ   rc   rg  rq  rs  ru  ry  rt   rx   r,   r*   r.  r.    s          ; ; ;D( D( D(L: : :7 7 7N N N"( ( (	, 	, 	, 	, 	,r,   r.  c                   4   e Zd ZdZdZd Zej                            de	j
        e	j        dfe	j        e	j        dfg          d             Zej                            dddg          ej                            dg d	          d
                         Zd ZdS )	TestIfftnNc                 D    t           j                            d           d S rT   r   rX   s    r*   rZ   zTestIfftn.setup_method  r   r,   zdtype,cdtype,maxnlpr  i  c                    t           j                            d          }t          j        g dg dg dg|          }t	          |          }t          |j        |           t          |t          |          |           |                    d          }t          t	          |          t          |          |           |                    d          }t          t	          |          t          |          |           d S )NrU   r  r  r  r2   r1  r4  )	r!   r/   r  r   r   r   r3   r   rF   )rY   r3   cdtypemaxnlpr  r$   r%   s          r*   rc   zTestIfftn.test_definition  s     i##D))Hiiiiiii!(-/ / / !HHQWf%%%&q,q//6BBBJJx  &uQxxa&IIIJJ}%%&uQxxa&IIIIIr,   r  r'   )rH   r   r       r   \   c                 T   t           j                            d          }|                    ||g          d|                    ||g          z  z   }t          t	          t          |                    ||           t          t          t	          |                    ||           d S )NrU   rN   )r!   r/   r  r   r   r   )rY   r  r'   r  r$   s        r*   r   zTestIfftn.test_random_complex  s     i##D))JJd|$$rCJJd|,D,D'DD&uT!WW~~q&AAA&tE!HH~~q&AAAAAr,   c                    t          t          d          5  t          g g           d d d            n# 1 swxY w Y   t          t          d          5  t          ddgddggd           d d d            d S # 1 swxY w Y   d S r{  )rr   rs   r   rX   s    r*   rt   zTestIfftn.test_invalid_sizes  s#   :"67 7 7 	 	 2$KKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 :"78 8 8 	- 	- Aq6Aq6"G,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-r|  )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!z2=$?!z2<>@A AJ JA AJ [Xd|44[V%;%;%;<<B B =< 54B	- 	- 	- 	- 	-r,   r~  c                       e Zd Zd ZdS )	FakeArrayc                 ,    || _         |j        | _        d S 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dS )
FakeArray2c                     || _         d S 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
    zr,   )NN)ru   rv   rw   r   r  rx   r,   r*   r  r    s7               r,   r  c                   j   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                            de
          ej                            de          ej                            ddd	g          ej                            d
g d          d                                                 Zej                            de          ej                            de          ej                            ddd	g          ej                            d
g d          d                                                 Zd Zej                            de
          ej                            ddd	g          ej                            d
g d          d                                     ZdS )TestOverwritez4Check input overwrite behavior of the FFT functions.)r  r<  r  c                     |                                 }d t          t          fD ]S} | ||          |||           |j         d|j         |j        d|d|d|d}|st          ||d| 	           Td S )
Nc                     | S r.   rx   )r$   s    r*   <lambda>z&TestOverwrite._check.<locals>.<lambda>  s    q r,   overwrite_x(z, z, axis=z, overwrite_x=)zspurious overwrite in )r)   )r  r  r  ru   r3   rB   r   )	rY   r$   routinefftsizerA   r  rk   fakesigs	            r*   _checkzTestOverwrite._check  s    VVXX [)Z8 	L 	LDGDDHHgtEEEE& B B B!' B Bw B BB B1<B B BC LR,JS,J,JKKKK	L 	Lr,   c                 \   t           j                            d           t          j        |t           j                  r+t          j        j        | dt          j        j        | z  z   }nt          j        j        | }|                    |          }|                     |||||           d S )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33 	+9?E*R	0G-GGDD9?E*D{{5!!D'7D + 	 	- 	- 	- 	- 	-r,   r3   r  r  TFz
shape,axes))r<  rF  )r<  r   r   )r   r<  rH   c           	          t           j        t           j        f}|                     t          ||||||           |                     t
          ||||||           d S r.   )r!   r}   r   r  r
   r	   rY   r3   r  r  rB   r  overwritables          r*   test_fft_ifftzTestOverwrite.test_fft_ifft  sf     r|4sE5$	- 	- 	-tUE4	- 	- 	- 	- 	-r,   c           	          | j         }|                     t          ||||||           |                     t          ||||||           d S r.   )real_dtypesr  r   r   r  s          r*   test_rfft_irfftzTestOverwrite.test_rfft_irfft  s`     'ueUD,	- 	- 	-tUE4	- 	- 	- 	- 	-r,   c                 &  
 t           j                            d           t          j        |t           j                  r+t          j        j        | dt          j        j        | z  z   }nt          j        j        | }|                    |          }
fd
||}n"t          t          j        ||                    } 
|          D ]F}	| 	                    |||	||           |j
        dk    r| 	                    |j        ||	||           Gd S )NrU   rN   c              3      K   t          |           dk    rdV  d S | d         dz  | d         | d         dz  fD ] } | dd                    D ]
}|f|z   V  !d S )Nr   rx   r   rH   )r6   )shprf  restfftshape_iters      r*   r  z2TestOverwrite._check_nd_one.<locals>.fftshape_iter4  s      3xx1}}a&!)SVSVAX6 * *A -c!""g 6 6 * * dTk))))** *r,   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33 	+9?E*R	0G-GGDD9?E*D{{5!!	* 	* 	* 	* 	* <JJrwud3344J%j11 	5 	5HKKgx$/  1 1 1y1}}DFGXt(3  5 5 5		5 	5r,   ))r  N)r  rN  )r  rN  )r  rH   )r  r<  N)r  r   rH   )r  r<  r   r  )r  rJ  )r  rN  )r  r  )r  )r   )r  N)r  rH  c                     t           j        t           j        f}|                     t          |||||           |                     t
          |||||           d S r.   )r!   r}   r   r  r   r   )rY   r3   r  rB   r  r  s         r*   test_fftn_ifftnzTestOverwrite.test_fftn_ifftnH  sf      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    s2       >>:rz*KBL"-88F{{HL L L
- 
- 
- [Wf--[Y11[]T5M::[\ ,: ,: ,: ; ;- -; ; ;: 21 .-- [Wk22[Y11[]T5M::[\ ,: ,: ,: ; ;- -; ; ;: 21 32-5 5 5: [Wf--[]T5M::[\ ,E ,E ,E F F( (F F ;: .-( ( (r,   r  funcc                    t           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	          ||           d S )Nr7  )r`   r`   rm  r`   rL  rG  rF  )rg   r  )rH   r   r  rg   r  rH   r   )r!   r/   r   r   r   )r  aexpectactuals       r*   test_shape_axes_ndarrayr  _  s     		r2AT!6"""FT!28QF++,,,F   T!%   FT!"(B5//***F   T!6///FT!28QF++"(Aq62B2BCC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 N N N N N N N N N N N N  * * * * * * C C C C C C C C C C C C C C C C C C. . . . . . . . . . . . . . . . . . . . . . . .                 
    	   
N N N                   #: #: #: #: #: #: #: #:L    L   
 
 
 
 
L 
 
 
K K K K K K K K&E; E; E; E; E; E; E; E;P    ]       ]   (I (I (I (I (I (I (I (IV    ]       ]   4J 4J 4J 4J 4J 4J 4J 4Jt    n       n   C C C C C C C C$>4 >4 >4 >4 >4 >4 >4 >4BU, U, U, U, U, U, U, U,p*- *- *- *- *- *- *- *-Z< < < < < < < <       h( h( h( h( h( h( h( h(V $t!455! ! 65! ! !r,   