
    sg-                     @   d dl mZ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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  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 Z0d Z1d Z2 G d d      Z3 G d de3      Z4 G d de3      Z5 G d de3      Z6 G d d      Z7 G d d       Z8ejr                  ju                  e!jv                  e!jx                  u d!"       G d# d$e8             Z= G d% d&e8      Z> G d' d(e8      Z? G d) d*      Z@ejr                  ju                  e!jv                  e!jx                  u d!"       G d+ d,e@             ZA G d- d.e@      ZB G d/ d0e@      ZC G d1 d2      ZDejr                  ju                  e!jv                  e!jx                  u d!"       G d3 d4eD             ZE G d5 d6eD      ZF G d7 d8eD      ZG G d9 d:      ZH G d; d<      ZI G d= d>      ZJ G d? d@      ZK G dA dB      ZL G dC dD      ZM G dE dF      ZNejr                  j                  dGeeeeeeeeg      dH        ZPejr                  j                  dGeeeeeeeeg      dI        ZQejr                  j                  dGeeeeg      dJ        ZRy)K    )assert_assert_equalassert_array_almost_equalassert_array_almost_equal_nulpassert_array_lessassert_allcloseN)raises)ifftfftfftnifftnrfftirfftrfftnirfftnhfftihffthfftnihfftn)	arangearrayasarrayzerosdotexppiswapaxes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         X/var/www/html/venv/lib/python3.12/site-packages/scipy/fft/_pocketfft/tests/test_basic.py_assert_close_in_normr0   &   sC    tfGC5)GbiinnQU+T"))..2C-CWM    c                     t        |  S Nr   )r,   s    r/   randomr4   ,   s    ;r1   c                 Z    | j                   j                  d      }| j                  |      S )z-Returns the same array with swapped byteorderS)dtypenewbyteorderastype)arrr7   s     r/   swap_byteorderr;   /   s%    II""3'E::er1   c                     t        |       } t        |       }t        |t              }t	        |       dt
        z  |z  z  }t        |      D ]  }t        t        ||z        |       ||<    |S Nr7                  @	r   lenr   r   r   r   ranger   r   r)   nr*   wis        r/   
direct_dftrG   4   sh    
AAAawA	
BrE!GA1X  3qs8Q! Hr1   c                     t        |       } t        |       }t        |t              }t	        |      dt
        z  |z  z  }t        |      D ]   }t        t        ||z        |       |z  ||<   " |S r=   r@   rC   s        r/   direct_idftrI   >   sk    
AAAawAq	2b57A1X "3qs8Q!!"Hr1   c                 j    t        |       } t        | j                        D ]  }t        | |      }  | S N)axis)r   rB   ndimr   r)   rL   s     r/   direct_dftnrO   H   s3    
Aaff Hr1   c                 j    t        |       } t        | j                        D ]  }t        | |      }  | S rK   )r   rB   rM   r
   rN   s     r/   direct_idftnrQ   O   s3    
Aaff Hr1   c                     t        |       } t        |       }t        |       dt        z  |z  z  }t	        |dz  dz   t
              }t        |dz  dz         D ]  }t        t        ||z        |       ||<    |S )Nr?   r!      r>   )	r   rA   r   r   r   r   rB   r   r   )r)   rD   rE   r*   rF   s        r/   direct_rdftrT   V   sx    
