U
    Hvf                     @   s   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 d dlmZmZmZmZmZmZmZmZmZ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Z$dS )    N)assert_assert_approx_equalassert_allcloseassert_array_equalassert_equalassert_array_almost_equal_nulpsuppress_warnings)raises)signal)fftfreq)
periodogramwelchlombscarglecsd	coherencespectrogramstftistft
check_COLA
check_NOLA)_spectral_helperc                   @   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-S ).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*   D/tmp/pip-unpacked-wheel-96ln3f52/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*   r+   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*   r+   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*   r+   test_real_spectrum.   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*   r+   test_integer_even6   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 )Nr-   rB   r   r   r.   r/   r   r0   r1   r2   )r    r!   rD   r   r   r4   r#   r$   r*   r*   r+   test_integer_oddA   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   rB   r   r   Fr6   r8   r9   )r    r!   rD   r   r   r   r:   r$   r*   r*   r+   test_integer_twosidedK   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   Fr6   r8         ?)r    r!   
complex128r   r   r   r:   r$   r*   r*   r+   test_complexT   s    zTestPeriodogram.test_complexc                 C   s   t tttdtjdd d S )N   foor=   )assert_raises
ValueErrorr   r    r!   rJ   r%   r*   r*   r+   test_unk_scaling]   s    z TestPeriodogram.test_unk_scalingc                 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   rB      r   
   r8   r   rT   r      r   <   )	r    r!   float64reshaper   r   shaper   newaxisr%   r&   r'   r(   Zf0Zp0r*   r*   r+   test_nd_axis_m1a   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 )
NrR   rB   rU   rT   r   r8   r   axisrW   rT   r   r   rX   )r    r!   rY   rZ   r   r   r[   r   r]   r*   r*   r+   test_nd_axis_0k   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   rU   hann    )r    r!   r   r
   
get_windowr   rN   rO   r%   r&   r'   r(   winfepewin_errr*   r*   r+   test_window_externalu   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   re   nfftrT   )   )r    r!   r   r   r   r[   )r%   r&   r'   r(   fpppr*   r*   r+   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   rt      r   r      rT   )r   r   r[   r    emptyr%   r'   r(   r[   r*   r*   r+   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rv   rx   r   r`   )r   r    rz   r   r[   r%   r[   r'   r(   r*   r*   r+   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   rm   r   r   r   r   r   r   r$   r*   r*   r+   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   rm   r   r   r   r   r   r   r$   r*   r*   r+   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   rC   r$   r*   r*   r+   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 )Nr-   r'   r   r   r.   r/   r   r0   Hz>r2   )r    r!   r   r   r4   r#   r   rC   r$   r*   r*   r+   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   Fr6   r8   r9   r    r!   r   r   r   r:   r   rC   r$   r*   r*   r+   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   FrH   r   Fr6   r8   rI   r'   r   r$   r*   r*   r+   test_complex_32   s    
zTestPeriodogram.test_complex_32c              	   C   sJ   t d}d|d< tdd}d}tt|d t||d W 5 Q R X d S )	Nr   r   r   rd   rU   zOthe size of the window must be the same size of the input on the specified axismatchwindow)r    r!   r
   rf   rN   rO   r   )r%   r&   rh   Zexpected_msgr*   r*   r+   test_shorter_window_error   s    
z)TestPeriodogram.test_shorter_window_errorN)__name__
__module____qualname__r,   r5   r;   rA   rE   rF   rG   rK   rQ   r^   rc   rl   rr   r|   r   r   r   r   r   r   r   r   r*   r*   r*   r+   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   sf   t d}d|d< d|d< t|dd\}}t|t ddd t dd	d
d
dg}t||ddd d S Nr   r   r   r   npersegr   ry   iKGUU?S8?#q?#q?r   r3   rtolr    r!   r   r   r"   arrayr$   r*   r*   r+   r,      s    
z!TestWelch.test_real_onesided_evenc                 C   sf   t d}d|d< d|d< t|dd\}}t|t dd  t d	d
dddg}t||ddd d S Nr   r   r   r   r   r         @      "@畄9?絳?p0?r   r   )r    r!   r   r   r4   r   r$   r*   r*   r+   r5      s    
z TestWelch.test_real_onesided_oddc              
   C   sj   t d}d|d< d|d< t|ddd\}}t|tdd t dd	d
