a
    ˆù»jÐÿ  ã                   @   sL  d dl Z d dlZd dlmZmZmZmZmZm	Z	m
Z
 d dlZd dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlm Z  d d	l!m"Z" d d
l#m$Z% d dl#m&Z' d dl#m(Z) G dd„ dƒZ*G dd„ dƒZ+G dd„ dƒZ,G dd„ dƒZ-G dd„ dƒZ.G dd„ dƒZ/G dd„ dƒZ0G dd„ dƒZ1dS )é    N)Úassert_Úassert_approx_equalÚassert_allcloseÚassert_array_equalÚassert_equalÚassert_array_almost_equal_nulpÚsuppress_warnings)Úraises)Úsignal)ÚfftfreqÚrfftfreqÚfftÚirfft)Ú	trapezoid)ÚperiodogramÚwelchÚlombscargleÚ	coherenceÚspectrogramÚ
check_COLAÚ
check_NOLA)Úhann)Ú_spectral_helper)Ústft_compare)Úistft_compare)Úcsd_comparec                   @   sè   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zejjejdkdd�dd„ ƒZejjejdkdd�dd„ ƒZdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0S )1ÚTestPeriodogramc                 C   sj   t  d¡}d|d< t|ƒ\}}t|t  ddd¡ƒ t  d¡}d|d< |d  d  < |d }t||ƒ d S )	Né   é   r   ç      à?é	   éÿÿÿÿç       @é   ©ÚnpÚzerosr   r   ÚlinspaceÚones©ÚselfÚxÚfÚpÚq© r/   úFE:\soccer\ml_env\Lib\site-packages\scipy/signal/tests/test_spectral.pyÚtest_real_onesided_even   s    

z'TestPeriodogram.test_real_onesided_evenc                 C   s^   t  d¡}d|d< t|ƒ\}}t|t  d¡d ƒ t  d¡}d|d< |d9 }t||dd	� d S )
Né   r   r   ç       @ç      .@r#   çÁ?çVçž¯Ò<©Úatol)r%   r&   r   r   Úaranger(   r)   r/   r/   r0   Útest_real_onesided_odd$   s    

z&TestPeriodogram.test_real_onesided_oddc                 C   sT   t  d¡}d|d< t|dd�\}}t|tddƒƒ t  dd¡}d|d< t||ƒ d S )Nr   r   r   F©Úreturn_onesidedç      ð?ç      °?)r%   r&   r   r   r   Úfullr)   r/   r/   r0   Útest_real_twosided.   s    
z"TestPeriodogram.test_real_twosidedc                 C   sX   t  d¡}d|d< t|dd�\}}t|dd�\}}t|t  ddd¡ƒ t||d	 ƒ d S )
Nr   r   r   Úspectrum©ÚscalingÚdensityr   r    g      0@)r%   r&   r   r   r'   )r*   r+   r,   r-   Úgr.   r/   r/   r0   Útest_real_spectrum7   s    
z"TestPeriodogram.test_real_spectrumc                 C   sn   t jdtd�}d|d< t|ƒ\}}t|t  ddd¡ƒ t  d¡}d|d< |d  d  < |d	 }t||ƒ d S )
Nr   ©Údtyper   r   r   r    r!   r"   r#   )r%   r&   Úintr   r   r'   r(   r)   r/   r/   r0   Útest_integer_even?   s    
z!TestPeriodogram.test_integer_evenc                 C   sb   t jdtd�}d|d< t|ƒ\}}t|t  d¡d ƒ t  d¡}d|d< |d9 }t||d	d
� d S )Nr2   rG   r   r   r3   r4   r#   r5   r6   r7   )r%   r&   rI   r   r   r9   r(   r)   r/   r/   r0   Útest_integer_oddJ   s    
z TestPeriodogram.test_integer_oddc                 C   sX   t jdtd�}d|d< t|dd�\}}t|tddƒƒ t  dd¡}d|d< t||ƒ d S )	Nr   rG   r   r   Fr;   r=   r>   )r%   r&   rI   r   r   r   r?   r)   r/   r/   r0   Útest_integer_twosidedT   s    z%TestPeriodogram.test_integer_twosidedc                 C   sX   t  dt j¡}d|d< t|dd�\}}t|tddƒƒ t  dd¡}d|d< t||ƒ d S )Nr   ù      ð?       @r   Fr;   r=   ç      Ô?)r%   r&   Ú
complex128r   r   r   r?   r)   r/   r/   r0   Útest_complex]   s    zTestPeriodogram.test_complexc                 C   s   t ttt dtj¡dd� d S )Né   ÚfoorB   )Úassert_raisesÚ
ValueErrorr   r%   r&   rO   ©r*   r/   r/   r0   Útest_unk_scalingf   s    ÿz TestPeriodogram.test_unk_scalingl        zOn some 32-bit tolerance issue)Úreasonc                 C   s´   t jdt jd�}| d¡}d|d d …d d …df< t|ƒ\}}t|jdƒ t|ddd d …f |ddd d …f dƒ t|ddd d …f ƒ\}}t|t jd d …f |dd d …f dƒ d S )	Né   rG   ©é   r   é
   r=   r   ©rZ   r   é   r   é<   )	r%   r&   Úfloat64Úreshaper   r   Úshaper   Únewaxis©r*   r+   r,   r-   Zf0Úp0r/   r/   r0   Útest_nd_axis_m1j   s    
