
     e                     0   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 eD             g           Zd Zd	 Zeej        j        d
                         Zeej        j        d                         Zd Zd Zd Zd Z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)gausmexhmorlcgaushanfbspcmorc                 6    g | ]}t          j        |          S  )pywtwavelist).0names     Hlib/python3.11/site-packages/pywt/tests/test_matlab_compatibility_cwt.py
<listcomp>r      s"    999d##999    c                 f    t           dk    r#t          t          dd                    g dz   }nd}|S )z) Return the sizes to test for wavelet w. fulld   e   )r      i    iP  )r    i  )r	   listrange)w
data_sizess     r   _get_data_sizesr%      s?    6%S//**((()

 &
r   c                     t           dk    r@dt          j        dd          t          j        dd          t          j        dd          f}ndt          j        dd          f}|S )z* Return the scales to test for wavelet w. r               )r	   nparange)r#   scaless     r   _get_scalesr.      sT    6RYq!__bi1ooryAGRYq!__%Mr   c                  6   t          j        d          }  |             }t          j                            d          }d}d}|                                 	 t          D ]}t          j                    5  t          j	        dt                     t          j        |          }d d d            n# 1 swxY w Y   t          j        |t          j        ddg          k    d          rD|                    d	|t!          |j                  z   d
z   t!          |j                  z              nx|dk    r\|                    d	|t!          |j                  z   d
z   t!          |j                  z   d
z   t!          |j                  z              n|                    d	|           d}|                    |          }t          j        |                    d                    }	t/          ||	||           t1          |          D ]e}
|                    |
          }|                    d|           t5          |          D ](}t7          ||||          }t9          ||||||           )f	 |                                 d S # |                                 w xY w)Nzpymatbridge.Matlab  V瞯<ignorer   r   r   )axiswavelet-r   zpsi = wavefun(wavelet,10)psidata)pytestimportorskipr+   randomRandomStatestartwaveletswarningscatch_warningssimplefilterFutureWarningr   ContinuousWaveletanyarrayset_variablestrbandwidth_frequencycenter_frequency
fbsp_orderrun_codeasarrayget_variable_check_accuracy_psir%   randnr.   _compute_matlab_result_check_accuracystop)Matlabmlabrstateepsilonepsilon_psir4   r#   	mlab_coderesr6   Nr7   r-   coefss                 r   test_accuracy_pymatbridge_cwtr[   (   s     !566F688DY""4((FGKJJLLL 	N 	NG(** 4 4%h>>>*7334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 vw"(FF+;"<"<<1EEE 6!!)WS9N5O5O-OPS-STWXYXjTkTk-kllllF""!!)WS5F5F-Fs-J3qOdKeKe-efi-ijmno  oA  kB  kB  .B  C  C  C  C!!)W5554I--	**C*T..u5566C3===$Q'' N N||A!!&$///)!nn N NF24&$OOE#D!VUGWMMMMNN	N, 					s1   J 4/B/#J /B3	3J 6B3	7F4J Jc                     t           j                            d          } d}d}d}t          D ]5}t	          j                    5  t	          j        dt                     t          j	        |          }t          j	        |t           j
                  }d d d            n# 1 swxY w Y   t          |          }t          ||||           t          |          D ]}|                     |          }	|	                    t           j
                  }
d}t!          |          D ]@}|dz  }t#          |	||          }t%          |	|||||           t%          |
|||||           A7d S )	Nr0   gV瞯<gh㈵>r1   r2   )dtyper   r'   )r+   r:   r;   r=   r>   r?   r@   rA   r   rB   float32_load_matlab_result_psirM   r%   rN   astyper.   _load_matlab_resultrP   )rT   rU   	epsilon32rV   r4   r#   w32r6   rY   r7   data32scales_countr-   rZ   s                 r   test_accuracy_precomputed_cwtrf   L   s    Y""4((FGIK P P$&& 	C 	C!(M:::&w//A(rzBBBC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C &g..AsG[999 ## 	P 	PA<<??D[[,,FL%a.. P P!+D'<HHaIIIVUGYOOOO	P		PP Ps   ABB"	%B"	c                     |                     d|           d}|                    |          }|d         st          d          t          j        |                    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.rZ   )rE   rJ   RuntimeErrorr+   rK   rL   )r7   r4   r-   rS   rW   rX   rZ   s          r   rO   rO   h   s|     	h'''5I
--	
"
"Cy> K J K K 	K Jt((1122ELr   c                     t          |           }d                    t          |          |t          |          dg          }|t          vr$t	          d                    |||                    t          |         }|S )" Load the precomputed result.
    _rZ   zIPrecompted Matlab result not found for wavelet: {0}, mode: {1}, size: {2})lenjoinrF   r
   KeyErrorformat)r7   r4   r-   rY   	coefs_keyrZ   s         r   ra   ra   y   s}     	D		A#f++wA@AAI///((.w(B(BD D 	D #9-ELr   c                     d                     | dg          }|t          vr"t          d                    |                     t          |         }|S )rk   rl   r6   z8Precompted Matlab psi result not found for wavelet: {0}})rn   r
   ro   rp   )r4   psi_keyr6   s      r   r_   r_      sY     hh'((G---6'??$ $ 	$ !
)CJr   c           	      Z   t          j        | ||          \  }}t          j        |          }||z
  }t          j        t          j        t          j        t          j        |          |z                                }	d||t          |           |	fz  }
t          |	|k     |
           d S )Nz@[RMS > EPSILON] for Scale: %s, Wavelet: %s, Length: %d, rms=%.3gmsg)	r   cwtr+   conjrealsqrtmeanrm   r   )r7   r#   r-   rZ   r4   rU   
coefs_pywtfreqerrrmsrv   s              r   rP   rP      s    xfa00J
 GENNE u
C
'"'"'"'#,,"45566
7
7C"%+Wc$ii$EFCC'Ms######r   c           	      \   |                      d          \  }}|                                |                                z
  }t          j        t          j        t          j        t          j        |          |z                                }d||fz  }t          ||k     |           d S )Ni   )lengthz*[RMS > EPSILON] for  Wavelet: %s, rms=%.3gru   )wavefunflattenr+   ry   rz   r{   rx   r   )	r#   r6   r4   rU   psi_pywtxr~   r   rv   s	            r   rM   rM      s    ))4)((KHa 



s{{}}
,C
'"'"'"'#,,"45566
7
7C #'CC'Ms######r   )__doc__
__future__r   r   r   r>   numpyr+   r8   numpy.testingr   r   pywt._pytestr   r   r	   r
   familiessumr=   r%   r.   markslowr[   rf   rO   ra   r_   rP   rM   r   r   r   <module>r      s   
 A @ @ @ @ @ @ @ @ @       ! ! ! ! ! ! 2 2 2 2 2 2 2 2 2 2 2 2 D3999992>>        D P P  P4  "
 
 
	 	 	$ $ $$
$ 
$ 
$ 
$ 
$r   