
    e3                         d dl Zd dlmZmZmZmZmZmZ d dl m	Z
 d dlZd dlZd dlZd Zd Z G d de          Z G d d	ej                  Z G d
 de          Z G d de          Z G d de          ZdS )    N)TestCaseassert_assert_raisesassert_equalassert_warnsassert_allclose)randomc                 4   t          |           }dt          j        z  t          j        |          t	          |          z  z  }t          j        |                              dd          |z  }t          j        | t          j        |          z  d          S )Ny                 axis)lennppiarangefloatreshapesumexp)vecLphases      8lib/python3.11/site-packages/mkl_fft/tests/test_fft1d.pynaive_fft1dr   %   st    CAIry||E!HH,-EIaLL  Q''%/E6#bfUmm#!,,,,    c                 x    | |u rdS t          |t          j                  st          |d          rdS | j        du S )z|
    Strict check for `arr` not sharing any data with `original`,
    under the assumption that arr = asarray(original)
    F	__array__N)
isinstancer   ndarrayhasattrbase)arroriginals     r   _datacopiedr%   ,   sI    
 huh
++ +0N0N u8tr   c                   \    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )Test_mklfft_vectorc                    t          j        d           t          j        d          | _        | j                            t
          j                  | _        t          j        d                              t
          j	                  
                                | _        | j                            t
          j                  | _        d S )N    )r*      dtype)rndseedstandard_normalxd1astyper   float32xf1view
