
    i                     R   d Z ddlZddlZddlmZ ddlZddlmZ	 ddlm
Z
mZmZ g dZdZ eeD  cg c]  }  ej                   |        c} g       Zd Zeej&                  j(                  d	               Zeej&                  j(                  d
               Zd Zd Zd Zd Zyc c} w )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                     t         dk(  r&t        t        | j                  d            g dz   }|S | j                  | j                  dz   f}|S )z) Return the sizes to test for wavelet w. full(   )d      i  i  iP     )r   listrangedec_len)w
data_sizess     `/var/www/html/BatchJob/venv/lib/python3.12/site-packages/pywt/tests/test_matlab_compatibility.py_get_data_sizesr*   !   sM    6%		2./()
  iiQ/
    c                  \   t        j                  d      }  |        }t        j                  j	                  d      }d}d}|j                          	 t        D ]  }t        j                  |      }|j                  d|       t        |      D ]v  }|j                  |      }|j                  d|       t        D ]H  \  }	}
t        |||
|      \  }}t        |||	||||       t        |||
      \  }}t        |||	||||       J x  	 |j!                          y # |j!                          w xY w)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 
	ZGW%Ai1$Q' Z||A!!&$/$) ZLE53D'5$OFB#D!UBGWM<T7ERFB#D!UBGEXY	ZZ
	Z 					s   B6D D+c                  l   t         j                  j                  d      } d}d}t        D ]  }t	        j
                  |      }t        |      D ]c  }| j                  |      }t        D ]G  \  }}t        |||      \  }	}
t        ||||	|
||       t        |||      \  }	}
t        ||||	|
||       I e  y )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! VLL! # 	VA<<?D % Vu,T7EBBaBI8wNBaBATU	V	VVr+   c                    t        j                  |t        j                  g d      k(  d      rTt        j                  |      }|j                  d|j                         |j                  d|j                         d| d}nd| d}|j                  |      }|d	   st        d
      t        j                  |j                  d            }t        j                  |j                  d            }||fS )z Compute 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r6Mr+   c                    t        |       }dj                  ||t        |      dg      }dj                  ||t        |      dg      }|t        vs|t        vrt	        d| d| d|       t        |   }t        |   }||fS )" 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XXugs1vt45FXXugs1vt45F((-->ixwhqc34 	4 
F	#B	F	#Br6Mr+   c                    t        |       }dj                  ||t        |      dg      }dj                  ||t        |      dg      }|t        vs|t        vrt	        d| d| d|       t        |   }t        |   }||fS )rl   rm   ma_pywtCoeffsmd_pywtCoeffsrn   ro   rp   rq   rw   s           r)   r@   r@      s     	D	AXXugs1v?@FXXugs1v?@F((-->ixwhqc34 	4 
F	#B	F	#Br6Mr+   c                 x   t        j                  | ||      \  }}t        j                  t        j                  ||z
  dz              }	t        j                  t        j                  ||z
  dz              }
d||t        |       |	fz  }t        |	|k  |       d||t        |       |
fz  }t        |
|k  |       y )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    XXdAu%FB GGBGGR"WN+,EGGBGGR"WN+,E"%*GSY$FGCEGO%"%*GSY$FGCEGO%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$