
    !Цi0                     Z   S r SSKrSSKrSSKrSSKJr  SSKrSSKJ	r	J
r
JrJr  Sr\" \ V s/ s H  n \R                  U 5      PM     sn / 5      rS rS r\\R&                  R(                  S 5       5       r\\R&                  R(                  S	 5       5       rS
 rS rS rS rS rgs  sn f )zu
Test used to verify PyWavelets Continuous Wavelet Transform computation
accuracy against MathWorks Wavelet Toolbox.
    N)assert_)matlab_result_dict_cwtsize_setuses_precomputeduses_pymatbridge)gausmexhmorlcgaushanfbspcmorc                 V    [         S:X  a  [        [        SS5      5      / SQ-   nU$ SnU$ )z(Return the sizes to test for wavelet w. fulld   e   )r      i    iP  )r   i  )r   listrange)w
data_sizess     g/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/pywt/tests/test_matlab_compatibility_cwt.py_get_data_sizesr      s7    6%S/*()
  &
    c                     [         S:X  aG  S[        R                  " SS5      [        R                  " SS5      [        R                  " SS5      4nU$ S[        R                  " SS5      4nU$ )z)Return the scales to test for wavelet w. r               )r   nparange)r   scaless     r   _get_scalesr$   #   sX    6RYYq!_bii1oryyAG M RYYq!_%Mr   c                     [         R                  " S5      n U " 5       n[        R                  R	                  S5      nSnSnUR                  5          [         GH  n[        R                  " 5          [        R                  " S[        5        [        R                  " U5      nS S S 5        [        R                  " U[        R                  " SS/5      :H  SS9(       aB  UR                  S	U[!        WR"                  5      -   S
-   [!        UR$                  5      -   5        OsUS:X  a[  UR                  S	U[!        WR&                  5      -   S
-   [!        UR"                  5      -   S
-   [!        UR$                  5      -   5        OUR                  S	U5        SnUR)                  U5      n[        R*                  " UR-                  S5      5      n	[/        WXU5        [1        U5       HQ  n
UR3                  U
5      nUR                  SU5        [5        U5       H  n[7        XX5      n[9        XXXS5        M     MS     GM     UR;                  5         g ! , (       d  f       GN= f! UR;                  5         f = f)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FutureWarningpywt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_psir*   r   	mlab_coderesr,   Nr-   r#   coefss                 r   test_accuracy_pymatbridge_cwtrR   ,   s      !56F8DYY""4(FGKJJLxG((*%%h>**73 + vvw"((FF+;"<<1E!!)WS9N9N5O-OPS-STWXYXjXjTk-klF"!!)WS5F-Fs-J3qOdOdKe-efi-ijmno  oA  oA  kB  .B  C!!)W54I--	*C**T..u56C3=$Q'||A!!&$/)!nF24&OE#DVGM - (  , 			+ +** 			s%   I  12I#FI  
I	I   I2c                     [         R                  R                  S5      n SnSnSn[         GH  n[        R
                  " 5          [        R                  " S[        5        [        R                  " U5      n[        R                  " U[         R                  S9nS S S 5        [        U5      n[        WXtU5        [        U5       Hs  nU R                  U5      n	U	R                  [         R                  5      n
Sn[!        U5       H/  nUS-  n[#        XU5      n[%        XXXA5        [%        U
WXXB5        M1     Mu     GM     g ! , (       d  f       N= f)	Nr&   gV瞯<gh㈵>r'   r(   )dtyper   r   )r!   r0   r1   r3   r4   r5   r6   r7   r8   r9   float32_load_matlab_result_psirD   r   rE   astyper$   _load_matlab_resultrG   )rK   rL   	epsilon32rM   r*   r   w32r,   rP   r-   data32scales_countr#   rQ   s                 r   test_accuracy_precomputed_cwtr]   P   s
    YY""4(FGIK8$$&!!(M:&&w/A((rzzBC ' &g.As[9 #A<<?D[[,FL%a.!+D<HIVGO	 )	 $ &&s   AE
E	c                     UR                  SU5        SnUR                  U5      nUS   (       d  [        S5      e[        R                  " UR                  S5      5      nU$ )zCompute 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.rQ   )r<   rA   RuntimeErrorr!   rB   rC   )r-   r*   r#   rJ   rN   rO   rQ   s          r   rF   rF   l   sc     	h'5I
--	
"Cy> J K 	K JJt((12ELr   c                     [        U 5      nSR                  [        U5      U[        U5      S/5      nU[        ;  a  [	        SU SU SU 35      e[        U   nU$ )!Load the precomputed result.
    _rQ   z0Precompted Matlab result not found for wavelet: z, mode: z, size: )lenjoinr=   r   KeyError)r-   r*   r#   rP   	coefs_keyrQ   s         r   rX   rX   }   sl     	D	A#f+wA@AI//>ixxxs45 	5 #9-ELr   c                     SR                  U S/5      nU[        ;  a  [        SR                  U 5      5      e[        U   nU$ )rb   rc   r,   z8Precompted Matlab psi result not found for wavelet: {0}})re   r   rf   format)r*   psi_keyr,   s      r   rV   rV      sL     hh'(G--6'?$ 	$ !
)CJr   c           	      L   [         R                  " XUSS9u  pg[        R                  " U5      nXc-
  n[        R                  " [        R
                  " [        R                  " [        R                  " U5      U-  5      5      5      n	SX$[        U 5      U	4-  n
[        X:  U
S9  g )N
   )	precisionz@[RMS > EPSILON] for Scale: %s, Wavelet: %s, Length: %d, rms=%.3gmsg)	r8   cwtr!   conjrealsqrtmeanrd   r   )r-   r   r#   rQ   r*   rL   
coefs_pywtfreqerrrmsro   s              r   rG   rG      s    xxa2>J
 GGENE 
C
''"''"''"''#,"456
7C"%+c$i$EFCCMs#r   c           	      <   U R                  SS9u  pEUR                  5       UR                  5       -
  n[        R                  " [        R                  " [        R
                  " [        R                  " U5      U-  5      5      5      nSU SUS 3n[        Xs:  US9  g )Ni   )lengthz[RMS > EPSILON] for  Wavelet: z, rms=z.3grn   )wavefunflattenr!   rr   rs   rt   rq   r   )	r   r,   r*   rL   psi_pywtxrw   rx   ro   s	            r   rD   rD      s|    ))4)(KH 


s{{}
,C
''"''"''"''#,"456
7C*7)6#c
CCCMs#r   )__doc__r4   numpyr!   r.   numpy.testingr   r8   pywt._pytestr   r   r   r   familiessumwavelistr3   r   r$   markslowrR   r]   rF   rX   rV   rG   rD   )names   0r   <module>r      s       !   D9d#92>   D P  P4"
	$$	$e :s   B(