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Zddl	m
Z
 ddlZddlmZmZmZmZ dZedd eD g Zd	d
 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d ZdS )zu
Test used to verify PyWavelets Continuous Wavelet Transform computation
accuracy against MathWorks Wavelet Toolbox.
    )divisionprint_functionabsolute_importN)assert_)uses_pymatbridgeuses_precomputedsize_setmatlab_result_dict_cwt)ZgausZmexhZmorlZcgaushanfbspcmorc                 C   s   g | ]}t |qS  )pywtZwavelist).0namer   r   q/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/pywt/tests/test_matlab_compatibility_cwt.py
<listcomp>       r   c                 C   s(   t dkr ttddg d }nd}|S )z) Return the sizes to test for wavelet w. fulld   e   )r      i    iP  )r   i  )r   listrange)wZ
data_sizesr   r   r   _get_data_sizes   s    r   c                 C   sB   t dkr.dtddtddtddf}ndtddf}|S )z* Return the scales to test for wavelet w. r               )r   npZarange)r   scalesr   r   r   _get_scales   s    &r#   c               
   C   s  t d} |  }tjd}d}d}|  zbtD ]N}t & t	dt
 t|}W d    n1 sn0    Y  tj|tddgkddr|d	|t|j d
 t|j  nH|dkr|d	|t|j d
 t|j d
 t|j  n|d	| d}||}t|d}	t||	|| t|D ]L}
||
}|d| t|D ]&}t||||}t|||||| qXq6q4W |  n
|  0 d S )Nzpymatbridge.Matlab  V瞯<ignorer
   r   r   )Zaxiswavelet-r   zpsi = wavefun(wavelet,10)psidata)pytestZimportorskipr!   randomRandomStatestartwaveletswarningscatch_warningssimplefilterFutureWarningr   ContinuousWaveletanyarrayset_variablestrZbandwidth_frequencyZcenter_frequencyZ
fbsp_orderrun_codeasarrayget_variable_check_accuracy_psir   randnr#   _compute_matlab_result_check_accuracystop)ZMatlabmlabrstateepsilonepsilon_psir'   r   	mlab_coderesr)   Nr*   r"   coefsr   r   r   test_accuracy_pymatbridge_cwt(   s6    


(&4

rI   c               
   C   s   t jd} d}d}d}tD ]}t 6 tdt t	|}tj	|t j
d}W d    n1 sd0    Y  t|}t|||| t|D ]d}| |}	|	t j
}
d}t|D ]<}|d7 }t|	||}t|	||||| t|
||||| qqqd S )	Nr$   gV瞯<gh㈵>r%   r&   )Zdtyper   r   )r!   r,   r-   r/   r0   r1   r2   r3   r   r4   float32_load_matlab_result_psir<   r   r=   Zastyper#   _load_matlab_resultr?   )rB   rC   Z	epsilon32rD   r'   r   Zw32r)   rG   r*   Zdata32Zscales_countr"   rH   r   r   r   test_accuracy_precomputed_cwtL   s(    

.
rM   c                 C   s>   | d| d}||}|d s*tdt|d}|S )z Compute the result using MATLAB.

    This function assumes that the Matlab variables `wavelet` and `data` have
    already been set externally.
    r"   z"coefs = cwt(data, scales, wavelet)successzXMatlab failed to execute the provided code. Check that the wavelet toolbox is installed.rH   )r7   r9   RuntimeErrorr!   r:   r;   )r*   r'   r"   rA   rE   rF   rH   r   r   r   r>   h   s    
r>   c                 C   sH   t | }dt||t|dg}|tvr<td|||t| }|S )" Load the precomputed result.
    _rH   zIPrecompted Matlab result not found for wavelet: {0}, mode: {1}, size: {2})lenjoinr8   r	   KeyErrorformat)r*   r'   r"   rG   Z	coefs_keyrH   r   r   r   rL   y   s    rL   c                 C   s0   d | dg}|tvr$td| t| }|S )rP   rQ   r)   z8Precompted Matlab psi result not found for wavelet: {0}})rS   r	   rT   rU   )r'   Zpsi_keyr)   r   r   r   rK      s    rK   c              	   C   sl   t | ||\}}t|}|| }tttt|| }	d||t| |	f }
t|	|k |
d d S )Nz@[RMS > EPSILON] for Scale: %s, Wavelet: %s, Length: %d, rms=%.3gmsg)	r   Zcwtr!   conjrealsqrtmeanrR   r   )r*   r   r"   rH   r'   rC   Z
coefs_pywtfreqerrrmsrW   r   r   r   r?      s    
 r?   c           	   	   C   s`   | j dd\}}| |  }tttt|| }d||f }t||k |d d S )Ni   )lengthz*[RMS > EPSILON] for  Wavelet: %s, rms=%.3grV   )Zwavefunflattenr!   rY   rZ   r[   rX   r   )	r   r)   r'   rC   Zpsi_pywtxr]   r^   rW   r   r   r   r<      s     r<   )__doc__
__future__r   r   r   r0   numpyr!   r+   Znumpy.testingr   r   Zpywt._pytestr   r   r   r	   Zfamiliessumr/   r   r#   markZslowrI   rM   r>   rL   rK   r?   r<   r   r   r   r   <module>   s,   
	"