o
    Ö­jk3 ã                   @   sH  d dl Z d dlZd dlmZmZmZmZmZm	Z	 d dl
Z
d dl
mZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d d	l m!Z! d d
l"m#Z$ d dl"m%Z& d dl"m'Z( G dd„ dƒZ)G dd„ dƒZ*G dd„ dƒZ+G dd„ dƒZ,G dd„ dƒZ-G dd„ dƒZ.G dd„ dƒZ/G dd„ dƒZ0dS )é    N)Úassert_Úassert_allcloseÚassert_array_equalÚassert_equalÚassert_array_almost_equal_nulpÚsuppress_warnings)Úraises)Úsignal)ÚfftfreqÚrfftfreqÚfftÚirfft)Ú	trapezoid)ÚperiodogramÚwelchÚlombscargleÚ	coherenceÚspectrogramÚ
check_COLAÚ
check_NOLA)Úhann)Ú_spectral_helper)Ústft_compare)Úistft_compare)Úcsd_comparec                   @   sè   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zejjejdkdd�dd„ ƒZejjejdkdd�dd„ ƒZdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0S )1ÚTestPeriodogramc                 C   sj   t  d¡}d|d< t|ƒ\}}t|t  ddd¡ƒ t  d¡}d|d< |d  d  < |d }t||ƒ d S )	Né   é   r   ç      à?é	   éÿÿÿÿç       @é   ©ÚnpÚzerosr   r   ÚlinspaceÚones©ÚselfÚxÚfÚpÚq© r.   ú]/var/www/html/CropPilot/venv/lib/python3.10/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_spectrum7   s   
z"TestPeriodogram.test_real_spectrumc                 C   sn   t jdtd�}d|d< t|ƒ\}}t|t  ddd¡ƒ t  d¡}d|d< |d  d  < |d	 }t||ƒ d S )
Nr   ©Údtyper   r   r   r   r    r!   r"   )r$   r%   Úintr   r   r&   r'   r(   r.   r.   r/   Útest_integer_even?   s   
z!TestPeriodogram.test_integer_evenc                 C   sb   t jdtd�}d|d< t|ƒ\}}t|t  d¡d ƒ t  d¡}d|d< |d9 }t||d	d
� d S )Nr1   rF   r   r   r2   r3   r"   r4   r5   r6   )r$   r%   rH   r   r   r8   r'   r(   r.   r.   r/   Útest_integer_oddJ   s   
z TestPeriodogram.test_integer_oddc                 C   sX   t jdtd�}d|d< t|dd�\}}t|tddƒƒ t  dd¡}d|d< t||ƒ d S )	Nr   rF   r   r   Fr:   r<   r=   )r$   r%   rH   r   r   r
   r>   r(   r.   r.   r/   Útest_integer_twosidedT   ó   z%TestPeriodogram.test_integer_twosidedc                 C   sX   t  dt j¡}d|d< t|dd�\}}t|tddƒƒ t  dd¡}d|d< t||ƒ d S )Nr   ù      ð?       @r   Fr:   r<   ç      Ô?)r$   r%   Ú
complex128r   r   r
   r>   r(   r.   r.   r/   Útest_complex]   rL   zTestPeriodogram.test_complexc                 C   s   t ttt dtj¡dd� d S )Né   ÚfoorA   )Úassert_raisesÚ
ValueErrorr   r$   r%   rO   ©r)   r.   r.   r/   Útest_unk_scalingf   s   
ÿz TestPeriodogram.test_unk_scalingl        zOn some 32-bit tolerance issue)Úreasonc                 C   s´   t jdt jd�}| d¡}d|d d …d d …df< t|ƒ\}}t|jdƒ t|ddd d …f |ddd d …f dƒ t|ddd d …f ƒ\}}t|t jd d …f |dd d …f dƒ d S )	Né   rF   ©é   r   é
   r<   r   ©rZ   r   é   r   é<   )	r$   r%   Úfloat64Úreshaper   r   Úshaper   Únewaxis©r)   r*   r+   r,   Úf0Úp0r.   r.   r/   Útest_nd_axis_m1j   s   
(*zTestPeriodogram.test_nd_axis_m1c                 C   sª   t jdt jd�}| d¡}d|dd d …d d …f< t|dd�\}}t|jdƒ t|d d …ddf |d d …ddf d	ƒ t|d d …ddf ƒ\}}t||d d …ddf ƒ d S )
NrX   rF   ©r[   rZ   r   r<   r   ©Úaxis©r]   rZ   r   r   r^   )r$   r%   r_   r`   r   r   ra   r   rc   r.   r.   r/   Útest_nd_axis_0x   s   
(zTestPeriodogram.test_nd_axis_0c                 C   sr   t  d¡}d|d< t|ddƒ\}}t dd¡}t|d|ƒ\}}t||ƒ t||ƒ t dd¡}ttt|d|ƒ d S )Nr   r   r   r[   r   é    )r$   r%   r   r	   Ú
get_windowr   rS   rT   ©r)   r*   r+   r,   ÚwinÚfeÚpeÚwin_errr.   r.   r/   Útest_window_external†   s   


ÿz$TestPeriodogram.test_window_externalc                 C   sf   t  d¡}d|d< t|ƒ\}}t|dd�\}}t||d d d… ƒ t||d d d… ƒ t|jdƒ d S )Nr   r   r   rl   ©ÚnfftrZ   )é   )r$   r%   r   r   r   ra   )r)   r*   r+   r,   ÚfpÚppr.   r.   r/   Útest_padded_fft’   s   
zTestPeriodogram.test_padded_fftc                 C   ó\   t g ƒ\}}t|jdƒ t|jdƒ dD ]}t t |¡ƒ\}}t|j|ƒ t|j|ƒ qd S ©N©r   ©r|   ©é   r   ©r   é   rZ   )r   r   ra   r$   Úempty©r)   r+   r,   ra   r.   r.   r/   Útest_empty_input›   ó   ýz TestPeriodogram.test_empty_inputc                 C   ó<   dD ]}t t |¡dd�\}}t|j|ƒ t|j|ƒ qd S ©N©r~   r€   r   rh   )r   r$   r‚   r   ra   ©r)   ra   r+   r,   r.   r.   r/   Útest_empty_input_other_axis¤   ó
   ý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   rt   r   r   r    r!   r"   r#   r(   r.   r.   r/   Útest_short_nfftª   ó   

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   rt   r   r   r    r!   r"   r#   r(   r.   r.   r/   Útest_nfft_is_xshapeµ   rŽ   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   rG   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 )Nr1   r+   r   r   r2   r3   r"   r4   çH¯¼šò×z>r6   )r$   r%   r   r   r8   r'   r   rG   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   Fr:   r<   r=   ©r$   r%   r   r   r
   r>   r   rG   r(   r.   r.   r/   Útest_real_twosided_32×   ó   
z%TestPeriodogram.test_real_twosided_32c                 C   sh   t  dd¡}d|d< t|dd�\}}t|tddƒƒ t  ddd	¡}d|d< t||ƒ t|j|jkƒ d S )
Nr   ÚFrM   r   Fr:   r<   rN   r+   r“   r(   r.   r.   r/   Útest_complex_32á   r•   zTestPeriodogram.test_complex_32c                 C   s`   t  d¡}d|d< t dd¡}d}tt|d�� t||d� W d   ƒ d S 1 s)w   Y  d S )	Nr   r   r   r   r[   zOthe size of the window must be the same size of the input on the specified axis©Úmatch©Úwindow)r$   r%   r	   rm   rS   rT   r   )r)   r*   ro   Úexpected_msgr.   r.   r/   Útest_shorter_window_errorë   s   
"ÿz)TestPeriodogram.test_shorter_window_errorN)Ú__name__Ú
__module__Ú__qualname__r0   r9   r?   rE   rI   rJ   rK   rP   rV   ÚpytestÚmarkÚskipifÚsysÚmaxsizerf   rk   rs   ry   r„   rŠ   r�   r�   r�   r’   r”   r—   r�   r.   r.   r.   r/   r      s>    
	
		þ

þ

		

