
    sg]                     $   d dl mZmZ d dlZd dl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  ej(                   e ee      d            Z ed      D  cg c]
  } ed| z      c} Z ed      D  cg c]
  } ed	| z      c} Z ej(                   e ee      d
            Z ej(                   e ee      d            Zed   Zd Zd Zd Zd Z d Z!d Z"ddZ#ddZ$ddZ%ddZ& G d d      Z' G d d      Z( G d de(      Z) G d de(      Z* G d d e(      Z+ G d! d"e(      Z, G d# d$e)      Z- G d% d&e)      Z. G d' d(e)      Z/ G d) d*e*      Z0 G d+ d,e*      Z1 G d- d.e*      Z2 G d/ d0e+      Z3 G d1 d2e+      Z4 G d3 d4e+      Z5 G d5 d6e,      Z6 G d7 d8e,      Z7 G d9 d:e,      Z8 G d; d<      Z9 G d= d>e9      Z: G d? d@e9      Z; G dA dBe9      Z< G dC dDe9      Z= G dE dFe9      Z> G dG dHe9      Z? G dI dJe9      Z@ G dK dLe9      ZA G dM dNe9      ZB G dO dPe9      ZC G dQ dRe9      ZD G dS dTe9      ZE G dU dV      ZF G dW dXeF      ZG G dY dZeF      ZH G d[ d\eG      ZI G d] d^eG      ZJ G d_ d`eG      ZK G da dbeF      ZL G dc ddeF      ZM G de dfeF      ZN G dg dheF      ZO G di djeF      ZP G dk dleF      ZQ G dm dneH      ZR G do dpeH      ZS G dq dreH      ZT G ds dt      ZU G du dveU      ZV G dw dxeU      ZW G dy dzeU      ZX G d{ d|eU      ZY G d} d~eU      ZZ G d deU      Z[ G d deU      Z\ G d deU      Z] G d deU      Z^ G d deU      Z_ G d deU      Z` G d deU      Za G d d      Zb G d d      Zcyc c} w c c} w )    )joindirnameN)assert_array_almost_equalassert_equal)raises)dctidctdstidstdctnidctndstnidstnztest.npz   zx%dzy%dzfftw_double_ref.npzzfftw_single_ref.npzsizesc                 T   t        j                  d|dz
  |      j                  |      }t        j                  t         j                  |      }|t         j
                  k(  rt        }n$|t         j                  k(  rt        }n
t               |d| |fz     j                  |      }|||fS )Nr      z	dct_%d_%d	nplinspaceastyperesult_typefloat32float64FFTWDATA_DOUBLEFFTWDATA_SINGLE
ValueErrortypesizedtxdatays         [/var/www/html/venv/lib/python3.12/site-packages/scipy/fftpack/tests/test_real_transforms.pyfftw_dct_refr&          
AtAvt$++B/A	

B	'B	RZZ	rzz	l	kT4L(	)11"5Aa8O    c                 T   t        j                  d|dz
  |      j                  |      }t        j                  t         j                  |      }|t         j
                  k(  rt        }n$|t         j                  k(  rt        }n
t               |d| |fz     j                  |      }|||fS )Nr   r   z	dst_%d_%dr   r   s         r%   fftw_dst_refr*   '   r'   r(   c                    t        j                  | d      } t        | j                  d         D ]  }t	        | |ddf   fi || |ddf<    t        | j                  d         D ]  }t	        | dd|f   fi || dd|f<    | S )z,Calculate reference values for testing dct2.Tcopyr   Nr   )r   arrayrangeshaper   r"   kwargsrowcols       r%   
dct_2d_refr5   4       
AQWWQZ  -#q&	,V,#q&	-QWWQZ  -!S&	,V,!S&	-Hr(   c                    t        j                  | d      } t        | j                  d         D ]  }t	        | |ddf   fi || |ddf<    t        | j                  d         D ]  }t	        | dd|f   fi || dd|f<    | S )z-Calculate reference values for testing idct2.Tr,   r   Nr   )r   r.   r/   r0   r	   r1   s       r%   idct_2d_refr8   >       
AQWWQZ  .36-f-#q&	.QWWQZ  .1c6-f-!S&	.Hr(   c                    t        j                  | d      } t        | j                  d         D ]  }t	        | |ddf   fi || |ddf<    t        | j                  d         D ]  }t	        | dd|f   fi || dd|f<    | S )z,Calculate reference values for testing dst2.Tr,   r   Nr   )r   r.   r/   r0   r
   r1   s       r%   