(zTestPeriodogram.test_nd_axis_m1c                 C   sª   t jdt jd�}| d¡}d|dd d …d d …f< t|dd�\}}t|jdƒ t|d d …ddf |d d …ddf d	ƒ t|d d …ddf ƒ\}}t||d d …ddf ƒ d S )
NrX   rG   ©r[   rZ   r   r=   r   ©Úaxis©r]   rZ   r   r   r^   )r%   r&   r_   r`   r   r   ra   r   rc   r/   r/   r0   Útest_nd_axis_0x   s    
(zTestPeriodogram.test_nd_axis_0c                 C   sr   t  d¡}d|d< t|ddƒ\}}t dd¡}t|d|ƒ\}}t||ƒ t||ƒ t dd¡}ttt|d|ƒ d S )Nr   r   r   r[   r   é    )r%   r&   r   r
   Ú
get_windowr   rS   rT   ©r*   r+   r,   r-   ÚwinÚfeZpeÚwin_errr/   r/   r0   Útest_window_external†   s    


ÿz$TestPeriodogram.test_window_externalc                 C   sf   t  d¡}d|d< t|ƒ\}}t|dd�\}}t||d d d… ƒ t||d d d… ƒ t|jdƒ d S )Nr   r   r   rk   ©ÚnfftrZ   )é   )r%   r&   r   r   r   ra   )r*   r+   r,   r-   ÚfpÚppr/   r/   r0   Útest_padded_fft’   s    
zTestPeriodogram.test_padded_fftc                 C   s\   t g ƒ\}}t|jdƒ t|jdƒ dD ].}t t |¡ƒ\}}t|j|ƒ t|j|ƒ q(d S ©N©r   ©ry   ©é   r   ©r   é   rZ   )r   r   ra   r%   Úempty©r*   r,   r-   ra   r/   r/   r0   Útest_empty_input›   s    z TestPeriodogram.test_empty_inputc                 C   s<   dD ]2}t t |¡dd�\}}t|j|ƒ t|j|ƒ qd S ©N©r{   r}   r   rg   )r   r%   r   r   ra   ©r*   ra   r,   r-   r/   r/   r0   Útest_empty_input_other_axis¤   s    z+TestPeriodogram.test_empty_input_other_axisc                 C   sn   t  d¡}d|d< t|dd�\}}t|t  ddd¡ƒ t  d¡}d|d< |d  d	  < |d
 }t||ƒ d S )Né   r   r   r   rr   r   r    r!   r"   r#   r$   r)   r/   r/   r0   Útest_short_nfftª   s    

zTestPeriodogram.test_short_nfftc                 C   sn   t  d¡}d|d< t|dd�\}}t|t  ddd¡ƒ t  d¡}d|d< |d  d  < |d	 }t||ƒ d S )
Nr   r   r   rr   r   r    r!   r"   r#   r$   r)   r/   r/   r0   Útest_nfft_is_xshapeµ   s    

z#TestPeriodogram.test_nfft_is_xshapec                 C   s~   t  dd¡}d|d< t|ƒ\}}t|t  ddd¡ƒ t  dd¡}d|d< |d  d  < |d	 }t||ƒ t|j|jkƒ d S )
Nr   r,   r   r   r   r    r!   r"   r#   )r%   r&   r   r   r'   r(   r   rH   r)   r/   r/   r0   Útest_real_onesided_even_32À   s    
z*TestPeriodogram.test_real_onesided_even_32c                 C   sr   t  dd¡}d|d< t|ƒ\}}t|t  d¡d ƒ t  dd¡}d|d< |d9 }t||d	d
� t|j|jkƒ d S )Nr2   r,   r   r   r3   r4   r#   r5   çH¯¼šò×z>r7   )r%   r&   r   r   r9   r(   r   rH   r)   r/   r/   r0   Útest_real_onesided_odd_32Ì   s    z)TestPeriodogram.test_real_onesided_odd_32c                 C   sh   t  dd¡}d|d< t|dd�\}}t|tddƒƒ t  ddd¡}d|d< t||ƒ t|j|jkƒ d S )	Nr   r,   r   r   Fr;   r=   r>   ©r%   r&   r   r   r   r?   r   rH   r)   r/   r/   r0   Útest_real_twosided_32×   s    
z%TestPeriodogram.test_real_twosided_32c                 C   sh   t  dd¡}d|d< t|dd�\}}t|tddƒƒ t  ddd	¡}d|d< t||ƒ t|j|jkƒ d S )
Nr   ÚFrM   r   Fr;   r=   rN   r,   rŒ   r)   r/   r/   r0   Útest_complex_32á   s    
zTestPeriodogram.test_complex_32c                 C   s^   t  d¡}d|d< t dd¡}d}tt|d�� t||d� W d   ƒ n1 sP0    Y  d S )	Nr   r   r   r   r[   zOthe size of the window must be the same size of the input on the specified axis©Úmatch©Úwindow)r%   r&   r
   rl   rS   rT   r   )r*   r+   rn   Zexpected_msgr/   r/   r0   Útest_shorter_window_errorë   s    
z)TestPeriodogram.test_shorter_window_errorN)Ú__name__Ú
__module__Ú__qualname__r1   r:   r@   rF   rJ   rK   rL   rP   rV   ÚpytestÚmarkZskipifÚsysÚmaxsizere   rj   rq   rw   r�   r…   r‡   rˆ   r‰   r‹   r�   r�   r”   r/   r/   r/   r0   r      s<   
	
		þ

þ

		

r   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAS )BÚ	TestWelchc                 C   s`   t  d¡}d|d< d|d< t|dd�\}}t|t  ddd¡ƒ t  g d¢¡}t||d	d	d
� d S ©Nr   r   r   r#   ©Únpersegr   r~   ©çiKGUUµ?gÝæSè8ŽÃ?ç#¬ÇqÌ?r¢   ç#¬Çq¼?rŠ   ©r8   Úrtol©r%   r&   r   r   r'   Úarrayr)   r/   r/   r0   r1   ö   s    
z!TestWelch.test_real_onesided_evenc                 C   s`   t  d¡}d|d< d|d< t|dd�\}}t|t  d¡d ƒ t  g d	¢¡}t||d
d
d� d S ©Nr   r   r   r#   r    rž   ç      @ç      "@©g•„Ÿ“9ñ¿?gµ³¿ÙýÍ?çp£0ÚÅ?r¬   r¬   rŠ   r¤   )r%   r&   r   r   r9   r§   r)   r/   r/   r0   r:      s    
z TestWelch.test_real_onesided_oddc                 C   s^   t  d¡}d|d< d|d< t|ddd�\}}t|tddƒƒ t  g d¢¡}t||d	d	d
� d S ©Nr   r   r   r#   F©rŸ   r<   r=   ©r¡   çÝæSè8Ž³?r£   r£   r£   r£   r£   r°   rŠ   r¤   )r%   r&   r   r   r   r§   r)   r/   r/   r0   r@   
  s    
zTestWelch.test_real_twosidedc                 C   sb   t  d¡}d|d< d|d< t|ddd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� d S ©Nr   r   r   r#   rA   )rŸ   rC   r   r~   )g      �?g¥-UU�?ç.i÷qUU¥?r²   g¥-UU•?rŠ   r¤   r¦   r)   r/   r/   r0   rF     s    
zTestWelch.test_real_spectrumc                 C   sd   t jdtd�}d|d< d|d< t|dd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� d S ©Nr   rG   r   r   r#   rž   r   r~   r    rŠ   r¤   )r%   r&   rI   r   r   r'   r§   r)   r/   r/   r0   Útest_integer_onesided_even  s    z$TestWelch.test_integer_onesided_evenc                 C   sd   t jdtd�}d|d< d|d< t|dd�\}}t|t  d¡d	 ƒ t  g d
¢¡}t||ddd� d S ©Nr   rG   r   r   r#   r    rž   r©   rª   r«   rŠ   r¤   )r%   r&   rI   r   r   r9   r§   r)   r/   r/   r0   Útest_integer_onesided_odd(  s    z#TestWelch.test_integer_onesided_oddc                 C   sb   t jdtd�}d|d< d|d< t|ddd�\}}t|tddƒƒ t  g d	¢¡}t||d
d
d� d S ©Nr   rG   r   r   r#   Fr®   r=   r¯   rŠ   r¤   )r%   r&   rI   r   r   r   r§   r)   r/   r/   r0   rL   2  s    zTestWelch.test_integer_twosidedc                 C   sb   t  dt j¡}d|d< d|d< t|ddd�\}}t|tddƒƒ t  g d¢¡}t||d	d	d
� d S ©Nr   rM   r   r#   Fr®   r=   )g&í>®ªªÚ?ç#¬ÇqØ?çnó)tÇá?rº   rº   rº   rº   r¹   rŠ   r¤   )r%   r&   rO   r   r   r   r§   r)   r/   r/   r0   rP   <  s    zTestWelch.test_complexc                 C   s    t ttt dtj¡ddd� d S ©NrQ   rR   )rC   rŸ   )rS   rT   r   r%   r&   rO   rU   r/   r/   r0   rV   F  s    ÿzTestWelch.test_unk_scalingc                 C   s>   t jdt jd�d }t|ddd�\}}t|t  |¡dd� d S ©Nr[   rG   ç{®Gáz¤?Zlinear©rŸ   Údetrendr6   r7   ©r%   r9   r_   r   r   Ú
zeros_like©r*   r+   r,   r-   r/   r/   r0   Útest_detrend_linearJ  s    zTestWelch.test_detrend_linearc                 C   s\   t jdt jd�d }t|ddd�\}}t|ddd„ d�\}}t||dd	� t||dd	� d S )
Nr[   rG   r½   Fr¾   c                 S   s   | S ©Nr/   ©r+   r/   r/   r0   Ú<lambda>R  ó    z.TestWelch.test_no_detrending.<locals>.<lambda>r6   r7   )r%   r9   r_   r   r   ©r*   r+   Úf1Úp1Úf2Úp2r/   r/   r0   Útest_no_detrendingO  s
    zTestWelch.test_no_detrendingc                 C   sB   t jdt jd�d }t|ddd„ d�\}}t|t  |¡dd� d S )	Nr[   rG   r½   c                 S   s   t j| dd�S ©NÚl)Útype©r
   r¿   ©Úsegr/   r/   r0   rÆ   Y  rÇ   z1TestWelch.test_detrend_external.<locals>.<lambda>r¾   r6   r7   rÀ   rÂ   r/   r/   r0   Útest_detrend_externalV  s
    ÿ
zTestWelch.test_detrend_externalc                 C   sL   t jdt jd�d }| d¡}t|ddd„ d�\}}t|t  |¡d	d
� d S )Né(   rG   r½   ©rZ   rZ   r[   r[   c                 S   s   t j| dd�S rÎ   rÑ   rÒ   r/   r/   r0   rÆ   `  rÇ   z7TestWelch.test_detrend_external_nd_m1.<locals>.<lambda>r¾   r6   r7   )r%   r9   r_   r`   r   r   rÁ   rÂ   r/   r/   r0   Útest_detrend_external_nd_m1\  s    
ÿ
z%TestWelch.test_detrend_external_nd_m1c                 C   s\   t jdt jd�d }| d¡}t  |dd¡}t|dddd	„ d
�\}}t|t  |¡dd� d S )NrX   rG   r½   rY   rZ   r   r[   c                 S   s   t j| ddd�S ©Nr   rÏ   )rh   rÐ   rÑ   rÒ   r/   r/   r0   rÆ   h  rÇ   z6TestWelch.test_detrend_external_nd_0.<locals>.<lambda>©rŸ   rh   r¿   r6   r7   )r%   r9   r_   r`   Úmoveaxisr   r   rÁ   rÂ   r/   r/   r0   Útest_detrend_external_nd_0c  s    
ÿ
z$TestWelch.test_detrend_external_nd_0c                 C   s²   t jdt jd�d }| d¡}t|dd�\}}t|jdƒ t|ddd d …f |d	dd d …f d
d
d� t|ddd d …f dd�\}}t|t jd d …f |d	d d …f d
d
d� d S ©NrX   rG   r½   rY   r[   rž   r\   r   r   ç‚vIhÂ%<=r¤   )	r%   r9   r_   r`   r   r   ra   r   rb   rc   r/   r/   r0   re   k  s    
,zTestWelch.test_nd_axis_m1c                 C   s¨   t jdt jd�d }| d¡}t|ddd�\}}t|jdƒ t|d d …ddf |d d …d	df d
d
d� t|d d …ddf dd�\}}t||d d …d	df d
d
d� d S ©NrX   rG   r½   rf   r[   r   )rŸ   rh   ri   r   rÝ   r¤   rž   )r%   r9   r_   r`   r   r   ra   r   rc   r/   r/   r0   rj   t  s    
,zTestWelch.test_nd_axis_0c                 C   s²   t  d¡}d|d< d|d< t|dddd�\}}t dd¡}t|d|d d�\}}t||ƒ t||ƒ t|jdƒ t|jdƒ tt	t|d|d	d� t dd
¡}tt	t|d|d d� d S )Nr   r   r   r#   r[   r   rž   ©r~   rQ   rk   )
r%   r&   r   r
   rl   r   r   ra   rS   rT   rm   r/   r/   r0   rq   }  s"    