r   c                   @   ó  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAS )BÚ	TestWelchc                 C   s`   t  d¡}d|d< d|d< t|dd�\}}t|t  ddd¡ƒ t  g d¢¡}t||d	d	d
� d S ©Nr   r   r   r"   ©Únpersegr   r�   ©çiKGUUµ?gÝæSè8ŽÃ?ç#¬ÇqÌ?r­   ç#¬Çq¼?r‘   ©r7   Úrtol©r$   r%   r   r   r&   Úarrayr(   r.   r.   r/   r0   ö   ó   
z!TestWelch.test_real_onesided_evenc                 C   s`   t  d¡}d|d< d|d< t|dd�\}}t|t  d¡d ƒ t  g d	¢¡}t||d
d
d� d S ©Nr   r   r   r"   r   r©   ç      @ç      "@©g•„Ÿ“9ñ¿?gµ³¿ÙýÍ?çp£0ÚÅ?r¸   r¸   r‘   r¯   )r$   r%   r   r   r8   r²   r(   r.   r.   r/   r9      r³   z TestWelch.test_real_onesided_oddc                 C   s^   t  d¡}d|d< d|d< t|ddd�\}}t|tddƒƒ t  g d¢¡}t||d	d	d
� d S ©Nr   r   r   r"   F©rª   r;   r<   ©r¬   çÝæSè8Ž³?r®   r®   r®   r®   r®   r¼   r‘   r¯   )r$   r%   r   r   r
   r²   r(   r.   r.   r/   r?   
  s   
zTestWelch.test_real_twosidedc                 C   sb   t  d¡}d|d< d|d< t|ddd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� d S ©Nr   r   r   r"   r@   )rª   rB   r   r�   )g      �?g¥-UU�?ç.i÷qUU¥?r¾   g¥-UU•?r‘   r¯   r±   r(   r.   r.   r/   rE     ó   
zTestWelch.test_real_spectrumc                 C   sd   t jdtd�}d|d< d|d< t|dd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� d S ©Nr   rF   r   r   r"   r©   r   r�   r«   r‘   r¯   )r$   r%   rH   r   r   r&   r²   r(   r.   r.   r/   Útest_integer_onesided_even  ó   z$TestWelch.test_integer_onesided_evenc                 C   sd   t jdtd�}d|d< d|d< t|dd�\}}t|t  d¡d	 ƒ t  g d
¢¡}t||ddd� d S ©Nr   rF   r   r   r"   r   r©   rµ   r¶   r·   r‘   r¯   )r$   r%   rH   r   r   r8   r²   r(   r.   r.   r/   Útest_integer_onesided_odd(  rÂ   z#TestWelch.test_integer_onesided_oddc                 C   sb   t jdtd�}d|d< d|d< t|ddd�\}}t|tddƒƒ t  g d	¢¡}t||d
d
d� d S ©Nr   rF   r   r   r"   Frº   r<   r»   r‘   r¯   )r$   r%   rH   r   r   r
   r²   r(   r.   r.   r/   rK   2  ó   zTestWelch.test_integer_twosidedc                 C   sb   t  dt j¡}d|d< d|d< t|ddd�\}}t|tddƒƒ t  g d¢¡}t||d	d	d
� d S ©Nr   rM   r   r"   Frº   r<   )g&í>®ªªÚ?ç#¬ÇqØ?çnó)tÇá?rÉ   rÉ   rÉ   rÉ   rÈ   r‘   r¯   )r$   r%   rO   r   r   r
   r²   r(   r.   r.   r/   rP   <  rÆ   zTestWelch.test_complexc                 C   s    t ttt dtj¡ddd� d S ©NrQ   rR   )rB   rª   )rS   rT   r   r$   r%   rO   rU   r.   r.   r/   rV   F  s   
ÿzTestWelch.test_unk_scalingc                 C   s>   t jdt jd�d }t|ddd�\}}t|t  |¡dd� d S ©Nr[   rF   ç{®Gáz¤?Úlinear©rª   Údetrendr5   r6   ©r$   r8   r_   r   r   Ú
zeros_like©r)   r*   r+   r,   r.   r.   r/   Útest_detrend_linearJ  s   zTestWelch.test_detrend_linearc                 C   s\   t jdt jd�d }t|ddd�\}}t|ddd„ d�\}}t||dd	� t||dd	� d S )
Nr[   rF   rÌ   FrÎ   c                 S   ó   | S ©Nr.   ©r*   r.   r.   r/   Ú<lambda>R  ó    z.TestWelch.test_no_detrending.<locals>.<lambda>r5   r6   )r$   r8   r_   r   r   ©r)   r*   Úf1Úp1Úf2Úp2r.   r.   r/   Útest_no_detrendingO  s
   zTestWelch.test_no_detrendingc                 C   sB   t jdt jd�d }t|ddd„ d�\}}t|t  |¡dd� d S )	Nr[   rF   rÌ   c                 S   ó   t j| dd�S ©NÚl)Útype©r	   rÏ   ©Úsegr.   r.   r/   r×   Y  ó    z1TestWelch.test_detrend_external.<locals>.<lambda>rÎ   r5   r6   rÐ   rÒ   r.   r.   r/   Útest_detrend_externalV  s
   
ÿzTestWelch.test_detrend_externalc                 C   sL   t jdt jd�d }| d¡}t|ddd„ d�\}}t|t  |¡d	d
� d S )Né(   rF   rÌ   ©rZ   rZ   r[   r[   c                 S   rß   rà   rã   rä   r.   r.   r/   r×   `  ræ   z7TestWelch.test_detrend_external_nd_m1.<locals>.<lambda>rÎ   r5   r6   )r$   r8   r_   r`   r   r   rÑ   rÒ   r.   r.   r/   Útest_detrend_external_nd_m1\  s   

ÿz%TestWelch.test_detrend_external_nd_m1c                 C   s\   t jdt jd�d }| d¡}t  |dd¡}t|dddd	„ d
�\}}t|t  |¡dd� d S )NrX   rF   rÌ   rY   rZ   r   r[   c                 S   ó   t j| ddd�S ©Nr   rá   )ri   râ   rã   rä   r.   r.   r/   r×   h  ó    z6TestWelch.test_detrend_external_nd_0.<locals>.<lambda>©rª   ri   rÏ   r5   r6   )r$   r8   r_   r`   Úmoveaxisr   r   rÑ   rÒ   r.   r.   r/   Útest_detrend_external_nd_0c  s   

ÿz$TestWelch.test_detrend_external_nd_0c                 C   s²   t jdt jd�d }| d¡}t|dd�\}}t|jdƒ t|ddd d …f |d	dd d …f d
d
d� t|ddd d …f dd�\}}t|t jd d …f |d	d d …f d
d
d� d S ©NrX   rF   rÌ   rY   r[   r©   r\   r   r   ç‚vIhÂ%<=r¯   )	r$   r8   r_   r`   r   r   ra   r   rb   rc   r.   r.   r/   rf   k  s   
,.zTestWelch.test_nd_axis_m1c                 C   s¨   t jdt jd�d }| d¡}t|ddd�\}}t|jdƒ t|d d …ddf |d d …d	df d
d
d� t|d d …ddf dd�\}}t||d d …d	df d
d
d� d S ©NrX   rF   rÌ   rg   r[   r   )rª   ri   rj   r   rò   r¯   r©   )r$   r8   r_   r`   r   r   ra   r   rc   r.   r.   r/   rk   t  s   
,"zTestWelch.test_nd_axis_0c                 C   s²   t  d¡}d|d< d|d< t|dddd�\}}t dd¡}t|d|d d�\}}t||ƒ t||ƒ t|jdƒ t|jdƒ tt	t|d|d	d� t dd
¡}tt	t|d|d d� d S )Nr   r   r   r"   r[   r   r©   ©r�   rQ   rl   )
r$   r%   r   r	   rm   r   r   ra   rS   rT   rn   r.   r.   r/   rs   }  s"   


ÿ
ÿzTestWelch.test_window_externalc                 C   rz   r{   )r   r   ra   r$   r‚   rƒ   r.   r.   r/   r„   Ž  r…   zTestWelch.test_empty_inputc                 C   r†   r‡   )r   r$   r‚   r   ra   r‰   r.   r.   r/   rŠ   —  r‹   z%TestWelch.test_empty_input_other_axisc           
      C   s¦   t  d¡}d|d< tƒ �!}d}| t|¡ t|dd�\}}t|ddd�\}}W d   ƒ n1 s0w   Y  t|dd	�\}}	t||ƒ t||	ƒ t||ƒ t||	ƒ d S ©
Nr"   r   r   zBnperseg = 256 is greater than input length  = 8, using nperseg = 8r   rš   é   ©r›   rª   r©   )r$   r%   r   ÚfilterÚUserWarningr   r   ©
r)   r*   ÚsupÚmsgr+   r,   rÚ   rÛ   rÜ   rÝ   r.   r.   r/   Útest_short_data�  s   
ü


zTestWelch.test_short_datac              	   C   sF   t ttt d¡dt g d¢¡ƒ t ttt d¡dt d¡ d¡ƒ d S ©NrQ   r   )r   r   r   r   r   r]   )rZ   r   )rS   rT   r   r$   r%   r²   r8   r`   rU   r.   r.   r/   Útest_window_long_or_nd­  s    ÿz TestWelch.test_window_long_or_ndc                 C   sJ   t  d¡}d|d d d…< t|ddd�\}}t  g d¢¡}t||dd	� d S ©
Né@   r   r"   r   rQ   ©rª   Únoverlap)	r   gUUUUUUµ?çUUUUUUÕ?çš™™™™™É?r  r  r  r  gUUUUUUÅ?gê-�™—q=r6   )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 ©NrQ   r   r   rZ   é   )rS   rT   r   r$   r%   rU   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é   r   rQ   )ru   rª   )rS   rT   r   r$   r'   rU   r.   r.   r/   Útest_nfft_too_short½  s   zTestWelch.test_nfft_too_shortc                 C   st   t  dd¡}d|d< d|d< t|dd�\}}t|t  ddd¡ƒ t  g d	¢d¡}t||d
d
d� t|j|jkƒ d S ©Nr   r+   r   r   r"   r©   r   r�   r«   r‘   r¯   )r$   r%   r   r   r&   r²   r   rG   r(   r.   r.   r/   r�   À  ó   
ÿz$TestWelch.test_real_onesided_even_32c                 C   st   t  dd¡}d|d< d|d< t|dd�\}}t|t  d¡d	 ƒ t  g d
¢d¡}t||ddd� t|j|jkƒ d S ©Nr   r+   r   r   r"   r   r©   rµ   r¶   )gâÝx:ñ¿?gyÑ²IÙýÍ?r¸   g´wã0ÚÅ?r¸   r‘   r¯   )r$   r%   r   r   r8   r²   r   rG   r(   r.   r.   r/   r’   Ë  r  z#TestWelch.test_real_onesided_odd_32c                 C   sr   t  dd¡}d|d< d|d< t|ddd�\}}t|tddƒƒ t  g d	¢d¡}t||d
d
d� t|j|jkƒ d S ©Nr   r+   r   r   r"   Frº   r<   r»   r‘   r¯   ©r$   r%   r   r   r
   r²   r   rG   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  g d	¢d
