U
    Q»{jŒç  ã                   @   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*   ú_/var/www/html/bwave/python/venv/lib/python3.8/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*   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f0Ú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ÚfeZ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   rf   ©Ú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   ra   )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   çH¯¼šò×z>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   re   rU   zOthe size of the window must be the same size of the input on the specified axis©Úmatch©Úwindow)r    r!   r
   rg   rN   rO   r   )r%   r&   ri   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_   rd   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µ?çÝæSè8ŽÃ?ç#¬Ç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—   çÝæSè8Ž³?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.i÷qUU¥?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   ç{®Gáz¤?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Ã   )rb   rÄ   rÅ   rÆ   r*   r*   r+   rº   W  r»   z6TestWelch.test_detrend_external_nd_0.<locals>.<lambda>©r–   rb   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–   rb   rc   r   rÑ   r›   r•   )r    r4   rY   rZ   r   r   r[   r   r]   r*   r*   r+   rd   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   re   r•   ©ry   rL   rf   )
r    r!   r   r
   rg   r   r   r[   rN   rO   rh   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 = 8re   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   re   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¡   gâÝx:ñ¿?gyÑ²IÙýÍ?r¤   g´wã0ÚÅ?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µ%‚£ªªÚ?gAŠ2ÇqØ?gŒd°^Çá?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   )re   Úbartlett)Útukeyçš™™™™™¹?Zflattopr<   )Úfsr–   rŽ   r>   r?   r   gü©ñÒMbP?)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   ra   ©Ú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_   rd   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½   Ú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+   rd   ·  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   re   r•   rÓ   rÕ   rf   )
r    r!   r   r
   rg   r   r   r[   rN   rO   rh   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   ra   )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_   rd   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   ra   )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
   rg   r   r[   rN   rO   )r%   r&   rú   rŽ   r–   rá   r'   ró   r*  ri   rj   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æ?éé# ç{®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*   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   r0  r1  r2  r3  r4  r5  rL   r   rT   ©Zsignificant)r    rü   r  r  r6  r"   rû   r   rý   r[   r   Úmax)r%   r7  r8  r9  r:  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   r0  r1  r2  g333333Ã?r3  r4  r5  T)Z	precenterF)