dst_2d_refr;   H   r6   r(   c                    t        j                  | d      } t        | j                  d         D ]  }t	        | |ddf   fi || |ddf<    t        | j                  d         D ]  }t	        | dd|f   fi || dd|f<    | S )z-Calculate reference values for testing idst2.Tr,   r   Nr   )r   r.   r/   r0   r   r1   s       r%   idst_2d_refr=   R   r9   r(   c           
         t        j                  | d      } t        |       }|dz
  }t        j                  |      }d\  }}|dk(  r0t        j                  d|z        }t        j                  d|z        }t        |      D ]  }t        d|dz
        D ]B  }||xx   || |   z  t        j                  t         j                  |z  |z  |z        z  z  cc<   D ||xx   || d   z  z  cc<   ||xx   || |dz
     z  |d	z  dk(  rdnd
z  z  cc<    |dk(  rI|dxx   dt        j                  d	      z  z  cc<   ||dz
  xx   dt        j                  d	      z  z  cc<   |S )z/Calculate textbook definition version of DCT-I.Tr,   r   )r      ortho      ?       @r   r?   )r   r.   lenzerossqrtr/   cospi)	r"   normNMr$   m0mkns	            r%   
naive_dct1rP   \   sJ   
AAA	!A
AEBwWWSU^GGCEN1X 8q!A# 	/AaDAadF266"%%'!)A+...D	/	!QqT		!QqsVAEQJqB77	8
 w	!"''!*	!A#!BGGAJ,Hr(   c                    t        j                  | d      } t        |       }|dz   }t        j                  |      }t	        |      D ]X  }t	        |      D ]H  }||xx   d| |   z  t        j
                  t         j                  |dz   z  |dz   z  |z        z  z  cc<   J Z |dk(  r|t        j                  d|z        z  }|S )z0Calculate textbook definition version  of DST-I.Tr,   r   r?   rA   r@         ?r   r.   rD   rE   r/   sinrH   rF   )r"   rI   rJ   rK   r$   rN   rO   s          r%   
naive_dst1rU   q   s    
AAA	!A
A1X ;q 	;AaDAadF266"%%3-3"7"9:::D	;; w	RWWSU^Hr(   c                    t        j                  | d      } t        |       }t        j                  |      }t	        |      D ]U  }t	        |      D ]E  }||xx   | |   t        j
                  t         j                  |dz   z  |dz   z  |z        z  z  cc<   G W |dk(  r|t        j                  d|z        z  }|S |dz  }|S )z0Calculate textbook definition version of DCT-IV.Tr,   rR   r@   rB   r?   )r   r.   rD   rE   r/   rG   rH   rF   r"   rI   rJ   r$   rN   rO   s         r%   
naive_dct4rX          
AAA
A1X ;q 	;AaDAaDququ 5q 9:::D	;; w	RWWSU^ H 	
QHr(   c                    t        j                  | d      } t        |       }t        j                  |      }t	        |      D ]U  }t	        |      D ]E  }||xx   | |   t        j
                  t         j                  |dz   z  |dz   z  |z        z  z  cc<   G W |dk(  r|t        j                  d|z        z  }|S |dz  }|S )z0Calculate textbook definition version of DST-IV.Tr,   rR   r@   rB   r?   rS   rW   s         r%   
naive_dst4r[      rY   r(   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestComplexc                     t        dt        j                  dt        j                        z        }dt        t        j                  d            z  }t	        ||       y )N              ?   dtype)r   r   arange	complex64r   selfr$   r"   s      r%   test_dct_complex64zTestComplex.test_dct_complex64   sA    299Qbll334s299Q<  !!Q'r(   c                     t        t        j                  d      dz        }dt        t        j                  d            z  }t        ||       y Nr`   r_   )r   r   rc   r   re   s      r%   test_dct_complexzTestComplex.test_dct_complex   9    		!R s299Q<  !!Q'r(   c                     t        t        j                  d      dz        }dt        t        j                  d            z  }t        ||       y ri   )r	   r   rc   r   re   s      r%   test_idct_complexzTestComplex.test_idct_complex   9    1b!tBIIaL!!!!Q'r(   c                     t        t        j                  dt        j                        dz        }dt        t        j                  d            z  }t	        ||       y )Nr`   ra   r_   )r
   r   rc   rd   r   re   s      r%   test_dst_complex64zTestComplex.test_dst_complex64   sA    		!2<<034s299Q<  !!Q'r(   c                     t        t        j                  d      dz        }dt        t        j                  d            z  }t        ||       y ri   )r
   r   rc   r   re   s      r%   test_dst_complexzTestComplex.test_dst_complex   rk   r(   c                     t        t        j                  d      dz        }dt        t        j                  d            z  }t        ||       y ri   )r   r   rc   r   re   s      r%   test_idst_complexzTestComplex.test_idst_complex   rn   r(   N)	__name__