¡}t||ddd� t|j|jkd|j› d|j› �ƒ d S ©Nr   r–   rM   r   r"   Frº   r<   )gµ%‚£ªªÚ?çAŠ2ÇqØ?çŒd°^Çá?r  gàºæ~Çá?r  r  r  r+   r‘   r¯   zdtype mismatch, ú, r  r(   r.   r.   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  é   r<   rZ   r   r    r�   ©rª   ru   r]   é   )r$   r%   r
   r   r   )r)   r*   ru   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 ]7}t||||dd�\}	}
t||||d	d�\}}t|
| |d d
 ƒ tt t||ƒ¡|t d¡ d dd� q+d S )NrX   g     ˆÃ@r[   é,  rZ   )r   Úbartlett)Útukeyçš™™™™™¹?Úflattopr@   )Úfsrª   r›   rB   rC   r!   gü©ñÒMbP?©r°   )	rH   r$   r8   ÚsinÚpir   r   Úsqrtr   )r)   ÚAr#  rª   ÚfsigÚiiÚttr*   r›   r  Úp_specÚfreqÚ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 ]8}dgd }d||< | |¡}t||d�\}}t|||j d�\}}t|| 	¡ |d� t|| 	¡ ||j d� qd S )NéÒ  é   r   r   r    rh   ©Úerr_msg)
r$   ÚrandomÚseedÚrandnr   Úranger`   Úndimr   Úsqueeze)	r)   Úx_flatr  Úp_flatÚaÚnewshaper*   Úp_plusÚp_minusr.   r.   r/   Útest_axis_rolling  s   

÷zTestWelch.test_axis_rollingc                 C   st   t  d¡}d|d< d|d< t|ddd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� ttt|ddd� d S )Nr   r   r   r"   Úmedian)rª   Úaverager   r�   )r!  çš™™™™™©?ç        g&EÈ    9rD  r‘   r¯   zunrecognised-average)r$   r%   r   r   r&   r²   rS   rT   r(   r.   r.   r/   Útest_average'  s   


ÿzTestWelch.test_averageN)#rž   rŸ   r    r0   r9   r?   rE   rÁ   rÄ   rK   rP   rV   rÓ   rÞ   rç   rê   rð   rf   rk   rs   r„   rŠ   rý   rÿ   r  r	  r  r�   r’   r”   r—   r  r/  r@  rE  r.   r.   r.   r/   r§   õ   sB    







			r§   c                   @   r¦   )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  rF   r©   ©r$   r%   r&   rO   Úcsdr   ©r)   r*   Úyr+   ÚcrÚ   Úc1r.   r.   r/   Útest_pad_shorter_x5  ó   


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  rF   r©   rG  rI  r.   r.   r/   Útest_pad_shorter_y@  rN  zTestCSD.test_pad_shorter_yc                 C   sb   t  d¡}d|d< d|d< t||dd�\}}t|t  ddd¡ƒ t  g d¢¡}t||d	d	d
� d S r¨   ©r$   r%   rH  r   r&   r²   r(   r.   r.   r/   r0   K  r¿   zTestCSD.test_real_onesided_evenc                 C   sb   t  d¡}d|d< d|d< t||dd�\}}t|t  d¡d ƒ t  g d	¢¡}t||d
d
d� d S r´   )r$   r%   rH  r   r8   r²   r(   r.   r.   r/   r9   U  r¿   zTestCSD.test_real_onesided_oddc                 C   s`   t  d¡}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d¢¡}t||d	d	d
� d S r¹   )r$   r%   rH  r   r
   r²   r(   r.   r.   r/   r?   _  s   
zTestCSD.test_real_twosidedc                 C   sd   t  d¡}d|d< d|d< t||ddd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� d S r½   rP  r(   r.   r.   r/   rE   i  s   
zTestCSD.test_real_spectrumc                 C   sf   t jdtd�}d|d< d|d< t||dd�\}}t|t  ddd¡ƒ t  g d	¢¡}t||d
d
d� d S rÀ   )r$   r%   rH   rH  r   r&   r²   r(   r.   r.   r/   rÁ   s  ó   z"TestCSD.test_integer_onesided_evenc                 C   sf   t jdtd�}d|d< d|d< t||dd�\}}t|t  d¡d	 ƒ t  g d
¢¡}t||ddd� d S rÃ   )r$   r%   rH   rH  r   r8   r²   r(   r.   r.   r/   rÄ   }  rQ  z!TestCSD.test_integer_onesided_oddc                 C   sd   t jdtd�}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d	¢¡}t||d
d
d� d S rÅ   )r$   r%   rH   rH  r   r
   r²   r(   r.   r.   r/   rK   ‡  ó   zTestCSD.test_integer_twosidedc                 C   sd   t  dt j¡}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d¢¡}t||d	d	d
� d S rÇ   )r$   r%   rO   rH  r   r
   r²   r(   r.   r.   r/   rP   ‘  rR  zTestCSD.test_complexc                 C   s,   t ttt dtj¡t dtj¡ddd� d S rÊ   )rS   rT   rH  r$   r%   rO   r'   rU   r.   r.   r/   rV   ›  s   
