
    !Цi                     V   S r SSKrSSKrSSKJr  SSKrSSKJr	  SSKJ
r
JrJr  / SQrSr\" \ V s/ s H  n \R!                  U 5      PM     sn / 5      rS r\\R&                  R(                  S	 5       5       r\\R&                  R(                  S
 5       5       rS rS rS rS rgs  sn f )zs
Test used to verify PyWavelets Discrete Wavelet Transform computation
accuracy against MathWorks Wavelet Toolbox.
    N)assert_)matlab_result_dict_dwt)size_setuses_precomputeduses_pymatbridge)	)zerozpd)constantsp0)	symmetricsym)reflectsymw)periodicppd)smoothsp1)periodizationper)antisymmetricasym)antireflectasymw)dbr   coifbiorrbioc                     [         S:X  a&  [        [        U R                  S5      5      / SQ-   nU$ U R                  U R                  S-   4nU$ )z(Return the sizes to test for wavelet w. full(   )d      i  i  iP     )r   listrangedec_len)w
data_sizess     c/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/pywt/tests/test_matlab_compatibility.py_get_data_sizesr*   !   sM    6%		2./()
  iiQ/
    c                  R   [         R                  " S5      n U " 5       n[        R                  R	                  S5      nSnSnUR                  5          [         H  n[        R                  " U5      nUR                  SU5        [        U5       Hm  nUR                  U5      nUR                  SU5        [         H=  u  p[        XX5      u  p[        XXXU5        [        XU
5      u  p[        XXXU5        M?     Mo     M     UR!                  5         g ! UR!                  5         f = f)Nzpymatbridge.Matlab  -C6
?绽|=waveletdata)pytestimportorskipnprandomRandomStatestartwaveletspywtWaveletset_variabler*   randnmodes_compute_matlab_result_check_accuracy_load_matlab_result_pywt_coeffsstop)Matlabmlabrstateepsilonepsilon_pywt_coeffsr0   r'   Nr1   pmodemmodemamds                r)   test_accuracy_pymatbridgerL   +   s       !56F8DYY""4(FG!JJLGW%Ai1$Q'||A!!&$/$)LE3D5OFB#DUWM<TERFB#DUEXY	 %* (   					s   B1D D&c                  d   [         R                  R                  S5      n SnSn[         H  n[        R
                  " U5      n[        U5       H[  nU R                  U5      n[         H=  u  px[        XcU5      u  p[        XdXyXU5        [        XcU5      u  p[        XdXyXU5        M?     M]     M     g )Nr-   r.   r/   )r4   r5   r6   r8   r9   r:   r*   r<   r=   _load_matlab_resultr?   r@   )rD   rE   rF   r0   r'   rG   r1   rH   rI   rJ   rK   s              r)   test_accuracy_precomputedrO   G   s     YY""4(FG!LL! #A<<?D %,TEBBI8NBATU	 !& $ r+   c                    [         R                  " U[         R                  " / SQ5      :H  SS9(       aU  [        R                  " U5      nUR                  SUR                  5        UR                  SUR                  5        SU S3nOSU S3nUR                  U5      nUS	   (       d  [        S
5      e[         R                  " UR                  S5      5      n[         R                  " UR                  S5      5      nXx4$ )zCompute the result using MATLAB.

This function assumes that the Matlab variables `wavelet` and `data` have
already been set externally.
)coif6coif7coif8coif9coif10coif11coif12coif13coif14coif15coif16coif17r   )axisLo_DHi_Dz*[ma, md] = dwt(data, Lo_D, Hi_D, 'mode', 'z');z'[ma, md] = dwt(data, wavelet, 'mode', 'successzXMatlab failed to execute the provided code. Check that the wavelet toolbox is installed.rJ   rK   )r4   anyarrayr9   r:   r;   dec_lodec_hirun_codeRuntimeErrorasarrayget_variable)	r1   r0   rI   rC   r'   	mlab_coderesrJ   rK   s	            r)   r>   r>   Z   s     
vvw"((  $X  Y  Y  `a  bLL!&!((+&!((+@sK	=eWCH	
--	
"Cy> J K 	K 
D%%d+	,B	D%%d+	,B6Mr+   c                    [        U 5      nSR                  X![        U5      S/5      nSR                  X![        U5      S/5      nU[        ;  d
  U[        ;  a  [	        SU SU SU 35      e[        U   n[        U   nXg4$ )!Load the precomputed result.
    _rJ   rK   0Precompted Matlab result not found for wavelet: , mode: , size: lenjoinstrmatlab_result_dictKeyErrorr1   r0   rI   rG   ma_keymd_keyrJ   rK   s           r)   rN   rN   q   s     	D	AXXus1vt45FXXus1vt45F((-->ixwhqc34 	4 
F	#B	F	#B6Mr+   c                    [        U 5      nSR                  X![        U5      S/5      nSR                  X![        U5      S/5      nU[        ;  d
  U[        ;  a  [	        SU SU SU 35      e[        U   n[        U   nXg4$ )rl   rm   ma_pywtCoeffsmd_pywtCoeffsrn   ro   rp   rq   rw   s           r)   r@   r@      s     	D	AXXus1v?@FXXus1v?@F((-->ixwhqc34 	4 
F	#B	F	#B6Mr+   c                 f   [         R                  " XU5      u  px[        R                  " [        R                  " Xs-
  S-  5      5      n	[        R                  " [        R                  " X-
  S-  5      5      n
SX%[        U 5      U	4-  n[        X:  US9  SX%[        U 5      U
4-  n[        X:  US9  g )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)r9   dwtr4   sqrtmeanrr   r   )r1   r'   rH   rJ   rK   r0   rE   papdrms_arms_dr   s               r)   r?   r?      s    XXdu%FB GGBGGRWN+,EGGBGGRWN+,E"%*SY$FGCEO%"%*SY$FGCEO%r+   )__doc__numpyr4   r2   numpy.testingr   r9   pywt._pytestr   ru   r   r   r   r=   familiessumwavelistr8   r*   markslowrL   rO   r>   rN   r@   r?   )names   0r)   <module>r      s      !  E E E	 19d#92>   4 V  V".  &g :s   B&