ÿÿzTestWelch.test_window_externalc                 C   s\   t g ƒ\}}t|jdƒ t|jdƒ dD ].}t t |¡ƒ\}}t|j|ƒ t|j|ƒ q(d S rx   )r   r   ra   r%   r   r€   r/   r/   r0   r�   Ž  s    zTestWelch.test_empty_inputc                 C   s<   dD ]2}t t |¡dd�\}}t|j|ƒ t|j|ƒ qd S r‚   )r   r%   r   r   ra   r„   r/   r/   r0   r…   —  s    z%TestWelch.test_empty_input_other_axisc           
      C   s¦   t  d¡}d|d< tƒ �B}d}| t|¡ t|dd�\}}t|ddd�\}}W d   ƒ n1 s`0    Y  t|dd	�\}}	t||ƒ t||	ƒ t||ƒ t||	ƒ d S ©
Nr#   r   r   zBnperseg = 256 is greater than input length  = 8, using nperseg = 8r   r’   é   ©r“   rŸ   rž   )r%   r&   r   ÚfilterÚUserWarningr   r   ©
r*   r+   ÚsupÚmsgr,   r-   rÉ   rÊ   rË   rÌ   r/   r/   r0   Útest_short_data�  s    
0


zTestWelch.test_short_datac              	   C   sF   t ttt d¡dt g d¢¡ƒ t ttt d¡dt d¡ d¡ƒ d S ©NrQ   r   )r   r   r   r   r   r]   )rZ   r|   )rS   rT   r   r%   r&   r§   r9   r`   rU   r/   r/   r0   Útest_window_long_or_nd­  s     ÿz TestWelch.test_window_long_or_ndc                 C   sJ   t  d¡}d|d d d…< t|ddd�\}}t  g d¢¡}t||dd	� d S ©
Né@   r   r#   r   rQ   ©rŸ   Únoverlap)	r   gUUUUUUµ?çUUUUUUÕ?çš™™™™™É?rï   rð   rï   rð   gUUUUUUÅ?gê-�™—q=r7   )r%   r&   r   r§   r   r)   r/   r/   r0   Útest_nondefault_noverlap²  s
    
z"TestWelch.test_nondefault_noverlapc                 C   s   t ttt d¡ddddƒ d S ©NrQ   r   r   rZ   é   )rS   rT   r   r%   r&   rU   r/   r/   r0   Útest_bad_noverlapº  s    zTestWelch.test_bad_noverlapc                 C   s   t ttt d¡ddd� d S ©Né   r|   rQ   )rs   rŸ   )rS   rT   r   r%   r(   rU   r/   r/   r0   Útest_nfft_too_short½  s    zTestWelch.test_nfft_too_shortc                 C   st   t  dd¡}d|d< d|d< t|dd�\}}t|t  ddd¡ƒ t  g d	¢d¡}t||d
d
d� t|j|jkƒ d S ©Nr   r,   r   r   r#   rž   r   r~   r    rŠ   r¤   )r%   r&   r   r   r'   r§   r   rH   r)   r/   r/   r0   r‰   À  s    
ÿz$TestWelch.test_real_onesided_even_32c                 C   st   t  dd¡}d|d< d|d< t|dd�\}}t|t  d¡d	 ƒ t  g d
¢d¡}t||ddd� t|j|jkƒ d S ©Nr   r,   r   r   r#   r    rž   r©   rª   )gâÝx:ñ¿?gyÑ²IÙýÍ?r¬   g´wã0ÚÅ?r¬   rŠ   r¤   )r%   r&   r   r   r9   r§   r   rH   r)   r/   r/   r0   r‹   Ë  s    
ÿz#TestWelch.test_real_onesided_odd_32c                 C   sr   t  dd¡}d|d< d|d< t|ddd�\}}t|tddƒƒ t  g d	¢d¡}t||d
d
d� t|j|jkƒ d S ©Nr   r,   r   r   r#   Fr®   r=   r¯   rŠ   r¤   ©r%   r&   r   r   r   r§   r   rH   r)   r/   r/   r0   r�   Ö  s    
þzTestWelch.test_real_twosided_32c                 C   s„   t  dd¡}d|d< d|d< t|ddd�\}}t|tddƒƒ t  g d	¢d
¡}t||ddd� t|j|jkd|j› d|j› �ƒ d S ©Nr   rŽ   rM   r   r#   Fr®   r=   )gµ%‚£ªªÚ?çAŠ2ÇqØ?çŒd°^Çá?rþ   gàºæ~Çá?rþ   rþ   rý   r,   rŠ   r¤   zdtype mismatch, ú, rû   r)   r/   r/   r0   r�   â  s    
ÿÿzTestWelch.test_complex_32c                 C   sÊ   t  d¡}d}t|dƒd |d d … }|d  d9  < t|d|d�\}}t|d	|d�\}}t||ƒ t||ƒ d
}t|dƒd |d d … }t|d|d�\}}t|d	|d�\}}t||ƒ t||ƒ d S ©Nrö   é   r=   rZ   r   r!   r~   ©rŸ   rs   r]   é   )r%   r&   r   r   r   )r*   r+   rs   r,   ÚfoddÚ_Úfevenr/   r/   r0   Útest_padded_freqsî  s    



zTestWelch.test_padded_freqsc                 C   sÊ   d}d}t |d ƒ}d}t || | ƒ}t |¡| }|t dtj | | ¡ }dD ]n}t||||dd�\}	}
t||||d	d�\}}t|
| |d d
 ƒ tt t||ƒ¡|t d¡ d dd� qVd S )NrX   g     ˆÃ@r[   é,  rZ   )r   Úbartlett)Útukeyçš™™™™™¹?ZflattoprA   )ÚfsrŸ   r“   rC   rD   r"   gü©ñÒMbP?©r¥   )	rI   r%   r9   ÚsinÚpir   r   Úsqrtr   )r*   ÚAr  rŸ   ZfsigÚiiÚttr+   r“   r  Zp_specÚfreqZp_densr/   r/   r0   Útest_window_correction   s$    
