
    bMh"                        d Z ddl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mZ dZ ed eD             g           Zd Zd Zeej        j        d	                         Zeej        j        d
                         Zd Zd Zd Zd Zd ZdS )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                 6    g | ]}t          j        |          S  )pywtwavelist).0names     h/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pywt/tests/test_matlab_compatibility_cwt.py
<listcomp>r      s"    999d##999    c                 f    t           dk    r#t          t          dd                    g dz   }nd}|S )z) Return the sizes to test for wavelet w. fulld   e   )r      i    iP  )r   i  )r   listrange)w
data_sizess     r   _get_data_sizesr"      s?    6%S//**((()

 &
r   c                     t           dk    r@dt          j        dd          t          j        dd          t          j        dd          f}ndt          j        dd          f}|S )z* Return the scales to test for wavelet w. r               )r   nparange)r    scaless     r   _get_scalesr+   #   sT    6RYq!__bi1ooryAGRYq!__%Mr   c                  6   t          j        d          }  |             }t          j                            d          }d}d}|                                 	 t          D ]}t          j                    5  t          j	        dt                     t          j        |          }d d d            n# 1 swxY w Y   t          j        |t          j        ddg          k    d          rD|                    d	|t!          |j                  z   d
z   t!          |j                  z              nx|dk    r\|                    d	|t!          |j                  z   d
z   t!          |j                  z   d
z   t!          |j                  z              n|                    d	|           d}|                    |          }t          j        |                    d                    }	t/          ||	||           t1          |          D ]e}
|                    |
          }|                    d|           t5          |          D ](}t7          ||||          }t9          ||||||           )f	 |                                 d S # |                                 w xY w)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FutureWarningr   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_psir1   r    	mlab_coderesr3   Nr4   r*   coefss                 r   test_accuracy_pymatbridge_cwtrX   ,   s     !566F688DY""4((FGKJJLLL 	N 	NG(** 4 4%h>>>*7334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 vw"(FF+;"<"<<1EEE 6!!)WS9N5O5O-OPS-STWXYXjTkTk-kllllF""!!)WS5F5F-Fs-J3qOdKeKe-efi-ijmno  oA  kB  kB  .B  C  C  C  C!!)W5554I--	**C*T..u5566C3===$Q'' N N||A!!&$///)!nn N NF24&$OOE#D!VUGWMMMMNN	N, 					s1   J 4/B/#J /B3	3J 6B3	7F4J Jc                     t           j                            d          } d}d}d}t          D ]5}t	          j                    5  t	          j        dt                     t          j	        |          }t          j	        |t           j
                  }d d d            n# 1 swxY w Y   t          |          }t          ||||           t          |          D ]}|                     |          }	|	                    t           j
                  }
d}t!          |          D ]@}|dz  }t#          |	||          }t%          |	|||||           t%          |
|||||           A7d S )	Nr-   gV瞯<gh㈵>r.   r/   )dtyper   r$   )r(   r7   r8   r:   r;   r<   r=   r>   r   r?   float32_load_matlab_result_psirJ   r"   rK   astyper+   _load_matlab_resultrM   )rQ   rR   	epsilon32rS   r1   r    w32r3   rV   r4   data32scales_countr*   rW   s                 r   test_accuracy_precomputed_cwtrc   P   s    Y""4((FGIK P P$&& 	C 	C!(M:::&w//A(rzBBBC	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C &g..AsG[999 ## 	P 	PA<<??D[[,,FL%a.. P P!+D'<HHaIIIVUGYOOOO	P		PP Ps   ABB"	%B"	c                     |                     d|           d}|                    |          }|d         st          d          t          j        |                    d                    }|S )z Compute 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.rW   )rB   rG   RuntimeErrorr(   rH   rI   )r4   r1   r*   rP   rT   rU   rW   s          r   rL   rL   l   s|     	h'''5I
--	
"
"Cy> K J K K 	K Jt((1122ELr   c                     t          |           }d                    t          |          |t          |          dg          }|t          vrt	          d| d| d|           t          |         }|S )" Load the precomputed result.
    _rW   z0Precompted Matlab result not found for wavelet: z, mode: z, size: )lenjoinrC   r   KeyError)r4   r1   r*   rV   	coefs_keyrW   s         r   r^   r^   }   s     	D		A#f++wA@AAI///44 4 &4 4014 45 5 	5 #9-ELr   c                     d                     | dg          }|t          vr"t          d                    |                     t          |         }|S )rh   ri   r3   z8Precompted Matlab psi result not found for wavelet: {0}})rk   r   rl   format)r1   psi_keyr3   s      r   r\   r\      sY     hh'((G---6'??$ $ 	$ !
)CJr   c           	      Z   t          j        | ||          \  }}t          j        |          }||z
  }t          j        t          j        t          j        t          j        |          |z                                }	d||t          |           |	fz  }
t          |	|k     |
           d S )Nz@[RMS > EPSILON] for Scale: %s, Wavelet: %s, Length: %d, rms=%.3gmsg)	r   cwtr(   conjrealsqrtmeanrj   r   )r4   r    r*   rW   r1   rR   
coefs_pywtfreqerrrmsrs   s              r   rM   rM      s    xfa00J
 GENNE u
C
'"'"'"'#,,"45566
7
7C"%+Wc$ii$EFCC'Ms######r   c           	      `   |                      d          \  }}|                                |                                z
  }t          j        t          j        t          j        t          j        |          |z                                }d| d|d}t          ||k     |           d S )Ni   )lengthz[RMS > EPSILON] for  Wavelet: z, rms=z.3grr   )wavefunflattenr(   rv   rw   rx   ru   r   )	r    r3   r1   rR   psi_pywtxr{   r|   rs   s	            r   rJ   rJ      s    ))4)((KHa 



s{{}}
,C
'"'"'"'#,,"45566
7
7C
C7
C
C#
C
C
CCC'Ms######r   )__doc__r;   numpyr(   r5   numpy.testingr   r   pywt._pytestr   r   r   r   familiessumr:   r"   r+   markslowrX   rc   rL   r^   r\   rM   rJ   r   r   r   <module>r      s}          ! ! ! ! ! !             D3999992>>        D P P  P4  "
 
 
	 	 	$ $ $$	$ 	$ 	$ 	$ 	$r   