ÿzTestCSD.test_unk_scalingc                 C   s@   t jdt jd�d }t||ddd�\}}t|t  |¡dd� d S rË   ©r$   r8   r_   rH  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 )
Nr[   rF   rÌ   FrÎ   c                 S   rÔ   rÕ   r.   rÖ   r.   r.   r/   r×   §  rØ   z,TestCSD.test_no_detrending.<locals>.<lambda>r5   r6   )r$   r8   r_   rH  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 )	Nr[   rF   rÌ   c                 S   rß   rà   rã   rä   r.   r.   r/   r×   ®  ræ   z/TestCSD.test_detrend_external.<locals>.<lambda>rÎ   r5   r6   rS  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è   rF   rÌ   ré   r[   c                 S   rß   rà   rã   rä   r.   r.   r/   r×   µ  ræ   z5TestCSD.test_detrend_external_nd_m1.<locals>.<lambda>rÎ   r5   r6   )r$   r8   r_   r`   rH  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 )NrX   rF   rÌ   rY   rZ   r   r[   c                 S   rë   rì   rã   rä   r.   r.   r/   r×   ½  rí   z4TestCSD.test_detrend_external_nd_0.<locals>.<lambda>rî   r5   r6   )r$   r8   r_   r`   rï   rH  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$   r8   r_   r`   rH  r   ra   r   rb   rc   r.   r.   r/   rf   À  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$   r8   r_   r`   rH  r   ra   r   rc   r.   r.   r/   rk   É  s   
,."zTestCSD.test_nd_axis_0c              	   C   s¸   t  d¡}d|d< d|d< t||dddƒ\}}t dd¡}t||d|d d�\}}t||ƒ t||ƒ t|jdƒ t|jdƒ tt	t||d|d	d� t dd
¡}tt	t||d|d d� d S )Nr   r   r   r"   r[   r   r©   rô   rö   rl   )
r$   r%   rH  r	   rm   r   r   ra   rS   rT   rn   r.   r.   r/   rs   Ò  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 ]}t t |¡t |¡ƒ\}}t|j|ƒ t|j|ƒ q.t t d¡t d¡ƒ\}}t|jdƒ t|jdƒ t t d¡t d¡ƒ\}}t|jdƒ t|jdƒ d S )Nr[   r|   r}   )r�   r   )rH  r$   r%   r   ra   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   rh   )r[   r[   r   )r[   r   r   )r[   r   r   )rH  r$   r‚   r   ra   r%   r‰   r.   r.   r/   rŠ   ù  s   z#TestCSD.test_empty_input_other_axisc           
      C   s¬   t  d¡}d|d< tƒ �#}d}| t|¡ t||dd�\}}t||ddd�\}}W d   ƒ n1 s2w   Y  t||dd	�\}}	t||ƒ t||	ƒ t||ƒ t||	ƒ d S rõ   )r$   r%   r   rø   rù   rH  r   rú   r.   r.   r/   rý     s   
ü


zTestCSD.test_short_datac              
   C   sV   t ttt d¡t d¡dt g d¢¡ƒ t ttt d¡t d¡dt d¡ d¡ƒ d S rþ   )	rS   rT   rH  r$   r%   r'   r²   r8   r`   rU   r.   r.   r/   rÿ     s   ÿÿzTestCSD.test_window_long_or_ndc                 C   sL   t  d¡}d|d d d…< t||ddd�\}}t  g d¢¡}t||dd	� d S r   )r$   r%   rH  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  )rS   rT   rH  r$   r%   r'   rU   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
  )rS   rT   rH  r$   r'   r%   rU   r.   r.   r/   r  *  s   
ÿzTestCSD.test_nfft_too_shortc                 C   sv   t  dd¡}d|d< d|d< t||dd�\}}t|t  ddd¡ƒ t  g d	¢d¡}t||d
d
d� t|j|jkƒ d S r  )r$   r%   rH  r   r&   r²   r   rG   r(   r.   r.   r/   r�   .  ó   
ÿz"TestCSD.test_real_onesided_even_32c                 C   sv   t  dd¡}d|d< d|d< t||dd�\}}t|t  d¡d	 ƒ t  g d
¢d¡}t||ddd� t|j|jkƒ d S r  )r$   r%   rH  r   r8   r²   r   rG   r(   r.   r.   r/   r’   9  rT  z!TestCSD.test_real_onesided_odd_32c                 C   st   t  dd¡}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d	¢d¡}t||d
d
d� t|j|jkƒ d S r  ©r$   r%   rH  r   r
   r²   r   rG   r(   r.   r.   r/   r”   D  s   
þzTestCSD.test_real_twosided_32c                 C   s†   t  dd¡}d|d< d|d< t||ddd�\}}t|tddƒƒ t  g d	¢d
¡}t||ddd� t|j|jkd|j› d|j› �ƒ d S r  rU  r(   r.   r.   r/   r—   P  s   
ÿÿzTestCSD.test_complex_32c                 C   sÜ   t  d¡}t  d¡}d}t|dƒd |d d … }|d  d9  < t||d|d�\}}t||d	|d�\}}t||ƒ t||ƒ d
}t|dƒd |d d … }t||d|d�\}}t||d	|d�\}}t||ƒ t||ƒ d S r  )r$   r%   r'   r
   rH  r   )r)   r*   rJ  ru   r+   r  r  r  r.   r.   r/   r  \  s   




zTestCSD.test_padded_freqsc                 C   s„   t j d¡}| ¡ }t||dddd�\}}t||dddd�\}}t||ƒ t||dddd�\}}t||dddd�\}}t||ƒ d S )Nr  r"   ÚmeanF)rª   rB  r;   rA  )r$   r4  r6  ÚcopyrH  r   )r)   r*   rJ  r  Úp_sameÚp_copiedr.   r.   r/   Útest_copied_datao  s    

ÿ

ÿ


ÿ

ÿzTestCSD.test_copied_dataN)#rž   rŸ   r    rM  rO  r0   r9   r?   rE   rÁ   rÄ   rK   rP   rV   rÓ   rÞ   rç   rê   rð   rf   rk   rs   r„   rŠ   rý   rÿ   r  r	  r  r�   r’   r”   r—   r  rZ  r.   r.   r.   r/   rF  4  sB    







		rF  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestCoherencec                 C   sX   t j d¡}t  |¡}t  ddd¡}t  d¡}t||dd�\}}t||ƒ t||ƒ d S ©NrX   r   r   r]   r[   r©   )r$   r4  r6  rW  r&   r'   r   r   ©r)   r*   rJ  r+   ÚCrÚ   ÚC1r.   r.   r/   Útest_identical_input�  s   


z"TestCoherence.test_identical_inputc                 C   sT   t j d¡}| }t  ddd¡}t  d¡}t||dd�\}}t||ƒ t||ƒ d S r\  )r$   r4  r6  r&   r'   r   r   r]  r.   r.   r/   Útest_phase_shifted_inputŒ  s   

