a
    
d                     @   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)	)Z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   m/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pywt/tests/test_matlab_compatibility.py
<listcomp>       r   c                 C   s6   t dkr"tt| jdg d }n| 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}|  ztD ]}t|}|	d| t
|D ]r}||}|	d| tD ]R\}	}
t|||
|\}}t|||	|||| t|||
\}}t|||	|||| qrqTq2W |  n
|  0 d S )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)ZMatlabmlabrstateepsilonepsilon_pywt_coeffsr   r   Nr    pmodemmodemamdr   r   r   test_accuracy_pymatbridge,   s&    


r8   c                  C   s   t jd} d}d}tD ]|}t|}t|D ]d}| |}tD ]P\}}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-   )r0   r1   r2   r   r   r3   r    r4   r5   r6   r7   r   r   r   test_accuracy_precomputedH   s    

r:   c           	      C   s   t j|t g dkddrLt|}|d|j |d|j d| }nd| }||}|d snt	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.r6   r7   )r"   anyarrayr   r'   r(   Zdec_loZdec_hiZrun_codeRuntimeErrorZasarrayZget_variable)	r    r   r5   r/   r   Z	mlab_coderesr6   r7   r   r   r   r+   [   s    


r+   c                 C   sn   t | }d||t|dg}d||t|dg}|tvsD|tvrVtd|||t| }t| }||fS )" Load the precomputed result.
    _r6   r7   IPrecompted Matlab result not found for wavelet: {0}, mode: {1}, size: {2}lenjoinstrmatlab_result_dictKeyErrorformatr    r   r5   r3   Zma_keyZmd_keyr6   r7   r   r   r   r9   r   s    r9   c                 C   sn   t | }d||t|dg}d||t|dg}|tvsD|tvrVtd|||t| }t| }||fS )r@   rA   Zma_pywtCoeffsZmd_pywtCoeffsrB   rC   rJ   r   r   r   r-      s    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meanrD   r   )r    r   r4   r6   r7   r   r1   papdZrms_aZrms_drL   r   r   r   r,      s    r,   )__doc__
__future__r   r   r   numpyr"   r!   Znumpy.testingr   r   Zpywt._pytestr   r   r   r	   rG   r*   Zfamiliessumr&   r   markZslowr8   r:   r+   r9   r-   r,   r   r   r   r   <module>   s*   
