U
    »mœdŒç  ã                   @   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*   úY/home/sam/Atlas/atlas_env/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Ú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   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   ©ru   ©é   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©rw   ry   r   ra   )r   r    r{   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   rn   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   rn   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   rm   rs   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   rz   ç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   rz   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   rz   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–   ©rz   rL   rf   )
r    r!   r   r
   rg   r   r   r[   rN   rO   rh   r*   r*   r+   rm   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 rt   )r   r   r[   r    r{   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    r{   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   rx   )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é   rx   rL   )ro   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   rz   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   rz   ©r—   ro   rW   é   )r    r!   r   r   r   )r%   r&   ro   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éÒ  é   rx   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   rz   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   rm   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+   rm   À  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   ru   rv   )rz   r   )r   r    r!   r   r[   r{   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   rx   )rU   r   r   )rU   r   rx   )r   r    r{   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  ro   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   rm   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Perl   r*   r*   r+   rm   “  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.  rm   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   r1  r2  r3  r4  r5  r6  rL   r   rT   ©Zsignificant)r    rý   r  r	  r7  r"   rü   r   rþ   r[   r   Úmax)r%   r8  r9  r:  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   r1  r2  r3  g333333Ã?r4  r5  r6  T)Z	precenterF)
r    rý   r  r	  r7  r"   rü   r   r   r   )r%   r8  r9  r:  r;  r<  r(   Úoffsetr=  r>  r&   r'   rC  Ú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   r1  r2  r3  r4  r5  r6  T)Ú	normalizerT   rA  )r    rý   r  r	  r7  r"   rü   r   r   Údotr   rB  )r%   r8  r9  r:  r;  r<  r(   r=  r>  r&   r'   rC  rF  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   rx   )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   rK  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   r2  F)ZendpointrL   é2   iô  rú   rT   )r    r"   rü   r   rý   rK  r*   r*   r+   Útest_lombscargle_atan_vs_atan2C  s    z.TestLombscargle.test_lombscargle_atan_vs_atan2N)
r‘   r’   r“   r@  rD  rG  rJ  rL  rN  rP  r*   r*   r*   r+   r0  ¹  s    !r0  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   rR  ÚwarnsrÙ   r   )r%   rS  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   rb  rd  )re   rÖ   é%   rf  )rg  r÷   é{   ri  )rj  rÖ   é&   rk  )re   rÖ   é'   rm  Tr  r   r   rT   )re   rà   r   F)rn  r   r   r    r#   Úlen)r%   Zsettings_passrp  rq  Ú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   rX  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   rU  )	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]  r1  rU   r   ©r]  r1  rU   r   ©rø   ée   r`  ra  ©re   r  rÖ   rc  ©rj  é€  rÖ   rà   ©re   r  rÖ   rl  rU   F)r—   râ   r�   r´   rz  r>   )r—   râ   r�   r>   ú{0}, {1}r  ©
r    r  r	  r4   r
  Úsizer   r   rn  r   )r%   r>   ro  r�   ÚNr—   râ   r>  r&   rô   ÚzzÚtrÚxrrq  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´   rz  rX  ZNOLArŒ   ©r—   râ   r�   rX  )r    r  r	  r#   rw  rn  r   ÚAssertionErrorr4   r
  rŽ  r   rR  rY  rÙ   r   Zallclose)r%   rx  ro  r�   r�  r—   râ   rq  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]  r1  rU   rx   )rø   r‡  r`  rs  )re   r  rÖ   é   )rj  rŠ  rÖ   é   )re   r  rÖ   rz   rm  rU   Tr!   r”  r•  rŒ  r  )r    r  r	  rn  r   r–  r   r4   r
  rŽ  r   r   r   rw  )r%   ro  r�   r�  r—   râ   rq  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´   rz  rT  rŒ  r  g-Cëâ6?gñhãˆµøä>)r  r�   r3   )r    r  r	  r4   r
  rŽ  ZastypeZfloat32r   r   rn  r   r   rC   ©r%   ro  r�   r�  r—   râ   r>  r&   rô   r�  r‘  r’  rq  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´   rz  r7   r>   )r—   râ   r�   Úinput_onesidedr>   rm  r  z9Input data is complex, switching to return_onesided=FalseT)r    r  r	  r4   r
  rŽ  r   r   rn  r   r   rØ   rÙ   )r%   r>   ro  r�   r�  r—   râ   r>  r&   rô   r�  r‘  r’  rq  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�   rX  )ÚevenZoddZconstantr!   rm  r  r�  )r%   ro  r�   r�  r—   râ   r>  r&   rô   r�  r’  rX  Zzz_extZxr_extrq  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   r2  rÖ   rc  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Ö   rc  rW  )re   r  rÖ   rc  iõ  )r]  r1  rU   r   é!   )rj  rŠ  rÖ   rà   r  rU   y              ð?rL   T)r—   râ   ro   r�   r´   rz  F)r—   râ   ro   r�   r´   rz  r7   )r—   râ   ro   r�   )r—   râ   ro   r�   rž  rŒ  r  )r    r  r	  r4   r
  rŽ  Úexprý   r   r   rn  r   )r%   ro  r�   r�  r—   râ   ro   r>  r&   Zxcrô   rZ  Zzcr‘  r’  Zxcrrq  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  rx   r   r   ra   r  éþÿÿÿrU  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<   )rX  r>   Tr   é?   Nr   r   rà   éA   r   éB   r2   Frƒ  )r7   rX  r>   ra   )rž  rX  r>   r¦  é�   )r    r!   ÚcomplexZfftZirfftÚsumrw  r   r   r   r{  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“   r[  rr  ry  r.  r‚  rR  ÚmarkZparametrizer“  r—  rš  r�  rŸ  r¡  r¢  r¥  r  r³  r*   r*   r*   r+   rQ  L  s"   R

+!#rQ  )%Únumpyr    Znumpy.testingr   r   r   r   r   r   r   rR  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)  r0  rQ  r*   r*   r*   r+   Ú<module>   s(   $0 V  @  M4 