
    e$                        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 ej        ej                  j        z  Zd ej        ej                  j        z  Zd ej        ej                  j        z  Zd ej        ej                  j        z  Zd 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)randomi      c                    | j         }|t          j        k    s|t          j        k    rt          t
          fS |t          j        k    s|t          j        k    rt          t          fS |t          j        k    sM|t          j        k    s=|t          j        k    s-|t          j        k    sJ d
                    |                      t          t
          fS )NzUnexpected dtype {})dtypenpfloat64
complex128reps_64atol_64float32	complex64reps_32atol_32format)xdts     8lib/python3.11/site-packages/mkl_fft/tests/test_fftnd.py_get_rtol_atolr   *   s    	
B	RZ2..	rz		R2<//bj  B"-$7$72;K;KrUWUaOaOaOady  eA  eA  BD  eE  eEOaOaOa    c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	Test_mklfft_matrixc                 t   t          j        d           t          j        dd          | _        | j                            t
          j                  | _        t          j        dd                              t
          j	                  | _
        | j
                            t
          j                  | _        d S )N@    r
   )rndseedrandnmdastyper   r   mfviewr   mzr   mcselfs    r   setUpzTest_mklfft_matrix.setUp6   sz    )C%%'..,,)C'',,R];;'....r   c                    | j         | j        | j        | j        fD ]9}t	          |          \  }}|                                }t          j        |          }t          j        t          j        |d          d          }t          j        t          j        |d          d          }t          ||||d
                    |j        t          j        t          j        ||z
                                           t          ||||d
                    |j        t          j        t          j        ||z
                                           ;dS )zfftn equals repeated fftr   axis   *failed test for dtype {}, max abs diff: {}rtolatolerr_msgN)r$   r(   r&   r)   r   copymkl_fftfftnfftr   r   r   r   maxabs)r+   arr_tola_toldt1t2t3s           r   test_matrix1zTest_mklfft_matrix.test_matrix1=   s   7DGTWdg6 	[ 	[B)"--LE5		AaBW[333!<<<BW[333!<<<BBUFrFyFyz{  {B  DF  DJ  KM  KQ  RT  UW  RW  KX  KX  DY  DY  GZ  GZ  [  [  [  [BUFrFyFyz{  {B  DF  DJ  KM  KQ  RT  UW  RW  KX  KX  DY  DY  GZ  GZ  [  [  [  [  [	[ 	[r   c                    | j         | j        | j        | j        fD ]}|                                }t          |          \  }}t          j        t          j        |                    }t          ||||d
                    |j        t          j        t          j        ||z
                                           dS )zifftn(fftn(x)) is xr1   r2   N)r$   r(   r&   r)   r6   r   r7   ifftnr8   r   r   r   r   r:   r;   r+   r<   r?   r=   r>   ts         r   test_matrix2zTest_mklfft_matrix.test_matrix2H   s    7DGTWdg6 	W 	WB		A)!,,LE5gl1oo..AAqu5DpDwDwxyx  BD  BH  IK  IO  PQ  RS  PS  IT  IT  BU  BU  EV  EV  W  W  W  W  W		W 	Wr   c                    | j         | j        | j        | j        fD ]}|                                }t          |          \  }}t          j        t          j        |                    }t          ||||d
                    |j        t          j        t          j        ||z
                                           dS )zfftn(ifftn(x)) is xr1   r2   N)r$   r(   r&   r)   r6   r   r7   r8   rE   r   r   r   r   r:   r;   rF   s         r   test_matrix3zTest_mklfft_matrix.test_matrix3P   s    7DGTWdg6 	W 	WB		A)!,,LE5W]1--..AAqu5DpDwDwxyx  BD  BH  IK  IO  PQ  RS  PS  IT  IT  BU  BU  EV  EV  W  W  W  W  W		W 	Wr   c                 "   | j         | j        | j        | j        fD ]s}t	          |          \  }}|ddddddf         }|                                }t          j        |          }t          j        |          }t          ||||           tdS ):fftn of strided array is same as fftn of a contiguous copyN   r3   r4   )	r$   r(   r&   r)   r   r6   r7   r8   r   )r+   r<   r=   r>   	d_stridedd_contig	t_stridedt_contigs           r   test_matrix4zTest_mklfft_matrix.test_matrix4Y   s    7DGTWdg6 	I 	IB)"--LE533Q3sss7I ~~''HY//I|H--HIxe%HHHHH	I 	Ir   c                    t          j        d          }|                    dddd          }|ddddddddddf         }t          |          \  }}t	          j        |d	
          }t          |j        d                   D ]`}t          |j        d                   D ]C}t          ||dddd|f         t	          j        ||dddd|f                   ||           DadS )rL   i              N   )r0   rM   axesr   rN   )	r!   RandomStater#   r   r7   r8   rangeshaper   )	r+   rsr   yr=   r>   fi0i3s	            r   test_matrix5zTest_mklfft_matrix.test_matrix5d   s   _T""HHQB##dddAAAqqq##A#o%a((uL'''
## 	 	BAGAJ''  b!!!QQQlOL2qqq!!!b=!122U    	 	r   c                 P   | j         | j        | j        | j        fD ]	}|                                }dD ]}t
          t          t          j        fD ]} |t          |j
                            } ||j                  }t          |||          }t          |          \  }}	t          j        j        t          j        j        |fi |fi |}
t%          ||
||	d                    |j        t          j        t          j        ||
z
                                           ԌdS )z,fftn with tuple, list and ndarray axes and s)forwardbackwardortho)sr\   normr1   r2   N)r$   r(   r&   r)   r6   tuplelistr   arrayr^   ndimr_   dictr   r7   
_numpy_fftr8   rE   r   r   r   r:   r;   )r+   r<   r?   rk   	containerr\   rj   kwargsr=   r>   rG   s              r   test_matrix6zTest_mklfft_matrix.test_matrix6s   s   7DGTWdg6 		_ 		_B		A8 _ _"'rx!8 _ _I$9U16]]33D!	!'**A!ADt<<<F#1!#4#4LE5*/0B0H0U0Uf0U0U``Y_``A#Aqu5LxLL  AB  AH  JL  JP  QS  QW  XY  Z[  X[  Q\  Q\  J]  J]  M^  M^  _  _  _  _  ___		_ 		_r   N)
__name__
__module____qualname__r,   rC   rH   rJ   rS   re   rt    r   r   r   r   5   s        / / /	[ 	[ 	[W W WW W WI I I  _ _ _ _ _r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )Test_Regressionsc                 x   t          j        d           t          j        ddd          | _        | j                            t
          j                  | _        t          j        ddd                              t
          j	                  | _
        | j
                            t
          j                  | _        d S )Nr             .   )r!   r"   r#   adr%   r   r   afr'   r   azr   acr*   s    r   r,   zTest_Regressions.setUp   s~    )BB'''..,,)BD))..r}=='....r   c                 `   | j         | j        | j        | j        fD ]}t	          |          \  }}|                                }t          j        |          }t          |j	                  D ]A}t          j        ||          }t          j        ||          }t          ||||           BdS )zGfft of F-contiguous array is the same as of C-contiguous with same datar.   rN   N)r   r   r   r   r   r6   r   asfortranarrayr^   ro   r7   r9   r   )	r+   r<   r=   r>   d_ccontd_fcontaf1f2s	            r   test_cf_contigzTest_Regressions.test_cf_contig   s    7DGTWdg6 	@ 	@B)"--LE5ggiiG'00G27^^ @ @[q111[q111BU?????@		@ 	@r   c                 $   g d}| j         | j        fD ]|}|D ]w}t          |          \  }}t          j        t          j        ||                    }t          j        t          j        ||          |          }t          ||||           x}dS )z'Test that rfftn_numpy works as expected))r   r0   rM   )r   rM   r0   )r0   r   rM   )r0   rM   r   )rM   r   r0   )rM   r0   r   r[   rN   N)r   r   r   r7   rfftn_numpyr   	transposer   )r+   r\   r   r   r=   r>   rfft_trtr_rffts           r   test_rfftn_numpyz!Test_Regressions.test_rfftn_numpy   s    QQQ'47# 	J 	JA J J-a00u!-bl1a.@.@AA,w':11'E'E'EqIIu5IIIII	J	J 	Jr   c                 2   t          j        d                              d          }|                    t           j                  }t          j        |dd          }t          j        |          }t          |          \  }}t          ||||           dS )zTest example from #64rW   )rZ      N)rY   )r_   r\   rN   )	r   arangereshaper%   cdoubler7   r8   r   r   )r+   r   r   r1r2r=   r>   s          r   	test_gh64zTest_Regressions.test_gh64   s    IbMM!!%((HHRZ  \!4g666\!__%a((uBU777777r   N)ru   rv   rw   r,   r   r   r   rx   r   r   rz   rz      sV        / / /	@ 	@ 	@J J J8 8 8 8 8r   rz   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )Test_Scalesc                     d S )Nrx   r*   s    r   r,   zTest_Scales.setUp   s    r   c                    t          j        dd          }t          j        |d          }t          j        |          }t	          |          \  }}t          d|z  |||           t          j        |d          }t          ||||           t          j        |d          }t          j        |d          }t          ||||           d S )	N   r?   r         ?forward_scaler   rN         ?	r   onesr7   r9   r   r   ifftrfftirfft	r+   Xr   r   r=   r>   X1f3X2s	            r   test_scale_1d_vectorz Test_Scales.test_scale_1d_vector   s    GCs###[$///[^^%a((u"bu59999\"D1112E6666\!3///]2S1112E666666r   c                    t          j        dd          }t          j        |dd          }t          j        |d          }t	          |          \  }}t          d|z  |||	           t          j        |dd          }t          ||||	           t          j        |d