z&TestCoherence.test_phase_shifted_inputN)rž   rŸ   r    r`  ra  r.   r.   r.   r/   r[  €  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 )Nr1  r<   ©r   g      Ð?r   rZ   r    rh   )r$   r4  r6  r   r   r   rV  )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 )Nr1  r<   rc  r   rZ   r  )r   )r   éI   r"   r©   i   )
r$   r4  r6  r   r	   rm   r   ra   rS   rT   )r)   r*   r#  r›   rª   r  r+   r  rd  ro   rp   ÚPerr   r.   r.   r/   rs   ¦  s"   ÿ
ÿz$TestSpectrogram.test_window_externalc                 C   sÀ   t j d¡}d}t||dd�\}}}tƒ �}| td¡ t||ddd�\}}}W d   ƒ n1 s1w   Y  t||dd	�\}	}}
t||dd	�\}}}t||	ƒ t||
ƒ t||ƒ t||ƒ d S )
Nr1  r<   rc  rš   zInperseg = 1025 is greater than input length  = 1024, using nperseg = 1024i  r÷   rö   r©   )r$   r4  r6  r   r   rø   rù   r   )r)   r*   r#  r+   r  r,   rû   rÚ   rÛ   rÜ   rÝ   Úf3Úp3r.   r.   r/   rý   ¹  s"   ÿÿü


zTestSpectrogram.test_short_dataN)rž   rŸ   r    rg  rs   rý   r.   r.   r.   r/   rb  ˜  s    rb  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!S )"ÚTestLombscarglec                 C   s  d}d}dt j }d}d}d}t j d¡}| |¡}t  dt j d	t j |¡||k }	|t  ||	 | ¡ }
t  dd	|¡}t|	|
|ƒ}|d
 |d  }||t  |¡  |d k sZJ ‚t|	|
|t j	|	|j
d�d�}|d
 |d  }||t  |¡  |d k sJ ‚dS )zgTest if frequency location of peak corresponds to frequency of
        generated input signal.
        r!   r<   r   éd   éè  çffffffæ?éé# ç{®Gáz„?ç      $@r   r   rF   ©ÚweightsN)r$   r&  r4  ÚRandomStateÚrandr&   r%  r   ÚargmaxÚ	ones_likerG   )r)   ÚamplÚwÚphiÚninÚnoutr,   ÚrngÚrÚtrJ  r+   rd  Údeltar.   r.   r/   Útest_frequencyÎ  s"   

""zTestLombscargle.test_frequencyc                 C   s¸   d}d}dt j }d}d}d}t j d¡}| |¡}t  dt j dt j |¡||k }	|t  ||	 | ¡ }
t  dd|¡}t|	|
|ƒ}t  d	| |	j	d
  ¡}t
|||k |dd� d S )Nr!   r<   r   rn  ro  rp  rq  rr  g      @r   rC  r$  )r$   r&  r4  ru  rv  r&   r%  r   r'  ra   r   )r)   ry  rz  r{  r|  r}  r,   r~  r  r€  rJ  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  d	t j d
t j |¡|	|k }
|t  ||
 | ¡ | }t  d	d
|¡}t|
||dd�}t|
|| ¡  |dd�}t	||ƒ t|
||ddd�}t|
|| ¡  |ddd�}t	||ƒ d S )Nr!   r<   r   rm  rn  ro  g333333Ã?rp  rq  rr  T)Ú	precenterF)r…  Úfloating_mean)
r$   r&  r4  ru  rv  r&   r%  r   rV  r   )r)   ry  rz  r{  r|  r}  r,   Úoffsetr~  r  r€  rJ  r+   rƒ  Úpgram2r.   r.   r/   Útest_precenter  s$   

"
zTestLombscargle.test_precenterc                 C   sö   d}d}dt j }d}d}d}t j d¡}| |¡}t  dt j d	t j |¡||k }	|t  ||	 | ¡ }
t  dd	|¡}t|	|
|ƒ}t|	|
|d
d�}t  |	¡t	|	j
d ƒ }||
 |
  ¡ }|}d||	j
d   }t|| |ƒ tt  |¡dƒ d S )Nr!   r<   r   rm  rn  ro  rp  rq  rr  T©Ú	normalizer   rZ   )r$   r&  r4  ru  rv  r&   r%  r   rx  Úfloatra   Úsumr   Úmax)r)   ry  rz  r{  r|  r}  r,   r~  r  r€  rJ  r+   rƒ  rˆ  rt  ÚYY_hatÚYYÚscale_to_user.   r.   r/   Útest_normalize@  s&   

"zTestLombscargle.test_normalizec                 C   sœ  t  ddd¡}t  ddd¡}t  ddd¡d }ttt|||ƒ t jt  t  ddd¡d¡ddd�}t  ddd¡}t  ddd¡d }ttt|||ƒ t  ddd¡}t jt  t  ddd¡d¡ddd�}t  ddd¡d }ttt|||ƒ t  ddd¡}t  ddd¡}t jt  t  ddd¡d¡d ddd�}ttt|||ƒ t  ddd¡}t  ddd¡}t  ddd¡d }t jt  t  ddd¡d¡ddd�}ttt||||d� d S )Nr   r   rZ   r   r!  rh   rs  )r$   r&   rS   rT   r   ÚrepeatÚexpand_dims©r)   r€  rJ  r+   rt  r.   r.   r/   Útest_wrong_shaped  s*   ""&"z TestLombscargle.test_wrong_shapec                 C   sP   t jddddd�}t  d| ¡}t jddddd�d	 }t|||d
 t j ƒ d S )Nr   r[   rn  F)ÚendpointrQ   é2   iô  r!  rZ   )r$   r&   r%  r   r&  )r)   r€  rJ  r+   r.   r.   r/   Útest_lombscargle_atan_vs_atan2…  s   z.TestLombscargle.test_lombscargle_atan_vs_atan2c                 C   sT   t  ddd¡}t  ddd¡}t  ddd¡d }t  ddd¡}ttt||||d� d S )Nr   r   r   r!  rZ   rs  )r$   r&   rS   rT   r   r•  r.   r.   r/   Útest_wrong_shape_weights�  s
   z(TestLombscargle.test_wrong_shape_weightsc                 C   s@   t  d¡}t  d¡}t  d¡}t  d¡}ttt||||d� d S ©Nr   rs  ©r$   r%   r'   rS   rT   r   r•  r.   r.   r/   Útest_zero_division_weights–  s
   



z*TestLombscargle.test_zero_division_weightsc                 C   sz  d}d}d}d}d}d}t j d¡}| |¡}t  dt j d	t j |¡||k }	|t  ||	 | ¡ }
t  dd	|¡}t|	|
|d
d�}t|	|
|dd�}t|	|
|dd�}t|	|
|dd�}t|	|
|dd�}t||ƒ t||ƒ t  	|
¡t
|
jd ƒ }||
 |
  ¡ }|}t|d t
|	jd ƒ|  |ƒ t  ||k¡d d }tt  || ¡|ƒ ttt|	|
|dd� ttt|	|
|dd� d S )Nr!   r<   r   rm  rn  ro  rp  rq  rr  FrŠ  TÚpowerr‹  Ú	amplitudeÚlombrZ   )r$   r4  ru  rv  r&   r&  r%  r   r   rx  rŒ  ra   r�  ÚwhereÚabsrS   rT   )r)   ry  rz  r{  r|  r}  r,   r~  r  r€  rJ  r+   Úpgram_falseÚ
pgram_trueÚpgram_powerÚ
pgram_normÚ	pgram_amprt  r�  r�  Úf_ir.   r.   r/   Útest_normalize_parameterŸ  s4   
"

 z(TestLombscargle.test_normalize_parameterc                 C   s°   d}d}dt j }d}d}d}d}t j d¡}| |¡}	t  d	t j d
t j |¡|	|k }
|t  ||
 | ¡ }t  d	d
|¡}t|
||dd�}t|
|| |dd�}t||ƒ d S )Nr!   r<   r   rm  rn  ro  ç333333@rp  rq  rr  T)r†  )	r$   r&  r4  ru  rv  r&   r%  r   r   ©r)   ry  rz  r{  r|  r}  r,   r‡  r~  r  r€  rJ  r+   rƒ  Úpgram_offsetr.   r.   r/   Útest_offset_removalÐ  s   

"z#TestLombscargle.test_offset_removalc                 C   sÄ   d}d}d}d}d}d}d}t j d¡}| |¡}	t  dt j d	t j |¡|	|k }
|t  ||
 | ¡ }t  dd	|¡}t|
||d
dd�}t|
|| |d
dd�}|d dk sXJ ‚|d dks`J ‚d S )Nr!   r<   r   rn  ro  rZ   rp  rq  rr  TF©r‹  r†  r   ©r$   r4  ru  rv  r&   r&  Úcosr   r«  r.   r.   r/   Útest_floating_mean_falseï  s$   
"ÿz(TestLombscargle.test_floating_mean_falsec                 C   sÒ   d}d}d}d}d}d}d}t j d¡}| |¡}	t  d	t j d
t j |¡|	|k }
|t  ||
 | ¡ | }t  d	d
|¡}t  ||k¡d d }t|
||ddd�}t	t  
|| ¡|ƒ t	t  || ¡ |ƒ d S )Nr!   r<   ç¸…ëQ¸¾?rm  rn  ro  rª  rp  rq  rr  r   rŸ  Tr®  )r$   r4  ru  rv  r&   r&  r°  r¡  r   r   r¢  Úangle)r)   ry  rz  r{  r|  r}  r,   r‡  r~  r  r€  rJ  r+   Úf_indxrƒ  r.   r.   r/   Útest_amplitude_is_correct  s    
"z)TestLombscargle.test_amplitude_is_correctc                 C   sB   t  d¡}t  d¡}t  d¡}t  d¡ }ttt||||d� d S r›  rœ  r•  r.   r.   r/   Útest_negative_weight5  s
   