d
d
d
d
d	g}t||ddd d S Nr   r   r   r   Fr   r7   r8   r   S8?r   r   r   )r    r!   r   r   r   r   r$   r*   r*   r+   r;      s    
   zTestWelch.test_real_twosidedc                 C   sh   t d}d|d< d|d< t|ddd\}}t|t ddd t d	d
dddg}t||ddd d S Nr   r   r   r   r<   )r   r>   r   ry   g      ?g-UU?g.iqUU?g-UU?r   r   r   r$   r*   r*   r+   rA     s    
zTestWelch.test_real_spectrumc                 C   sj   t jdtd}d|d< d|d< t|dd\}}t|t ddd t d	d
dddg}t||ddd d S Nr   rB   r   r   r   r   r   ry   r   r   r   r   r   r   )r    r!   rD   r   r   r"   r   r$   r*   r*   r+   test_integer_onesided_even  s    z$TestWelch.test_integer_onesided_evenc                 C   sj   t jdtd}d|d< d|d< t|dd\}}t|t dd	  t d
ddddg}t||ddd d S Nr   rB   r   r   r   r   r   r   r   r   r   r   r   r   )r    r!   rD   r   r   r4   r   r$   r*   r*   r+   test_integer_onesided_odd  s    z#TestWelch.test_integer_onesided_oddc              
   C   sn   t jdtd}d|d< d|d< t|ddd\}}t|tdd t d	d
dddddd
g}t||ddd d S Nr   rB   r   r   r   Fr   r8   r   r   r   r   r   )r    r!   rD   r   r   r   r   r$   r*   r*   r+   rG   !  s       zTestWelch.test_integer_twosidedc              
   C   sn   t dt j}d|d< d|d< t|ddd\}}t|tdd t dd	d
d
d
d
d
d	g}t||ddd d S Nr   rH   r   r   Fr   r8   g&>?g#q?gn)t?r   r   )r    r!   rJ   r   r   r   r   r$   r*   r*   r+   rK   +  s       zTestWelch.test_complexc                 C   s    t tttdtjddd d S NrL   rM   )r>   r   )rN   rO   r   r    r!   rJ   rP   r*   r*   r+   rQ   5  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 NrU   rB   {Gz?Zlinearr   detrendr1   r2   r    r4   rY   r   r   
zeros_liker%   r&   r'   r(   r*   r*   r+   test_detrend_linear9  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 )
NrU   rB   r   Fr   c                 S   s   | S Nr*   r&   r*   r*   r+   <lambda>A      z.TestWelch.test_no_detrending.<locals>.<lambda>r1   r2   )r    r4   rY   r   r   r%   r&   f1p1f2p2r*   r*   r+   test_no_detrending>  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 )	NrU   rB   r   c                 S   s   t j| ddS Nl)typer
   r   segr*   r*   r+   r   H  r   z1TestWelch.test_detrend_external.<locals>.<lambda>r   r1   r2   r   r   r*   r*   r+   test_detrend_externalE  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(   rB   r   rT   rT   rU   rU   c                 S   s   t j| ddS r   r   r   r*   r*   r+   r   O  r   z7TestWelch.test_detrend_external_nd_m1.<locals>.<lambda>r   r1   r2   )r    r4   rY   rZ   r   r   r   r   r*   r*   r+   test_detrend_external_nd_m1K  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 )NrR   rB   r   rS   rT   r   rU   c                 S   s   t j| dddS Nr   r   )ra   r   r   r   r*   r*   r+   r   W  r   z6TestWelch.test_detrend_external_nd_0.<locals>.<lambda>r   ra   r   r1   r2   )r    r4   rY   rZ   moveaxisr   r   r   r   r*   r*   r+   test_detrend_external_nd_0R  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 NrR   rB   r   rS   rU   r   rV   r   r   vIh%<=r   )	r    r4   rY   rZ   r   r   r[   r   r\   r]   r*   r*   r+   r^   Z  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 NrR   rB   r   r_   rU   r   )r   ra   rb   r   r   r   r   )r    r4   rY   rZ   r   r   r[   r   r]   r*   r*   r+   rc   c  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   rU   rd   r   ry   rL   re   )