AAA	
BrE!GAad1fG$A1a46]  3qs8Q! Hr1   c                     t        |       } t        |t              }t        |dz  dz         D ]7  }| |   ||<   |dkD  sd|z  |k  st	        j
                  | |         |||z
  <   9 t        |      j                  S )Nr>   r!   rS   r   )r   r   r   rB   r&   conjrI   real)r)   rD   x1rF   s       r/   direct_irdftrY   `   s{    
A	q	 B1a46] $!1q5QqS1WggadmBqsG$ r?r1   c                 Z    t        t        |       t        | j                  dz
              S )NrS   axes)r   r   rB   rM   r)   s    r/   direct_rdftnr^   j   s     QeAFFQJ/00r1   c                   0    e Zd 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&   r4   seedselfs    r/   setup_methodz_TestFFTBase.setup_methodo   s     
		tr1   c                 P   t        j                  g d| j                        }t        |      }t	        |j
                  | j                         t        |      }t        ||       t        j                  g d| j                        }t        t        |      t        |             y )NrS   r!            @      ?rS   r!   rk   y      @       @r>   rS   r!   rk   y      @           )r&   r   rd   r   r   r7   rG   r   rg   r)   r*   y1s       r/   test_definitionz_TestFFTBase.test_definitiont   sk    HH,DHH=FQWWdhh']!!B'HH^4884!#a&A7r1   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rS   r!   rk      r>   ru   rD   r!   ru   r   rS   )
r&   r   r-   r   r   r7   rd   shaper   rG   rg   rX   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"~6r1   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)rS   r!   rk   rl   r>   ru   rv   rw   r   rS   )	r&   r   rd   r   r   r7   rx   r   rG   ry   s       r/   _test_n_argument_complexz%_TestFFTBase._test_n_argument_complex   s~    XXl$((3XXl$((3B!QWWdhh'QWWU#!!A$z"~6!!A$z"~6r1   c                    t        dd      D ]|  }d|z  }t        j                  |      }t        |j	                  t
                    }t        j                  j                  |      }t        ||       t        |      }t        ||       ~ y Nr!      )rB   r&   r   r   r9   complexnumpyr   rg   rF   rD   r)   r*   y2s         r/   test_djbfftz_TestFFTBase.test_djbfft   so    q 	,A1A		!AAHHW%&Aq!B%a+AA%a+	,r1   c                 f    t        t        t        g        t        t        t        ddgddggd       y NrS   r!   )assert_raises
ValueErrorr   rf   s    r/   test_invalid_sizesz_TestFFTBase.test_invalid_sizes   s(    j#r*j#1qe}b9r1   N)	__name__
__module____qualname__rh   rq   r{   r}   r   r    r1   r/   r`   r`   n   s     
877,:r1   r`   c                       e Zd Zd Zy)TestLongDoubleFFTc                 X    t         j                  | _        t         j                  | _        y r3   r&   clongdoublerd   
longdoubler-   rf   s    r/   rh   zTestLongDoubleFFT.setup_method       >>==r1   Nr   r   r   rh   r   r1   r/   r   r      s    !r1   r   c                       e Zd Zd Zy)TestDoubleFFTc                 X    t         j                  | _        t         j                  | _        y r3   )r&   r   rd   float64r-   rf   s    r/   rh   zTestDoubleFFT.setup_method   s    ::::r1   Nr   r   r1   r/   r   r          r1   r   c                       e Zd Zd Zy)TestSingleFFTc                 X    t         j                  | _        t         j                  | _        y r3   r&   	complex64rd   float32r-   rf   s    r/   rh   zTestSingleFFT.setup_method       <<::r1   Nr   r   r1   r/   r   r      r   r1   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 )Nrt   r>   ru   rv   )ru   r&   r   float16r   r   r7   r   rx   r   rG   r9   r   )rg   rX   r*   s      r/   test_1_argument_realz#TestFloat16FFT.test_1_argument_real   s]    XXl"**5aLQWWbll+QWWe$!!Z		"**0E%FGr1   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 rs   r   ry   s       r/   r{   z#TestFloat16FFT.test_n_argument_real   s    XXl"**5XXl"**5RAQWWbll+QWWf%!!A$
299RZZ3H(IJ!!A$
299RZZ3H(IJr1   N)r   r   r   r   r{   r   r1   r/   r   r      s    HKr1   r   c                   <    e Zd 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 rb   r&   r4   re   rf   s    r/   rh   z_TestIFFTBase.setup_method       
		tr1   c                 L   t        j                  g d| j                        }t        |      }t	        |      }t        |j                  | j                         t        ||       t        j                  g d| j                        }t        t        |      t	        |             y )Nrj   rm   )r&   r   rd   r
   rI   r   r7   r   ro   s       r/   rq   z_TestIFFTBase.test_definition   sk    HH,dhh7G^QWWdhh'!!B'HH^TXX.!$q'+a.9r1   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rS   r!   rk   ru   rS   r!   rk   ru   rS   r!   rk   ru   rn   r>   )	r&   r   r-   r
   r   r7   rd   rI   r   ro   s       r/   test_definition_realz"_TestIFFTBase.test_definition_real   s}    HH&1GQWWdhh'^!!B'HH[1QWWdhh'!$q'+a.9r1   c                    t        dd      D ]  }d|z  }t        j                  |      }t        |j	                  | j
                              }t        j                  j                  |j	                  | j
                              }t        ||| j                  | j                         t        |      }t        ||| j                  | j                          y )Nr!   r   )r+   atol)rB   r&   r   r
   r9   rd   r   r   r   r+   r   r   s         r/   r   z_TestIFFTBase.test_djbfft   s    q 	BA1A		!AQXXdhh'(A 23BAbtyytyyAQAAbtyytyyA	Br1   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	rS   3   o   d      @         i                 ?)r4   r9   rd   r
   r   r   r7   r   rg   r,   r)   rp   r   s        r/   test_random_complexz!_TestIFFTBase.test_random_complex   s    6 	-Dv%%dhh/Av%%dhh/"Q$6Ac!fBT!WB488,488,%b!,%b!,	-r1   c                 \   dD ]  }t        |g      j                  | j                        }t        t	        |            }t	        t        |            }t        |j                  | j                         t        |j                  | j                         t        ||       t        ||        y )Nr   )	r4   r9   r-   r
   r   r   r7   rd   r   r   s        r/   test_random_realz_TestIFFTBase.test_random_real   s}    6 	-Dv%%dhh/Ac!fBT!WB488,488,%b!,%b!,	-r1   c                    t         t        z   D ]t  }t        j                  j	                  d       t        j                  j                  |      j                  | j                        }t        t        |            }t        ||| j                  || j                         t        t        |            }t        ||| j                  || j                         |dt        j                  j                  |      z  z   j                  | j                        }t        t        |            }t        ||| j                  || j                         t        t        |            }t        ||| j                  || j                         w y )Nrc   r   )LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr&   r4   re   r    r9   r-   r
   r   r0   r+   rd   )rg   r,   r)   r*   s       r/   test_size_accuracyz _TestIFFTBase.test_size_accuracy   s	   ),== 	CDIINN4 		t$++DHH5ASVA!!Q		4BDGA!!Q		4BR		t,,,44TXX>ASVA!!Q		4BDGA!!Q		4B	Cr1   c                 f    t        t        t        g        t        t        t        ddgddggd       y r   )r   r   r
   rf   s    r/   r   z _TestIFFTBase.test_invalid_sizes  (    j$+j$!A!ur:r1   N)r   r   r   rh   rq   r   r   r   r   r   r   r   r1   r/   r   r      s,    :	:B	--C ;r1   r   z Long double is aliased to double)reasonc                       e Zd Zd Zy)TestLongDoubleIFFTc                 t    t         j                  | _        t         j                  | _        d| _        d| _        y N绽|=)r&   r   rd   r   r-   r+   r   rf   s    r/   rh   zTestLongDoubleIFFT.setup_method  s&    >>==		r1   Nr   r   r1   r/   r   r     s    r1   r   c                       e Zd Zd Zy)TestDoubleIFFTc                 t    t         j                  | _        t         j                  | _        d| _        d| _        y r   )r&   