ÿ

ÿ
 ÿz TestWelch.test_window_correctionc           	      C   s¢   t j d¡ t j d¡}t|ƒ\}}tdƒD ]p}dgd }d||< | |¡}t||d�\}}t|||j d�\}}t|| 	¡ |d� t|| 	¡ ||j d� q,d S )NéÒ  é   r|   r   r!   rg   ©Úerr_msg)
r%   ÚrandomÚseedÚrandnr   Úranger`   Úndimr   Úsqueeze)	r*   Úx_flatr  Zp_flatÚaÚnewshaper+   Zp_plusZp_minusr/   r/   r0   Útest_axis_rolling  s    

zTestWelch.test_axis_rollingc                 C   st   t  d¡}d|d< d|d< t|ddd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� ttt|ddd� d S )Nr   r   r   r#   Úmedian)rŸ   Úaverager   r~   )r  gš™™™™™©?ç        g&EÈ    9r&  rŠ   r¤   zunrecognised-average)r%   r&   r   r   r'   r§   rS   rT   r)   r/   r/   r0   Útest_average'  s    

ÿzTestWelch.test_averageN)#r•   r–   r—   r1   r:   r@   rF   r´   r¶   rL   rP   rV   rÃ   rÍ   rÔ   r×   rÛ   re   rj   rq   r�   r…   rè   rê   rñ   rô   r÷   r‰   r‹   r�   r�   r  r  r#  r'  r/   r/   r/   r0   rœ   õ   s@   







			rœ   c                   @   s  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAS )BÚTestCSDc                 C   s\   t  d¡}t  d¡}t  ddd¡}t jdt jd�}t||dd�\}}t||ƒ t||ƒ d S )Nr#   rö   r   r   ró   rG   rž   ©r%   r&   r'   rO   Úcsdr   ©r*   r+   Úyr,   ÚcrÉ   Úc1r/   r/   r0   Útest_pad_shorter_x5  s    


zTestCSD.test_pad_shorter_xc                 C   s\   t  d¡}t  d¡}t  ddd¡}t jdt jd�}t||dd�\}}t||ƒ t||ƒ d S )Nrö   r#   r   r   ró   rG   rž   r)  r+  r/   r/   r0   Útest_pad_shorter_y@  s    


zTestCSD.test_pad_shorter_yc                 C   sb   t  d¡}d|d< d|d< t||dd�\}}t|t  ddd¡ƒ t  g d¢¡}t||d	d	d
� d S r�   ©r%   r&   r*  r   r'   r§   r)   r/   r/   r0   r1   K  s    
zTestCSD.test_real_onesided_evenc                 C   sb   t  d¡}d|d< d|d< t||dd�\}}t|t  d¡d ƒ t  g d	¢¡}t||d
d
d� d S r¨   )r%   r&   r*  r   r9   r§   r)   r/   r/   r0   r:   U  s    
zTestCSD.test_real_onesided_oddc                 C   s`   t  d¡}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d¢¡}t||d	d	d
� d S r­   )r%   r&   r*  r   r   r§   r)   r/   r/   r0   r@   _  s    
zTestCSD.test_real_twosidedc                 C   sd   t  d¡}d|d< d|d< t||ddd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� d S r±   r1  r)   r/   r/   r0   rF   i  s    
zTestCSD.test_real_spectrumc                 C   sf   t jdtd�}d|d< d|d< t||dd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� d S r³   )r%   r&   rI   r*  r   r'   r§   r)   r/   r/   r0   r´   s  s    z"TestCSD.test_integer_onesided_evenc                 C   sf   t jdtd�}d|d< d|d< t||dd�\}}t|t  d¡d	 ƒ t  g d
¢¡}t||ddd� d S rµ   )r%   r&   rI   r*  r   r9   r§   r)   r/   r/   r0   r¶   }  s    z!TestCSD.test_integer_onesided_oddc                 C   sd   t jdtd�}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d	¢¡}t||d
d
d� d S r·   )r%   r&   rI   r*  r   r   r§   r)   r/   r/   r0   rL   ‡  s    zTestCSD.test_integer_twosidedc                 C   sd   t  dt j¡}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d¢¡}t||d	d	d
� d S r¸   )r%   r&   rO   r*  r   r   r§   r)   r/   r/   r0   rP   ‘  s    zTestCSD.test_complexc                 C   s,   t ttt dtj¡t dtj¡ddd� d S r»   )rS   rT   r*  r%   r&   rO   r(   rU   r/   r/   r0   rV   ›  s    ÿzTestCSD.test_unk_scalingc                 C   s@   t jdt jd�d }t||ddd�\}}t|t  |¡dd� d S r¼   ©r%   r9   r_   r*  r   rÁ   rÂ   r/   r/   r0   rÃ   Ÿ  s    zTestCSD.test_detrend_linearc                 C   s`   t jdt jd�d }t||ddd�\}}t||ddd„ d�\}}t||dd	� t||dd	� d S )
Nr[   rG   r½   Fr¾   c                 S   s   | S rÄ   r/   rÅ   r/   r/   r0   rÆ   §  rÇ   z,TestCSD.test_no_detrending.<locals>.<lambda>r6   r7   )r%   r9   r_   r*  r   rÈ   r/   r/   r0   rÍ   ¤  s
    zTestCSD.test_no_detrendingc                 C   sD   t jdt jd�d }t||ddd„ d�\}}t|t  |¡dd� d S )	Nr[   rG   r½   c                 S   s   t j| dd�S rÎ   rÑ   rÒ   r/   r/   r0   rÆ   ®  rÇ   z/TestCSD.test_detrend_external.<locals>.<lambda>r¾   r6   r7   r2  rÂ   r/   r/   r0   rÔ   «  s
    ÿ
zTestCSD.test_detrend_externalc                 C   sN   t jdt jd�d }| d¡}t||ddd„ d�\}}t|t  |¡d	d
� d S )NrÕ   rG   r½   rÖ   r[   c                 S   s   t j| dd�S rÎ   rÑ   rÒ   r/   r/   r0   rÆ   µ  rÇ   z5TestCSD.test_detrend_external_nd_m1.<locals>.<lambda>r¾   r6   r7   )r%   r9   r_   r`   r*  r   rÁ   rÂ   r/   r/   r0   r×   ±  s    
ÿ
z#TestCSD.test_detrend_external_nd_m1c                 C   s^   t jdt jd�d }| d¡}t  |dd¡}t||dddd	„ d
�\}}t|t  |¡dd� d S )NrX   rG   r½   rY   rZ   r   r[   c                 S   s   t j| ddd�S rØ   rÑ   rÒ   r/   r/   r0   rÆ   ½  rÇ   z4TestCSD.test_detrend_external_nd_0.<locals>.<lambda>rÙ   r6   r7   )r%   r9   r_   r`   rÚ   r*  r   rÁ   rÂ   r/   r/   r0   rÛ   ¸  s    

ÿ
z"TestCSD.test_detrend_external_nd_0c                 C   sÄ   t jdt jd�d }| d¡}t||dd�\}}t|jdƒ t|ddd d …f |d	dd d …f d
d
d� t|ddd d …f |ddd d …f dd�\}}t|t jd d …f |d	d d …f d
d
d� d S rÜ   )	r%   r9   r_   r`   r*  r   ra   r   rb   rc   r/   r/   r0   re   À  s    
,.zTestCSD.test_nd_axis_m1c                 C   sº   t jdt jd�d }| d¡}t||ddd�\}}t|jdƒ t|d d …ddf |d d …d	df d
d
d� t|d d …ddf |d d …ddf dd�\}}t||d d …d	df d
d
d� d S rÞ   )r%   r9   r_   r`   r*  r   ra   r   rc   r/   r/   r0   rj   É  s    
,.zTestCSD.test_nd_axis_0c              	   C   s¸   t  d¡}d|d< d|d< t||dddƒ\}}t dd¡}t||d|d d�\}}t||ƒ t||ƒ t|jdƒ t|jdƒ tt	t||d|d	d� t dd
¡}tt	t||d|d d� d S )Nr   r   r   r#   r[   r   rž   rß   rá   rk   )
r%   r&   r*  r
   rl   r   r   ra   rS   rT   rm   r/   r/   r0   rq   Ò  s"    



ÿ
ÿzTestCSD.test_window_externalc                 C   sü   t g t d¡ƒ\}}t|jdƒ t|jdƒ t t d¡g ƒ\}}t|jdƒ t|jdƒ dD ]6}t t |¡t |¡ƒ\}}t|j|ƒ t|j|ƒ q\t t d¡t d¡ƒ\}}t|jdƒ t|jdƒ t t d¡t d¡ƒ\}}t|jdƒ t|jdƒ d S )Nr[   ry   rz   )r~   r   )r*  r%   r&   r   ra   r   r(   r€   r/   r/   r0   r�   ã  s     zTestCSD.test_empty_inputc                 C   s°   dD ]:}t t |¡t |¡dd�\}}t|j|ƒ t|j|ƒ qt t d¡t d¡dd�\}}t|jdƒ t|jdƒ t t d¡t d¡dd�\}}t|jdƒ t|jdƒ d S )Nrƒ   r   rg   )r[   r[   r|   )r[   r   r   )r[   r   r|   )r*  r%   r   r   ra   r&   r„   r/   r/   r0   r…   ù  s    z#TestCSD.test_empty_input_other_axisc           
      C   s¬   t  d¡}d|d< tƒ �F}d}| t|¡ t||dd�\}}t||ddd�\}}W d   ƒ n1 sd0    Y  t||dd	�\}}	t||ƒ t||	ƒ t||ƒ t||	ƒ d S rà   )r%   r&   r   rã   rä   r*  r   rå   r/   r/   r0   rè     s    
2


zTestCSD.test_short_datac              
   C   sV   t ttt d¡t d¡dt g d¢¡ƒ t ttt d¡t d¡dt d¡ d¡ƒ d S ré   )	rS   rT   r*  r%   r&   r(   r§   r9   r`   rU   r/   r/   r0   rê     s    ÿÿzTestCSD.test_window_long_or_ndc                 C   sL   t  d¡}d|d d d…< t||ddd�\}}t  g d¢¡}t||dd	� d S rë   )r%   r&   r*  r§   r   r)   r/   r/   r0   rñ     s
    
