a
    Re]                     @   s  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eeedZdd ed	D Zd
d ed	D ZeeeedZeeeedZed Zdd Zdd Zdd Zdd Z dd Z!dd Z"dddZ#dddZ$dddZ%dd d!Z&G d"d# d#Z'G d$d% d%Z(G d&d' d'e(Z)G d(d) d)e(Z*G d*d+ d+e(Z+G d,d- d-e(Z,G d.d/ d/e)Z-G d0d1 d1e)Z.G d2d3 d3e)Z/G d4d5 d5e*Z0G d6d7 d7e*Z1G d8d9 d9e*Z2G d:d; d;e+Z3G d<d= d=e+Z4G d>d? d?e+Z5G d@dA dAe,Z6G dBdC dCe,Z7G dDdE dEe,Z8G dFdG dGZ9G dHdI dIe9Z:G dJdK dKe9Z;G dLdM dMe9Z<G dNdO dOe9Z=G dPdQ dQe9Z>G dRdS dSe9Z?G dTdU dUe9Z@G dVdW dWe9ZAG dXdY dYe9ZBG dZd[ d[e9ZCG d\d] d]e9ZDG d^d_ d_e9ZEG d`da daZFG dbdc dceFZGG ddde deeFZHG dfdg dgeGZIG dhdi dieGZJG djdk dkeGZKG dldm dmeFZLG dndo doeFZMG dpdq dqeFZNG drds dseFZOG dtdu dueFZPG dvdw dweFZQG dxdy dyeHZRG dzd{ d{eHZSG d|d} d}eHZTG d~d dZUG dd deUZVG dd deUZWG dd deUZXG dd deUZYG dd deUZZG dd deUZ[G dd deUZ\G dd deUZ]G dd deUZ^G dd deUZ_G dd deUZ`G dd deUZaG dd dZbG dd dZcdS )    )joindirnameN)assert_array_almost_equalassert_equal)raises)dctidctdstidstdctnidctndstnidstnztest.npzc                 C   s   g | ]}t d |  qS )zx%dMDATA.0i r   \/var/www/sunrise/env/lib/python3.9/site-packages/scipy/fftpack/tests/test_real_transforms.py
<listcomp>       r      c                 C   s   g | ]}t d |  qS )zy%dr   r   r   r   r   r      r   zfftw_double_ref.npzzfftw_single_ref.npzsizesc                 C   sl   t d|d ||}t t j|}|t jkr6t}n|t jkrFt}nt |d| |f  |}|||fS )Nr      z	dct_%d_%d	npZlinspaceastyperesult_typefloat32doubleFFTWDATA_DOUBLEFFTWDATA_SINGLE
ValueErrortypesizedtxdatayr   r   r   fftw_dct_ref   s    

r+   c                 C   sl   t d|d ||}t t j|}|t jkr6t}n|t jkrFt}nt |d| |f  |}|||fS )Nr   r   z	dst_%d_%dr   r$   r   r   r   fftw_dst_ref'   s    