z$TestLombscargle.test_negative_weightc                 C   sB   g d¢}g d¢}t  ddd¡}dt j | }t|||ddd� d S )	N)yg   ËˆÝAg   üËˆÝAg   öÌˆÝAg   ðÍˆÝAg   êÎˆÝAg   äÏˆÝAg   ÞÐˆÝAg   ØÑˆÝAg   ÒÒˆÝAg   ÌÓˆÝAg   ÆÔˆÝAg   ÀÕˆÝAg   ºÖˆÝAg   ´×ˆÝAg   ®ØˆÝAg   ¨ÙˆÝAg   ¢ÚˆÝAg   œÛˆÝAg   –ÜˆÝAg   �ÝˆÝAg   ðˆÝAg   ñˆÝAg   òˆÝAg   óˆÝAg   ôˆÝAg    õˆÝAg   úõˆÝAg   ôöˆÝAg   î÷ˆÝAg   èøˆÝAg   âùˆÝAg   ÜúˆÝAg   ÖûˆÝAg   ÐüˆÝAg   ÊýˆÝAg   ÄþˆÝAg   ¾ÿˆÝAg   ¸ ‰ÝAg   ²‰ÝAg   ¬‰ÝAg   "‰ÝAg   ‰ÝAg   ‰ÝAg   ‰ÝAg   
‰ÝAg   ‰ÝAg   þ‰ÝAg   ø‰ÝAg   ò ‰ÝAg   ì!‰ÝAg   æ"‰ÝAg   à#‰ÝAg   Ú$‰ÝAg   Ô%‰ÝAg   Î&‰ÝAg   È'‰ÝAg   Â(‰ÝAg   ¼)‰ÝAg   ¶*‰ÝAg   °+‰ÝAg   Zc‰ÝAg   Td‰ÝAg   Ne‰ÝAg   Hf‰ÝAg   Bg‰ÝAg   <h‰ÝAg   6i‰ÝAg   0j‰ÝAg   *k‰ÝAg   $l‰ÝAg   m‰ÝAg   n‰ÝAg   o‰ÝAg   p‰ÝAg   q‰ÝAg    r‰ÝAg   úr‰ÝAg   ôs‰ÝAg   ît‰ÝAg   èu‰ÝAg   Üw‰ÝAg   Öx‰ÝAg   Ðy‰ÝAg   Êz‰ÝAg   Ä{‰ÝAg   ¾|‰ÝAg   ¸}‰ÝAg   ²~‰ÝAg   ¬‰ÝAg   ¦€‰ÝAg    �‰ÝAg   š‚‰ÝAg   ”ƒ‰ÝAg   Ž„‰ÝAg   ˆ…‰ÝAg   ‚†‰ÝAg   |‡‰ÝAg   vˆ‰ÝAg   p‰‰ÝAg   jŠ‰ÝAg   ™‰ÝAg   
š‰ÝAg   ›‰ÝAg   þ›‰ÝAg   øœ‰ÝAg   ò�‰ÝAg   ìž‰ÝAg   æŸ‰ÝAg   à ‰ÝAg   Ú¡‰ÝAg   Ô¢‰ÝAg   Î£‰ÝAg   È¤‰ÝAg   Â¥‰ÝAg   ¼¦‰ÝAg   ¶§‰ÝAg   °¨‰ÝAg   ª©‰ÝAg   ¤ª‰ÝAg   ž«‰ÝAg   ˜¬‰ÝA)yg     @§@g     Ü¨@g     J­@g     ·±@g     9µ@g     ì¸@g     ¬¼@g     2À@g    €Â@g     ÀÃ@g     iÅ@g     øÆ@g    €jÈ@g    €½É@g     ïÊ@g    €üË@g     åÌ@g     ¦Í@g    €?Î@g    €¯Î@g     n¶@g     ×²@g     .¯@g     ª@g     h§@g     ¨@g     Þ«@g     Ó°@g     >´@g     ç·@g     §»@g     b¿@g     …Á@g    €HÃ@g    €÷Ä@g     ŽÆ@g    €È@g    €dÉ@g     ŸÊ@g    €¶Ë@g     p·@g     Ì³@g     m°@g     D«@g     Ò§@g     �§@g     ˜ª@g     ð¯@g     G³@g     ä¶@g     ¡º@g     _¾@g     Á@g    €ÏÂ@g    €„Ä@g     "Æ@g    €¤Ç@g    €É@g     MÊ@g     nË@g    €ìÉ@g     žÈ@g     0Ç@g     ¥Å@g      Ä@g    €DÂ@g     wÀ@g     9½@g     y¹@g     Âµ@g     6²@g     ®@g     \©@g     F§@g     –¨@g     Ð¬@g     k±@g     æ´@g     –¸@g     V¼@g     ÙÁ@g     ™Ã@g     DÅ@g    €ÕÆ@g    €JÈ@g    € É@g     ÕÊ@g     æË@g    €ÑÌ@g    €–Í@g    €3Î@g    €§Î@g    €ñÎ@g    €Ï@g     Ï@g     ÒÎ@g    €sÎ@g    €ëÍ@g    €:Í@g    €bÌ@g     „§@g     æ§@g     p«@g     Š°@g     ì³@g     ’·@g     Q»@g     ¿@g     \Á@g     !Ã@g     ÒÄ@g    €jÆ@g     èÇ@g    €FÉ@g    €„Ê@g    €ŸË@g    €•Ì@g     eÍ@g    €Î@g     ŒÎ@g    €áÎ@i�  éx   rn  rZ   T)r…  r‹  )r$   r&   r&  r   )r)   r€  rJ  ÚperiodsÚangular_freqr.   r.   r/   Útest_list_input>  s
    zTestLombscargle.test_list_inputc                 C   s¢   d}d}d}d}d}d}d}t j d¡}| |¡}	t  d	t j d
t j |¡|	|k }
|t  ||
 | ¡ | }t  dd
|¡}t|
||ddd�}|d dk sOJ ‚d S )Nr!   r<   r²  rm  ié  ro  r   rp  rq  rr  Tr®  ç-Cëâ6?r¯  )r)   ry  rz  r{  r|  r}  r,   r‡  r~  r  r€  rJ  r+   rƒ  r.   r.   r/   Útest_zero_freq†  s   
"zTestLombscargle.test_zero_freqc                 C   s€   dd„ t ddƒD ƒ}t t|ƒ¡}dtj gd }t|||ƒ dd„ t ddƒD ƒ}t t|ƒ¡}tjd gd }t|||ƒ d S )Nc                 S   s   g | ]}|d  ‘qS )r   r.   ©Ú.0r€  r.   r.   r/   Ú
<listcomp>ª  s    z8TestLombscargle.test_simple_div_zero.<locals>.<listcomp>r   rl   r!   rZ   c                 S   s   g | ]}|d  d ‘qS )rQ   r   r.   r½  r.   r.   r/   r¿  °  s    )r7  r$   r'   Úlenr&  r   )r)   r€  rJ  Úfreqsr.   r.   r/   Útest_simple_div_zero¥  s   z$TestLombscargle.test_simple_div_zeroN)rž   rŸ   r    r‚  r„  r‰  r’  r–  r™  rš  r�  r©  r­  r±  rµ  r¶  rº  r¼  rÂ  r.   r.   r.   r/   rl  Í  s"    )!($!		1"$	Hrl  c                   @   sÀ   e Zd Zejjdd„ ƒZdd„ Zdd„ Zdd„ Z	d	d
„ Z
ej dddg¡dd„ ƒZejjdd„ ƒZdd„ Zdd„ Zejj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   s2  dd„ }|dƒ� t dddƒ W d   ƒ n1 sw   Y  |dƒ� t ddd	ƒ W d   ƒ n1 s3w   Y  |d
ƒ� t t d¡ddƒ W d   ƒ n1 sPw   Y  |dƒ� t t d	¡ddƒ W d   ƒ n1 smw   Y  |dƒ� tdddƒ W d   ƒ n1 s‡w   Y  |dƒ� tddd	ƒ W d   ƒ n1 s¡w   Y  |d
ƒ� tt d¡ddƒ W d   ƒ n1 s¾w   Y  |dƒ� tt d	¡ddƒ W d   ƒ n1 sÛw   Y  |dƒ� tdddƒ W d   ƒ n1 sõw   Y  t d¡}t|ƒd }|d
ƒ� t|t d¡d� W d   ƒ n	1 �sw   Y  |dƒ� t|t d¡dd� W d   ƒ n	1 �s=w   Y  |dƒ� t|dd� W d   ƒ n	1 �sXw   Y  |dƒ� t|ddd� W d   ƒ n	1 �stw   Y  |dƒ� t|ddd� W d   ƒ n	1 �s�w   Y  |dƒ� t|ƒ W d   ƒ n	1 �s©w   Y  |d
ƒ� t|t d¡d� W d   ƒ n	1 �sÇw   Y  |dƒ� t|t d¡dd� W d   ƒ n	1 �sæw   Y  |dƒ� t|dd� W d   ƒ n	1 �sw   Y  |dƒ� t|ddd� W d   ƒ n	1 �sw   Y  |dƒ� t|ddd� W d   ƒ n	1 �s9w   Y  tjt	dd �� t|dddd!� W d   ƒ n	1 �sYw   Y  |d"ƒ� t|ddd#� W d   ƒ n	1 �suw   Y  |d$ƒ� t
||d%d&� W d   ƒ n	1 �s‘w   Y  |d'ƒ� t
|d d(… |d(d … d)d&� W d   ƒ n	1 �sµw   Y  |d*ƒ� t
||d%d+� W d   ƒ n	1 �sÑw   Y  d,}|d-|›d.�ƒ� t||d/� W d   ƒ n	1 �sòw   Y  |d-|›d.�ƒ� t||d/� W d   ƒ d S 1 �sw   Y  d S )0Nc                 S   s   t jt| d�S )z�Assert for a ValueError matching regexp `match`.

            This little wrapper allows a more concise code layout.
            r˜   )r¡   r   rT   r˜   r.   r.   r/   Úchk_VE»  s   z.TestSTFT.test_input_validation.<locals>.chk_VEz"nperseg must be a positive integerr   iöÿÿÿr   z#noverlap must be less than nperseg.r[   rX   zwindow must be 1-D)rZ   rZ   z"window must have length of npersegz"noverlap must be less than npersegz&noverlap must be a nonnegative integerr  iàÿÿÿr1  rZ   rš   z>value specified for nperseg is different from length of windowrö   r÷   i ÿÿÿr©   r  z.nfft must be greater than or equal to nperseg.r"   r  zInput stft must be at least 2d!zwindow must have length of 256z1NOLA condition failed, STFT may not be invertibler˜   ©rª   r  r›   z/Must specify differing time and frequency axes!©Ú	time_axisÚ	freq_axisz=Unknown value for mode foo, must be one of: \{'psd', 'stft'\}rR   )Úmodez'x and y must be equal if mode is 'stft'é   Ústftz[Unknown boundary option 'foo', must be one of: \['even', 'odd', 'constant', 'zeros', None\])ÚboundaryÚ	not_validzParameter scaling=z not in \['spectrum', 'psd'\]!rA   )r   r$   r'   r   r%   rË  Úistftr¡   Úwarnsrù   r   )r)   rÄ  r*   ÚzrB   r.   r.   r/   Útest_input_validation¸  sª   
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ
ÿ