z TestCSD.test_nondefault_noverlapc              	   C   s&   t ttt d¡t d¡ddddƒ d S rò   )rS   rT   r*  r%   r&   r(   rU   r/   r/   r0   rô   &  s    ÿzTestCSD.test_bad_noverlapc                 C   s$   t ttt d¡t d¡ddd� d S rõ   )rS   rT   r*  r%   r(   r&   rU   r/   r/   r0   r÷   *  s    ÿzTestCSD.test_nfft_too_shortc                 C   sv   t  dd¡}d|d< d|d< t||dd�\}}t|t  ddd¡ƒ t  g d	¢d¡}t||d
d
d� t|j|jkƒ d S rø   )r%   r&   r*  r   r'   r§   r   rH   r)   r/   r/   r0   r‰   .  s    
ÿz"TestCSD.test_real_onesided_even_32c                 C   sv   t  dd¡}d|d< d|d< t||dd�\}}t|t  d¡d	 ƒ t  g d
¢d¡}t||ddd� t|j|jkƒ d S rù   )r%   r&   r*  r   r9   r§   r   rH   r)   r/   r/   r0   r‹   9  s    
ÿz!TestCSD.test_real_onesided_odd_32c                 C   st   t  dd¡}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d	¢d¡}t||d
d
d� t|j|jkƒ d S rú   ©r%   r&   r*  r   r   r§   r   rH   r)   r/   r/   r0   r�   D  s    
þzTestCSD.test_real_twosided_32c                 C   s†   t  dd¡}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d	¢d
¡}t||ddd� t|j|jkd|j› d|j› �ƒ d S rü   r3  r)   r/   r/   r0   r�   P  s    
ÿÿzTestCSD.test_complex_32c                 C   sÜ   t  d¡}t  d¡}d}t|dƒd |d d … }|d  d9  < t||d|d�\}}t||d	|d�\}}t||ƒ t||ƒ d
}t|dƒd |d d … }t||d|d�\}}t||d	|d�\}}t||ƒ t||ƒ d S r   )r%   r&   r(   r   r*  r   )r*   r+   r,  rs   r,   r  r  r  r/   r/   r0   r  \  s    




zTestCSD.test_padded_freqsc                 C   s„   t j d¡}| ¡ }t||dddd�\}}t||dddd�\}}t||ƒ t||dddd�\}}t||dddd�\}}t||ƒ d S )Nrì   r#   ÚmeanF)rŸ   r%  r<   r$  )r%   r  r  Úcopyr*  r   )r*   r+   r,  r  Zp_sameZp_copiedr/   r/   r0   Útest_copied_datao  s     
ÿ

ÿ


ÿ

ÿ
zTestCSD.test_copied_dataN)#r•   r–   r—   r/  r0  r1   r:   r@   rF   r´   r¶   rL   rP   rV   rÃ   rÍ   rÔ   r×   rÛ   re   rj   rq   r�   r…   rè   rê   rñ   rô   r÷   r‰   r‹   r�   r�   r  r6  r/   r/   r/   r0   r(  4  s@   







		r(  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCoherencec                 C   sX   t j d¡}t  |¡}t  ddd¡}t  d¡}t||dd�\}}t||ƒ t||ƒ d S ©NrX   r   r   r]   r[   rž   )r%   r  r  r5  r'   r(   r   r   ©r*   r+   r,  r,   ÚCrÉ   ZC1r/   r/   r0   Útest_identical_input�  s    


z"TestCoherence.test_identical_inputc                 C   sT   t j d¡}| }t  ddd¡}t  d¡}t||dd�\}}t||ƒ t||ƒ d S r8  )r%   r  r  r'   r(   r   r   r9  r/   r/   r0   Útest_phase_shifted_inputŒ  s    

z&TestCoherence.test_phase_shifted_inputN)r•   r–   r—   r;  r<  r/   r/   r/   r0   r7  €  s   r7  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestSpectrogramc                 C   sh   t j d¡}d}d}d}d}t|||||ƒ\}}}t|||||ƒ\}	}
t||	ƒ tt j|dd�|
ƒ d S )Nr  r=   ©r
  g      Ð?r   rZ   r!   rg   )r%   r  r  r   r   r   r4  )r*   r+   r  r“   rŸ   rî   r,   r  ÚPÚfwÚPwr/   r/   r0   Útest_average_all_segments™  s    
z)TestSpectrogram.test_average_all_segmentsc                 C   s¦   t j d¡}d}d}d}d}t|||||ƒ\}}}t dd¡}	t|||	d dd�\}
}}t|
jdƒ t|jdƒ tt	t|||	d	d
� t dd¡}tt	t|||d d
� d S )Nr  r=   r>  r   rZ   rí   )r    )r    éI   r#   rž   i   )
r%   r  r  r   r
   rl   r   ra   rS   rT   )r*   r+   r  r“   rŸ   rî   r,   r  r?  rn   ro   ZPerp   r/   r/   r0   rq   ¦  s"    ÿÿz$TestSpectrogram.test_window_externalc                 C   sÀ   t j d¡}d}t||dd�\}}}tƒ �2}| td¡ t||ddd�\}}}W d   ƒ n1 sb0    Y  t||dd	�\}	}}
t||dd	�\}}}t||	ƒ t||
ƒ t||ƒ t||ƒ d S )
Nr  r=   r>  r’   zInperseg = 1025 is greater than input length  = 1024, using nperseg = 1024i  râ   rá   rž   )r%   r  r  r   r   rã   rä   r   )r*   r+   r  r,   r  r-   ræ   rÉ   rÊ   rË   rÌ   Zf3Zp3r/   r/   r0   rè   ¹  s     ÿÿ*


zTestSpectrogram.test_short_dataN)r•   r–   r—   rB  rq   rè   r/   r/   r/   r0   r=  ˜  s   r=  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestLombscarglec                 C   sº   d}d}dt j }d}d}d}t j d¡ t j |¡}t  dt j d	t j |¡||k }|t  || | ¡ }	t  dd	|¡}
t||	|
ƒ}|
d
 |