r,   c                 K   s   t j| dd} t| jd D ],}t| |ddf fi || |ddf< qt| jd D ],}t| dd|f fi || dd|f< qX| S )z,Calculate reference values for testing dct2.Tcopyr   Nr   )r   arrayrangeshaper   r(   kwargsrowcolr   r   r   
dct_2d_ref4   s    **r6   c                 K   s   t j| dd} t| jd D ],}t| |ddf fi || |ddf< qt| jd D ],}t| dd|f fi || dd|f< qX| S )z-Calculate reference values for testing idct2.Tr-   r   Nr   )r   r/   r0   r1   r   r2   r   r   r   idct_2d_ref>   s    **r7   c                 K   s   t j| dd} t| jd D ],}t| |ddf fi || |ddf< qt| jd D ],}t| dd|f fi || dd|f< qX| S )z,Calculate reference values for testing dst2.Tr-   r   Nr   )r   r/   r0   r1   r	   r2   r   r   r   
dst_2d_refH   s    **r8   c                 K   s   t j| dd} t| jd D ],}t| |ddf fi || |ddf< qt| jd D ],}t| dd|f fi || dd|f< qX| S )z-Calculate reference values for testing idst2.Tr-   r   Nr   )r   r/   r0   r1   r
   r2   r   r   r   idst_2d_refR   s    **r9   c           	   
   C   s4  t j| dd} t| }|d }t |}d\}}|dkrTt d| }t d| }t|D ]}td|d D ]4}||  || |  t t j| | |  7  < qn||  || d  7  < ||  || |d   |d	 dkrdnd
 7  < q\|dkr0|d  dt d	 9  < ||d   dt d	 9  < |S )z/Calculate textbook definition version of DCT-I.Tr-   r   )r      ortho      ?       @r   r:   )r   r/   lenzerossqrtr0   cospi)	r(   normNMr*   Zm0mknr   r   r   
naive_dct1\   s"    
22
rJ   c                 C   s   t j| dd} t| }|d }t |}t|D ]J}t|D ]<}||  d| |  t t j|d  |d  |  7  < q<q0|dkr|t d| 9 }|S )z0Calculate textbook definition version  of DST-I.Tr-   r   r:   r<   r;         ?r   r/   r?   r@   r0   sinrC   rA   )r(   rD   rE   rF   r*   rH   rI   r   r   r   
naive_dst1q   s    
<rN   c                 C   s   t j| dd} t| }t |}t|D ]F}t|D ]8}||  | | t t j|d  |d  |  7  < q4q(|dkr|t d| 9 }n|d9 }|S )z0Calculate textbook definition version of DCT-IV.Tr-   rK   r;   r=   r:   )r   r/   r?   r@   r0   rB   rC   rA   r(   rD   rE   r*   rH   rI   r   r   r   
naive_dct4   s    
8rP   c                 C   s   t j| dd} t| }t |}t|D ]F}t|D ]8}||  | | t t j|d  |d  |  7  < q4q(|dkr|t d| 9 }n|d9 }|S )z0Calculate textbook definition version of DST-IV.Tr-   rK   r;   r=   r:   rL   rO   r   r   r   
naive_dst4   s    
8rQ   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestComplexc                 C   s8   t dtjdtjd }dt td }t|| d S )N              ?   dtype)r   r   arange	complex64r   selfr*   r(   r   r   r   test_dct_complex64   s    zTestComplex.test_dct_complex64c                 C   s2   t tdd }dt td }t|| d S NrT   rS   )r   r   rW   r   rY   r   r   r   test_dct_complex   s    zTestComplex.test_dct_complexc                 C   s2   t tdd }dt td }t|| d S r\   )r   r   rW   r   rY   r   r   r   test_idct_complex   s    zTestComplex.test_idct_complexc                 C   s8   t tjdtjdd }dt td }t|| d S )NrT   rU   rS   )r	   r   rW   rX   r   rY   r   r   r   test_dst_complex64   s    zTestComplex.test_dst_complex64c                 C   s2   t tdd }dt td }t|| d S r\   )r	   r   rW   r   rY   r   r   r   test_dst_complex   s    zTestComplex.test_dst_complexc                 C   s2   t tdd }dt td }t|| d S r\   )r
   r   rW   r   rY   r   r   r   test_idst_complex   s    zTestComplex.test_idst_complexN)	__name__