ÿ
þ
ÿ
ÿ
ÿ

ÿ
ÿ
ÿ
ÿ
ÿ
ÿþ
ÿ
þ
 ÿ
þÿ$ÿzTestSTFT.test_input_validationc                 C   s2   g d¢}|D ]}dj |Ž }tdt|Ž |d� qd S )N)©Úboxcarr[   r   ©rÓ  r[   r   ©r  é3   é   ©r   rö   é€   ©r   rö   éÀ   ©Úblackmanr  éÈ   ©©r   r   rö   r  ©r   rö   éÿ   ú
{}, {}, {}Tr2  )Úformatr   r   )r)   ÚsettingsÚsettingrü   r.   r.   r/   Útest_check_COLA  s
   
þzTestSTFT.test_check_COLAc                 C   sŠ   g d¢}|D ]}dj |Ž }tdt|Ž |d� qt d¡}d|d d d…< |t|ƒt|ƒd fdg}|D ]}dj |Ž }td	t|Ž |d� q2d S )
N)rÒ  rÔ  )rÓ  r[   r  rÕ  )r  rÖ  r[   rØ  rÚ  )r   rö   é%   rÜ  )rÝ  r  é{   rß  )rà  rö   é&   rá  )r   rö   é'   rã  Tr2  r   r   rZ   )r   r  r   F)rä  r   r   r$   r'   rÀ  )r)   Úsettings_passræ  rü   Úw_failÚsettings_failr.   r.   r/   Útest_check_NOLA  s   

þ
þzTestSTFT.test_check_NOLAc              
   C   sŒ   t j d¡}| 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 )Nr0  r1  r<   r   r   r"   F)Úpaddedr;   rÌ  r@   )r;   rB   rÏ   rZ   r    rh   )	r$   r4  ru  r6  rË  r   r   rV  r¢  )r)   r~  r*   r#  r›   rª   r  r+   r  ÚZre  rf  r.   r.   r/   rg  :  s   
ÿ
ÿ
"z"TestSTFT.test_average_all_segmentsc              	   C   sä   t j d¡}| 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 )Nr0  r1  r<   r   r   r"   )r    r   r   r   rh   r    rÆ  )	r$   r4  ru  r6  rË  r`   rÎ  ÚTr   )r)   r~  r*   r#  r›   rª   r  rÚ   Út1ÚZ1rÜ   Út2ÚZ2Út3Úx1Út4Úx2r.   r.   r/   Útest_permute_axesN  s&   
ÿ
ÿ


zTestSTFT.test_permute_axesrB   r@   Úpsdc              
   C   s    t j d¡}g d¢}|D ]A\}}}}t  |¡}d| |j¡ }	t|	|||d d|d�\}
}
}t|||||d�\}}|› d|› �}t|||d� t|	||d� qd S )	Nr0  ©©rÓ  rm  r[   r   ©rÓ  rm  r[   r   )r  ée   rÖ  r×  ©r   r1  rö   rÙ  )rà  é€  rö   r  )r   r1  rö   râ  r[   F)rª   r  r›   rÏ   rð  rB   )rª   r  r›   rB   r  r2  ©	r$   r4  ru  r8   r6  ÚsizerË  rÎ  r   )r)   rB   r~  rå  r›   ÚNrª   r  r€  r*   r  ÚzzÚtrÚxrrü   r.   r.   r/   Útest_roundtrip_reale  s    	
þ
ÿózTestSTFT.test_roundtrip_realc              
   C   s>  t j d¡}t  d¡}d|d d d…< |dt|ƒt|ƒd fdg}|D ]z\}}}}|› d|› d|› d|› �}t|||ƒr?J |ƒ‚t  |¡}	d| |	j¡ }
t	|
|||d d	d
d�\}}}t
jtdd�� t||||d	d�\}}W d   ƒ n1 sww   Y  t  |	|d t|	ƒ… ¡sŒJ |ƒ‚t  |
|d t|
ƒ… ¡rœJ |ƒ‚q"d S )Nr0  r   r   rZ   rö   )r   rö   r  r   r  r[   Tr%   ©rª   r  r›   rÏ   rð  rÌ  ÚNOLAr˜   ©rª   r  r›   rÌ  )r$   r4  ru  r'   rÀ  r   r8   r6  r  rË  r¡   rÏ  rù   rÎ  Úallclose)r)   r~  rí  rå  r›   r  rª   r  rü   r€  r*   r  r  r  r  r.   r.   r/   Útest_roundtrip_not_nola�  s.   
þ
þÿÿ "ñz TestSTFT.test_roundtrip_not_nolac              
   C   sô   t j d¡}g d¢}|D ]k\}}}}|› d|› d|› �}t|||ƒs&J |ƒ‚t|||ƒr0J |ƒ‚t  |¡}d| |j¡ }	t|	|||d ddd�\}
}
}t	||||dd�\}}|› d|› �}t
||d t|ƒ… |d	� t
|	|d t|	ƒ… |d	� qd S )
Nr0  ))rÓ  rm  r[   r   )r  r   rÖ  rè  )r   r1  rö   é   )rà  r  rö   é   )r   r1  rö   r�   r  r[   Tr%   r
  r  r2  )r$   r4  ru  r   r   r8   r6  r  rË  rÎ  r   rÀ  )r)   r~  rå  r›   r  rª   r  rü   r€  r*   r  r  r  r  r.   r.   r/   Útest_roundtrip_nola_not_cola�  s&   
þ
ÿïz%TestSTFT.test_roundtrip_nola_not_colac              	   C   sº   t j d¡}dg}|D ]O\}}}}t  |¡}d| |j¡ }| t j¡}t||||d dd�\}	}	}
t	|
|||d�\}}|› d|› �}t
|||d� t
|||d	d
d� t|j|jkƒ qd S )Nr0  r  r[   F©rª   r  r›   rÏ   rð  rÅ  r  r2  r»  gñhãˆµøä>)r3  r°   r7   )r$   r4  ru  r8   r6  r  ÚastypeÚfloat32rË  rÎ  r   r   rG   ©r)   r~  rå  r›   r  rª   r  r€  r*   r  r  r  r  rü   r.   r.   r/   Útest_roundtrip_float32»  s"   
ÿ
ÿòzTestSTFT.test_roundtrip_float32c                 C   sR  t j d¡}g d¢}|D ]N\}}}}t  |¡}d| |j¡ d| |j¡  }	t|	|||d dd|d�\}
}
}t||||d|d�\}}|› d|› d|› �}t|||d	� t|	||d	� qt	ƒ �}| 
td
¡ t|	|||d dd|d�\}
}
}W d   ƒ n1 s~w   Y  t||||d|d�\}}|› d|› d|› �}t|||d	� t|	||d	� d S )Nr0  rý  r[   y              $@F)rª   r  r›   rÏ   rð  r;   rB   )rª   r  r›   Úinput_onesidedrB   r  r2  z9Input data is complex, switching to return_onesided=FalseT)r$   r4  ru  r8   r6  r  rË  rÎ  r   r   rø   rù   )r)   rB   r~  rå  r›   r  rª   r  r€  r*   r  r  r  r  rü   rû   r.   r.   r/   Útest_roundtrip_complexÐ  s>   	
 þ