d  }t||
t  	|¡  |d k ƒ dS )zgTest if frequency location of peak corresponds to frequency of
        generated input signal.
        r"   r=   r   éd   éè  çffffffæ?éé# ç{®Gáz„?ç      $@r   r   N)
r%   r  r  r  Úrandr'   r  r   r   Zargmax)r*   ÚamplÚwÚphiÚninÚnoutr-   ÚrÚtr+   r,   r?  Údeltar/   r/   r0   Útest_frequencyÎ  s    
"zTestLombscargle.test_frequencyc                 C   s¸   d}d}dt j }d}d}d}t j d¡ t j |¡}t  dt j d	t j |¡||k }|t  || | ¡ }	t  dd	|¡}
t||	|
ƒ}t  d
| |j	d  ¡}t
t  |¡|dd� d S )Nr"   r=   r   rE  rF  rG  rH  rI  rJ  rQ   r   rZ   ©Zsignificant)r%   r  r  r  rK  r'   r  r   r  ra   r   Úmax)r*   rL  rM  rN  rO  rP  r-   rQ  rR  r+   r,   Úpgramr/   r/   r0   Útest_amplitudeî  s    
"zTestLombscargle.test_amplitudec                 C   sº   d}d}dt j }d}d}d}d}t j d¡ t j |¡}t  d	t j d
t j |¡||k }	|t  ||	 | ¡ | }
t  d	d
|¡}t|	|
|dd�}t|	|
|
 ¡  |dd�}t	||ƒ d S )Nr"   r=   r   rE  rF  rG  g333333Ã?rH  rI  rJ  T)Z	precenterF)
r%   r  r  r  rK  r'   r  r   r4  r   )r*   rL  rM  rN  rO  rP  r-   ÚoffsetrQ  rR  r+   r,   rW  Úpgram2r/   r/   r0   Útest_precenter  s    
"zTestLombscargle.test_precenterc                 C   sÊ   d}d}dt j }d}d}d}t j d¡ t j |¡}t  dt j d	t j |¡||k }|t  || | ¡ }	t  dd	|¡}
t||	|
ƒ}t||	|
d
d�}t|d t  	|	|	¡ |ƒ t
t  |¡ddd� d S )Nr"   r=   r   rE  rF  rG  rH  rI  rJ  T)Ú	normalizerZ   rU  )r%   r  r  r  rK  r'   r  r   r   Údotr   rV  )r*   rL  rM  rN  rO  rP  r-   rQ  rR  r+   r,   rW  rZ  r/   r/   r0   Útest_normalize-  s    
"zTestLombscargle.test_normalizec                 C   s>   t  ddd¡}t  ddd¡}t  ddd¡}ttt|||ƒ d S )Nr   r   rZ   r|   )r%   r'   rS   rT   r   ©r*   rR  r+   r,   r/   r/   r0   Útest_wrong_shapeK  s    z TestLombscargle.test_wrong_shapec                 C   s2   t  d¡}t  d¡}t  d¡}ttt|||ƒ d S )Nr   )r%   r&   rS   ÚZeroDivisionErrorr   r_  r/   r/   r0   Útest_zero_divisionQ  s    


z"TestLombscargle.test_zero_divisionc                 C   sP   t jddddd�}t  d| ¡}t jddddd�d	 }t|||d
 t j ƒ d S )Nr   r[   rF  F)ZendpointrQ   é2   iô  r  rZ   )r%   r'   r  r   r  r_  r/   r/   r0   Útest_lombscargle_atan_vs_atan2W  s    z.TestLombscargle.test_lombscargle_atan_vs_atan2N)
r•   r–   r—   rT  rX  r[  r^  r`  rb  rd  r/   r/   r/   r0   rD  Í  s    !rD  c                   @   s¨   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	 
dddg¡dd„ ƒZdd„ Zdd„ Zdd„ Zej	 
dddg¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )#ÚTestSTFTc                 C   s:  dd„ }|dƒ� t dddƒ W d   ƒ n1 s20    Y  |dƒ� t ddd	ƒ W d   ƒ n1 sf0    Y  |d
ƒ�" t t d¡ddƒ W d   ƒ n1 s 0    Y  |dƒ�" t t d	¡ddƒ W d   ƒ n1 sÚ0    Y  |dƒ� tdddƒ W d   ƒ n1 �s0    Y  |dƒ� tddd	ƒ W d   ƒ n1 �sF0    Y  |d
ƒ�" tt d¡ddƒ W d   ƒ n1 �s‚0    Y  |dƒ�" tt d	¡ddƒ W d   ƒ n1 �s¾0    Y  |dƒ� tdddƒ W d   ƒ n1 �sô0    Y  t d¡}t|ƒd }|d
ƒ�" t|t d¡d� W d   ƒ n1 �sF0    Y  |dƒ�$ t|t d¡dd� W d   ƒ n1 �s„0    Y  |dƒ� t|dd� W d   ƒ n1 �sº0    Y  |dƒ� t|ddd� W d   ƒ n1 �sò0    Y  |dƒ� t|ddd� W d   ƒ n1 �s*0    Y  |dƒ� t|ƒ W d   ƒ n1 �s\0    Y  |d
ƒ�" t|t d¡d� W d   ƒ n1 �s˜0    Y  |dƒ�$ t|t d¡dd� W d   ƒ n1 �sÖ0    Y  |dƒ� t|dd� W d   ƒ n1 �s0    Y  |dƒ� t|ddd� W d   ƒ n1 �sD0    Y  |dƒ� t|ddd� W d   ƒ n1 �s|0    Y  tjt	dd ��  t|dddd!� W d   ƒ n1 �s¼0    Y  |d"ƒ� t|ddd#� W d   ƒ n1 �sô0    Y  |d$ƒ� t
||d%d&� W d   ƒ n1 �s,0    Y  |d'ƒ�. t
|d d(… |d(d … d)d&� W d   ƒ n1 �st0    Y  |d*ƒ� t
||d%d+� W d   ƒ n1 �s¬0    Y  d,}|d-|›d.�ƒ� t||d/� W d   ƒ n1 �sî0    Y  |d-|›d.�ƒ� t||d/� W d   ƒ n1 �s,0    Y  d S )0Nc                 S   s   t jt| d�S )z�Assert for a ValueError matching regexp `match`.

            This little wrapper allows a more concise code layout.
            r�   )r˜   r	   rT   r�   r/   r/   r0   Úchk_VEc  s    z.TestSTFT.test_input_validation.<locals>.chk_VEz"nperseg must be a positive integerr   iöÿÿÿr   z#noverlap must be less than nperseg.r[   rX   zwindow must be 1-D)rZ   rZ   z"window must have length of npersegz"noverlap must be less than npersegz&noverlap must be a nonnegative integerrì   iàÿÿÿr  rZ   r’   z>value specified for nperseg is different from length of windowrá   râ   i ÿÿÿrž   rí   z.nfft must be greater than or equal to nperseg.r#   r  zInput stft must be at least 2d!zwindow must have length of 256z1NOLA condition failed, STFT may not be invertibler�   ©rŸ   rî   r“   z/Must specify differing time and frequency axes!©Z	time_axisZ	freq_axisz=Unknown value for mode foo, must be one of: \{'psd', 'stft'\}rR   )Úmodez'x and y must be equal if mode is 'stft'é   Ústftz[Unknown boundary option 'foo', must be one of: \['even', 'odd', 'constant', 'zeros', None\])ÚboundaryZ	not_validzParameter scaling=z not in \['spectrum', 'psd'\]!rB   )r   r%   r(   r   r&   rk  Úistftr˜   Úwarnsrä   r   )r*   rf  r+   ÚzrC   r/   r/   r0   Útest_input_validationa  st    
*
*
0
0
,
,
2
2
,

2
4
,
.
.
(
2
4
,
.
.0
.
.
>
.,zTestSTFT.test_input_validationc                 C   s2   g d¢}|D ] }dj |Ž }tdt|Ž |d� qd S )N)©Úboxcarr[   r   ©rr  r[   r    ©r	  é3   é   ©r   rá   é€   ©r   rá   éÀ   ©Úblackmanr  éÈ   ©©r
  r   rá   rì   ©r   rá   éÿ   ú
{}, {}, {}Tr  )Úformatr   r   )r*   ÚsettingsÚsettingrç   r/   r/   r0   Útest_check_COLA³  s    
zTestSTFT.test_check_COLAc                 C   sŠ   g d¢}|D ] }dj |Ž }tdt|Ž |d� qt d¡}d|d d d…< |t|ƒt|ƒd fdg}|D ] }dj |Ž }td	t|Ž |d� qdd S )
N)rq  rs  )rr  r[   ró   rt  )r	  ru  r[   rw  ry  )r   rá   é%   r{  )r|  r  é{   r~  )r  rá   é&   r€  )r   rá   é'   r‚  Tr  r   r   rZ   )r   rì   r   F)rƒ  r   r   r%   r(   Úlen)r*   Zsettings_passr…  rç   Úw_failZsettings_failr/   r/   r0   Útest_check_NOLAÃ  s    

þ
zTestSTFT.test_check_NOLAc              
   C   sŽ   t j d¡ t j d¡}d}d}d}d}t|||||ddd d�\}}}t|||||dd	dd
�\}	}
t||	ƒ tt jt  |¡d dd�|
ƒ d S )Nr  r  r=   r   r   r#   F)Úpaddedr<   rl  rA   )r<   rC   r¿   rZ   r!   rg   )	r%   r  r  r  rk  r   r   r4  Úabs)r*   r+   r  r“   rŸ   rî   r,   r  ÚZr@  rA  r/   r/   r0   rB  â  s    ÿÿ

z"TestSTFT.test_average_all_segmentsc              	   C   sæ   t j d¡ t j d¡}d}d}d}d}t|||||ƒ\}}}t| d¡||||dd	�\}	}
}t|||||ƒ\}}t|j||||dd
d�\}}t||	ƒ t||
ƒ t||ƒ t||d d …ddd d …f ƒ t||d d …ddf ƒ d S )Nr  r  r=   r   r   r#   )r!   r   r   r   rg   r!   rh  )	r%   r  r  r  rk  r`   rm  ÚTr   )r*   r+   r  r“   rŸ   rî   rÉ   Út1ZZ1rË   Út2ZZ2Zt3Úx1Zt4Zx2r/   r/   r0   Útest_permute_axesö  s&    ÿÿ