__module____qualname__rg   rj   rm   rp   rr   rt    r(   r%   r]   r]      s     (
(
(
(
(
(r(   r]   c                       e Zd Zd Zd Zd Zy)_TestDCTBasec                 .    d | _         d| _        d | _        y N   rdtdecr   rf   s    r%   setup_methodz_TestDCTBase.setup_method       	r(   c                 N   t         D ]  }t        | j                  || j                        \  }}}t	        || j                        }t        |j                  |       t        |t        j                  |      z  |t        j                  |      z  | j                  d|z          y Nr   Size %d faileddecimalerr_msg)FFTWDATA_SIZESr&   r   r   r   r   rb   r   r   maxr   )rf   ir"   yrr!   r$   s         r%   test_definitionz_TestDCTBase.test_definition   s     		2A$TYY488<IAr2ADII&A"%
 &a"&&)mR"&&)^TXX,q02		2r(   c           
         d}dD ]  }t         j                  j                  ||      }t        || j                        }t        |      D ]5  }t        ||   t        ||   | j                        | j                         7 |j                  }t        |d| j                        }t        |      D ]=  }t        |d d |f   t        |d d |f   | j                        | j                         ?  y )Nr?   )   r   	          @   r   r   r   )axisr   )	r   randomrandnr   r   r/   r   r   T)rf   ntr   r"   r$   js         r%   	test_axisz_TestDCTBase.test_axis   s    & 	*A		A&AADII&A2Y *)!A$AaDtyy0I $** AAADII.A2Y *)!AaC&#a!f4992M $**	*r(   N)ru   rv   rw   r   r   r   rx   r(   r%   rz   rz      s    