complex128rd   r   r-   r+   r   rf   s    r/   rh   zTestDoubleIFFT.setup_method  s&    ==::		r1   Nr   r   r1   r/   r   r     s    r1   r   c                       e Zd Zd Zy)TestSingleIFFTc                 t    t         j                  | _        t         j                  | _        d| _        d| _        y )Nh㈵>g-C6?)r&   r   rd   r   r-   r+   r   rf   s    r/   rh   zTestSingleIFFT.setup_method#  s&    <<::		r1   Nr   r   r1   r/   r   r   "  s    r1   r   c                   D    e Zd Zd Zd Zd Zd Zd Z G d d      Zd Z	y	)
_TestRFFTBasec                 B    t         j                  j                  d       y rb   r   rf   s    r/   rh   z_TestRFFTBase.setup_method+  r   r1   c                     g dg dfD ]e  }t        j                  || j                        }t        |      }t	        |      }t        ||       t        |j                  | j                         g y )Nr   )	rS   r!   rk   ru   rS   r!   rk   ru   rn   r>   )	r&   r   r-   r   rT   r   r   r7   rd   )rg   tr)   r*   rp   s        r/   rq   z_TestRFFTBase.test_definition.  sY    *,GH 	,A$((+AQAQB%a+$((+	,r1   c                     t        dd      D ]R  }d|z  }t        j                  |      }t        j                  j	                  |      }t	        |      }t        ||       T y r   )rB   r&   r   r   r   r   rg   rF   rD   r)   rp   r*   s         r/   r   z_TestRFFTBase.test_djbfft6  sQ    q 	,A1A		!AQBQA%a+	,r1   c                 f    t        t        t        g        t        t        t        ddgddggd       y r   )r   r   r   rf   s    r/   r   z _TestRFFTBase.test_invalid_sizes>  r   r1   c                     t        j                  d| j                        }t        t        d      5  t        |       d d d        y # 1 sw Y   y xY w)N
   r>   x must be a real sequencematch)r&   r   rd   r   	TypeErrorr   rg   r)   s     r/   test_complex_inputz _TestRFFTBase.test_complex_inputB  s=    HHRtxx(9,GH 	G	 	 	s   AAc                       e Zd Zd Zd Zy)_TestRFFTBase.MockSeriesc                 8    t        j                  |      | _        y r3   )r&   r   datarg   r   s     r/   __init__z!_TestRFFTBase.MockSeries.__init__I  s    