zTestSTFT.test_permute_axesrC   rA   Úpsdc              
   C   s¢   t j d¡ g d¢}|D ]„\}}}}t  |¡}dt j |j¡ }t||||d d|d�\}	}	}
t|
||||d�\}}|› d|› �}t|||d� t|||d� qd S )	Nr  ©©rr  rE  r[   r   ©rr  rE  r[   r    )r	  ée   ru  rv  ©r   r  rá   rx  )r  é€  rá   rì   )r   r  rá   r�  r[   F)rŸ   rî   r“   r¿   rŽ  rC   )rŸ   rî   r“   rC   rÿ   r  ©	r%   r  r  r9   r  Úsizerk  rm  r   )r*   rC   r„  r“   ÚNrŸ   rî   rR  r+   r  ÚzzÚtrÚxrrç   r/   r/   r0   Útest_roundtrip_real  s    	
þÿ
zTestSTFT.test_roundtrip_realc              
   C   sB  t j d¡ t  d¡}d|d d d…< |dt|ƒt|ƒd fdg}|D ]ø\}}}}|› d|› d|› d|› �}t|||ƒr~J |ƒ‚t  |¡}dt j |j¡ }	t	|	|||d d	d
d�\}
}
}t
jtdd��& t||||d	d�\}}W d   ƒ n1 sð0    Y  t  ||d t|ƒ… ¡�sJ |ƒ‚t  |	|d t|	ƒ… ¡rDJ |ƒ‚qDd S )Nr  r   r   rZ   rá   )r   rá   rì   r   rÿ   r[   Tr&   ©rŸ   rî   r“   r¿   rŽ  rl  ZNOLAr�   ©rŸ   rî   r“   rl  )r%   r  r  r(   r‹  r   r9   r  rž  rk  r˜   rn  rä   rm  Zallclose)r*   rŒ  r„  r“   rŸ  rŸ   rî   rç   rR  r+   r  r   r¡  r¢  r/   r/   r0   Útest_roundtrip_not_nola)  s*    
þ
þÿ("z TestSTFT.test_roundtrip_not_nolac              
   C   sö   t j d¡ g d¢}|D ]Ø\}}}}|› d|› d|› �}t|||ƒsLJ |ƒ‚t|||ƒr`J |ƒ‚t  |¡}dt j |j¡ }t||||d ddd�\}	}	}
t	|
|||dd�\}}|› d|› �}t
||d t|ƒ… |d	� t
||d t|ƒ… |d	� qd S )
Nr  ))rr  rE  r[   r|   )r	  rš  ru  r‡  )r   r  rá   é   )r  rœ  rá   é   )r   r  rá   r~   rÿ   r[   Tr&   r¤  r¥  r  )r%   r  r  r   r   r9   r  rž  rk  rm  r   r‹  )r*   r„  r“   rŸ  rŸ   rî   rç   rR  r+   r  r   r¡  r¢  r/   r/   r0   Útest_roundtrip_nola_not_colaD  s$    
þÿ
z%TestSTFT.test_roundtrip_nola_not_colac              	   C   s¼   t j d¡ dg}|D ] \}}}}t  |¡}dt j |j¡ }| t j¡}t||||d dd�\}}}	t	|	|||d�\}
}|› d|› �}t
|||d� t
|||d	d
d� t|j|jkƒ qd S )Nr  r›  r[   F©rŸ   rî   r“   r¿   rŽ  rg  rÿ   r  g-Cëâ6?gñhãˆµøä>)r  r¥   r8   )r%   r  r  r9   r  rž  ZastypeZfloat32rk  rm  r   r   rH   ©r*   r„  r“   rŸ  rŸ   rî   rR  r+   r  r   r¡  r¢  rç   r/   r/   r0   Útest_roundtrip_float32b  s     
ÿÿ
zTestSTFT.test_roundtrip_float32c                 C   sX  t j d¡ g d¢}|D ] \}}}}t  |¡}dt j |j¡ dt j |j¡  }t||||d dd|d�\}	}	}
t|
|||d|d�\}}|› d|› d|› �}t|||d	� t|||d	� qt	ƒ �:}| 
td
¡ t||||d dd|d�\}	}	}
W d   ƒ n1 �s0    Y  t|
|||d|d�\}}|› d|› d|› �}t|||d	� t|||d	� d S )Nr  r—  r[   y              $@F)rŸ   rî   r“   r¿   rŽ  r<   rC   )rŸ   rî   r“   Úinput_onesidedrC   rÿ   r  z9Input data is complex, switching to return_onesided=FalseT)r%   r  r  r9   r  rž  rk  rm  r   r   rã   rä   )r*   rC   r„  r“   rŸ  rŸ   rî   rR  r+   r  r   r¡  r¢  rç   ræ   r/   r/   r0   Útest_roundtrip_complexw  s<    	
$þþ
ÿþ,ÿ
zTestSTFT.test_roundtrip_complexc                 C   sà   t j d¡ ddg}|D ]Â\}}}}t  |¡}dt j |j¡ }t||||d dd d�\}}}	t|	||dd�\}}
d	D ]d}t||||d d|d�\}}}t|||dd�\}}|› d
|› d
|› �}t||
|d� t|||d� qtqd S )Nr  r˜  r™  r[   Tr¤  F)rî   r“   rl  )ÚevenZoddZconstantr&   rÿ   r  r�  )r*   r„  r“   rŸ  rŸ   rî   rR  r+   r  r   r¢  rl  Zzz_extZxr_extrç   r/   r/   r0   Ú!test_roundtrip_boundary_extension£  s.    þ
þþÿ
z*TestSTFT.test_roundtrip_boundary_extensionc              	   C   s°   t j d¡ ddg}|D ]’\}}}}t  |¡}dt j |j¡ }t||||d dd�\}}}	t|	||d�\}
}|› d|› �}t||
d |j… |d	� t||d |j… |d	� qd S )
Nr  )rr  rš  r[   r   )r   rF  rá   rx  r[   Trª  )rî   r“   rÿ   r  r�  r«  r/   r/   r0   Útest_roundtrip_padded_signalÄ  s    þ
ÿz%TestSTFT.test_roundtrip_padded_signalc                 C   s   t j d¡ g d¢}|D ]â\}}}}}t  |¡}dt j |j¡ }|t  dt j d ¡ }	t|||||d dd�\}
}
}t|	||||d ddd	�\}
}
}t	|||||d
�\}}t	|||||dd�\}}|› d|› �}t
|||d� t
|||d� t
|	||d� qd S )Nr  ))r   r  rá   rx  rj  )r   r  rá   rx  iõ  )rr  rE  r[   r   é!   )r  rœ  rá   rì   r  r[   y              ð?rQ   T)rŸ   rî   rs   r“   r¿   rŽ  F)rŸ   rî   rs   r“   r¿   rŽ  r<   )rŸ   rî   rs   r“   )rŸ   rî   rs   r“   r­  rÿ   r  )r%   r  r  r9   r  rž  Úexpr  rk  rm  r   )r*   r„  r“   rŸ  rŸ   rî   rs   rR  r+   Zxcr  ro  Zzcr¡  r¢  Zxcrrç   r/   r/   r0   Útest_roundtrip_padded_FFTÚ  s.    

ÿ
þ
ÿ

ÿ
z"TestSTFT.test_roundtrip_padded_FFTc                 C   sì   t j d¡ t j d¡}t|ƒ\}}}tdƒD ]t}dgd }d||< | |¡}t||d�\}}}t|||j d�\}}}t|| 	¡ |d� t|| 	¡ ||j d� q.t
|jddd	�\}}	t
|jd
dd	�\}}
t||	dd� t||
dd� d S )Nr  r  r|   r   r!   rg   r  éþÿÿÿrh  r   zistft transpose minuszistft transpose plus)r%   r  r  r  rk  r  r`   r  r   r  rm  r‘  r   )r*   r   r  Zz_flatr!  r"  r+   Zz_plusZz_minusZx_transpose_mZx_transpose_pr/   r/   r0   r#  ý  s    

