
    i0                     V   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eD  cg c]  }  ej                  |        c} 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yc c} w )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                 T    t         dk(  rt        t        dd            g dz   }|S d}|S )z) Return the sizes to test for wavelet w. fulld   e   )r      i    iP  )r   i  )r   listrange)w
data_sizess     d/var/www/html/BatchJob/venv/lib/python3.12/site-packages/pywt/tests/test_matlab_compatibility_cwt.py_get_data_sizesr      s7    6%S/*()
  &
    c                     t         dk(  rDdt        j                  dd      t        j                  dd      t        j                  dd      f}|S 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$   #   sX    6RYYq!_bii1oryyAG M RYYq!_%Mr   c                     t        j                  d      }  |        }t        j                  j	                  d      }d}d}|j                          	 t        D ]  }t        j                         5  t        j                  dt               t        j                  |      }d d d        t        j                  |t        j                  ddg      k(  d      rB|j                  d	|t!        j"                        z   d
z   t!        |j$                        z          nr|dk(  r[|j                  d	|t!        j&                        z   d
z   t!        |j"                        z   d
z   t!        |j$                        z          n|j                  d	|       d}|j)                  |      }t        j*                  |j-                  d            }	t/        |	||       t1        |      D ]S  }
|j3                  |
      }|j                  d|       t5        |      D ]   }t7        ||||      }t9        ||||||       " U  	 |j;                          y # 1 sw Y   xY w# |j;                          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FutureWarningpywt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_psir*   r   	mlab_coderesr,   Nr-   r#   coefss                 r   test_accuracy_pymatbridge_cwtrR   ,   s%      !56F8DYY""4(FGKJJL 	NG((* 4%%h>**734 vvw"((FF+;"<<1E!!)WS9N9N5O-OPS-STWXYXjXjTk-klF"!!)WS5F-Fs-J3qOdOdKe-efi-ijmno  oA  oA  kB  .B  C!!)W54I--	*C**T..u56C3=$Q' N||A!!&$/)!n NF24&$OE#D!VUGWMNN	N, 			+4 4* 			s%   I /0IFI I	
I I$c                     t         j                  j                  d      } d}d}d}t        D ]  }t	        j
                         5  t	        j                  dt               t        j                  |      }t        j                  |t         j                        }d d d        t        |      }t        |||       t        |      D ]v  }| j                  |      }	|	j                  t         j                        }
d}t!        |      D ]4  }|dz  }t#        |	||      }t%        |	|||||       t%        |
||||       6 x  y # 1 sw Y   xY w)	Nr&   gV瞯<gh㈵>r'   r(   )dtyper   r   )r!   r0   r1   r3   r4   r5   r6   r7   r8   r9   float32_load_matlab_result_psirD   r   rE   astyper$   _load_matlab_resultrG   )rK   rL   	epsilon32rM   r*   r   w32r,   rP   r-   data32scales_countr#   rQ   s                 r   test_accuracy_precomputed_cwtr]   P   s8    YY""4(FGIK P$$& 	C!!(M:&&w/A((rzzBC	C &g.AsG[9 # 	PA<<?D[[,FL%a. P!+D'<HaIVUGYO	P		PP	C 	Cs   AEE	c                     |j                  d|       d}|j                  |      }|d   st        d      t        j                  |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.rQ   )r<   rA   RuntimeErrorr!   rB   rC   )r-   r*   r#   rJ   rN   rO   rQ   s          r   rF   rF   l   sc     	h'5I
--	
"Cy> J K 	K JJt((12ELr   c                     t        |       }dj                  t        |      |t        |      dg      }|t        vrt	        d| d| d|       t        |   }|S )" Load the precomputed result.
    _rQ   z0Precompted Matlab result not found for wavelet: z, mode: z, size: )lenjoinr=   r   KeyError)r-   r*   r#   rP   	coefs_keyrQ   s         r   rX   rX   }   sl     	D	A#f+wA@AI//>ixxxs45 	5 #9-ELr   c                     dj                  | dg      }|t        vrt        dj                  |             t        |   }|S )rb   rc   r,   z8Precompted Matlab psi result not found for wavelet: {0}})re   r   rf   format)r*   psi_keyr,   s      r   rV   rV      sL     hh'(G--6'?$ 	$ !
)CJr   c           	      V   t        j                  | ||d      \  }}t        j                  |      }||z
  }t        j                  t        j
                  t        j                  t        j                  |      |z                    }	d||t        |       |	fz  }
t        |	|k  |
       y )N
   )	precisionz@[RMS > EPSILON] for Scale: %s, Wavelet: %s, Length: %d, rms=%.3gmsg)	r8   cwtr!   conjrealsqrtmeanrd   r   )r-   r   r#   rQ   r*   rL   
coefs_pywtfreqerrrmsro   s              r   rG   rG      s    xxfa2>J
 GGENE u
C
''"''"''"''#,"456
7C"%+Wc$i$EFCC'Ms#r   c           	      D   | j                  d      \  }}|j                         |j                         z
  }t        j                  t        j                  t        j
                  t        j                  |      |z                    }d| d|d}t        ||k  |       y )Ni   )lengthz[RMS > EPSILON] for  Wavelet: z, rms=z.3grn   )wavefunflattenr!   rr   rs   rt   rq   r   )	r   r,   r*   rL   psi_pywtxrw   rx   ro   s	            r   rD   rD      s    ))4)(KHa 


s{{}
,C
''"''"''"''#,"456
7C*7)6#c
CCC'Ms#r   )__doc__r4   numpyr!   r.   numpy.testingr   r8   pywt._pytestr   r   r   r   familiessumwavelistr3   r   r$   markslowrR   r]   rF   rX   rV   rG   rD   )names   0r   <module>r      s       !   D9d#92>   D P  P4"
	$$	$e :s   B&