4(DIr1   c                 r    	 t        | j                  |      S # t        $ r}t        d| d      |d }~ww xY w)Nz&'MockSeries' object has no attribute '')getattrr   AttributeError)rg   itemes      r/   __getattr__z$_TestRFFTBase.MockSeries.__getattr__L  sO    Ktyy$//! K$ &;;?&&C DIJKKs    	616N)r   r   r   r   r   r   r1   r/   
MockSeriesr   H  s    	)	Kr1   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   )rg   r)   xsexpecteds       r/   test_non_ndarray_with_dtypez)_TestRFFTBase.test_non_ndarray_with_dtypeS  sG    HH)*%%a("R 	Q!RWWh'r1   N)
r   r   r   rh   rq   r   r   r   r   r   r   r1   r/   r   r   *  s,    ,,;	K 	K	(r1   r   c                       e Zd Zd Zy)TestRFFTLongDoublec                 X    t         j                  | _        t         j                  | _        y r3   r   rf   s    r/   rh   zTestRFFTLongDouble.setup_methoda  r   r1   Nr   r   r1   r/   r   r   ^  s    !r1   r   c                       e Zd Zd Zy)TestRFFTDoublec                 X    t         j                  | _        t         j                  | _        y r3   )r&   r   rd   r   r-   rf   s    r/   rh   zTestRFFTDouble.setup_methodg  s    ==::r1   Nr   r   r1   r/   r   r   f  r   r1   r   c                       e Zd Zd Zy)TestRFFTSinglec                 X    t         j                  | _        t         j                  | _        y r3   r   rf   s    r/   rh   zTestRFFTSingle.setup_methodm  r   r1   Nr   r   r1   r/   r  r  l  r   r1   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 rb   r   rf   s    r/   rh   z_TestIRFFTBase.setup_methods  r   r1   c                 `     g d}g d}|d d }g d}|d d } fd} |||        |||       y )N)rS          @      @rl   y      ?       @y      @      @)rS   r  rl   r  ru          @            @      r	  rn   )	rS   r  rl   r  y      @      @y      @      r	  r
  r	  c                 L   t        t        j                  | j                        t	        |            }t        | t	        |            }t        |j                  j                         t        ||j                         t        |t        |      j                         y )Nr>   rv   )decimal)r   r&   r   rd   rA   rY   r   r7   r-   r   ndecr
   )r)   xrr*   rp   rg   s       r/   _testz-_TestIRFFTBase.test_definition.<locals>._test}  sh    bhhq1SW=AaR)B$((+%aDII>%aR$))Dr1   r   )rg   rX   x1_1x2_1rz   r  s   `     r/   rq   z_TestIRFFTBase.test_definitionv  sB    $2"1X:"1X	E 	b$b$r1   c                 V   t        dd      D ]  }d|z  }t        j                  d|d      dt        j                  d|dz   d      z  z   }d|d<   |dz  dk(  rt        j                  |d         |d<   t        j                  j                  |      }t        |      }t        ||        y )Nr!   r   r   r   rS   )rB   r&   r   rW   r   r   r   r   s         r/   r   z_TestIRFFTBase.test_djbfft  s    q 	,A1A		"a#b299Q!Q+?&??AAaD1uz""aBaA%a+	,r1   c                    dD ]  }t        |g      j                  | j                        }t        t	        |      |      }t	        t        ||dz  dz
              }t        |j                  | j                         t        |j                  | j                         t        ||| j                  d|z         t        ||| j                  d|z          y )Nr   rv   r!   rS   zsize=%d)r  r.   )
r4   r9   r-   r   r   r   r7   rd   r   r  r   s        r/   r   z_TestIRFFTBase.test_random_real  s    6 		ADv%%dhh/AtAw$'BeA$q&(,-B488,488,%b!TYY/84/?A%b!TYY/84/?A		Ar1   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        |            }t        |||| j                          t        t        |dt        |      z  dz
              }t        ||||| j                           y )Nr   r   rc   r!   rS   )r-   r&   r   r   r   r   r4   re   r    r9   r   r   rA   r0   )rg   r+   r,   r)   r*   s        r/   r   z!_TestIRFFTBase.test_size_accuracy  s    88rzz!DXX#D),== 	>DIINN4 		t$++DHH5Ad1gs1v&A!!QdDHH=U1a#a&j1n-.A!!QdDHH=	>r1   c                 f    t        t        t        g        t        t        t        ddgddggd       y r   )r   r   r   rf   s    r/   r   z!_TestIRFFTBase.test_invalid_sizes  s(    j%,j%1Q%1;r1   N)	r   r   r   rh   rq   r   r   r   r   r   r1   r/   r  r  r  s!    "	,
