
     e                     ,   d Z ddlmZmZm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 ddl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.
    )divisionprint_functionabsolute_importN)assert_)uses_pymatbridgeuses_precomputedsize_set)matlab_result_dict_dwt)	)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     Dlib/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_sizesr5   "   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_variabler5   randnmodes_compute_matlab_result_check_accuracy_load_matlab_result_pywt_coeffsstop)Matlabmlabrstateepsilonepsilon_pywt_coeffsr:   r3   Nr;   pmodemmodemamds                r'   test_accuracy_pymatbridgerU   ,   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 )Nr7   r8   r9   )r>   r?   r@   rB   r#   rC   r5   rE   rF   _load_matlab_resultrH   rI   )rM   rN   rO   r:   r3   rP   r;   rQ   rR   rS   rT   s              r'   test_accuracy_precomputedrX   H   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          rPt          j        |          }|                    d|j                   |                    d|j                   d|z  }nd|z  }|                    |          }|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', '%s');z,[ma, md] = dwt(data, wavelet, 'mode', '%s');successzXMatlab failed to execute the provided code. Check that the wavelet toolbox is installed.rS   rT   )r>   anyarrayr#   rC   rD   dec_lodec_hirun_codeRuntimeErrorasarrayget_variable)	r;   r:   rR   rL   r3   	mlab_coderesrS   rT   s	            r'   rG   rG   [   s%    
vw"(  $X  $X  $X  Y  Y  Y  `a  b  b  b KL!!&!(+++&!(+++FN		BUJ	
--	
"
"Cy> K J K K 	K 
D%%d++	,	,B	D%%d++	,	,Br6Mr)   c                 `   t          |           }d                    ||t          |          dg          }d                    ||t          |          dg          }|t          vs	|t          vr$t	          d                    |||                    t          |         }t          |         }||fS )" Load the precomputed result.
    _rS   rT   IPrecompted Matlab result not found for wavelet: {0}, mode: {1}, size: {2}lenjoinstrmatlab_result_dictKeyErrorformatr;   r:   rR   rP   ma_keymd_keyrS   rT   s           r'   rW   rW   r   s     	D		AXXugs1vvt455FXXugs1vvt455F(((---((.wq(A(AC C 	C 
F	#B	F	#Br6Mr)   c                 `   t          |           }d                    ||t          |          dg          }d                    ||t          |          dg          }|t          vs	|t          vr$t	          d                    |||                    t          |         }t          |         }||fS )ru   rv   ma_pywtCoeffsmd_pywtCoeffsrw   rx   r   s           r'   rI   rI      s     	D		AXXugs1vv?@@FXXugs1vv?@@F(((---((.wq(A(AC C 	C 
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meanry   r   )r;   r3   rQ   rS   rT   r:   rN   papdrms_arms_dr   s               r'   rH   rH      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__
__future__r   r   r   numpyr>   r<   numpy.testingr   r#   pywt._pytestr   r   r	   r
   r|   rF   familiessumrB   r5   markslowrU   rX   rG   rW   rI   rH   r"   r)   r'   <module>r      sx   
 A @ @ @ @ @ @ @ @ @      ! ! ! ! ! !  G G G G G G G G G G E E E E E E	 	 	 13999992>>      4 V V  V"  .      & & & & &r)   