complex128squeezexz1	complex64xc1selfs    r   setUpzTest_mklfft_vector.setUp9   s    &s++8??2:..&w//442=4IIQQSS8??2<00r   c                    t          j        | j                  }t          | j                  }t	          ||dd           t          j        | j                  }t          | j                  }t	          ||dd           dS )z5check that mkl_fft gives the same result of numpy.fftHz>g-=)rtolatolg>N)mkl_fftfftr8   r   r   r:   r<   f1f2s      r   test_vector1zTest_mklfft_vector.test_vector1@   sv    [""""2Du5555[""""2Dt444444r   c                    t          j        | j                  }t          j        |          }t	          t          j        | j        |                     t          j        | j                  }t          j        |          }t	          t          j        | j        |                     t          j        | j                  }t          j        |          }t	          t          j        | j        |                     t          j        | j	                  }t          j        |          }t	          t          j        | j	        |d                     dS )zifft(fft(x)) is identityH׊>rA   N)
rB   rC   r8   ifftr   r   allcloser:   r1   r4   rD   s      r   test_vector2zTest_mklfft_vector.test_vector2J   s    [""\"DHR(()))[""\"TXb))***[""\"TXb))***[""\"TXb88899999r   c                    t          j        | j                  }t          j        |          }t	          t          j        | j        |                     t          j        | j                  }t          j        |          }t	          t          j        | j        |                     t          j        | j                  }t          j        |          }t	          t          j        | j        |                     t          j        | j	                  }t          j        |          }t	          t          j        | j	        |d                     dS )zfft(ifft(x)) is identityrI   rJ   N)
rB   rK   r8   rC   r   r   rL   r:   r1   r4   rD   s      r   test_vector3zTest_mklfft_vector.test_vector3\   s    \$(##[__DHR(()))\$(##[__TXb))***\$(##[__TXb))***\$(##[__TXr&999:::::r   c                    | j         ddd         }t          j        |          }t          j        |                                          }t	          t          j        ||                     | j         ddd         }t          j        |          }t          j        |                                          }t	          t          j        ||                     dS )z0fft of strided is same as fft of contiguous copyNr+   r   )r8   rB   rC   copyr   r   rL   r<   xrE   rF   s       r   test_vector4zTest_mklfft_vector.test_vector4n   s    HSSqSM[^^[""Br""###HTTrTN[^^[""Br""#####r   c                     | j                                         ddd         }t          j        |d          }t          j        | j         ddd                   }t	          t          j        ||                     dS )z,fft in-place is the same as fft out-of-placeNToverwrite_x)r8   rQ   rB   rC   r   r   rL   rR   s       r   test_vector5zTest_mklfft_vector.test_vector5z   sk    HMMOODDbD![---[$$B$((Br""#####r   c           	      (   | j                                         }t          j        |d          }t	          t          ||                      | j                                         }t          j        |ddd         d          }t	          t          j        || j                               t	          t          j        |ddd         | j         ddd                              t	          t          j        |ddd         |                     dS )zfft in placeTrW   NrV   r   )r8   rQ   rB   rC   r   r%   r   rL   )r<   rS   rE   s      r   test_vector6zTest_mklfft_vector.test_vector6   s    HMMOO[---KA&&&'''HMMOO[44R4d333R[DH---///Qrv2vYR(899;;;Qrv2vY++-----r   c                     | j         ddd         }t          j        |          }t          j        |                    t          j                            }t          t	          j        ||                     dS )z8fft of real array is the same as fft of its complex cast      r+   N)r1   rB   rC   r2   r   r6   r   rL   rR   s       r   test_vector7zTest_mklfft_vector.test_vector7   s^    HQr!V[^^["-0011Br""#####r   c                     | j         ddd         }t          j        |          }t          j        |                    t          j                            }t          t	          j        ||                     dS )z9ifft of real array is the same as fft of its complex castr]   r^   r+   N)r1   rB   rK   r2   r   r6   r   rL   rR   s       r   test_vector8zTest_mklfft_vector.test_vector8   s^    HQr!V\!__\!((2=1122Br""#####r   c                     t          j        | j        j        d          }d|d<   d|d<   t           j                            | j        |          }t          j        |          }t          j        | j                  }t          ||           dS )zworks on subtypes of ndarrayintr,   r   rV   )maskN)	r   zerosr1   shapemamasked_arrayrB   rC   r   )r<   rd   rS   rE   rF   s        r   test_vector9zTest_mklfft_vector.test_vector9   s|    xe444QREtxd33[^^[""Br   c                    | j         dd                                         }t          j        |d          }t          j        | j         dd                   }t	          ||           t          j        |d          }| j         dd                                         }d|d<   t          j        |          }t	          ||           dS )zcheck n for real arraysN      n	   g        r   )r1   rQ   rB   rC   r   r<   rS   rE   rF   ys        r   test_vector10z Test_mklfft_vector.test_vector10   s    HRaRL["""["1"&&B["""HRaRL"[^^Br   c                    | j         dd                                         }t          j        |d          }t          j        | j         dd                   }t	          ||           t          j        |d          }| j         dd                                         }d|d<   t          j        |          }t	          ||           dS )zcheck n for complex arraysNrk   rl   rm   ro   y                r   )r8   rQ   rB   rC   r   rp   s        r   test_vector11z Test_mklfft_vector.test_vector11   s    HRaRL["""["1"&&B["""HRaRL"[^^Br   c                     t          j        d          }t          j        |          }t          j        |                    t           j                            }t          ||           dS )zcheck fft of float-valued array   N)r   r   rB   rC   r2   float64r   rR   s       r   test_vector12z Test_mklfft_vector.test_vector12   sO    IbMM[^^["*--..Br   N)__name__
__module____qualname__r=   rG   rM   rO   rT   rY   r[   r_   ra   ri   rr   rt   rx    r   r   r'   r'   8   s        1 1 15 5 5: : :$; ; ;$
$ 
$ 
$$ $ $
. 
. 
.$ $ $$ $ $                        r   r'   c                       e Zd ZdS )	DuckArrayN)ry   rz   r{   r|   r   r   r~   r~      s          r   r~   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )Test_mklfft_matrixc                    t          j        d           t          j        d          | _        | j                            t
          j                  | _        t          j        t          j        d          t          j	        ddgt
          j
                            | _        | j                            t
          j                  | _        | j                            t                    | _        t          j        d          | _        d S )Nr)   )   r]   )r^      r+         ?                      ?r,   r*   )r.   r/   r0   ad2r2   r   r3   af2dotarrayr6   az2r9   ac2r5   r~   matr1   r;   s    r   r=   zTest_mklfft_matrix.setUp   s    &v..8??2:..6!+..h
J/r}EEE
 
 8??2<008==++&s++r   c                    | j                                         t          j                  }t	          j        fdt          j        d                   D                       }t          ||           t          j        d          }t	          j        fdt          j        d                   D                       j	        }t          ||           d S )Nc                 D    g | ]}t          j        |                   S r|   rB   rC   .0irS   s     r   