þÿþý
ÿzTestSTFT.test_roundtrip_complexc                 C   sÞ   t j d¡}ddg}|D ]`\}}}}t  |¡}d| |j¡ }t||||d dd d�\}	}	}
t|
||dd�\}	}d	D ]2}t||||d d|d�\}	}	}t|||dd�\}	}|› d
|› d
|› �}t|||d� t|||d� q9qd S )Nr0  rþ  rÿ  r[   Tr
  F)r  r›   rÌ  )ÚevenÚoddÚconstantr%   r  r2  r  )r)   r~  rå  r›   r  rª   r  r€  r*   r  r  r  rÌ  Úzz_extÚxr_extrü   r.   r.   r/   Ú!test_roundtrip_boundary_extensioný  s2   þ
þþ
ÿööz*TestSTFT.test_roundtrip_boundary_extensionc              	   C   s®   t j d¡}ddg}|D ]H\}}}}t  |¡}d| |j¡ }t||||d dd�\}	}	}
t|
||d�\}}|› d|› �}t||d |j… |d	� t||d |j… |d	� qd S )
Nr0  )rÓ  r   r[   r   )r   rn  rö   rÙ  r[   Tr  )r  r›   r  r2  r  r  r.   r.   r/   Útest_roundtrip_padded_signal  s   þ
ÿôz%TestSTFT.test_roundtrip_padded_signalc                 C   sþ   t j d¡}g d¢}|D ]p\}}}}}t  |¡}d| |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 )Nr0  ))r   r1  rö   rÙ  rÊ  )r   r1  rö   rÙ  iõ  )rÓ  rm  r[   r   é!   )rà  r  rö   r  r1  r[   y              ð?rQ   T)rª   r  ru   r›   rÏ   rð  F)rª   r  ru   r›   rÏ   rð  r;   )rª   r  ru   r›   )rª   r  ru   r›   r  r  r2  )r$   r4  ru  r8   r6  r  Úexpr&  rË  rÎ  r   )r)   r~  rå  r›   r  rª   r  ru   r€  r*   Úxcr  rÐ  Úzcr  r  Úxcrrü   r.   r.   r/   Útest_roundtrip_padded_FFT4  s0   

ÿ
þ

ÿ

ÿéz"TestSTFT.test_roundtrip_padded_FFTc                 C   sê   t j d¡}| d¡}t|ƒ\}}}tdƒD ]:}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 )Nr0  r1  r   r   r    rh   r2  éþÿÿÿrÆ  r   zistft transpose minuszistft transpose plus)r$   r4  ru  r6  rË  r7  r`   r8  r   r9  rÎ  rò  r   )r)   r~  r:  r  Úz_flatr<  r=  r*   Úz_plusÚz_minusÚx_transpose_mÚx_transpose_pr.   r.   r/   r@  W  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  rF   r1  rö   rZ   r  r@   )rÌ  rB   Tr   é?   Nr    r   r  éA   r   éB   r6   Frü  )r;   rÌ  rB   rh   )r  rÌ  rB   r&  é�   )r$   r%   Úcomplexr   r   r�  rÀ  rË  rÎ  r   r¢  ÚfinforG   Ú
resolutionÚrealÚimagra   Úconj)r)   ÚXr*   Úpower_xÚZsrø  ÚZpÚpsd_ZpÚZp0ÚZp1Ús2Úpsd_Zp01r.   r.   r/   Útest_roundtrip_scalingq  s8   
((

ÿ
zTestSTFT.test_roundtrip_scalingN)rž   rŸ   r    r¡   r¢   Úthread_unsaferÑ  rç  rï  rg  rû  Úparametrizer	  r  r  r  r  r  r  r%  r@  r?  r.   r.   r.   r/   rÃ  ·  s*    
R

+!#rÃ  c                   @   s¢   e Zd ZU dZdZeed< dZeed< dZ	eed< dZ
eed< ejed	< ejed
< eed< eed< dd„ Zedefdd„ƒZedefdd„ƒZdd„ Zdd„ ZdS )Ú"TestSampledSpectralRepresentationsa  Check energy/power relations from `Spectral Analysis` section in the user guide.

    A 32 sample cosine signal is used to compare the numerical to the expected results
    stated in :ref:`tutorial_SpectralAnalysis` in
    file ``doc/source/tutorial/signal.rst``
    rl   Únr=   rò  r   Úa_refÚl_aÚx_refÚX_refÚE_refÚP_refc                 C   st   t | j| jƒ}t |¡}d| _| jd | j || j< t|ƒ| _t	| jƒ| _
| j| jd  d | _| jd d | _dS )z5Create Cosine signal with amplitude a from spectrum. r   rZ   N)r   rC  rò  r$   rÑ   rE  rD  r   rF  r   rG  ÚtaurH  rI  )r)   r+   rG  r.   r.   r/   Úsetup_methodÄ  s   

z/TestSampledSpectralRepresentations.setup_methodÚreturnc                 C   s   | j | j S )zDuration of signal. ©rC  rò  rU   r.   r.   r/   rJ  Ñ  s   z&TestSampledSpectralRepresentations.tauc                 C   s   d| j | j  S )z
Bin width r   rM  rU   r.   r.   r/   Údelta_fÖ  s   z*TestSampledSpectralRepresentations.delta_fc                 C   sŠ   t d| j t | j¡dd� t | jt| jd ƒ | jƒ t| jj	d | jj
d  ƒ}t | j| j | | jƒ t d| jd  | | jƒ dS )z Test energy and power formulas. rZ   r!  r$  r   N)r   rD  r$   ÚptprF  rò  r�  rH  rG  r3  r4  rC  rI  )r)   Úsum_X_ref_squaredr.   r.   r/   Útest_reference_signalÛ  s
   z8TestSampledSpectralRepresentations.test_reference_signalc                 C   sì  t | jdd�}tt|ƒƒt t|jd |jd  ƒ¡}}t| j	| ƒ}t
| j|| j  | | j| j d ƒ t
|| j | | jd ƒ | j| j t|| ƒd  }| jt|| ƒd  }t
| jt|ƒ | jƒ t
| jt|ƒ | jƒ td| j |ddd�}t| j	fddi|¤Ž\}}	t| j	fddi|¤Ž\}}
t |	j¡j}t
|	t|| ƒd |t|	ƒ d	� t
|
||t|
ƒ d	� tdt| j	ƒd
dœ|¤Ž}t
t| j	fddi|¤Žd |	|t|	ƒ d	� t
t| j	fddi|¤Žd |
|t|
ƒ d	� dS )z‡Verify spectral representations of windowed DFT.

        Furthermore, the scalings of `periodogram` and `welch` are verified.
        F)ÚsymrZ   r   )r#  r›   rÏ   r;   rB   r@   rC   r6   r   r  Nr.   )r   rC  r¢  r�  r$   r'  r3  r4  r   rF  r   rJ  rE  rD  rò  rN  rH  rI  Údictr   r1  rG   r2  rŽ  rÀ  r   )r)   rz  Úc_ampÚc_rmsÚXwÚX_ESDÚX_PSDÚkwr  ÚP_magÚP_psdÚ	float_resr.   r.   r/   Útest_windowed_DFTç  s,   ,&"
ÿ

ÿz4TestSampledSpectralRepresentations.test_windowed_DFTN)rž   rŸ   r    Ú__doc__rC  rH   Ú__annotations__rò  rŒ  rD  rE  r$   ÚndarrayrK  ÚpropertyrJ  rN  rQ  r]  r.   r.   r.   r/   rB  ³  s"   
 

rB  )1r¤   Únumpyr$   Únumpy.testingr   r   r   r   r   r   r¡   r   rS   Úscipyr	   Ú	scipy.fftr
   r   r   r   Úscipy.integrater   Úscipy.signalr   r   r   r   r   r   r   Úscipy.signal.windowsr   Úscipy.signal._spectral_pyr   Ú,scipy.signal.tests._scipy_spectral_test_shimr   rË  r   rÎ  r   rH  r   r§   rF  r[  rb  rl  rÃ  rB  r.   r.   r.   r/   Ú<module>   sB     $ ^  A  N5   m   