2*r(   rz   c                       e Zd Zd Zy)_TestDCTIBasec                    t        j                  t         j                  | j                        }t        D ]  }t        j
                  || j                        }t        |dd      }t        |d      }t        |j                  |       t        |t        j                  |      z  |t        j                  |      z  | j                          y Nra   r@   r   rI   r   rI   r   )r   r   r   r   Xr.   r   rP   r   rb   r   r   r   rf   r!   xrr"   r$   y2s         r%   test_definition_orthoz#_TestDCTIBase.test_definition_ortho       ^^BJJ1 	WB488,AAG!,AAG,B"%%a"&&)mR"&&)^TXXV	Wr(   Nru   rv   rw   r   rx   r(   r%   r   r          Wr(   r   c                       e Zd Zd Zy)_TestDCTIIBasec                 >   t        j                  t         j                  | j                        }t	        t
        t              D ]X  \  }}t        j                  ||      }t        |dd      }t        |j                  |       t        ||| j                         Z y )Nra   r@   r?   r   r   )r   r   r   r   zipr   Yr.   r   r   rb   r   r   )rf   r!   r   r   r"   r$   s         r%   test_definition_matlabz%_TestDCTIIBase.test_definition_matlab   so    ^^BJJ1!Qi 	?FB2&AAG!,A"%%aTXX>		?r(   N)ru   rv   rw   r   rx   r(   r%   r   r      s    ?r(   r   c                       e Zd Zd Zy)_TestDCTIIIBasec                 L   t        j                  t         j                  | j                        }t        D ]m  }t        j
                  || j                        }t        |dd      }t        |dd      }t        |j                  |       t        ||| j                         o y )Nra   r@   r?   r      r   )r   r   r   r   r   r.   r   r   rb   r   r   )rf   r!   r   r"   r$   xis         r%   r   z%_TestDCTIIIBase.test_definition_ortho   sw    ^^BJJ1 	?B488,AAG!,AQW1-B2&%b!TXX>	?r(   Nr   rx   r(   r%   r   r          ?r(   r   c                       e Zd Zd Zy)_TestDCTIVBasec                    t        j                  t         j                  | j                        }t        D ]  }t        j
                  || j                        }t        |dd      }t        |d      }t        |j                  |       t        |t        j                  |      z  |t        j                  |      z  | j                          y Nra   r@      r   r   r   )r   r   r   r   r   r.   r   rX   r   rb   r   r   r   r   s         r%   r   z$_TestDCTIVBase.test_definition_ortho  r   r(   Nr   rx   r(   r%   r   r      r   r(   r   c                       e Zd Zd Zy)TestDCTIDoublec                 J    t         j                  | _        d| _        d| _        y N
   r   r   r   r   r   r   r   s    r%   r   zTestDCTIDouble.setup_method      ::	r(   Nru   rv   rw   r   rx   r(   r%   r   r         r(   r   c                       e Zd Zd Zy)TestDCTIFloatc                 J    t         j                  | _        d| _        d| _        y Nr   r   r   r   r   r   r   r   s    r%   r   zTestDCTIFloat.setup_method      ::	r(   Nr   rx   r(   r%   r   r     r   r(   r   c                       e Zd Zd Zy)TestDCTIIntc                 6    t         | _        d| _        d| _        y Nr`   r   intr   r   r   r   s    r%   r   zTestDCTIInt.setup_method      	r(   Nr   rx   r(   r%   r   r     r   r(   r   c                       e Zd Zd Zy)TestDCTIIDoublec                 J    t         j                  | _        d| _        d| _        y Nr   r?   r   r   s    r%   r   zTestDCTIIDouble.setup_method"  r   r(   Nr   rx   r(   r%   r   r   !  r   r(   r   c                       e Zd Zd Zy)TestDCTIIFloatc                 J    t         j                  | _        d| _        d| _        y Nr`   r?   r   r   s    r%   r   zTestDCTIIFloat.setup_method)  r   r(   Nr   rx   r(   r%   r   r   (  r   r(   r   c                       e Zd Zd Zy)TestDCTIIIntc                 6    t         | _        d| _        d| _        y r   r   r   s    r%   r   zTestDCTIIInt.setup_method0  r   r(   Nr   rx   r(   r%   r   r   /  r   r(   r   c                       e Zd Zd Zy)TestDCTIIIDoublec                 J    t         j                  | _        d| _        d| _        y Nr}   r   r   r   s    r%   r   zTestDCTIIIDouble.setup_method7  r   r(   Nr   rx   r(   r%   r   r   6  r   r(   r   c                       e Zd Zd Zy)TestDCTIIIFloatc                 J    t         j                  | _        d| _        d| _        y Nr`   r   r   r   s    r%   r   zTestDCTIIIFloat.setup_method>  r   r(   Nr   rx   r(   r%   r   r   =  r   r(   r   c                       e Zd Zd Zy)TestDCTIIIIntc                 6    t         | _        d| _        d| _        y r   r   r   s    r%   r   zTestDCTIIIInt.setup_methodE  r   r(   Nr   rx   r(   r%   r   r   D  r   r(   r   c                       e Zd Zd Zy)TestDCTIVDoublec                 J    t         j                  | _        d| _        d| _        y )N   r   r   r   s    r%   r   zTestDCTIVDouble.setup_methodL  r   r(   Nr   rx   r(   r%   r   r   K  r   r(   r   c                       e Zd Zd Zy)TestDCTIVFloatc                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestDCTIVFloat.setup_methodS  r   r(   Nr   rx   r(   r%   r   r   R  r   r(   r   c                       e Zd Zd Zy)TestDCTIVIntc                 6    t         | _        d| _        d| _        y r   r   r   s    r%   r   zTestDCTIVInt.setup_methodZ  r   r(   Nr   rx   r(   r%   r   r   Y  r   r(   r   c                       e Zd Zd Zd Zy)_TestIDCTBasec                 .    d | _         d| _        d | _        y r|   r~   r   s    r%   r   z_TestIDCTBase.setup_methoda  r   r(   c                    t         D ]  }t        | j                  || j                        \  }}}t	        || j                        }| j                  dk(  r|d|dz
  z  z  }n|d|z  z  }t        |j                  |       t        |t        j                  |      z  |t        j                  |      z  | j                  d|z          y Nr   r   r?   r   r   )r   r&   r   r   r	   r   rb   r   r   r   r   rf   r   r   r   r!   r"   s         r%   r   z_TestIDCTBase.test_definitionf       	2A%diiDHH=JBBRdii(AyyA~Q!A#YQU
"%
 &a"&&)mR"&&)^TXX,q02	2r(   Nru   rv   rw   r   r   rx   r(   r%   r   r   `      
2r(   r   c                       e Zd Zd Zy)TestIDCTIDoublec                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDCTIDouble.setup_methodx  r   r(   Nr   rx   r(   r%   r   r   w  r   r(   r   c                       e Zd Zd Zy)TestIDCTIFloatc                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDCTIFloat.setup_method  r   r(   Nr   rx   r(   r%   r   r   ~  r   r(   r   c                       e Zd Zd Zy)TestIDCTIIntc                 6    t         | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDCTIInt.setup_method  r   r(   Nr   rx   r(   r%   r  r    r   r(   r  c                       e Zd Zd Zy)TestIDCTIIDoublec                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDCTIIDouble.setup_method  r   r(   Nr   rx   r(   r%   r  r    r   r(   r  c                       e Zd Zd Zy)TestIDCTIIFloatc                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDCTIIFloat.setup_method  r   r(   Nr   rx   r(   r%   r	  r	    r   r(   r	  c                       e Zd Zd Zy)TestIDCTIIIntc                 6    t         | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDCTIIInt.setup_method  r   r(   Nr   rx   r(   r%   r  r    r   r(   r  c                       e Zd Zd Zy)TestIDCTIIIDoublec                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDCTIIIDouble.setup_method  r   r(   Nr   rx   r(   r%   r  r    r   r(   r  c                       e Zd Zd Zy)TestIDCTIIIFloatc                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDCTIIIFloat.setup_method  r   r(   Nr   rx   r(   r%   r  r    r   r(   r  c                       e Zd Zd Zy)TestIDCTIIIIntc                 6    t         | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDCTIIIInt.setup_method  r   r(   Nr   rx   r(   r%   r  r    r   r(   r  c                       e Zd Zd Zy)TestIDCTIVDoublec                 J    t         j                  | _        d| _        d| _        y Nr   r   r   r   s    r%   r   zTestIDCTIVDouble.setup_method  r   r(   Nr   rx   r(   r%   r  r    r   r(   r  c                       e Zd Zd Zy)TestIDCTIVFloatc                 J    t         j                  | _        d| _        d| _        y Nr`   r   r   r   s    r%   r   zTestIDCTIVFloat.setup_method  r   r(   Nr   rx   r(   r%   r  r    r   r(   r  c                       e Zd Zd Zy)TestIDCTIVIntc                 6    t         | _        d| _        d| _        y r  r   r   s    r%   r   zTestIDCTIVInt.setup_method  r   r(   Nr   rx   r(   r%   r   r     r   r(   r   c                       e Zd Zd Zd Zy)_TestDSTBasec                 .    d | _         d | _        d | _        y Nr~   r   s    r%   r   z_TestDSTBase.setup_method      	r(   c                 N   t         D ]  }t        | j                  || j                        \  }}}t	        || j                        }t        |j                  |       t        |t        j                  |      z  |t        j                  |      z  | j                  d|z          y r   )r   r*   r   r   r
   r   rb   r   r   r   r   )rf   r   r   r   r!   r$   s         r%   r   z_TestDSTBase.test_definition  s     		2A%diiDHH=JBBBTYY'A"%
 &a"&&)mR"&&)^TXX,q02		2r(   Nr   rx   r(   r%   r#  r#    s    

2r(   r#  c                       e Zd Zd Zy)_TestDSTIBasec                    t        j                  t         j                  | j                        }t        D ]  }t        j
                  || j                        }t        |dd      }t        |d      }t        |j                  |       t        |t        j                  |      z  |t        j                  |      z  | j                          y r   )r   r   r   r   r   r.   r
   rU   r   rb   r   r   r   r   s         r%   r   z#_TestDSTIBase.test_definition_ortho  r   r(   Nr   rx   r(   r%   r)  r)    r   r(   r)  c                       e Zd Zd Zy)_TestDSTIVBasec                 J   t        j                  t         j                  | j                        }t        D ]l  }t        j
                  || j                        }t        |dd      }t        |d      }t        |j                  |       t        ||| j                         n y r   )r   r   r   r   r   r.   r
   r[   r   rb   r   r   r   s         r%   r   z$_TestDSTIVBase.test_definition_ortho  su    ^^BJJ1 	?B488,AAG!,AAG,B"%%aTXX>	?r(   Nr   rx   r(   r%   r,  r,    r   r(   r,  c                       e Zd Zd Zy)TestDSTIDoublec                 J    t         j                  | _        d| _        d| _        y Nr   r   r   r   s    r%   r   zTestDSTIDouble.setup_method  r   r(   Nr   rx   r(   r%   r/  r/    r   r(   r/  c                       e Zd Zd Zy)TestDSTIFloatc                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestDSTIFloat.setup_method  r   r(   Nr   rx   r(   r%   r3  r3    r   r(   r3  c                       e Zd Zd Zy)TestDSTIIntc                 6    t         | _        d| _        d| _        y r   r   r   s    r%   r   zTestDSTIInt.setup_method  r   r(   Nr   rx   r(   r%   r6  r6     r   r(   r6  c                       e Zd Zd Zy)TestDSTIIDoublec                 J    t         j                  | _        d| _        d| _        y Nr}   r?   r   r   s    r%   r   zTestDSTIIDouble.setup_method  r   r(   Nr   rx   r(   r%   r9  r9    r   r(   r9  c                       e Zd Zd Zy)TestDSTIIFloatc                 J    t         j                  | _        d| _        d| _        y N   r?   r   r   s    r%   r   zTestDSTIIFloat.setup_method  r   r(   Nr   rx   r(   r%   r=  r=    r   r(   r=  c                       e Zd Zd Zy)TestDSTIIIntc                 6    t         | _        d| _        d| _        y r?  r   r   s    r%   r   zTestDSTIIInt.setup_method  r   r(   Nr   rx   r(   r%   rB  rB    r   r(   rB  c                       e Zd Zd Zy)TestDSTIIIDoublec                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestDSTIIIDouble.setup_method  r   r(   Nr   rx   r(   r%   rE  rE    r   r(   rE  c                       e Zd Zd Zy)TestDSTIIIFloatc                 J    t         j                  | _        d| _        d| _        y Nr   r   r   r   s    r%   r   zTestDSTIIIFloat.setup_method$  r   r(   Nr   rx   r(   r%   rH  rH  #  r   r(   rH  c                       e Zd Zd Zy)TestDSTIIIIntc                 6    t         | _        d| _        d| _        y rJ  r   r   s    r%   r   zTestDSTIIIInt.setup_method+  r   r(   Nr   rx   r(   r%   rL  rL  *  r   r(   rL  c                       e Zd Zd Zy)TestDSTIVDoublec                 J    t         j                  | _        d| _        d| _        y r  r   r   s    r%   r   zTestDSTIVDouble.setup_method2  r   r(   Nr   rx   r(   r%   rO  rO  1  r   r(   rO  c                       e Zd Zd Zy)TestDSTIVFloatc                 J    t         j                  | _        d| _        d| _        y )Nr   r   r   s    r%   r   zTestDSTIVFloat.setup_method9  r   r(   Nr   rx   r(   r%   rR  rR  8  r   r(   rR  c                       e Zd Zd Zy)TestDSTIVIntc                 6    t         | _        d| _        d| _        y r  r   r   s    r%   r   zTestDSTIVInt.setup_method@  r   r(   Nr   rx   r(   r%   rU  rU  ?  r   r(   rU  c                       e Zd Zd Zd Zy)_TestIDSTBasec                 .    d | _         d | _        d | _        y r%  r~   r   s    r%   r   z_TestIDSTBase.setup_methodG  r&  r(   c                    t         D ]  }t        | j                  || j                        \  }}}t	        || j                        }| j                  dk(  r|d|dz   z  z  }n|d|z  z  }t        |j                  |       t        |t        j                  |      z  |t        j                  |      z  | j                  d|z          y r   )r   r*   r   r   r   r   rb   r   r   r   r   r   s         r%   r   z_TestIDSTBase.test_definitionL  r   r(   Nr   rx   r(   r%   rX  rX  F  r   r(   rX  c                       e Zd Zd Zy)TestIDSTIDoublec                 J    t         j                  | _        d| _        d| _        y r1  r   r   s    r%   r   zTestIDSTIDouble.setup_method^  r   r(   Nr   rx   r(   r%   r\  r\  ]  r   r(   r\  c                       e Zd Zd Zy)TestIDSTIFloatc                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDSTIFloat.setup_methode  r   r(   Nr   rx   r(   r%   r_  r_  d  r   r(   r_  c                       e Zd Zd Zy)TestIDSTIIntc                 6    t         | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDSTIInt.setup_methodl  r   r(   Nr   rx   r(   r%   rb  rb  k  r   r(   rb  c                       e Zd Zd Zy)TestIDSTIIDoublec                 J    t         j                  | _        d| _        d| _        y r;  r   r   s    r%   r   zTestIDSTIIDouble.setup_methods  r   r(   Nr   rx   r(   r%   re  re  r  r   r(   re  c                       e Zd Zd Zy)TestIDSTIIFloatc                 J    t         j                  | _        d| _        d| _        y r?  r   r   s    r%   r   zTestIDSTIIFloat.setup_methodz  r   r(   Nr   rx   r(   r%   rh  rh  y  r   r(   rh  c                       e Zd Zd Zy)TestIDSTIIIntc                 6    t         | _        d| _        d| _        y r?  r   r   s    r%   r   zTestIDSTIIInt.setup_method  r   r(   Nr   rx   r(   r%   rk  rk    r   r(   rk  c                       e Zd Zd Zy)TestIDSTIIIDoublec                 J    t         j                  | _        d| _        d| _        y r   r   r   s    r%   r   zTestIDSTIIIDouble.setup_method  r   r(   Nr   rx   r(   r%   rn  rn    r   r(   rn  c                       e Zd Zd Zy)TestIDSTIIIFloatc                 J    t         j                  | _        d| _        d| _        y Nr@  r   r   r   s    r%   r   zTestIDSTIIIFloat.setup_method  r   r(   Nr   rx   r(   r%   rq  rq    r   r(   rq  c                       e Zd Zd Zy)TestIDSTIIIIntc                 6    t         | _        d| _        d| _        y rs  r   r   s    r%   r   zTestIDSTIIIInt.setup_method  r   r(   Nr   rx   r(   r%   ru  ru    r   r(   ru  c                       e Zd Zd Zy)TestIDSTIVDoublec                 J    t         j                  | _        d| _        d| _        y r  r   r   s    r%   r   zTestIDSTIVDouble.setup_method  r   r(   Nr   rx   r(   r%   rx  rx    r   r(   rx  c                       e Zd Zd Zy)TestIDSTIVFloatc                 J    t         j                  | _        d| _        d| _        y Nr@  r   r   r   s    r%   r   zTestIDSTIVFloat.setup_method  r   r(   Nr   rx   r(   r%   r{  r{    r   r(   r{  c                       e Zd Zd Zy)TestIDSTIVntc                 6    t         | _        d| _        d| _        y r}  r   r   s    r%   r   zTestIDSTIVnt.setup_method  r   r(   Nr   rx   r(   r%   r  r    r   r(   r  c                   d    e Zd ZdZej
                  ej                  gZd Zd Z	d Z
d Zd Zd Zy)	TestOverwritezCheck input overwrite behavior.c                     |j                         }	 ||	|||||       dj                  |j                  |j                  |j                  |||      }
|st        |	|d|
z         y y )N)overwrite_xz-{}({}{!r}, {!r}, axis={!r}, overwrite_x={!r})zspurious overwrite in %s)r   )r-   formatru   rb   r0   r   )rf   r"   routiner   fftsizer   rI   r  kwx2sigs              r%   _checkzTestOverwrite._check  se    VVXD'4;G=DDaggqww{LQ(BS(HI r(   c                    t         j                  j                  d       t        j                  |t         j                        r=t        j                  j
                  | dt        j                  j
                  | z  z   }nt        j                  j
                  | }|j                  |      }dD ]'  }dD ]   }dD ]  }| j                  |||d |||        " ) y )N  r_   r   r?   r   r   )TF)Nr@   )r   r   seed
issubdtypecomplexfloatingr   r   r  )	rf   r  rb   r0   r   r#   r   r  rI   s	            r%   	_check_1dzTestOverwrite._check_1d  s    
		t== 2 2399??E*R		0G-GGD99??E*D{{5!  	-D, -+ -DKKgtT4 +---	-r(   c                     | j                   D ]J  }| j                  t        |dd       | j                  t        |dd       | j                  t        |dd       L y N)r   rC   )r   r?   r   )r?   r   r   )real_dtypesr  r   rf   rb   s     r%   test_dctzTestOverwrite.test_dct  M    %% 	3ENN3ub1NN3w2NN3w2	3r(   c                     | j                   D ]J  }| j                  t        |dd       | j                  t        |dd       | j                  t        |dd       L y r  )r  r  r	   r  s     r%   	test_idctzTestOverwrite.test_idct  M    %% 	4ENN4r2NN43NN43	4r(   c                     | j                   D ]J  }| j                  t        |dd       | j                  t        |dd       | j                  t        |dd       L y r  )r  r  r
   r  s     r%   test_dstzTestOverwrite.test_dst  r  r(   c                     | j                   D ]J  }| j                  t        |dd       | j                  t        |dd       | j                  t        |dd       L y r  )r  r  r   r  s     r%   	test_idstzTestOverwrite.test_idst  r  r(   N)ru   rv   rw   __doc__r   r   r   r  r  r  r  r  r  r  rx   r(   r%   r  r    s6    )::rzz*KJ-3434r(   r  c                   x   e Zd ZdZg dZddgZej                  j                  d      Z	dZ
 e	j                  e
 Zej                  j                  deefeefg      ej                  j                  ddd	d
d	gdddgddd	gdddgg      ej                  j                  de      ej                  j                  ddg      d                             Zej                  j                  deefeefg      ej                  j                  de      ej                  j                  de      d                      Zej                  j                  deefeefg      ej                  j                  de      ej                  j                  dddg      d                      Zej                  j                  deefeefg      d        Zej                  j                  deeg      d        Zej                  j                  deefeefg      ej                  j                  dd	d
d	gdddgg      d               Zy)Test_DCTN_IDCTNr}   r  Nr@   r  )r   r   zfforward,finverseaxesr   )r   r   )r   r   r   )rC   r  rC   dct_typerI   c                 x     || j                   |||      } |||||      }t        | j                   |d       y )Nr   r  rI   r   r   r#   r   )rf   fforwardfinverser  r  rI   tmps          r%   test_axes_round_tripz$Test_DCTN_IDCTN.test_axes_round_trip  s8     tyyxdFs4@!$))S"=r(   zfforward,fforward_refc                 v     || j                   |d |      } || j                   ||      }t        ||d       y )Nr  r   rI      r   r  )rf   r  fforward_refr  rI   y1r   s          r%   test_dctn_vs_2d_referencez)Test_DCTN_IDCTN.test_dctn_vs_2d_reference  s6     diihTE$))(>!"b"5r(   zfinverse,finverse_refc                 |    t        | j                  ||      } ||||      } ||||      }t        ||d       y )Nr  r  r   )r   r#   r   )rf   r  finverse_refr  rI   fdatar  r   s           r%   test_idctn_vs_2d_referencez*Test_DCTN_IDCTN.test_idctn_vs_2d_reference  s>     TYYXD9e(6%hT:!"b"5r(   c                    t        t        d      5   || j                  | j                  j                  d   d       d d d        t        t        d      5   || j                  | j                  j                  d   d        d d d        t        t        d      5   || j                  | j                  j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   y xY w)NzBwhen given, axes and shape arguments have to be of the same length)matchr   r  r0   r  )assert_raisesr   r#   r0   )rf   r  r  s      r%   test_axes_and_shapez#Test_DCTN_IDCTN.test_axes_and_shape  s     :"<= 	G TYYdiiooa&8vF	G
 :"<= 	E TYYdiiooa&8tD	E
 :"<= 	? TYYdiiooA>	? 	?	G 	G
	E 	E
	? 	?s#   -C-C*C)CC&)C2r  c                 Z     || j                   dd       }t        |j                  d       y )N)   r  r  )r#   r   r0   )rf   r  r  s      r%   
test_shapezTest_DCTN_IDCTN.test_shape#  s"    tyy
>SYY
+r(   c                      || j                   d |d      } ||d |d      }t        | j                   || j                         y )Nr@   )r0   r  rI   r   )r#   r   r   )rf   r  r  r  r  s        r%   test_shape_is_none_with_axesz,Test_DCTN_IDCTN.test_shape_is_none_with_axes(  s<    
 tyy4gFs$T@!$))S$((Cr(   )ru   rv   rw   r   r  normsr   r   RandomStaterstater0   r   r#   pytestmarkparametrizer   r   r   r   r  r5   r;   r  r8   r=   r  r  r  r  rx   r(   r%   r  r    s   
CH7OEYY""4(FE6<<D[[0D%=48%=3B C[[Vd&'s&'s&,q!f&.R	&: ;
 [[Z2[[VgY/> 0 3;C>
 [[4j7I8<j7I7K L[[Z2[[VU+6 , 3L6 [[4{7K8={7K7M N[[Z2[[VdG_56 6 3N6 [[0D%=48%=3B C?C?  [[Z$6, 7, [[0D%=48%=3B C[[Vas&'s&4 5D5CDr(   r  r%  )dos.pathr   r   numpyr   numpy.testingr   r   r  r   r  scipy.fftpack._realtransformsr   r	   r
   r   r   r   r   r   load__file__MDATAr/   r   r   r   r   r   r&   r*   r5   r8   r;   r=   rP   rU   rX   r[   r]   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r  r   r#  r)  r,  r/  r3  r6  r9  r=  rB  rE  rH  rL  rO  rR  rU  rX  r\  r_  rb  re  rh  rk  rn  rq  ru  rx  r{  r  r  r  )r   s   0r%   <module>r     s   !  A  *4 4 4 	WX&
34$Qx(!U519($Qx(!U519( "''$wx02GHI"''$wx02GHI )

*( (@* *D	WL 	W?\ ?	?l 	?	W\ 	W] M - n ^ >  o O n ^ > 2 2.m ] = } m M  } ] } m M 2 2&	WL 	W	?\ 	?] M - l \ < | l L n ^ > 2 2.m ] = } m M  } ] } m = 24 24jID IDs )(s   N8N