__module____qualname__r[   r]   r^   r_   r`   ra   r   r   r   r   rR      s   rR   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_TestDCTBasec                 C   s   d | _ d| _d | _d S N   rdtdecr%   rZ   r   r   r   setup_method   s    z_TestDCTBase.setup_methodc                 C   sh   t D ]^}t| j|| j\}}}t|| jd}t|j| t|t	| |t	| | j
d| d qd S Nr%   Size %d faileddecimalerr_msg)FFTWDATA_SIZESr+   r%   ri   r   r   rV   r   r   maxrj   )rZ   r   r(   yrr'   r*   r   r   r   test_definition   s    z_TestDCTBase.test_definitionc                 C   s   d}dD ]}t j||}t|| jd}t|D ]&}t|| t|| | jd| jd q0|j}t|d| jd}t|D ]6}t|d d |f t|d d |f | jd| jd qvqd S )Nr:   )   r   	          @   rn   rq   r   )axisr%   )	r   randomrandnr   r%   r0   r   rj   T)rZ   ntr   r(   r*   jr   r   r   	test_axis   s    (z_TestDCTBase.test_axisN)rb   rc   rd   rl   rv   r   r   r   r   r   re      s   re   c                   @   s   e Zd Zdd ZdS )_TestDCTIBasec                 C   sx   t t j| j}tD ]^}t j|| jd}t|ddd}t|dd}t|j	| t
|t | |t | | jd qd S NrU   r;   r   rD   r%   rD   r|   )r   r   r   ri   Xr/   r   rJ   r   rV   r   rt   rj   rZ   r'   xrr(   r*   y2r   r   r   test_definition_ortho   s    z#_TestDCTIBase.test_definition_orthoNrb   rc   rd   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )_TestDCTIIBasec                 C   s`   t t j| j}tttD ]@\}}t j||d}t|ddd}t	|j
| t||| jd qd S )NrU   r;   r:   r   r|   )r   r   r   ri   zipr   Yr/   r   r   rV   r   rj   )rZ   r'   r   ru   r(   r*   r   r   r   test_definition_matlab   s    z%_TestDCTIIBase.test_definition_matlabN)rb   rc   rd   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )_TestDCTIIIBasec                 C   sf   t t j| j}tD ]L}t j|| jd}t|ddd}t|ddd}t|j| t	||| j
d qd S )NrU   r;   r:   r      r|   )r   r   r   ri   r   r/   r   r   rV   r   rj   )rZ   r'   r   r(   r*   xir   r   r   r      s    z%_TestDCTIIIBase.test_definition_orthoNr   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )_TestDCTIVBasec                 C   sx   t t j| j}tD ]^}t j|| jd}t|ddd}t|dd}t|j	| t
|t | |t | | jd qd S NrU   r;      r   r   r|   )r   r   r   ri   r   r/   r   rP   r   rV   r   rt   rj   r   r   r   r   r     s    z$_TestDCTIVBase.test_definition_orthoNr   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIDoublec                 C   s   t j| _d| _d| _d S N
   r   r   r    ri   rj   r%   rk   r   r   r   rl     s    zTestDCTIDouble.setup_methodNrb   rc   rd   rl   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIFloatc                 C   s   t j| _d| _d| _d S Nr   r   r   r   ri   rj   r%   rk   r   r   r   rl     s    zTestDCTIFloat.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIIntc                 C   s   t | _d| _d| _d S NrT   r   intri   rj   r%   rk   r   r   r   rl     s    zTestDCTIInt.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIIDoublec                 C   s   t j| _d| _d| _d S Nr   r:   r   rk   r   r   r   rl   "  s    zTestDCTIIDouble.setup_methodNr   r   r   r   r   r   !  s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIIFloatc                 C   s   t j| _d| _d| _d S NrT   r:   r   rk   r   r   r   rl   )  s    zTestDCTIIFloat.setup_methodNr   r   r   r   r   r   (  s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl   0  s    zTestDCTIIInt.setup_methodNr   r   r   r   r   r   /  s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIIIDoublec                 C   s   t j| _d| _d| _d S Nrg   r   r   rk   r   r   r   rl   7  s    zTestDCTIIIDouble.setup_methodNr   r   r   r   r   r   6  s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIIIFloatc                 C   s   t j| _d| _d| _d S NrT   r   r   rk   r   r   r   rl   >  s    zTestDCTIIIFloat.setup_methodNr   r   r   r   r   r   =  s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIIIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl   E  s    zTestDCTIIIInt.setup_methodNr   r   r   r   r   r   D  s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIVDoublec                 C   s   t j| _d| _d| _d S )N   r   r   rk   r   r   r   rl   L  s    zTestDCTIVDouble.setup_methodNr   r   r   r   r   r   K  s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIVFloatc                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl   S  s    zTestDCTIVFloat.setup_methodNr   r   r   r   r   r   R  s   r   c                   @   s   e Zd Zdd ZdS )TestDCTIVIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl   Z  s    zTestDCTIVInt.setup_methodNr   r   r   r   r   r   Y  s   r   c                   @   s   e Zd Zdd Zdd ZdS )_TestIDCTBasec                 C   s   d | _ d| _d | _d S rf   rh   rk   r   r   r   rl   a  s    z_TestIDCTBase.setup_methodc                 C   s   t D ]}t| j|| j\}}}t|| jd}| jdkrH|d|d   }n|d|  }t|j| t|t	| |t	| | j