r    r!   r   r
   rf   r   r   r[   rN   rO   rg   r*   r*   r+   rl   l  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 rs   )r   r   r[   r    rz   r{   r*   r*   r+   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    rz   r   r[   r   r*   r*   r+   r     s    z%TestWelch.test_empty_input_other_axisc           	   	   C   s   t d}d|d< t 4}|td t|dd\}}t|ddd\}}W 5 Q R X t|dd	\}}t|| t|| t|| t|| d S 
Nr   r   r   zBnperseg = 256 is greater than input length  = 8, using nperseg = 8rd   r      r   r   r   )r    r!   r   filterUserWarningr   r   	r%   r&   supr'   r(   r   r   r   r   r*   r*   r+   test_short_data  s    



zTestWelch.test_short_datac                 C   sL   t tttddtdddddg t tttddtdd d S NrL   r   rW   )rT   rw   )rN   rO   r   r    r!   r   r4   rZ   rP   r*   r*   r+   test_window_long_or_nd  s    &z TestWelch.test_window_long_or_ndc                 C   sX   t d}d|d d d< t|ddd\}}t ddd	d
d	d
d	d
dg	}t||dd d S N@   r   r   r   rL   r   noverlapr   gUUUUUU?gUUUUUU?g?gUUUUUU?g-q=r2   )r    r!   r   r   r   r$   r*   r*   r+   test_nondefault_noverlap  s    
z"TestWelch.test_nondefault_noverlapc                 C   s   t tttddddd d S NrL   r   rd   rT      )rN   rO   r   r    r!   rP   r*   r*   r+   test_bad_noverlap  s    zTestWelch.test_bad_noverlapc                 C   s   t tttdddd d S N   rw   rL   )rn   r   )rN   rO   r   r    r#   rP   r*   r*   r+   test_nfft_too_short  s    zTestWelch.test_nfft_too_shortc                 C   sz   t dd}d|d< d|d< t|dd\}}t|t ddd t d	d
dddgd}t||ddd t|j|jk d S Nr   r'   r   r   r   r   r   ry   r   r   r   r   r   r   )r    r!   r   r   r"   r   r   rC   r$   r*   r*   r+   r     s    z$TestWelch.test_real_onesided_even_32c                 C   sz   t dd}d|d< d|d< t|dd\}}t|t dd	  t d
ddddgd}t||ddd t|j|jk d S Nr   r'   r   r   r   r   r   r   r   gx:?gyѲI?r   gw0?r   r   )r    r!   r   r   r4   r   r   rC   r$   r*   r*   r+   r     s    z#TestWelch.test_real_onesided_odd_32c              
   C   s~   t dd}d|d< d|d< t|ddd\}}t|tdd t d	d
dddddd
gd}t||ddd t|j|jk d S Nr   r'   r   r   r   Fr   r8   r   r   r   r   r   r    r!   r   r   r   r   r   rC   r$   r*   r*   r+   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 d	d
dddddd
gd}t||ddd t|j|jkd|j|jf  d S Nr   r   rH   r   r   Fr   r8   g%?gA2q?gd^?g~?r'   r   r   zdtype mismatch, %s, %sr   r$   r*   r*   r+   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      r8   rT   r   r   ry   r   rn   rW      )r    r!   r   r   r   )r%   r&   rn   r'   fodd_fevenr*   r*   r+   test_padded_freqs  s    