A><r1   r  c                       e Zd Zd Zy)TestIRFFTLongDoublec                 f    t         j                  | _        t         j                  | _        d| _        y Nr   r&   r   rd   r   r-   r  rf   s    r/   rh   z TestIRFFTLongDouble.setup_method      ==::	r1   Nr   r   r1   r/   r  r    s    r1   r  c                       e Zd Zd Zy)TestIRFFTDoublec                 f    t         j                  | _        t         j                  | _        d| _        y r  r  rf   s    r/   rh   zTestIRFFTDouble.setup_method  r  r1   Nr   r   r1   r/   r  r    s    r1   r  c                       e Zd Zd Zy)TestIRFFTSinglec                 f    t         j                  | _        t         j                  | _        d| _        y )Nrn   )r&   r   rd   r   r-   r  rf   s    r/   rh   zTestIRFFTSingle.setup_method  s    <<::	r1   Nr   r   r1   r/   r!  r!    s    r1   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 rb   r   rf   s    r/   rh   zTestFftnSingle.setup_method  r   r1   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rS   r!   rk   ru   rn            	   z-double precision output with single precision)msg)r   r&   r   r   r   r7   r   r   rg   r)   r*   y_rs       r/   rq   zTestFftnSingle.test_definition  sl     !RZZ()2<<'C	E hhtAw-&q#.r1   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 )Nr     r&   r4   r    r   rW   r9   r   r   r   r   r7   r   r   s        r/   test_size_accuracy_smallz'TestFftnSingle.test_size_accuracy_small  s    IINN4&BIINN4,F)FF!&&--

+,!&&--

+,33BLLARXXr||,&r2t4r1   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 )Nrk   r   r2  r3  r   s        r/   test_size_accuracy_largez'TestFftnSingle.test_size_accuracy_large  s    IINN4#ba)@&@@!&&--

+,!&&--

+,33BLLARXXr||,&r2t4r1   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   r7   r   r   r/  s       r/   test_definition_float16z&TestFftnSingle.test_definition_float16  sa     !RZZ()QWWbll+hhtAw-&q#.r1   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 )Nr   g    Ar&   r4   r    r   rW   r9   r   r   r   r   r7   r   r   s        r/   test_float16_input_smallz'TestFftnSingle.test_float16_input_small  s    IINN4&BIINN4,F)FF!&&--

+,!&&--

+,33BLLARXXr||,&r2s3r1   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 )Nrk   r   g    >Ar:  r   s        r/   test_float16_input_largez'TestFftnSingle.test_float16_input_large  s    IINN4#ba)@&@@!&&--

+,!&&--

