U
    ?h                     @   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   Z/var/www/html/venv/lib/python3.8/site-packages/pywt/tests/test_matlab_compatibility_cwt.py
<listcomp>   s     r   c                 C   s.   t dkr&ttdddddddg }nd}|S )	z) Return the sizes to test for wavelet w. fulld   e      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}|  zFtD ]:}t	  t
dt t|}W 5 Q R X 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|||||| qDq"q4W 5 |  X 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stop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)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 , tdt t	|}tj	|t j
d}W 5 Q R X t|}t|||| t|D ]d}| |}	|	t j
}
d}t|D ]<}|d7 }t|	||}t|	||||| t|
||||| qqxqd S )	Nr#   gV瞯<gh㈵>r$   r%   )Zdtyper   r   )r    r+   r,   r/   r0   r1   r2   r3   r   r4   Z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(    


rL   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k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   rK   y   s      rK   c                 C   s0   d | dg}|tkr$td| t| }|S )rO   rP   r(   z8Precompted Matlab psi result not found for wavelet: {0}})rR   r	   rS   rT   )r&   Zpsi_keyr(   r   r   r   rJ      s    rJ   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meanrQ   r   )r)   r   r!   rH   r&   rC   Z
coefs_pywtfreqerrrmsrV   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=%.3grU   )Zwavefunflattenr    rX   rY   rZ   rW   r   )	r   r(   r&   rC   Zpsi_pywtxr\   r]   rV   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   rL   r>   rK   rJ   r?   r<   r   r   r   r   <module>   s,   
	"