zTestWelch.test_padded_freqsc                 C   s   d}d}t |d }d}t || | }t|| }|tdtj | |  }dD ]p}t||||dd\}	}
t||||d	d\}}t|
| |d d
  ttt|||td d dd qVd S )NrR   g     @rU   ,  rT   )rd   bartlett)tukey皙?Zflattopr<   )fsr   r   r>   r?   r   gMbP?)r   )	rD   r    r4   sinpir   r   sqrtZtrapz)r%   Ar   r   Zfsigiittr&   r   r   Zp_specfreqZp_densr*   r*   r+   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     rw   r   r   r`   err_msg)
r    randomseedrandnr   rangerZ   ndimr   squeeze)	r%   x_flatr   Zp_flatanewshaper&   Zp_plusZp_minusr*   r*   r+   test_axis_rolling  s    

zTestWelch.test_axis_rollingc                 C   sz   t d}d|d< d|d< t|ddd\}}t|t ddd t d	d
dddg}t||ddd ttt|ddd d S )Nr   r   r   r   median)r   averager   ry   r   g?g        g&E    9r   r   zunrecognised-average)r    r!   r   r   r"   r   rN   rO   r$   r*   r*   r+   test_average  s    

zTestWelch.test_averageN)#r   r   r   r,   r5   r;   rA   r   r   rG   rK   rQ   r   r   r   r   r   r^   rc   rl   r|   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r*   r*   r*   r+   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   rB   r   r    r!   r"   rJ   r   r   r%   r&   yr'   cr   Zc1r*   r*   r+   test_pad_shorter_x#  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   rB   r   r  r  r*   r*   r+   test_pad_shorter_y.  s    


zTestCSD.test_pad_shorter_yc                 C   sh   t d}d|d< d|d< t||dd\}}t|t ddd t dd	d
d
dg}t||ddd d S r   r    r!   r   r   r"   r   r$   r*   r*   r+   r,   9  s    
zTestCSD.test_real_onesided_evenc                 C   sh   t d}d|d< d|d< t||dd\}}t|t dd  t d	d
dddg}t||ddd d S r   )r    r!   r   r   r4   r   r$   r*   r*   r+   r5   C  s    
zTestCSD.test_real_onesided_oddc              
   C   sl   t d}d|d< d|d< t||ddd\}}t|tdd t dd	d
d
d
d
d
d	g}t||ddd d S r   )r    r!   r   r   r   r   r$   r*   r*   r+   r;   M  s    
   zTestCSD.test_real_twosidedc                 C   sj   t d}d|d< d|d< t||ddd\}}t|t ddd t d	d
dddg}t||ddd d S r   r  r$   r*   r*   r+   rA   W  s    
zTestCSD.test_real_spectrumc                 C   sl   t jdtd}d|d< d|d< t||dd\}}t|t ddd t d	d
dddg}t||ddd d S r   )r    r!   rD   r   r   r"   r   r$   r*   r*   r+   r   a  s    z"TestCSD.test_integer_onesided_evenc                 C   sl   t jdtd}d|d< d|d< t||dd\}}t|t dd	  t d
ddddg}t||ddd d S r   )r    r!   rD   r   r   r4   r   r$   r*   r*   r+   r   k  s    z!TestCSD.test_integer_onesided_oddc              
   C   sp   t jdtd}d|d< d|d< t||ddd\}}t|tdd t d	d
dddddd
g}t||ddd d S r   )r    r!   rD   r   r   r   r   r$   r*   r*   r+   rG   u  s       zTestCSD.test_integer_twosidedc              
   C   sp   t dt j}d|d< d|d< t||ddd\}}t|tdd t dd	d
d
d
d
d
d	g}t||ddd d S r   )r    r!   rJ   r   r   r   r   r$   r*   r*   r+   rK     s       zTestCSD.test_complexc                 C   s,   t tttdtjtdtjddd d S r   )rN   rO   r   r    r!   rJ   r#   rP   r*   r*   r+   rQ     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    r4   rY   r   r   r   r   r*   r*   r+   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 )
NrU   rB   r   Fr   c                 S   s   | S r   r*   r   r*   r*   r+   r     r   z,TestCSD.test_no_detrending.<locals>.<lambda>r1   r2   )r    r4   rY   r   r   r   r*   r*   r+   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 )	NrU   rB   r   c                 S   s   t j| ddS r   r   r   r*   r*   r+   r     r   z/TestCSD.test_detrend_external.<locals>.<lambda>r   r1   r2   r  r   r*   r*   r+   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   rB   r   r   rU   c                 S   s   t j| ddS r   r   r   r*   r*   r+   r     r   z5TestCSD.test_detrend_external_nd_m1.<locals>.<lambda>r   r1   r2   )r    r4   rY   rZ   r   r   r   r   r*   r*   r+   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 )NrR   rB   r   rS   rT   r   rU   c                 S   s   t j| dddS r   r   r   r*   r*   r+   r     r   z4TestCSD.test_detrend_external_nd_0.<locals>.<lambda>r   r1   r2   )r    r4   rY   rZ   r   r   r   r   r   r*   r*   r+   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    r4   rY   rZ   r   r   r[   r   r\   r]   r*   r*   r+   r^     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    r4   rY   rZ   r   r   r[   r   r]   r*   r*   r+   rc     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   rU   rd   r   r   r   re   )
r    r!   r   r
   rf   r   r   r[   rN   rO   rg   r*   r*   r+   rl     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 )NrU   rt   ru   )ry   r   )r   r    r!   r   r[   rz   r#   r{   r*   r*   r+   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   r`   )rU   rU   rw   )rU   r   r   )rU   r   rw   )r   r    rz   r   r[   r!   r   r*   r*   r+   r     s    z#TestCSD.test_empty_input_other_axisc           	   	   C   s   t d}d|d< t 8}|td t||dd\}}t||ddd\}}W 5 Q R X t||dd	\}}t|| t|| t|| t|| d S r   )r    r!   r   r   r   r   r   r   r*   r*   r+   r     s    



zTestCSD.test_short_datac                 C   s\   t tttdtddtdddddg t tttdtddtdd d S r   )	rN   rO   r   r    r!   r#   r   r4   rZ   rP   r*   r*   r+   r     s    zTestCSD.test_window_long_or_ndc                 C   sZ   t d}d|d d d< t||ddd\}}t ddd	d
d	d
d	d
dg	}t||dd d S r   )r    r!   r   r   r   r$   r*   r*   r+   r     s    
z TestCSD.test_nondefault_noverlapc              	   C   s&   t tttdtddddd d S r   )rN   rO   r   r    r!   r#   rP   r*   r*   r+   r     s     zTestCSD.test_bad_noverlapc                 C   s$   t tttdtdddd d S r   )rN   rO   r   r    r#   r!   rP   r*   r*   r+   r     s    zTestCSD.test_nfft_too_shortc                 C   s|   t dd}d|d< d|d< t||dd\}}t|t ddd t d	d
dddgd}t||ddd t|j|jk d S r   )r    r!   r   r   r"   r   r   rC   r$   r*   r*   r+   r     s    z"TestCSD.test_real_onesided_even_32c                 C   s|   t dd}d|d< d|d< t||dd\}}t|t dd	  t d
ddddgd}t||ddd t|j|jk d S r   )r    r!   r   r   r4   r   r   rC   r$   r*   r*   r+   r   &  s    z!TestCSD.test_real_onesided_odd_32c              
   C   s   t dd}d|d< d|d< t||ddd\}}t|tdd t d	d