+,33BLLARXXr||,&r2s3r1   N)r   r   r   rh   rq   pytestmarkparametrizeSMALL_COMPOSITE_SIZESSMALL_PRIME_SIZESr4  r   r   r6  r8  r;  r=  r   r1   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4r1   r$  c                   H    e Zd Zd 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 rb   r   rf   s    r/   rh   zTestFftn.setup_method
  r   r1   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*        rn   ru   rk   rH  )r   r   rO   r4   rg   r)   r*   s      r/   rq   zTestFftn.test_definition  sc     G!![^48!$q';q>:=!!$q';q>:r1   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      )         )   rH     )         )   rI     )rS   r   rT  )ru   rO  rV  )r+  rQ  rY  )r!   rM  rH  )rn   r   rW  )r,  rR  rI  )rk   rN  rU  )r)  rP  rX  )r-  rS  rZ  )rS   ru   r+  )r   rO  rQ  )rT  rV  rY  )r!   rn   r,  )rM  r   rR  )rH  rW  rI  )rk   r)  r-  )rN  rP  rS  )rU  rX  rZ  )r  r[   r   rS   r!   )r   r!   )r   r  )r!   rS   r   r  r[  )r!   r   rS   r\  )rS   r!   r   )rS   r   r!   )r   r!   rS   r\  r  r   rS   r!   rS   r!   r[  r\  )r[  r  r  r\  )r  r[  )r\  r[  r  rk   r\  r   r   )r   r   r   r   rB   r   )rg   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*   rF   js                               r/   test_axes_argumentzTestFftn.test_axes_argument  s        !!#	 !!#	 !!#	 !  "	 !  "	 !  "	 !<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 	GA1X G)#a1aj/1Q1W:FG	G q 	GA1X G)#a1aj/1Q1W:FG	G q 	GA1X G)#a1aj/1Q1W:FG	G !!Q'r1   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(  rS   r!   rk   r   ru   rn   r)  r   r   r   r   r   ru   ru   s)rk   ru   r  )r   r   rg   small_xlarge_x1r*   s       r/   test_shape_argumentzTestFftn.test_shape_argument  s_        "
 F#!!T(^4F#!!T(3B-%89r1   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*  r  r  )r+  r,  r-  r   r  r  r^  r  r\   ra  r  r\  )r   r   r   r   r  s       r/   test_shape_axes_argumentz!TestFftn.test_shape_axes_argument  s     ,&&&( ) F2!!T(^4F2!!X(B+,b"&6 	7r1   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)r   rn   rk   r+  rb  )r,  )r\   r  r  r,  )rL   rD   rc  r\  ru   ru   r!   r`  r,  r,  )r   r4   r   r   r   rK  s      r/   test_shape_axes_argument2z"TestFftn.test_shape_axes_argument2  s    LL.$'!!Sq%9: LL.$'!!Sq%9: LL	*V,!!"'))..V."L	Nr1   c                     t        d      }t        t        d      5  t        |d       d d d        y # 1 sw Y   y xY w)Nr  z)shape requires more axes than are presentr   )r,  r,  r!   rS   r  )r   r   r   r   r   s     r/   test_shape_argument_morez!TestFftn.test_shape_argument_more  s9    ):!LN 	$l#	$ 	$ 	$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\]\) specifiedr   z5invalid number of data points \(\[4, -3\]\) specifiedrS   r!   )ru   r[  )r   r   r   rf   s    r/   r   zTestFftn.test_invalid_sizes  su    :"67 	 "J	
 :"78 	, 1a&1a&!7+	, 	,	 	
	, 	,   AA A A)c                 t    t         j                  j                  d      }t        t        |g       |d       y N)r!   r!   r!   r[   gHz>r   )r   r4   r   r   r   s     r/   test_no_axeszTestFftn.test_no_axes  s)    LL(QR(!$7r1   c                     t        j                  d      }t        |dd      }t         j                  j                  |dd      }t	        ||       y)z-FFT returns wrong result with axes parameter.r  r  r`  r  N)r   onesr   r   r   r/  s       r/   test_regression_244zTestFftn.test_regression_244  sB     JJy!f8,iinnQ&xn83r1   N)r   r   r   rh   rq   r}  r  r  r  r  r   r  r  r   r1   r/   rD  rD  	  s7    ;D(L:7N"$	,8 r1   rD  c                   T   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d Zy)	TestIfftnNc                 B    t         j                  j                  d       y rb   r   rf   s    r/   rh   zTestIfftn.setup_method  r   r1   dtype,cdtype,maxnlpr2    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*  r>   rG  rJ  )r&   r   r   r   r7   r   rQ   r4   rg   r7   cdtypemaxnlpr)   r*   s         r/   rq   zTestIfftn.test_definition       HHi!(-/ !HQWWf%&q,q/6B8&uQxa&I=!&uQxa&Ir1   r  r,   rS   r!   r       r   \   c                     t        ||g      dt        ||g      z  z   }t        t        t        |            ||       t        t        t        |            ||       y )Nr   )r4   r   r   r   )rg   r  r,   r)   s       r/   r   zTestIfftn.test_random_complex  sM     D$< 2fdD\&:#::&uT!W~q&A&tE!H~q&Ar1   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r  )r   r   r   rf   s    r/   r   zTestIfftn.test_invalid_sizes  su    :"67 	 2$K	
 :"78 	- Aq6Aq6"G,	- 	-	 	
	- 	-r  c                 t    t         j                  j                  d      }t        t        |g       |d       y r  )r   r4   r   r   r   s     r/   r  zTestIfftn.test_no_axes  s)    LL(ab)148r1   )r   r   r   r7   r  rh   r>  r?  r@  r&   r   r   r   r   rq   r   r   r  r   r1   r/   r  r    s    EF [[2!zz2==$?!zz2<<>@AJAJ [[Xd|4[[V%;<B = 5B
	-9r1   r  c                      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g d      d	        Zej                  j                  d
eeg      d        Zej                  j                  d
eeg      d        Zd Zy)	TestRfftnNc                 B    t         j                  j                  d       y rb   r   rf   s    r/   rh   zTestRfftn.setup_method  r   r1   r  r2  r  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 r  )r&   r   r   r   r7   r   r^   r4   r  s         r/   rq   zTestRfftn.test_definition!  r  r1   r,   r  c                 t    t        ||g      }t        t        t        |      |j                        |d       y )Nr   r  )r4   r   r   r   rx   )rg   r,   r)   s      r/   test_randomzTestRfftn.test_random2  s+    D$< uQx115Ar1   funcc                     t        t        d      5   |g g       d d d        t        t        d      5   |ddgddggd       d d d        y # 1 sw Y   3xY w# 1 sw Y   y xY wr  r   r   rg   r  s     r/   r   zTestRfftn.test_invalid_sizes7  su    :"67 	 "J	
 :"78 	, 1a&1a&!7+	, 	,	 	
	, 	,s   
AAAA#c                 d    t        t        d      5   |g g        d d d        y # 1 sw Y   y xY w)Nz#at least 1 axis must be transformedr   r[   r  r  s     r/   r  zTestRfftn.test_no_axesC  s/    :!FH 	"	 	 	s   &/c                     t        t        d      5  t        t        j                  dt        j
                               d d d        y # 1 sw Y   y xY w)Nr   r   r   r>   )r   r   r   r&   r   r   rf   s    r/   r   zTestRfftn.test_complex_inputI  s9    9,GH 	4"((2R\\23	4 	4 	4s   /A

A)r   r   r   r7   r  rh   r>  r?  r@  r&   r   r   r   r   rq   r  r   r   r   r  r   r   r1   r/   r  r    s    EF [[2!zz2==$?!zz2<<>@AJAJ [[V%;<B =B [[VeV_5	, 6	, [[VeV_5 6
4r1   r  c                       e Zd Zd Zy)	FakeArrayc                 4    || _         |j                  | _        y r3   )_data__array_interface__r   s     r/   r   zFakeArray.__init__O  s    
#'#;#; r1   N)r   r   r   r   r   r1   r/   r  r  N  s    <r1   r  c                       e Zd Zd ZddZy)
FakeArray2c                     || _         y r3   r  r   s     r/   r   zFakeArray2.__init__U  s	    
r1   Nc                     | j                   S r3   r  )rg   r7   copys      r/   	__array__zFakeArray2.__array__X  s    zzr1   )NN)r   r   r   r   r  r   r1   r/   r  r  T  s    r1   r  c                      e Zd ZdZej
                  ej                  ej                  gZeej                  ej                  ej                  g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,  rQ  r  c           	          |j                         }d t        t        fD ]\  } | ||      |||       dj                  |j                  |j
                  |j                  |||      }	|rLt        ||d|	z         ^ y )Nc                     | S r3   r   r]   s    r/   <lambda>z&TestOverwrite._check.<locals>.<lambda>f  s    q r1   )overwrite_xz-{}({}{!r}, {!r}, axis={!r}, overwrite_x={!r})zspurious overwrite in %s)r.   )r  r  r  formatr   r7   rx   r   )
rg   r)   routinefftsizerL   r  should_overwriterz   fakesigs
             r/   _checkzTestOverwrite._checkd  sx    VVX )Z8 	NDDHgtEAHH  !''177GT;PC#R,F,LM	Nr1   c                    t         j                  j                  d       t        j                  |t         j                        r=t        j                  j
                  | dt        j                  j
                  | z  z   }nt        j                  j
                  | }|j                  |      }|xr ||v xr |||   k  }	| j                  ||||||	       y )Nrc   r   r  r  )r&   r4   re   
issubdtypecomplexfloatingrandnr9   r  )
rg   r  r7   rx   rL   overwritable_dtypesr  r  r   r  s
             r/   	_check_1dzTestOverwrite._check_1dn  s    
		t== 2 2399??E*R		0G-GGD99??E*D{{5!' 7 %)< <7 '5; 6 	 	D'7D +%5 	 	7r1   r7   r  r  TFz
shape,axes))rQ  r  )rQ  r!   r   )r!   rQ  rS   c           	          t         j                  t         j                  t         j                  f}| j	                  t
        ||||||       | j	                  t        ||||||       y r3   )r&   r   r   r   r  r   r
   rg   r7   r  r  rx   r\   overwritables          r/   test_fft_ifftzTestOverwrite.test_fft_ifft~  sR     r||DsE5$	-tUE4	-r1   c           	          | j                   }| j                  t        ||||||       | j                  t        ||||||       y r3   )real_dtypesr  r   r   r  s          r/   test_rfft_irfftzTestOverwrite.test_rfft_irfft  sE     ''ueUD,	-tUE4	-r1   c                 t  
 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
d fd} 
 ||            D ]d  }	| j                  |||	| |||	|             |j                  dkD  s2| j                  |j                  ||	| ||j                  |	|             f y )Nrc   r   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   r   r!   rS   )rA   )shpr|  restfftshape_iters      r/   r  z2TestOverwrite._check_nd_one.<locals>.fftshape_iter  sg     3x1}a&!)SVSVAX6 *A -c!"g 6 * dTk)**s   AA	c                 H    || S t        t        j                  | |            S r3   )tupler&   take)rx   r\   s     r/   
part_shapez/TestOverwrite._check_nd_one.<locals>.part_shape  s"    |RWWUD122r1   c                      | j                   |      }xr1 t        j                  |      t        j                  |      k  xr v S r3   )rx   r&   prod)r   rx   r\   r  r7   r  r  r  s       r/   r  z5TestOverwrite._check_nd_one.<locals>.should_overwrite  sF    4::t,A 5GGENbggaj05!446r1   r  rS   )
r&   r4   re   r  r  r  r9   r  rM   T)rg   r  r7   rx   r\   r  r  r   r  fftshaper  r  s     `  ``   @@r/   _check_nd_onezTestOverwrite._check_nd_one  s   
		t== 2 2399??E*R		0G-GGD99??E*D{{5!	*	3	6 &j&=> 		9HKKgx$/)9$$)O  Q yy1}DFFGXt(3-= $$.8  9		9r1   ))r  N)r  rd  )r  rd  )r  rS   )r,  rQ  N)r  r   rS   )r,  rQ  r!   r  )r  r_  )r  rd  )r  r  )r  )r!   )r  N)r  r]  c                     t         j                  t         j                  t         j                  f}| j	                  t
        |||||       | j	                  t        |||||       y r3   )r&   r   r   r   r  r   r   )rg   r7   r  rx   r\   r  s         r/   test_fftn_ifftnzTestOverwrite.test_fftn_ifftn  sR      r||D4t\&	(5%l&	(r1   N)r   r   r   __doc__r&   r   r   r   r  r   r   r   dtypesfftsizesr  r  r>  r?  r@  r  r  r  r  r   r1   r/   r  r  ]  s   >::rzz2==9KBLL"--HHFHN7  [[Wf-[[Y1[[]T5M:[[\ ,: ;-; ; 2 .- [[Wk2[[Y1[[]T5M:[[\ ,: ;-; ; 2 3-&9P [[Wf-[[]T5M:[[\ ,E F(F ; .(r1   r  r  c                     t        j                  dt              }t        t        d      5   | |d       d d d        y # 1 sw Y   y xY w)Nr   r>   zBInvalid norm value 'o', should be "backward", "ortho" or "forward"r   o)r(   )r&   r   floatr   r   )r  r)   s     r/   test_invalid_normr    sF     			"E"A	zA