d| d qd S Nrn   r   r:   ro   rp   )rs   r+   r%   ri   r   r   rV   r   r   rt   rj   rZ   r   r   ru   r'   r(   r   r   r   rv   f  s    
z_TestIDCTBase.test_definitionNrb   rc   rd   rl   rv   r   r   r   r   r   `  s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIDoublec                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl   x  s    zTestIDCTIDouble.setup_methodNr   r   r   r   r   r   w  s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIFloatc                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDCTIFloat.setup_methodNr   r   r   r   r   r   ~  s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDCTIInt.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIIDoublec                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDCTIIDouble.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIIFloatc                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDCTIIFloat.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDCTIIInt.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIIIDoublec                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDCTIIIDouble.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIIIFloatc                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDCTIIIFloat.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIIIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDCTIIIInt.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIVDoublec                 C   s   t j| _d| _d| _d S Nr   r   r   rk   r   r   r   rl     s    zTestIDCTIVDouble.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIVFloatc                 C   s   t j| _d| _d| _d S NrT   r   r   rk   r   r   r   rl     s    zTestIDCTIVFloat.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDCTIVIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDCTIVInt.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )_TestDSTBasec                 C   s   d | _ d | _d | _d S Nrh   rk   r   r   r   rl     s    z_TestDSTBase.setup_methodc                 C   sh   t D ]^}t| j|| j\}}}t|| jd}t|j| t|t	| |t	| | j
d| d qd S rm   )rs   r,   r%   ri   r	   r   rV   r   r   rt   rj   )rZ   r   r   ru   r'   r*   r   r   r   rv     s    z_TestDSTBase.test_definitionNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )_TestDSTIBasec                 C   sx   t t j| j}tD ]^}t j|| jd}t|ddd}t|dd}t|j	| t
|t | |t | | jd qd S r   )r   r   r   ri   r   r/   r	   rN   r   rV   r   rt   rj   r   r   r   r   r     s    z#_TestDSTIBase.test_definition_orthoNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )_TestDSTIVBasec                 C   sd   t t j| j}tD ]J}t j|| jd}t|ddd}t|dd}t|j	| t
||| jd qd S r   )r   r   r   ri   r   r/   r	   rQ   r   rV   r   rj   r   r   r   r   r     s    z$_TestDSTIVBase.test_definition_orthoNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIDoublec                 C   s   t j| _d| _d| _d S Nr   r   r   rk   r   r   r   rl     s    zTestDSTIDouble.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIFloatc                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestDSTIFloat.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestDSTIInt.setup_methodNr   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIIDoublec                 C   s   t j| _d| _d| _d S Nrg   r:   r   rk   r   r   r   rl     s    zTestDSTIIDouble.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIIFloatc                 C   s   t j| _d| _d| _d S N   r:   r   rk   r   r   r   rl     s    zTestDSTIIFloat.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestDSTIIInt.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIIIDoublec                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestDSTIIIDouble.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIIIFloatc                 C   s   t j| _d| _d| _d S Nrw   r   r   rk   r   r   r   rl   $  s    zTestDSTIIIFloat.setup_methodNr   r   r   r   r   r   #  s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIIIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl   +  s    zTestDSTIIIInt.setup_methodNr   r   r   r   r   r   *  s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIVDoublec                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl   2  s    zTestDSTIVDouble.setup_methodNr   r   r   r   r   r   1  s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIVFloatc                 C   s   t j| _d| _d| _d S )Nr   r   rk   r   r   r   rl   9  s    zTestDSTIVFloat.setup_methodNr   r   r   r   r   r   8  s   r   c                   @   s   e Zd Zdd ZdS )TestDSTIVIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl   @  s    zTestDSTIVInt.setup_methodNr   r   r   r   r   r   ?  s   r   c                   @   s   e Zd Zdd Zdd ZdS )_TestIDSTBasec                 C   s   d | _ d | _d | _d S r   rh   rk   r   r   r   rl   G  s    z_TestIDSTBase.setup_methodc                 C   s   t D ]}t| j|| j\}}}t|| jd}| jdkrH|d|d   }n|d|  }t|j| t|t	| |t	| | j
d| d qd S r   )rs   r,   r%   ri   r
   r   rV   r   r   rt   rj   r   r   r   r   rv   L  s    
z_TestIDSTBase.test_definitionNr   r   r   r   r   r   F  s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIDoublec                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl   ^  s    zTestIDSTIDouble.setup_methodNr   r   r   r   r   r   ]  s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIFloatc                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl   e  s    zTestIDSTIFloat.setup_methodNr   r   r   r   r   r   d  s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl   l  s    zTestIDSTIInt.setup_methodNr   r   r   r   r   r   k  s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIIDoublec                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl   s  s    zTestIDSTIIDouble.setup_methodNr   r   r   r   r   r   r  s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIIFloatc                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl   z  s    zTestIDSTIIFloat.setup_methodNr   r   r   r   r   r   y  s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDSTIIInt.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIIIDoublec                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDSTIIIDouble.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIIIFloatc                 C   s   t j| _d| _d| _d S Nr   r   r   rk   r   r   r   rl     s    zTestIDSTIIIFloat.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIIIIntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDSTIIIInt.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIVDoublec                 C   s   t j| _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDSTIVDouble.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIVFloatc                 C   s   t j| _d| _d| _d S Nr   r   r   rk   r   r   r   rl     s    zTestIDSTIVFloat.setup_methodNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestIDSTIVntc                 C   s   t | _d| _d| _d S r   r   rk   r   r   r   rl     s    zTestIDSTIVnt.setup_methodNr   r   r   r   r   r     s   r   c                   @   sL   e Zd ZdZejejgZdd Zdd Z	dd Z
dd	 Zd
d Zdd ZdS )TestOverwritezCheck input overwrite behavior.c                 K   sP   |  }	||	|||||d d|j|j|j|||}
|sLt|	|d|
 d d S )N)overwrite_xz-{}({}{!r}, {!r}, axis={!r}, overwrite_x={!r})zspurious overwrite in %s)rr   )r.   formatrb   rV   r1   r   )rZ   r(   routiner%   Zfftsizer}   rD   r   kwZx2sigr   r   r   _check  s    zTestOverwrite._checkc           	      C   s   t jd t |t jr8t jj| dt jj|   }nt jj| }||}dD ].}dD ]$}dD ]}| |||d ||| qbqZqRd S )N  rS   r   r:   r   r   )TF)Nr;   )r   r~   seedZ
issubdtypeZcomplexfloatingr   r   r   )	rZ   r   rV   r1   r}   r)   r%   r   rD   r   r   r   	_check_1d  s    
zTestOverwrite._check_1dc                 C   s@   | j D ]4}| t|dd | t|dd | t|dd qd S N)ry   r>   )ry   r:   r   )r:   ry   r   )real_dtypesr   r   rZ   rV   r   r   r   test_dct  s    
zTestOverwrite.test_dctc                 C   s@   | j D ]4}| t|dd | t|dd | t|dd qd S r   )r   r   r   r   r   r   r   	test_idct  s    
zTestOverwrite.test_idctc                 C   s@   | j D ]4}| t|dd | t|dd | t|dd qd S r   )r   r   r	   r   r   r   r   test_dst  s    
zTestOverwrite.test_dstc                 C   s@   | j D ]4}| t|dd | t|dd | t|dd qd S r   )r   r   r
   r   r   r   r   	test_idst  s    
zTestOverwrite.test_idstN)rb   rc   rd   __doc__r   r   float64r   r   r   r   r   r   r   r   r   r   r   r     s   	r   c                   @   s  e Zd ZdZg dZddgZejdZ	dZ
e	je
 Zejdeefeefgejddd	d
d	gdddgddd	gdddggejdeejddgdd Zejdeefeefgejdeejdedd Zejdeefeefgejdeejdddgdd Zejdeefeefgdd Zejdeegdd Zejdeefeefgejdd	d
d	gdddggd d! ZdS )"Test_DCTN_IDCTNrg   r   Nr;   r   )rz   ry   zfforward,finverseaxesr   )r   r   )r   r   r   )r>   r   r>   dct_typerD   c                 C   s6   || j |||d}|||||d}t| j |dd d S )Nr%   r   rD   r   r|   r)   r   )rZ   fforwardfinverser   r   rD   tmpr   r   r   test_axes_round_trip  s    
z$Test_DCTN_IDCTN.test_axes_round_tripzfforward,fforward_refc                 C   s4   || j |d |d}|| j ||d}t||dd d S )Nr  r%   rD      r|   r  )rZ   r  Zfforward_refr   rD   y1r   r   r   r   test_dctn_vs_2d_reference  s    z)Test_DCTN_IDCTN.test_dctn_vs_2d_referencezfinverse,finverse_refc                 C   s>   t | j||d}||||d}||||d}t||dd d S )Nr  r  r|   )r   r)   r   )rZ   r  Zfinverse_refr   rD   fdatar	  r   r   r   r   test_idctn_vs_2d_reference  s    z*Test_DCTN_IDCTN.test_idctn_vs_2d_referencec                 C   s   t tdd( || j| jjd dd W d    n1 s:0    Y  t tdd( || j| jjd d d W d    n1 s~0    Y  t tdd$ || j| jjdd W d    n1 s0    Y  d S )NzBwhen given, axes and shape arguments have to be of the same length)matchr   r   r1   r   )assert_raisesr#   r)   r1   )rZ   r  r  r   r   r   test_axes_and_shape  s    66z#Test_DCTN_IDCTN.test_axes_and_shaper  c                 C   s    || j dd d}t|jd d S )N)   r  r  )r)   r   r1   )rZ   r  r  r   r   r   
test_shape#  s    zTest_DCTN_IDCTN.test_shapec                 C   s8   || j d |dd}||d |dd}t| j || jd d S )Nr;   )r1   r   rD   r|   )r)   r   rj   )rZ   r  r  r   r  r   r   r   test_shape_is_none_with_axes(  s    z,Test_DCTN_IDCTN.test_shape_is_none_with_axes)rb   rc   rd   rj   r   Znormsr   r~   ZRandomStateZrstater1   r   r)   pytestmarkZparametrizer   r   r   r   r  r6   r8   r
  r7   r9   r  r  r  r  r   r   r   r   r     sV   



r   )N)N)N)N)dos.pathr   r   numpyr   Znumpy.testingr   r   r  r   r  Zscipy.fftpack._realtransformsr   r   r	   r
   r   r   r   r   load__file__r   r0   r   r   r!   r"   rs   r+   r,   r6   r7   r8   r9   rJ   rN   rP   rQ   rR   re   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   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   <module>   s   (







 "5