dddddd
gd}t||ddd t|j|jk d S r   r    r!   r   r   r   r   r   rC   r$   r*   r*   r+   r   1  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 d	d
dddddd
gd}t||ddd t|j|jkd|j|jf  d S r   r  r$   r*   r*   r+   r   =  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  rn   r'   r   r   r   r*   r*   r+   r   I  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  r7   r  )r    r  r	  copyr   r   )r%   r&   r  r   Zp_sameZp_copiedr*   r*   r+   test_copied_data\  s     








zTestCSD.test_copied_dataN)#r   r   r   r  r  r,   r5   r;   rA   r   r   rG   rK   rQ   r   r   r   r   r   r^   rc   rl   r|   r   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r  "  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 NrR   r   r   rW   rU   r   )r    r  r	  r  r"   r#   r   r   r%   r&   r  r'   Cr   ZC1r*   r*   r+   test_identical_inputn  s    


z"TestCoherence.test_identical_inputc                 C   sT   t jd}| }t ddd}t d}t||dd\}}t|| t|| d S r"  )r    r  r	  r"   r#   r   r   r#  r*   r*   r+   test_phase_shifted_inputy  s    

z&TestCoherence.test_phase_shifted_inputN)r   r   r   r%  r&  r*   r*   r*   r+   r!  m  s   r!  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  r8   r   g      ?r   rT   r   r`   )r    r  r	  r   r   r   r  )r%   r&   r   r   r   r   r'   r   PfwPwr*   r*   r+   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  r8   r(  r   rT   r   )r   )r   I   r   r   i   )
r    r  r	  r   r
   rf   r   r[   rN   rO   )r%   r&   r   r   r   r   r'   r   r)  rh   ri   ZPerk   r*   r*   r+   rl     s*        z$TestSpectrogram.test_window_externalc              	   C   s   t jd}d}t||dd\}}}t (}|td t||ddd\}}}W 5 Q R X t||dd	\}	}}
t||dd	\}}}t||	 t||
 t|| t|| d S )
Nr  r8   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*   r+   r     s     


zTestSpectrogram.test_short_dataN)r   r   r   r,  rl   r   r*   r*   r*   r+   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   r8   r   d     ffffff?# {Gz?      $@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*   r+   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   r8   r   r/  r0  r1  r2  r3  r4  rL   r   rT   Zsignificant)r    r   r  r  r5  r"   r   r   r   r[   r   max)r%   r6  r7  r8  r9  r:  r(   r;  r<  r&   r'   pgramr*   r*   r+   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   r8   r   r/  r0  r1  g333333?r2  r3  r4  T)Z	precenterF)
r    r   r  r  r5  r"   r   r   r  r   )r%   r6  r7  r8  r9  r:  r(   offsetr;  r<  r&   r'   rA  pgram2r*   r*   r+   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   r8   r   r/  r0  r1  r2  r3  r4  T)	normalizerT   r?  )r    r   r  r  r5  r"   r   r   r   dotr   r@  )r%   r6  r7  r8  r9  r:  r(   r;  r<  r&   r'   rA  rD  r*   r*   r+   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   rT   rw   )r    r"   rN   rO   r   r%   r<  r&   r'   r*   r*   r+   test_wrong_shape7  s    z TestLombscargle.test_wrong_shapec                 C   s2   t d}t d}t d}ttt||| d S )Nr   )r    r!   rN   ZeroDivisionErrorr   rI  r*   r*   r+   test_zero_division=  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   rU   r0  F)ZendpointrL   2   i  r   rT   )r    r"   r   r   r   rI  r*   r*   r+   test_lombscargle_atan_vs_atan2C  s    z.TestLombscargle.test_lombscargle_atan_vs_atan2N)
r   r   r   r>  rB  rE  rH  rJ  rL  rN  r*   r*   r*   r+   r.    s    !r.  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 5 Q R X |d t ddd	 W 5 Q R X |d
 t tddd W 5 Q R X |d t td	dd W 5 Q R X |d tddd W 5 Q R X |d tddd	 W 5 Q R X |d
 ttddd W 5 Q R X |d ttd	dd W 5 Q R X |d tddd W 5 Q R X td}t|d }|d
 t|tdd W 5 Q R X |d t|tddd W 5 Q R X |d t|dd W 5 Q R X |d t|ddd W 5 Q R X |d t|ddd W 5 Q R X |d t| W 5 Q R X |d
 t|tdd W 5 Q R X |d t|tddd W 5 Q R X |d t|dd W 5 Q R X |d t|ddd W 5 Q R X |d t|ddd W 5 Q R X tjt	dd  t|dddd! W 5 Q R X |d" t|ddd# W 5 Q R X |d$ t
||d%d& W 5 Q R X |d'$ t
|d d( |d(d  d)d& W 5 Q R X |d* t
||d%d+ W 5 Q R X d,}|d-|d. t||d/ W 5 Q R X |d-|d. t||d/ W 5 Q R X d S )0Nc                 S   s   t jt| dS )zAssert for a ValueError matching regexp `match`.

            This little wrapper allows a more concise code layout.
            r   )pytestr	   rO   r   r*   r*   r+   chk_VEO  s    z.TestSTFT.test_input_validation.<locals>.chk_VEz"nperseg must be a positive integerrd   ir   z#noverlap must be less than nperseg.rU   rR   zwindow must be 1-D)rT   rT   z"window must have length of npersegz"noverlap must be less than npersegz&noverlap must be a nonnegative integerr   ir  rT   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'\}rM   )modez'x and y must be equal if mode is 'stft'   r   z[Unknown boundary option 'foo', must be one of: \['even', 'odd', 'constant', 'zeros', None\])boundaryZ	not_validzParameter scaling=z not in \['spectrum', 'psd'\]!r=   )r   r    r#   r   r!   r   r   rP  warnsr   r   )r%   rQ  r&   zr>   r*   r*   r+   test_input_validationM  st    























(
zTestSTFT.test_input_validationc                 C   s>   ddddddddg}|D ] }d	j | }td
t| |d qd S )NboxcarrU   r   r[  rU   r   r   3      rd   r      rd   r      blackmanr      r   r   r   r   rd   r      {0}, {1}, {2}Tr  )formatr   r   )r%   settingssettingmsgr*   r*   r+   test_check_COLA  s    
zTestSTFT.test_check_COLAc                 C   s   ddddddddd	d
ddddg}|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 q|d S )NrZ  r\  )r[  rU   r   r]  )r   r^  rU   r`  rb  )rd   r   %   rd  )re  r   {   rg  )rh  r   &   ri  )rd   r   '   rk  Tr  r   r   rT   )rd   r   r   F)rl  r   r   r    r#   len)r%   Zsettings_passrn  ro  w_failZsettings_failr*   r*   r+   test_check_NOLA  s4    


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  r8   rd   r   r   F)paddedr7   rV  r<   )r7   r>   r   rT   r   r`   )	r    r  r  r	  r   r   r   r  abs)r%   r&   r   r   r   r   r'   r   Zr*  r+  r*   r*   r+   r,    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  r8   rd   r   r   )r   r   r   r   r`   r   rS  )	r    r  r  r	  r   rZ   r   Tr   )r%   r&   r   r   r   r   r   t1ZZ1r   t2ZZ2t3x1Zt4Zx2r*   r*   r+   test_permute_axes  s&    