zTestSTFT.test_axis_rollingc                 C   s6  t jdtd�}d|d< t j |¡}t|d ƒt|ƒ }t|ddd�d }t|d	dd�d
 }t	||ƒ t	t
|ddd…f ƒdƒ t	t
|ddd…f ƒd
ƒ t	t
|ddd…f ƒdƒ d|dd…dd…f< t	|dd…dd…f dt  |j¡jd� t|dddd�d }t j|jd |jd  dd�|jd  }t	||ƒ t|dd	dd�d
 }t	||ƒ t|d	ddd�d }t  |ddd…dd…f ¡}	t	|dd…dd…f |ƒ t	|dd…dd…f |	ƒ t j|jd |jd  dd�t j|	jd |	jd  dd� }
|
|jd |	jd   }t	||ƒ t|d	d	dd�d
 }t	||ƒ dS )z&Verify behavior of scaling parameter. i  rG   r  rá   rZ   r¯  rA   )rl  rC   Tr   é?   Nr!   r   rì   éA   r   éB   r7   Fr–  )r<   rl  rC   rg   )r­  rl  rC   rµ  é�   )r%   r&   Úcomplexr   r   Úsumr‹  rk  rm  r   r�  ÚfinforH   Ú
resolutionÚrealÚimagra   Zconj)r*   ÚXr+   Zpower_xÚZsr”  ZZpZpsd_ZpZZp0ZZp1Ús2Zpsd_Zp01r/   r/   r0   Útest_roundtrip_scaling  s8    
((

ÿ
zTestSTFT.test_roundtrip_scalingN)r•   r–   r—   rp  r†  r�  rB  r•  r˜   r™   Zparametrizer£  r¦  r©  r¬  r®  r°  r±  r´  r#  rÃ  r/   r/   r/   r0   re  `  s"   R

+!#re  c                   @   s¢   e Zd ZU dZdZeed< dZeed< dZ	eed< dZ
eed< ejed	< ejed
< eed< eed< dd„ Zeedœdd„ƒZeedœdd„ƒZdd„ Zdd„ ZdS )Ú"TestSampledSpectralRepresentationsa  Check energy/power relations from `Spectral Analysis` section in the user guide.

    A 32 sample cosine signal is used to compare the numerical to the expected results
    stated in :ref:`tutorial_SpectralAnalysis` in
    file ``doc/source/tutorial/signal.rst``
    rk   Únr>   r‘  r|   Úa_refÚl_aÚx_refÚX_refÚE_refÚP_refc                 C   st   t | j| jƒ}t |¡}d| _| jd | j || j< t|ƒ| _t	| jƒ| _
| j| jd  d | _| jd d | _dS )z5Create Cosine signal with amplitude a from spectrum. r|   rZ   N)r   rÅ  r‘  r%   rÁ   rÇ  rÆ  r   rÈ  r   rÉ  ÚtaurÊ  rË  )r*   r,   rÉ  r/   r/   r0   Úsetup_methodj  s    

z/TestSampledSpectralRepresentations.setup_method)Úreturnc                 C   s   | j | j S )zDuration of signal. ©rÅ  r‘  rU   r/   r/   r0   rÌ  w  s    z&TestSampledSpectralRepresentations.tauc                 C   s   d| j | j  S )z
Bin width r   rÏ  rU   r/   r/   r0   Údelta_f|  s    z*TestSampledSpectralRepresentations.delta_fc                 C   sŠ   t d| j t | j¡dd� t | jt| jd ƒ | jƒ t| jj	d | jj
d  ƒ}t | j| j | | jƒ t d| jd  | | jƒ dS )z Test energy and power formulas. rZ   r  r  r   N)r   rÆ  r%   ZptprÈ  r‘  r»  rÊ  rÉ  r¾  r¿  rÅ  rË  )r*   Zsum_X_ref_squaredr/   r/   r0   Útest_reference_signal�  s
    z8TestSampledSpectralRepresentations.test_reference_signalc                 C   sì  t | jdd�}tt|ƒƒt t|jd |jd  ƒ¡ }}t| j	| ƒ}t
| j|| j  | | j| j d ƒ t
|| j | | jd ƒ | j| j t|| ƒd  }| jt|| ƒd  }t
| jt|ƒ | jƒ t
| jt|ƒ | jƒ td| j |ddd�}t| j	fddi|¤Ž\}}	t| j	fddi|¤Ž\}}
t |	j¡j}t
|	t|| ƒd |t|	ƒ d	� t
|
||t|
ƒ d	� tf t| j	ƒd
dœ|¤Ž}t
t| j	fddi|¤Žd |	|t|	ƒ d	� t
t| j	fddi|¤Žd |
|t|
ƒ d	� dS )z‡Verify spectral representations of windowed DFT.

        Furthermore, the scalings of `periodogram` and `welch` are verified.
        F)ÚsymrZ   r   )r  r“   r¿   r<   rC   rA   rD   r7   r   rí   N)r   rÅ  r�  r»  r%   r  r¾  r¿  r   rÈ  r   rÌ  rÇ  rÆ  r‘  rÐ  rÊ  rË  Údictr   r¼  rH   r½  rV  r‹  r   )r*   rM  Zc_ampZc_rmsZXwZX_ESDZX_PSDÚkwr  ZP_magZP_psdZ	float_resr/   r/   r0   Útest_windowed_DFT�  s,    ,&"
ÿ
ÿz4TestSampledSpectralRepresentations.test_windowed_DFTN)r•   r–   r—   Ú__doc__rÅ  rI   Ú__annotations__r‘  ÚfloatrÆ  rÇ  r%   ZndarrayrÍ  ÚpropertyrÌ  rÐ  rÑ  rÕ  r/   r/   r/   r0   rÄ  Y  s    


rÄ  )2rš   Únumpyr%   Znumpy.testingr   r   r   r   r   r   r   r˜   r	   rS   Zscipyr
   Z	scipy.fftr   r   r   r   Zscipy.integrater   Zscipy.signalr   r   r   r   r   r   r   Zscipy.signal.windowsr   Zscipy.signal._spectral_pyr   Z,scipy.signal.tests._scipy_spectral_test_shimr   rk  r   rm  r   r*  r   rœ   r(  r7  r=  rD  re  rÄ  r/   r/   r/   r0   Ú<module>   s<   $$ ^  A  N5    |