
    bMh                        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d eD             g           Zd	 Zeej        j        d
                         Zeej        j        d                         Zd Zd Zd Zd ZdS )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                 6    g | ]}t          j        |          S  )pywtwavelist).0names     d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pywt/tests/test_matlab_compatibility.py
<listcomp>r%      s"    999d##999    c                     t           dk    r(t          t          | j        d                    g dz   }n| 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     r$   _get_data_sizesr2   !   sP    6%	2..//((()

 iQ/
r&   c                     t          j        d          }  |             }t          j                            d          }d}d}|                                 	 t          D ]}t          j        |          }|	                    d|           t          |          D ]}|                    |          }|	                    d|           t          D ]X\  }	}
t          |||
|          \  }}t          |||	||||           t          |||
          \  }}t          |||	||||           Y	 |                                 d S # |                                 w xY w)Nzpymatbridge.Matlab  -C6
?绽|=waveletdata)pytestimportorskipnprandomRandomStatestartwaveletsr    Waveletset_variabler2   randnmodes_compute_matlab_result_check_accuracy_load_matlab_result_pywt_coeffsstop)Matlabmlabrstateepsilonepsilon_pywt_coeffsr7   r0   Nr8   pmodemmodemamds                r$   test_accuracy_pymatbridgerR   +   sv     !566F688DY""4((FG!JJLLL 
	Z 
	ZGW%%Ai111$Q'' Z Z||A!!&$///$) Z ZLE53D'5$OOFB#D!UBGWMMM<T7ERRFB#D!UBGEXYYYY	ZZ
	Z 					s   CD? ?Ec                     t           j                            d          } d}d}t          D ]}t	          j        |          }t          |          D ]v}|                     |          }t          D ]W\  }}t          |||          \  }	}
t          ||||	|
||           t          |||          \  }	}
t          ||||	|
||           Xwd S )Nr4   r5   r6   )r;   r<   r=   r?   r    r@   r2   rB   rC   _load_matlab_resultrE   rF   )rJ   rK   rL   r7   r0   rM   r8   rN   rO   rP   rQ   s              r$   test_accuracy_precomputedrU   G   s     Y""4((FG! V VL!! ## 	V 	VA<<??D % V Vu,T7EBBBaBIII8wNNBaBATUUUU	V	VV Vr&   c                    t          j        |t          j        g d          k    d          rQt          j        |          }|                    d|j                   |                    d|j                   d| d}nd| d}|                    |          }|d	         st          d
          t          j
        |                    d                    }t          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.rP   rQ   )r;   anyarrayr    r@   rA   dec_lodec_hirun_codeRuntimeErrorasarrayget_variable)	r8   r7   rO   rI   r0   	mlab_coderesrP   rQ   s	            r$   rD   rD   Z   s1    
vw"(  $X  $X  $X  Y  Y  Y  `a  b  b  b IL!!&!(+++&!(+++KKKK		HeHHH	
--	
"
"Cy> K J K K 	K 
D%%d++	,	,B	D%%d++	,	,Br6Mr&   c                 H   t          |           }d                    ||t          |          dg          }d                    ||t          |          dg          }|t          vs	|t          vrt	          d| d| d|           t          |         }t          |         }||fS )" Load the precomputed result.
    _rP   rQ   0Precompted Matlab result not found for wavelet: , mode: , size: lenjoinstrmatlab_result_dictKeyErrorr8   r7   rO   rM   ma_keymd_keyrP   rQ   s           r$   rT   rT   q   s     	D		AXXugs1vvt455FXXugs1vvt455F(((---33 3 %3 3/03 34 4 	4 
F	#B	F	#Br6Mr&   c                 H   t          |           }d                    ||t          |          dg          }d                    ||t          |          dg          }|t          vs	|t          vrt	          d| d| d|           t          |         }t          |         }||fS )rr   rs   ma_pywtCoeffsmd_pywtCoeffsrt   ru   rv   rw   r}   s           r$   rF   rF      s     	D		AXXugs1vv?@@FXXugs1vv?@@F(((---33 3 %3 3/03 34 4 	4 
F	#B	F	#Br6Mr&   c                    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     |           d S )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)r    dwtr;   sqrtmeanrx   r   )r8   r0   rN   rP   rQ   r7   rK   papdrms_arms_dr   s               r$   rE   rE      s    XdAu%%FB GBGR"WN++,,EGBGR"WN++,,E"%*GSYY$FGCEGO%%%%"%*GSYY$FGCEGO%%%%%%r&   )__doc__numpyr;   r9   numpy.testingr   r    pywt._pytestr   r{   r   r   r   rC   familiessumr?   r2   markslowrR   rU   rD   rT   rF   rE   r   r&   r$   <module>r      sY         ! ! ! ! ! !  E E E E E E E E E E E E E E E E	 	 	 13999992>>      4 V V  V"  .      & & & & &r&   