zTestSTFT.test_permute_axesr>   r<   psdc              
   C   s   t jd ddddddg}|D ]\}}}}t |}dt j|j }t||||d d	|d
\}	}	}
t|
||||d\}}d||}t	|||d t	|||d q d S )Nr  r[  r/  rU   r   r[  r/  rU   r   r   e   r^  r_  rd   r  r   ra  rh    r   r   rd   r  r   rj  rU   F)r   r   r   r   rx  r>   )r   r   r   r>   {0}, {1}r  
r    r  r  r4   r	  sizer   r   rl  r   )r%   r>   rm  r   Nr   r   r<  r&   r   zztrxrro  r*   r*   r+   test_roundtrip_real  s0    	
   
zTestSTFT.test_roundtrip_realc              
   C   s"  t jd t d}d|d d d< |dt|t|d fdg}|D ]\}}}}d||||}t|||rtt|t |}dt j	|j
 }	t|	|||d d	d
d\}
}
}tjtdd t||||d	d\}}W 5 Q R X t ||d t| st|t |	|d t|	 rDt|qDd S )Nr  r   r   rT   r   )rd   r   r   r   z{0}, {1}, {2}, {3}rU   Tr!   r   r   r   r   rx  rV  ZNOLAr   r   r   r   rV  )r    r  r  r#   ru  rl  r   AssertionErrorr4   r	  r  r   rP  rW  r   r   Zallclose)r%   rv  rm  r   r  r   r   ro  r<  r&   r   r  r  r  r*   r*   r+   test_roundtrip_not_nola  s0    

    z TestSTFT.test_roundtrip_not_nolac              
   C   s   t jd dddddg}|D ]\}}}}d|||}t|||sLt|t|||r`t|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  )r[  r/  rU   rw   )r   r  r^  rq  )rd   r  r      )rh  r  r      )rd   r  r   ry   rk  rU   Tr!   r  r  r  r  )r    r  r  rl  r   r  r   r4   r	  r  r   r   r   ru  )r%   rm  r   r  r   r   ro  r<  r&   r   r  r  r  r*   r*   r+   test_roundtrip_nola_not_cola0  s4    
   
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  rU   Fr   r   r   r   rx  rR  r  r  g-C6?gh㈵>)r  r   r3   )r    r  r  r4   r	  r  ZastypeZfloat32r   r   rl  r   r   rC   r%   rm  r   r  r   r   r<  r&   r   r  r  r  ro  r*   r*   r+   test_roundtrip_float32N  s$    
  
zTestSTFT.test_roundtrip_float32c                 C   s>  t jd ddddddg}|D ]\}}}}t |}dt j|j d	t j|j  }t||||d d
d
|d\}	}	}
t|
|||d
|d\}}d|||}t	|||d t	|||d q t
 0}|td t||||d d
d|d\}	}	}
W 5 Q R X t|
|||d
|d\}}d|||}t	|||d t	|||d d S )Nr  r  r  r  r  r  r  rU   y              $@F)r   r   r   r   rx  r7   r>   )r   r   r   input_onesidedr>   rk  r  z9Input data is complex, switching to return_onesided=FalseT)r    r  r  r4   r	  r  r   r   rl  r   r   r   r   )r%   r>   rm  r   r  r   r   r<  r&   r   r  r  r  ro  r   r*   r*   r+   test_roundtrip_complexc  sZ    	
$    
     
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 ]^}t||||d d|d\}}}t|||dd\}}d
|||}t	||
|d t	|||d qtqd S )Nr  r  r  rU   Tr  F)r   r   rV  )evenZoddZconstantr!   rk  r  r  )r%   rm  r   r  r   r   r<  r&   r   r  r  rV  Zzz_extZxr_extro  r*   r*   r+   !test_roundtrip_boundary_extension  s6    
    
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  )r[  r  rU   r   )rd   r0  r   ra  rU   Tr  )r   r   r  r  r  r  r*   r*   r+   test_roundtrip_padded_signal  s     
  z%TestSTFT.test_roundtrip_padded_signalc                 C   s  t jd ddddg}|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  )rd   r  r   ra  rU  )rd   r  r   ra  i  )r[  r/  rU   r   !   )rh  r  r   r   r  rU   y              ?rL   T)r   r   rn   r   r   rx  F)r   r   rn   r   r   rx  r7   )r   r   rn   r   )r   r   rn   r   r  r  r  )r    r  r  r4   r	  r  expr   r   r   rl  r   )r%   rm  r   r  r   r   rn   r<  r&   Zxcr   rX  Zzcr  r  Zxcrro  r*   r*   r+   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  rw   r   r   r`   r  rS  r   zistft transpose minuszistft transpose plus)r    r  r  r	  r   r
  rZ   r  r   r  r   r{  r   )r%   r  r   Zz_flatr  r  r&   Zz_plusZz_minusZx_transpose_mZx_transpose_pr*   r*   r+   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  rB   r  r   rT   r  r<   )rV  r>   Tr   ?   Nr   r   r   A   r   B   r2   Fr  )r7   rV  r>   r`   )r  rV  r>   r     )r    r!   complexZfftZirfftsumru  r   r   r   ry  ZfinforC   
resolutionrealimagr[   Zconj)r%   Xr&   Zpower_xZsr  ZZpZpsd_ZpZZp0ZZp1s2Zpsd_Zp01r*   r*   r+   test_roundtrip_scaling  s8    
((


zTestSTFT.test_roundtrip_scalingN)r   r   r   rY  rp  rw  r,  r  rP  markZparametrizer  r  r  r  r  r  r  r  r  r  r*   r*   r*   r+   rO  L  s"   R

+!#rO  )%Znumpyr    Znumpy.testingr   r   r   r   r   r   r   rP  r	   rN   Zscipyr
   Z	scipy.fftr   Zscipy.signalr   r   r   r   r   r   r   r   r   r   Zscipy.signal._spectral_pyr   r   r   r  r!  r'  r.  rO  r*   r*   r*   r+   <module>   s(   $0 V  @  M4 