r    rü   r  r  r6  r"   rû   r   r  r   )r%   r7  r8  r9  r:  r;  r(   Úoffsetr<  r=  r&   r'   rB  Ú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   r0  r1  r2  r3  r4  r5  T)Ú	normalizerT   r@  )r    rü   r  r  r6  r"   rû   r   r   Údotr   rA  )r%   r7  r8  r9  r:  r;  r(   r<  r=  r&   r'   rB  rE  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   rJ  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   r1  F)ZendpointrL   é2   iô  rù   rT   )r    r"   rû   r   rü   rJ  r*   r*   r+   Útest_lombscargle_atan_vs_atan2C  s    z.TestLombscargle.test_lombscargle_atan_vs_atan2N)
r�   r‘   r’   r?  rC  rF  rI  rK  rM  rO  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 )z�Assert 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 integerre   iöÿÿÿr   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ß   iàÿÿÿr  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   rQ  ÚwarnsrØ   r   )r%   rR  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   é   ©re   rÕ   é€   ©re   rÕ   éÀ   ©Úblackmanrö   éÈ   ©©rø   r   rÕ   rß   ©re   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 )Nr[  r]  )r\  rU   rä   r^  )r÷   r_  rU   ra  rc  )re   rÕ   é%   re  )rf  rö   é{   rh  )ri  rÕ   é&   rj  )re   rÕ   é'   rl  Tr  r   r   rT   )re   rß   r   F)rm  r   r   r    r#   Úlen)r%   Zsettings_passro  rp  Ú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   re   r   r   F)Úpaddedr7   rW  r<   )r7   r>   r³   rT   r   ra   )	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   re   r   r   )r   r   r   r   ra   r   rT  )	r    r  r  r	  r   rZ   r   ÚTr   )r%   r&   rú   rŽ   r–   rá   r½   Út1ZZ1r¿   Út2ZZ2Z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\  r0  rU   r   ©r\  r0  rU   r   ©r÷   ée   r_  r`  ©re   r  rÕ   rb  ©ri  é€  rÕ   rß   ©re   r  rÕ   rk  rU   F)r–   rá   rŽ   r³   ry  r>   )r–   rá   rŽ   r>   ú{0}, {1}r  ©
r    r  r  r4   r	  Úsizer   r   rm  r   )r%   r>   rn  rŽ   ÚNr–   rá   r=  r&   ró   ÚzzÚtrÚxrrp  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|ƒ… ¡süt|ƒ‚t  |	|d t|	ƒ… ¡rDt|ƒ‚qDd S )Nr  r   r   rT   rÕ   )re   rÕ   rß   r   z{0}, {1}, {2}, {3}rU   Tr!   ©r–   rá   rŽ   r³   ry  rW  ZNOLAr‹   ©r–   rá   rŽ   rW  )r    r  r  r#   rv  rm  r   ÚAssertionErrorr4   r	  rŒ  r   rQ  rX  rØ   r   Zallclose)r%   rw  rn  rŽ   r�  r–   rá   rp  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\  r0  rU   rw   )r÷   r…  r_  rr  )re   r  rÕ   é   )ri  rˆ  rÕ   é   )re   r  rÕ   ry   rl  rU   Tr!   r’  r“  rŠ  r  )r    r  r  rm  r   r”  r   r4   r	  rŒ  r   r   r   rv  )r%   rn  rŽ   r�  r–   rá   rp  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³   ry  rS  rŠ  r  g-Cëâ6?gñhãˆµøä>)r  rœ   r3   )r    r  r  r4   r	  rŒ  ZastypeZfloat32r   r   rm  r   r   rC   ©r%   rn  rŽ   r�  r–   rá   r=  r&   ró   rŽ  r�  r�  rp  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³   ry  r7   r>   )r–   rá   rŽ   Úinput_onesidedr>   rl  r  z9Input data is complex, switching to return_onesided=FalseT)r    r  r  r4   r	  rŒ  r   r   rm  r   r   r×   rØ   )r%   r>   rn  rŽ   r�  r–   rá   r=  r&   ró   rŽ  r�  r�  rp  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Ž   rW  )ÚevenZoddZconstantr!   rl  r  r‹  )r%   rn  rŽ   r�  r–   rá   r=  r&   ró   rŽ  r�  rW  Zzz_extZxr_extrp  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   )re   r1  rÕ   rb  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  )re   r  rÕ   rb  rV  )re   r  rÕ   rb  iõ  )r\  r0  rU   r   é!   )ri  rˆ  rÕ   rß   r  rU   y              ð?rL   T)r–   rá   rn   rŽ   r³   ry  F)r–   rá   rn   rŽ   r³   ry  r7   )r–   rá   rn   rŽ   )r–   rá   rn   rŽ   rœ  rŠ  r  )r    r  r  r4   r	  rŒ  Úexprü   r   r   rm  r   )r%   rn  rŽ   r�  r–   rá   rn   r=  r&   Zxcró   rY  Zzcr�  r�  Zxcrrp  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   ra   r  éþÿÿÿrT  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<   )rW  r>   Tr   é?   Nr   r   rß   éA   r   éB   r2   Fr�  )r7   rW  r>   ra   )rœ  rW  r>   r¤  é�   )r    r!   ÚcomplexZfftZirfftÚsumrv  r   r   r   rz  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’   rZ  rq  rx  r-  r€  rQ  ÚmarkZparametrizer‘  r•  r˜  r›  r�  rŸ  r   r£  r  r±  r*   r*   r*   r+   rP  L  s"   R

+!#rP  )%Únumpyr    Znumpy.testingr   r   r   r   r   r   r   rQ  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/  rP  r*   r*   r*   r+   Ú<module>   s(   $0 V  @  M4 