<listcomp>z3Test_mklfft_matrix.test_matrix1.<locals>.<listcomp>   '    EEEaAaD))EEEr   r   r   c                 L    g | ] }t          j        d d |f                   !S Nr   r   s     r   r   z3Test_mklfft_matrix.test_matrix1.<locals>.<listcomp>   /    HHHAaaadG,,HHHr   r   )
r   rQ   rB   rC   r   r   rangerf   r   Tr<   rE   rF   rS   s      @r   test_matrix1zTest_mklfft_matrix.test_matrix1       HMMOO[^^XEEEE53D3DEEEFFB[###XHHHHeAGAJ6G6GHHHIIKBr   c                     t          j        | j                  }t          j        | j                  }t	          ||           d S r   )rB   rC   r   r   r   rD   s      r   test_matrix2zTest_mklfft_matrix.test_matrix2   s:    [""[""Br   c                    | j                                         }t          j        |d d dd d df                   }t          j        |d d dd d df                                                   }t	          ||           d S )Nr]   r   r   rQ   rB   rC   r   rR   s       r   test_matrix3zTest_mklfft_matrix.test_matrix3   sy    HMMOO[33Q3ttt8%%[33Q3ttt8))++,,Br   c                     | j                                         }t          j        |d d dd d df                   }t          j        |d d dd d df         d          }t	          ||           d S )Nr]   r   TrW   r   rR   s       r   test_matrix4zTest_mklfft_matrix.test_matrix4   sr    HMMOO[33Q3ttt8%%[33Q3ttt8$777Br   c                     | j         }t          j        |          }t          j        |          }t	          ||d           d S Ng|=rJ   )r   rB   rC   rK   r   rR   s       r   test_matrix5zTest_mklfft_matrix.test_matrix5   s@    H[^^\"2E******r   c                     | j         }t          j        |          }t          j        |          }t	          ||d           d S r   )r   rB   rK   rC   r   rR   s       r   test_matrix6zTest_mklfft_matrix.test_matrix6   s>    H\!__[__2E******r   c                    | j                                         t          j                  }t	          j        fdt          j        d                   D                       }t          ||           t          j        d          }t	          j        fdt          j        d                   D                       j	        }t          ||           d S )Nc                 D    g | ]}t          j        |                   S r|   r   r   s     r   r   z3Test_mklfft_matrix.test_matrix7.<locals>.<listcomp>   r   r   r   r   c                 L    g | ] }t          j        d d |f                   !S r   r   r   s     r   r   z3Test_mklfft_matrix.test_matrix7.<locals>.<listcomp>  r   r   r   )
r   rQ   rB   rC   r   r   r   rf   r   r   r   s      @r   test_matrix7zTest_mklfft_matrix.test_matrix7   r   r   c                 (   ddl m} | j        d d                                         } ||dd|j        z  |j        f          }t          j        |          }t          j        |                                          }t          ||dd	           d S )
Nr   )
as_strided
   )r   r   r+   )rf   stridesgV瞯<r?   )rA   r@   )numpy.lib.stride_tricksr   r1   rQ   itemsizerB   rC   r   )r<   r   rS   rq   rE   rF   s         r   test_matrix8zTest_mklfft_matrix.test_matrix8  s    666666HSbSM  Jq1:qz0JKKK[^^[""BU666666r   N)ry   rz   r{   r=   r   r   r   r   r   r   r   r   r|   r   r   r   r      s        
, 
, 
,          
          + + ++ + +     7 7 7 7 7r   r   c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	Test_mklfft_rank3c                    t          j        d           t          j        d          | _        | j                            t
          j                  | _        t          j        t          j        d          t          j	        ddgt
          j
                            | _        | j                            t
          j                  | _        d S )Nr)   )rl         )r^      r   r+   r   r   r,   )r.   r/   r0   ad3r2   r   r3   af3r   r   r6   az3r9   ac3r;   s    r   r=   zTest_mklfft_rank3.setUp  s    &{338??2:..6!/22h
J/r}EEE
 
 8??2<00r   c                     | j         }t          |j                  D ]@}t          j        ||          }t          j        ||          }t          ||d           Ad S Nr   V瞯<rJ   )r   r   ndimrB   rC   rK   r   r<   rS   axrE   rF   s        r   test_array1zTest_mklfft_rank3.test_array1  j    H-- 	/ 	/BQr***Bb,,,BB.....	/ 	/r   c                     | j         }t          |j                  D ]@}t          j        ||          }t          j        ||          }t          ||d           Ad S r   )r   r   r   rB   rC   rK   r   r   s        r   test_array2zTest_mklfft_rank3.test_array2"  r   r   c                     | j         }t          |j                  D ]@}t          j        ||          }t          j        ||          }t          ||d           Ad S r   )r   r   r   rB   rK   rC   r   r   s        r   test_array3zTest_mklfft_rank3.test_array3)  j    H-- 	/ 	/Ba+++BR+++BB.....	/ 	/r   c                     | j         }t          |j                  D ]@}t          j        ||          }t          j        ||          }t          ||d           Ad S r   )r   r   r   rB   rK   rC   r   r   s        r   test_array4zTest_mklfft_rank3.test_array40  r   r   c                 ~   | j         }|t          j                 }t          j        |d          }t          j        |                    |j                  d          }t          ||d           |ddt          j        f         }t          j        |d          }t          j        |                    |j                  d          }t          ||d           |ddddt          j        f         }t          j        |d          }t          j        |                    |j                  d          }t          ||d           |ddddddt          j        f         }t          j        |d          }t          j        |                    |j                  d          }t          ||d           dS )z.Inputs with zero strides are handled correctlyr   r   r   rJ   N)r   r   newaxisrB   rC   r   rf   r   )r<   zz1rE   rF   s        r   test_array5zTest_mklfft_rank3.test_array58  s   Hrz]["%%%[BH--B777BU++++qqq"*}["%%%[BH--B777BU++++qqq!!!RZ ["%%%[BH--B777BU++++qqq!!!QQQ
"#["%%%[BH--B777BU++++++r   c                 X   | j         }|                    |j        d          }t          j        |d          }t          j        | j         d          }t          ||d           t          j        |d          }t          j        | j         d          }t          ||d           dS )	z:Inputs with Fortran layout are handled correctly, issue 29F)orderr   r   r   rJ   r   N)r   r2   r-   rB   rC   r   )r<   r   y1y2s       r   test_array6zTest_mklfft_rank3.test_array6L  s    HHHQWCH(([###[***BU++++[$$$[+++BU++++++r   N)
ry   rz   r{   r=   r   r   r   r   r   r   r|   r   r   r   r     s}        1 1 1/ / // / // / // / /, , ,(	, 	, 	, 	, 	,r   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Test_mklfft_rfftc                     t          j        d           t          j        d          | _        t          j        dd          | _        t          j        ddd          | _        d S )Nr)         rl   r   )r.   r/   randnv1m2t3r;   s    r   r=   zTest_mklfft_rfft.setUpY  sK    )B--)Aa..)Aa##r   c                     | j                                         }t          j        |          }t          j        |          }t          ||           d S r   )r   rQ   rB   rfftirfftr   rR   s       r   test1zTest_mklfft_rfft.test1_  sC    GLLNN\!__]21r   c                     | j                                         }t          j        |          }t          j        |          }t          ||           d S r   )r   rQ   rB   r   r   r   rR   s       r   test2zTest_mklfft_rfft.test2e  sE    GLLNN]1\"1r   c           
         t          dd          D ]}dD ]}t          t          j        t          j        gddg          D ]\  }}| j                                                            |          }t          j	        |||          }t          j
        |||          }t          || j                            |          |||f           d S )Nr   r+   TFrI   r   r   rX   )rA   err_msg)r   zipr   r3   rw   r   rQ   r2   rB   r   r   r   r<   aovwr_xdtrA   rS   rE   rF   s           r   test3zTest_mklfft_rfft.test3k  s    q 	\ 	\A' \ \ #RZ$<tUm L L \ \HB--b11A aaVDDDB rvFFFB#Br(:(:PQSY{[[[[[	\\	\ 	\r   c           	         t          dd          D ]}dD ]}t          t          j        t          j        gddg          D ]\  }}| j                                                            |          }t          j	        |||          }t          j
        |||          }t          || j                            |          |           d S )Nr   r+   r   rI   r   r   rJ   )r   r   r   r3   rw   r   rQ   r2   rB   r   r   r   r   s           r   test4zTest_mklfft_rfft.test4t      q 	G 	GA' G G #RZ$<tUm L L G GHB--b11A qqfEEEB bqfEEEB#Br(:(:FFFFF	GG	G 	Gr   c           	         t          dd          D ]}dD ]}t          t          j        t          j        gddg          D ]\  }}| j                                                            |          }t          j	        |||          }t          j
        |||          }t          || j                            |          |           d S )Nr   r]   r   gHך>gV瞯<r   rJ   )r   r   r   r3   rw   r   rQ   r2   rB   r   r   r   r   s           r   test5zTest_mklfft_rfft.test5}  r   r   N)	ry   rz   r{   r=   r   r   r   r   r   r|   r   r   r   r   X  sy        $ $ $    \ \ \G G GG G G G Gr   r   )numpyr   numpy.testingr   r   r   r   r   r   r	   r.   syswarningsrB   r   r%   r'   r    r~   r   r   r   r|   r   r   <module>r      s  6    ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '        



  - - -	 	 	L  L  L  L  L  L  L  L ^ " ! ! ! !
 ! ! !D7 D7 D7 D7 D7 D7 D7 D7NE, E, E, E, E, E, E, E,P,G ,G ,G ,G ,Gx ,G ,G ,G ,G ,Gr   