d          }t          j        |d
d          }t          ||||	           d S )N)   r   r   r?   r   r0   r   )r/   r   r.   r   rN   r   r   r   r   s	            r   test_scale_1d_arrayzTest_Scales.test_scale_1d_array   s    GJc***[$777[###%a((u"bu59999\"1D9992E6666\!!3777]2AS9992E666666r   c                 P   t          j        dd          }t          j        t          j        d|j        |j                            |j        d d <   t          j        |          }t          j        |d          }t          |          \  }}t          |d|z  ||           d S )	N)rM   r   r      r?   r   r   皙?r      rN   r   emptycbrtr   sizer   flatr7   r8   r   r   r+   r   rb   f_scaler=   r>   s         r   test_scale_ndzTest_Scales.test_scale_nd   s    H]#...GBIaqw???@@qqq	LOO,q444%a((u1W95u======r   c                 T   t          j        dd          }t          j        t          j        |j        |j                            |j        d d <   t          j        |d          }t          j        |dd          }t          |          \  }}t          |d|z  ||	           d S )
N)r   rM   r   r   r?   r   )r   r0   rM   rZ   r[   r   )r\   r   r   rN   r   r   s         r   test_scale_nd_axeszTest_Scales.test_scale_nd_axes   s    H]#...GBIafAG<<<==qqq	L...,q|3GGG%a((u1W95u======r   N)ru   rv   rw   r,   r   r   r   r   rx   r   r   r   r      s_          7 7 77 7 7> > >> > > > >r   r   )numpyr   numpy.testingr   r   r   r   r   r   r	   r!   syswarningsr7   finfor   epsr   r   r   r   r   r   r   rz   r   rx   r   r   <module>r      s  6    ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '        



  ("(2:&&*
*("(2:&&*
*"*%%)
)"*%%)
)     I_ I_ I_ I_ I_ I_ I_ I_Z&8 &8 &8 &8 &8x &8 &8 &8R0> 0> 0> 0> 0>( 0> 0> 0> 0> 0>r   