o
    e                     @   s   d Z ddlmZmZmZ ddlZddlZddlm	Z	 ddl
Z
ddlmZmZmZ ddlmZ g dZdZed	d
 eD g Zdd Zeejjdd Zeejjdd Zdd Zdd Zdd Zdd ZdS )zs
Test used to verify PyWavelets Discrete Wavelet Transform computation
accuracy against MathWorks Wavelet Toolbox.
    )divisionprint_functionabsolute_importN)assert_)uses_pymatbridgeuses_precomputedsize_set)matlab_result_dict_dwt)	)zeroZzpd)ZconstantZsp0)Z	symmetricsym)ZreflectZsymw)ZperiodicZppd)ZsmoothZsp1)ZperiodizationZper)ZantisymmetricZasym)ZantireflectZasymw)dbr   ZcoifZbiorZrbioc                 C   s   g | ]}t |qS  )pywtZwavelist).0namer   r   TD:\Projects\ConvertPro\env\Lib\site-packages\pywt/tests/test_matlab_compatibility.py
<listcomp>   s    r   c                 C   s8   t dkrtt| jdg d }|S | j| jd f}|S )z) Return the sizes to test for wavelet w. full(   )d      i  i  iP     )r   listrangeZdec_len)wZ
data_sizesr   r   r   _get_data_sizes"   s   r   c                  C   s   t d} |  }tjd}d}d}|  zUtD ]K}t|}|	d| t
|D ]9}||}|	d| tD ])\}	}
t|||
|\}}t|||	|||| t|||
\}}t|||	|||| q9q*qW |  d S |  w )Nzpymatbridge.Matlab  -C6
?绽|=waveletdata)pytestZimportorskipnprandomRandomStatestartwaveletsr   Waveletset_variabler   randnmodes_compute_matlab_result_check_accuracy_load_matlab_result_pywt_coeffsstop)Matlabmlabrstateepsilonepsilon_pywt_coeffsr   r   Nr    pmodemmodemamdr   r   r   test_accuracy_pymatbridge,   s,   


r9   c                  C   s   t jd} d}d}tD ]>}t|}t|D ]2}| |}tD ](\}}t	|||\}	}
t
||||	|
|| t|||\}	}
t
||||	|
|| q qqd S )Nr   r   r   )r"   r#   r$   r&   r   r'   r   r)   r*   _load_matlab_resultr,   r-   )r1   r2   r3   r   r   r4   r    r5   r6   r7   r8   r   r   r   test_accuracy_precomputedH   s   

r;   c           	      C   s   t j|t g dkddr&t|}|d|j |d|j d| }nd| }||}|d s7t	d	t 
|d
}t 
|d}||fS )z Compute the result using MATLAB.

    This function assumes that the Matlab variables `wavelet` and `data` have
    already been set externally.
    )Zcoif6Zcoif7Zcoif8Zcoif9Zcoif10Zcoif11Zcoif12Zcoif13Zcoif14Zcoif15Zcoif16Zcoif17r   )ZaxisZLo_DZHi_Dz/[ma, md] = dwt(data, Lo_D, Hi_D, 'mode', '%s');z,[ma, md] = dwt(data, wavelet, 'mode', '%s');successzXMatlab failed to execute the provided code. Check that the wavelet toolbox is installed.r7   r8   )r"   anyarrayr   r'   r(   Zdec_loZdec_hiZrun_codeRuntimeErrorZasarrayZget_variable)	r    r   r6   r0   r   Z	mlab_coderesr7   r8   r   r   r   r+   [   s   


r+   c                 C   n   t | }d||t|dg}d||t|dg}|tvs"|tvr+td|||t| }t| }||fS )" Load the precomputed result.
    _r7   r8   IPrecompted Matlab result not found for wavelet: {0}, mode: {1}, size: {2}lenjoinstrmatlab_result_dictKeyErrorformatr    r   r6   r4   Zma_keyZmd_keyr7   r8   r   r   r   r:   r      
r:   c                 C   rA   )rB   rC   Zma_pywtCoeffsZmd_pywtCoeffsrD   rE   rL   r   r   r   r-      rM   r-   c                 C   s   t | ||\}}tt|| d }	tt|| d }
d||t| |	f }t|	|k |d d||t| |
f }t|
|k |d d S )N   zA[RMS_A > EPSILON] for Mode: %s, Wavelet: %s, Length: %d, rms=%.3g)msgzA[RMS_D > EPSILON] for Mode: %s, Wavelet: %s, Length: %d, rms=%.3g)r   Zdwtr"   sqrtmeanrF   r   )r    r   r5   r7   r8   r   r2   papdZrms_aZrms_drO   r   r   r   r,      s   r,   )__doc__
__future__r   r   r   numpyr"   r!   Znumpy.testingr   r   Zpywt._pytestr   r   r   r	   rI   r*   Zfamiliessumr&   r   markZslowr9   r;   r+   r:   r-   r,   r   r   r   r   <module>   s,    