B  	QS  s   AA
c                     t         j                  j                  d      }|j                  d      d|j                  d      z  z   }t	         | t        |             | |             y )Nrc   r   r   r&   r4   RandomStater    r   r;   r  rngr)   s      r/   test_swapped_byte_order_complexr    sO     ))


%CrCHHRL((AD*+T!W5r1   c                     t         j                  j                  d      }|j                  d      }t	         | t        |             | |             y )Nrc   r   r  r  s      r/   test_swapped_byte_order_realr    s;    
))


%CAD*+T!W5r1   )Snumpy.testingr   r   r   r   r   r   r>  r	   r   scipy.fft._pocketfftr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   	numpy.fftnumpy.randomr    r   rA  r   rB  r0   r4   r;   rG   rI   rO   rQ   rT   rY   r^   r`   r   r   r   r   r   r?  skipifr   r   r   r   r   r   r   r   r  r  r  r  r!  r$  rD  r  r  r  r  r  r@  r  r  r  r   r1   r/   <module>r     s  , ,  *> > > >& & &    
  	   
N
 1-: -:`! !L L K K&J; J;Z BMMRZZ/=  ? ?] ] 2( 2(h BMMRZZ/=  ?! !?!] ] =< =<F BMMRZZ/=  ?. ?n n :4 :4z`  ` F,9 ,9\14 14h< < w( w(t #tT5!%ueV"= >> #tT5#(&$"? @6@6 %u!=>6 ?6r1   