
    xf                     4   d dl Z d dlZd dlmZmZmZmZmZm	Z	m
Z
 d dlZd dlmZ d dl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	      Z  G d
 d      Z! G d d      Z" G d d      Z# G d d      Z$ G d d      Z% G d d      Z&y)    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                   D   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zej                  j                  ej                   d
k  d      d        Zej                  j                  ej                   d
k  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestPeriodogramc                    t        j                  d      }d|d<   t        |      \  }}t        |t        j                  ddd             t        j
                  d      }d|d<   |dxx   dz  cc<   |dz  }t        ||       y )	N      r         ?	          @   npzerosr   r   linspaceonesselfxfpqs        B/usr/lib/python3/dist-packages/scipy/signal/tests/test_spectral.pytest_real_onesided_evenz'TestPeriodogram.test_real_onesided_even   sr    HHRL!1~12;;q#q12GGAJ!	"	Q1    c                     t        j                  d      }d|d<   t        |      \  }}t        |t        j                  d      dz         t        j
                  d      }d|d<   |dz  }t        ||d	       y )
N   r   r          @      .@r!   ?V瞯<atol)r#   r$   r   r   aranger&   r'   s        r-   test_real_onesided_oddz&TestPeriodogram.test_real_onesided_odd   sg    HHRL!1~1299S>$./GGAJ!	X15)r/   c                     t        j                  d      }d|d<   t        |d      \  }}t        |t	        dd             t        j
                  dd      }d|d<   t        ||       y )Nr   r   r   Freturn_onesided      ?      ?)r#   r$   r   r   r   fullr'   s        r-   test_real_twosidedz"TestPeriodogram.test_real_twosided(   s\    HHRL!1e4172s+,GGB!1r/   c                     t        j                  d      }d|d<   t        |d      \  }}t        |d      \  }}t        |t        j                  ddd             t        ||d	z         y )
Nr   r   r   spectrumscalingdensityr   r   g      0@)r#   r$   r   r   r%   )r(   r)   r*   r+   gr,   s         r-   test_real_spectrumz"TestPeriodogram.test_real_spectrum1   s]    HHRL!1j111i012;;q#q121T6"r/   c                    t        j                  dt              }d|d<   t        |      \  }}t	        |t        j
                  ddd             t        j                  d      }d|d<   |dxx   dz  cc<   |d	z  }t	        ||       y )
Nr   dtyper   r   r   r   r   r    r!   )r#   r$   intr   r   r%   r&   r'   s        r-   test_integer_evenz!TestPeriodogram.test_integer_even9   su    HHRs#!1~12;;q#q12GGAJ!	"	Q1r/   c                     t        j                  dt              }d|d<   t        |      \  }}t	        |t        j
                  d      dz         t        j                  d      }d|d<   |dz  }t	        ||d	
       y )Nr1   rI   r   r   r2   r3   r!   r4   r5   r6   )r#   r$   rK   r   r   r8   r&   r'   s        r-   test_integer_oddz TestPeriodogram.test_integer_oddD   sj    HHRs#!1~1299S>$./GGAJ!	X15)r/   c                     t        j                  dt              }d|d<   t        |d      \  }}t	        |t        dd             t        j                  dd      }d|d<   t	        ||       y )	Nr   rI   r   r   Fr;   r=   r>   )r#   r$   rK   r   r   r   r?   r'   s        r-   test_integer_twosidedz%TestPeriodogram.test_integer_twosidedN   s_    HHRs#!1e4172s+,GGB!1r/   c                     t        j                  dt         j                        }d|d<   t        |d      \  }}t	        |t        dd             t        j                  dd      }d|d<   t	        ||       y )Nr         ?       @r   Fr;   r=         ?)r#   r$   
complex128r   r   r   r?   r'   s        r-   test_complexzTestPeriodogram.test_complexW   sc    HHR'!1e4172s+,GGB!!1r/   c                 v    t        t        t        t        j                  dt        j
                        d       y )N   foorC   )assert_raises
ValueErrorr   r#   r$   rT   r(   s    r-   test_unk_scalingz TestPeriodogram.test_unk_scaling`   s"    j+rxx2==/I	r/   l        zOn some 32-bit tolerance issuereasonc                    t        j                  dt         j                        }|j                  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       y )	N   rI      r   
   r=   r   rb   r      r   <   )	r#   r$   float64reshaper   r   shaper   newaxisr(   r)   r*   r+   f0p0s         r-   test_nd_axis_m1zTestPeriodogram.test_nd_axis_m1d   s    
 HHRrzz*IIh!Aa%1~1177I.&q1Qx1Qq52>Qq1uX&B&r"**Q,'71Q3Dr/   c                 b   t        j                  dt         j                        }|j                  d      }d|dd d d d f<   t	        |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          y )
Nr`   rI   rc   rb   r   r=   r   axisre   rb   r   r   rf   )r#   r$   rg   rh   r   r   ri   r   rk   s         r-   test_nd_axis_0zTestPeriodogram.test_nd_axis_0r   s    
 HHRrzz*IIh!Aa%11%1177G,&q1Qx1Qq52>Qq1uX&B&r1QqU84r/   c                 .   t        j                  d      }d|d<   t        |dd      \  }}t        j                  dd      }t        |d|      \  }}t        ||       t        ||       t        j                  dd      }t        t        t        |d|       y )Nr   r   r   rc   hann    )r#   r$   r   r   
get_windowr   rY   rZ   r(   r)   r*   r+   winfepewin_errs           r-   test_window_externalz$TestPeriodogram.test_window_external   s    HHRL!1b&)1+QC(B&q"-&q"-##FB/j+q'	#r/   c                     t        j                  d      }d|d<   t        |      \  }}t        |d      \  }}t        ||d d d          t        ||d d d          t	        |j
                  d       y )Nr   r   r   rw   nfftrb   )   )r#   r$   r   r   r   ri   )r(   r)   r*   r+   fppps         r-   test_padded_fftzTestPeriodogram.test_padded_fft   sg    HHRL!1~1QR(B2cc7#2cc7#288U+r/   c                     t        g       \  }}t        |j                  d       t        |j                  d       dD ]O  }t        t        j                  |            \  }}t        |j                  |       t        |j                  |       Q y Nr   r      r   r      rb   )r   r   ri   r#   emptyr(   r*   r+   ri   s       r-   test_empty_inputz TestPeriodogram.test_empty_input   sl    21177D)177D)+ 	/Erxx/DAqqww.qww.	/r/   c                     dD ]Q  }t        t        j                  |      d      \  }}t        |j                  |       t        |j                  |       S y Nr   r   r   rq   )r   r#   r   r   ri   r(   ri   r*   r+   s       r-   test_empty_input_other_axisz+TestPeriodogram.test_empty_input_other_axis   sE    % 	/ErxxQ7DAqqww.qww.	/r/   c                 
   t        j                  d      }d|d<   t        |d      \  }}t        |t        j                  ddd             t        j
                  d      }d|d<   |dxx   d	z  cc<   |d
z  }t        ||       y )N   r   r   r   r   r   r   r   r    r!   r"   r'   s        r-   test_short_nfftzTestPeriodogram.test_short_nfft   u    HHRL!12&12;;q#q12GGAJ!	"	Q1r/   c                 
   t        j                  d      }d|d<   t        |d      \  }}t        |t        j                  ddd             t        j
                  d      }d|d<   |dxx   dz  cc<   |d	z  }t        ||       y )
Nr   r   r   r   r   r   r   r    r!   r"   r'   s        r-   test_nfft_is_xshapez#TestPeriodogram.test_nfft_is_xshape   r   r/   c                 N   t        j                  dd      }d|d<   t        |      \  }}t        |t        j                  ddd             t        j
                  dd      }d|d<   |dxx   dz  cc<   |d	z  }t        ||       t        |j                  |j                  k(         y )
Nr   r*   r   r   r   r   r   r    r!   )r#   r$   r   r   r%   r&   r   rJ   r'   s        r-   test_real_onesided_even_32z*TestPeriodogram.test_real_onesided_even_32   s    HHR!1~12;;q#q12GGAsO!	"	Q1177"#r/   c                 :   t        j                  dd      }d|d<   t        |      \  }}t        |t        j                  d      dz         t        j
                  dd      }d|d<   |dz  }t        ||d	
       t        |j                  |j                  k(         y )Nr1   r*   r   r   r2   r3   r!   r4   Hz>r6   )r#   r$   r   r   r8   r&   r   rJ   r'   s        r-   test_real_onesided_odd_32z)TestPeriodogram.test_real_onesided_odd_32   s    HHR!1~1299S>$./GGAsO!	X14(177"#r/   c                    t        j                  dd      }d|d<   t        |d      \  }}t        |t	        dd             t        j
                  ddd      }d|d<   t        ||       t        |j                  |j                  k(         y )	Nr   r*   r   r   Fr;   r=   r>   r#   r$   r   r   r   r?   r   rJ   r'   s        r-   test_real_twosided_32z%TestPeriodogram.test_real_twosided_32   sv    HHR!1e4172s+,GGB$!1177"#r/   c                    t        j                  dd      }d|d<   t        |d      \  }}t        |t	        dd             t        j
                  ddd	      }d|d<   t        ||       t        |j                  |j                  k(         y )
Nr   FrR   r   Fr;   r=   rS   r*   r   r'   s        r-   test_complex_32zTestPeriodogram.test_complex_32   sv    HHR!1e4172s+,GGB#&!1177"#r/   c                     t        j                  d      }d|d<   t        j                  dd      }d}t	        t
        |      5  t        ||       d d d        y # 1 sw Y   y xY w)	Nr   r   r   rv   rc   zOthe size of the window must be the same size of the input on the specified axismatchwindow)r#   r$   r   rx   rY   rZ   r   )r(   r)   rz   expected_msgs       r-   test_shorter_window_errorz)TestPeriodogram.test_shorter_window_error   sZ    HHRL!+=:\: 	'#&	' 	' 	's   AA$N)__name__
__module____qualname__r.   r9   r@   rG   rL   rN   rP   rU   r\   pytestmarkskipifsysmaxsizern   rt   r~   r   r   r   r   r   r   r   r   r   r    r/   r-   r   r      s    	*#	* [[u/  E	E [[u/  5	5
#,//		
$	$$$'r/   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zej$                  j'                   ej*                         j-                  d      d      d        Zej$                  j'                   ej*                         j-                  d      d      d        Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d  Z%d! Z&d" Z'd# Z(y$)%	TestWelchc                     t        j                  d      }d|d<   d|d<   t        |d      \  }}t        |t        j                  ddd             t        j
                  g d      }t        ||d	d	
       y Nr   r   r   r!   npersegr   r   iKGUU?gS8?#q?r   #q?r   r7   rtolr#   r$   r   r   r%   arrayr'   s        r-   r.   z!TestWelch.test_real_onesided_even   si    HHRL!!Q"12;;q#q12HH " #14d3r/   c                     t        j                  d      }d|d<   d|d<   t        |d      \  }}t        |t        j                  d      dz         t        j
                  g d	      }t        ||d
d
       y Nr   r   r   r!   r   r         @      "@g9?g?p0?r   r   r   r   )r#   r$   r   r   r8   r   r'   s        r-   r9   z TestWelch.test_real_onesided_odd   si    HHRL!!Q"1299S>#-.HH " #14d3r/   c                     t        j                  d      }d|d<   d|d<   t        |dd      \  }}t        |t	        dd             t        j
                  g d      }t        ||d	d	
       y Nr   r   r   r!   Fr   r<   r=   r   S8?r   r   r   r   r   r   r   r   )r#   r$   r   r   r   r   r'   s        r-   r@   zTestWelch.test_real_twosided  sf    HHRL!!Q59171c?+HH F G14d3r/   c                     t        j                  d      }d|d<   d|d<   t        |dd      \  }}t        |t        j                  ddd             t        j
                  g d	      }t        ||d
d
       y Nr   r   r   r!   rB   )r   rD   r   r   )g      ?g-UU?.iqUU?r   g-UU?r   r   r   r'   s        r-   rG   zTestWelch.test_real_spectrum  sk    HHRL!!Q:612;;q#q12HH " #14d3r/   c                     t        j                  dt              }d|d<   d|d<   t        |d      \  }}t	        |t        j
                  ddd             t        j                  g d	      }t	        ||d
d
       y Nr   rI   r   r   r!   r   r   r   r   r   r   )r#   r$   rK   r   r   r%   r   r'   s        r-   test_integer_onesided_evenz$TestWelch.test_integer_onesided_even  sl    HHRs#!!Q"12;;q#q12HH " #14d3r/   c                     t        j                  dt              }d|d<   d|d<   t        |d      \  }}t	        |t        j
                  d      d	z         t        j                  g d
      }t	        ||dd       y Nr   rI   r   r   r!   r   r   r   r   r   r   r   )r#   r$   rK   r   r   r8   r   r'   s        r-   test_integer_onesided_oddz#TestWelch.test_integer_onesided_odd"  sl    HHRs#!!Q"1299S>#-.HH " #14d3r/   c                     t        j                  dt              }d|d<   d|d<   t        |dd      \  }}t	        |t        dd             t        j                  g d	      }t	        ||d
d
       y Nr   rI   r   r   r!   Fr   r=   r   r   r   )r#   r$   rK   r   r   r   r   r'   s        r-   rP   zTestWelch.test_integer_twosided,  si    HHRs#!!Q59171c?+HH F G14d3r/   c                     t        j                  dt         j                        }d|d<   d|d<   t        |dd      \  }}t	        |t        dd             t        j                  g d      }t	        ||d	d	
       y Nr   rR   r   r!   Fr   r=   )g&>?#q?n)t?r   r   r   r   r   r   r   )r#   r$   rT   r   r   r   r   r'   s        r-   rU   zTestWelch.test_complex6  sm    HHR'!!Q59171c?+HH F G14d3r/   c                 x    t        t        t        t        j                  dt        j
                        dd       y NrW   rX   )rD   r   )rY   rZ   r   r#   r$   rT   r[   s    r-   r\   zTestWelch.test_unk_scaling@  s$    j%!R]])C#Q	0r/   c                     t        j                  dt         j                        dz   }t        |dd      \  }}t	        |t        j
                  |      d       y Nrc   rI   {Gz?linearr   detrendr5   r6   r#   r8   rg   r   r   
zeros_liker(   r)   r*   r+   s       r-   test_detrend_linearzTestWelch.test_detrend_linearD  sB    IIb

+d2QH512==+%8r/   c                     t        j                  dt         j                        dz   }t        |dd      \  }}t        |dd       \  }}t	        ||d       t	        ||d       y )	Nrc   rI   r   Fr   c                     | S Nr   r)   s    r-   <lambda>z.TestWelch.test_no_detrending.<locals>.<lambda>L  s     r/   r5   r6   )r#   r8   rg   r   r   r(   r)   f1p1f2p2s         r-   test_no_detrendingzTestWelch.test_no_detrendingI  sW    IIb

+d2q"e4Bq"k:BBU+BU+r/   c                     t        j                  dt         j                        dz   }t        |dd       \  }}t	        |t        j
                  |      d       y )Nrc   rI   r   c                 0    t        j                  | d      S Nl)typer   r   segs    r-   r   z1TestWelch.test_detrend_external.<locals>.<lambda>S      #)F r/   r   r5   r6   r   r   s       r-   test_detrend_externalzTestWelch.test_detrend_externalP  sF    IIb

+d2QFH12==+%8r/   c                     t        j                  dt         j                        dz   }|j                  d      }t	        |dd       \  }}t        |t        j                  |      d	       y )
N(   rI   r   rb   rb   rc   rc   c                 0    t        j                  | d      S r   r   r   s    r-   r   z7TestWelch.test_detrend_external_nd_m1.<locals>.<lambda>Z  r   r/   r   r5   r6   )r#   r8   rg   rh   r   r   r   r   s       r-   test_detrend_external_nd_m1z%TestWelch.test_detrend_external_nd_m1V  sT    IIb

+d2IIhQFH12==+%8r/   c                    t        j                  dt         j                        dz   }|j                  d      }t        j                  |dd      }t        |ddd 	      \  }}t        |t        j                  |      d
       y )Nr`   rI   r   ra   rb   r   rc   c                 2    t        j                  | dd      S Nr   r   )rr   r   r   r   s    r-   r   z6TestWelch.test_detrend_external_nd_0.<locals>.<lambda>b  s    !#)N r/   r   rr   r   r5   r6   )r#   r8   rg   rh   moveaxisr   r   r   r   s       r-   test_detrend_external_nd_0z$TestWelch.test_detrend_external_nd_0]  sh    IIb

+d2IIhKK1a QNP12==+%8r/   i686z)test known to fail on i386 linux and hurdr]   c                    t        j                  dt         j                        dz   }|j                  d      }t	        |d      \  }}t        |j                  d       t        |ddd d f   |d	dd d f   d
d
       t	        |ddd d f   d      \  }}t        |t         j                  d d f   |d	d d f   d
d
       y Nr`   rI   r   ra   rc   r   rd   r   r   vIh%<=r   )	r#   r8   rg   rh   r   r   ri   r   rj   rk   s         r-   rn   zTestWelch.test_nd_axis_m1e  s    IIb

+d2IIhQ#1177I.!Aa%!AaE(UCq1Qx,B2::a<(!AaC&u5Ir/   c                 `   t        j                  dt         j                        dz   }|j                  d      }t	        |dd      \  }}t        |j                  d       t        |d d ddf   |d d d	df   d
d
       t	        |d d ddf   d      \  }}t        ||d d d	df   d
d
       y Nr`   rI   r   rp   rc   r   )r   rr   rs   r   r  r   r   )r#   r8   rg   rh   r   r   ri   r   rk   s         r-   rt   zTestWelch.test_nd_axis_0o  s    IIb

+d2IIhQ+1177G,!Aa%!AaE(UCq1Qx,BAa!eH5u=r/   c                    t        j                  d      }d|d<   d|d<   t        |ddd      \  }}t        j                  dd      }t        |d|d       \  }}t        ||       t        ||       t        |j                  d       t        |j                  d       t        t        t        |d|d	       t        j                  dd
      }t        t        t        |d|d        y )Nr   r   r   r!   rc   rv   r   r   rW   rw   )
r#   r$   r   r   rx   r   r   ri   rY   rZ   ry   s           r-   r~   zTestWelch.test_window_externaly  s    HHRL!!QFA.1*q"c40B&q"-&q"-288T*288T*j%#q	*##FB/j%'4	1r/   c                     t        g       \  }}t        |j                  d       t        |j                  d       dD ]O  }t        t        j                  |            \  }}t        |j                  |       t        |j                  |       Q y r   )r   r   ri   r#   r   r   s       r-   r   zTestWelch.test_empty_input  sl    Ry1177D)177D)+ 	/E%)DAqqww.qww.	/r/   c                     dD ]Q  }t        t        j                  |      d      \  }}t        |j                  |       t        |j                  |       S y r   )r   r#   r   r   ri   r   s       r-   r   z%TestWelch.test_empty_input_other_axis  sE    % 	/E%q1DAqqww.qww.	/r/   c                 d   t        j                  d      }d|d<   t               5 }|j                  t        d       t        |d      \  }}t        |dd      \  }}d d d        t        |d	      \  }}t        |       t        |       t        |       t        |       y # 1 sw Y   JxY w
Nr!   r   r   zBnperseg = 256 is greater than input length  = 8, using nperseg = 8rv   r      r   r   r   )r#   r$   r	   filterUserWarningr   r   	r(   r)   supr*   r+   r   r   r   r   s	            r-   test_short_datazTestWelch.test_short_data  s    HHQK!   	9CJJ{$hi&)DAq1FC8FB	9 q!$B22BB	9 	9s   8B&&B/c           
         t        t        t        t        j                  d      dt        j
                  g d             t        t        t        t        j                  d      dt        j                  d      j                  d             y NrW   r   )r   r   r   r   r   re   )rb   r   )rY   rZ   r   r#   r$   r   r8   rh   r[   s    r-   test_window_long_or_ndz TestWelch.test_window_long_or_nd  sQ    j%!a+9NOj%!aiil**51	3r/   c                     t        j                  d      }d|d d d<   t        |dd      \  }}t        j                  g d      }t	        ||d	       y 
N@   r   r!   r   rW   r   noverlap)	r   gUUUUUU?UUUUUU?皙?r&  r'  r&  r'  gUUUUUU?g-q=r6   )r#   r$   r   r   r   r'   s        r-   test_nondefault_noverlapz"TestWelch.test_nondefault_noverlap  sM    HHRL#A#QQ/1HH  15)r/   c           	      \    t        t        t        t        j                  d      dddd       y NrW   r   rv   rb      )rY   rZ   r   r#   r$   r[   s    r-   test_bad_noverlapzTestWelch.test_bad_noverlap  s    j%!aAFr/   c                 Z    t        t        t        t        j                  d      dd       y N   r   rW   )r   r   )rY   rZ   r   r#   r&   r[   s    r-   test_nfft_too_shortzTestWelch.test_nfft_too_short  s    j%1aHr/   c                 8   t        j                  dd      }d|d<   d|d<   t        |d      \  }}t        |t        j                  ddd             t        j
                  g d	d      }t        ||d
d
       t        |j                  |j                  k(         y Nr   r*   r   r   r!   r   r   r   r   r   r   )r#   r$   r   r   r%   r   r   rJ   r'   s        r-   r   z$TestWelch.test_real_onesided_even_32  s    HHR!!Q"12;;q#q12HH "#&(14d3177"#r/   c                 :   t        j                  dd      }d|d<   d|d<   t        |d      \  }}t        |t        j                  d      d	z         t        j
                  g d
d      }t        ||dd       t        |j                  |j                  k(         y Nr   r*   r   r   r!   r   r   r   r   )gx:?gyѲI?r   gw0?r   r   r   )r#   r$   r   r   r8   r   r   rJ   r'   s        r-   r   z#TestWelch.test_real_onesided_odd_32  s    HHR!!Q"1299S>#-.HH "#&(14d3177"#r/   c                 $   t        j                  dd      }d|d<   d|d<   t        |dd      \  }}t        |t	        dd             t        j
                  g d	d      }t        ||d
d
       t        |j                  |j                  k(         y Nr   r*   r   r   r!   Fr   r=   r   r   r   r#   r$   r   r   r   r   r   rJ   r'   s        r-   r   zTestWelch.test_real_twosided_32  s    HHR!!Q59171c?+HH "#&( 	14d3177"#r/   c                 Z   t        j                  dd      }d|d<   d|d<   t        |dd      \  }}t        |t	        dd             t        j
                  g d	d
      }t        ||dd       t        |j                  |j                  k(  d|j                   d|j                          y Nr   r   rR   r   r!   Fr   r=   )g%?A2q?d^?r;  g~?r;  r;  r:  r*   r   r   zdtype mismatch, , r7  r'   s        r-   r   zTestWelch.test_complex_32  s    HHR!!Q59171c?+HH FGJL14d3177""177)2aggY7	9r/   c                    t        j                  d      }d}t        |d      d |dz  dz    }|dxx   dz  cc<   t        |d|      \  }}t        |d	|      \  }}t	        ||       t	        ||       d
}t        |d      d |dz   dz   }t        |d|      \  }}t        |d	|      \  }}t	        ||       t	        ||       y Nr/     r=   rb   r   r   r   r   r   re      )r#   r$   r   r   r   )r(   r)   r   r*   fodd_fevens          r-   test_padded_freqszTestWelch.test_padded_freqs  s    HHRLD#za	*	"140aAD1q4 5!D#~A.140aAD1q4 5!r/   c           	         d}d}t        |dz        }d}t        ||z  |z        }t        j                  |      |z  }|t        j                  dt        j                  z  |z  |z        z  }dD ]  }t        ||||d      \  }	}
t        ||||d	      \  }}t        |
|   |dz  d
z         t        t        j                  t        j                  ||            |t        j                  d      z  dz  d        y )Nr`   g     @rc   ,  rb   )rv   bartlett)tukey皙?flattoprB   )fsr   r   rD   rE   r    gMbP?)r   )	rK   r#   r8   sinpir   r   sqrttrapz)r(   ArL  r   fsigiittr)   r   rC  p_specfreqp_denss                r-   test_window_correctionz TestWelch.test_window_correction  s    b"f+gr!"YYr]2bffQruuWT\"_%%E 
	'FaB&02IAv r76)24LD& F2J1S1BGGBHHVT$:;Qrwwqz\!^!%'
	'r/   c                    t         j                  j                  d       t         j                  j                  d      }t	        |      \  }}t        d      D ]  }dgdz  }d||<   |j                  |      }t	        ||      \  }}t	        |||j                  z
        \  }}t        ||j                         |       t        ||j                         ||j                  z
          y )N     r   r   r   rq   err_msg)
r#   randomseedrandnr   rangerh   ndimr   squeeze)	r(   x_flatrC  p_flatanewshaper)   p_plusp_minuss	            r-   test_axis_rollingzTestWelch.test_axis_rolling  s    
		t&&M	6q 		FAtAvHHQKx(Aaa(IAvqqx0JAw!11=!2AaffHE		Fr/   c                 "   t        j                  d      }d|d<   d|d<   t        |dd      \  }}t        |t        j                  ddd             t        j
                  g d	      }t        ||d
d
       t        t        t        |dd       y )Nr   r   r   r!   median)r   averager   r   )rJ  g?        g&E    9rn  r   r   zunrecognised-average)r#   r$   r   r   r%   r   rY   rZ   r'   s        r-   test_averagezTestWelch.test_average"  sz    HHRL!!Q8412;;q#q12HH6714d3j%A4	6r/   N))r   r   r   r.   r9   r@   rG   r   r   rP   rU   r\   r   r   r   r  r
  r   r   r   platformmachine
startswithrn   rt   r~   r   r   r  r   r(  r,  r0  r   r   r   r   rE  rX  rj  ro  r   r/   r-   r   r      s   4444444409
,999 [[(((*55f=FqrJ sJ [[(((*55f=Fqr> s>1"// 3
*GI	$	$
$
9"$',F"
6r/   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"y!)"TestCSDc                 "   t        j                  d      }t        j                  d      }t        j                  ddd      }t        j                  dt         j                        }t	        ||d      \  }}t        ||       t        ||       y )Nr!   r/  r   r   r+  rI   r   r#   r$   r%   rT   r   r   r(   r)   yr*   cr   c1s          r-   test_pad_shorter_xzTestCSD.test_pad_shorter_x0  sh    HHQKHHRLKK3"HHQR]]+Q2&B22r/   c                 "   t        j                  d      }t        j                  d      }t        j                  ddd      }t        j                  dt         j                        }t	        ||d      \  }}t        ||       t        ||       y )Nr/  r!   r   r   r+  rI   r   rv  rw  s          r-   test_pad_shorter_yzTestCSD.test_pad_shorter_y;  sh    HHRLHHQKKK3"HHQR]]+Q2&B22r/   c                     t        j                  d      }d|d<   d|d<   t        ||d      \  }}t        |t        j                  ddd             t        j
                  g d      }t        ||d	d	
       y r   r#   r$   r   r   r%   r   r'   s        r-   r.   zTestCSD.test_real_onesided_evenF  sk    HHRL!!1a#12;;q#q12HH " #14d3r/   c                     t        j                  d      }d|d<   d|d<   t        ||d      \  }}t        |t        j                  d      dz         t        j
                  g d	      }t        ||d
d
       y r   )r#   r$   r   r   r8   r   r'   s        r-   r9   zTestCSD.test_real_onesided_oddP  sk    HHRL!!1a#1299S>#-.HH " #14d3r/   c                     t        j                  d      }d|d<   d|d<   t        ||dd      \  }}t        |t	        dd             t        j
                  g d      }t        ||d	d	
       y r   )r#   r$   r   r   r   r   r'   s        r-   r@   zTestCSD.test_real_twosidedZ  sh    HHRL!!1aE:171c?+HH F G14d3r/   c                     t        j                  d      }d|d<   d|d<   t        ||dd      \  }}t        |t        j                  ddd             t        j
                  g d	      }t        ||d
d
       y r   r  r'   s        r-   rG   zTestCSD.test_real_spectrumd  sm    HHRL!!1aJ712;;q#q12HH " #14d3r/   c                     t        j                  dt              }d|d<   d|d<   t        ||d      \  }}t	        |t        j
                  ddd             t        j                  g d	      }t	        ||d
d
       y r   )r#   r$   rK   r   r   r%   r   r'   s        r-   r   z"TestCSD.test_integer_onesided_evenn  sn    HHRs#!!1a#12;;q#q12HH " #14d3r/   c                     t        j                  dt              }d|d<   d|d<   t        ||d      \  }}t	        |t        j
                  d      d	z         t        j                  g d
      }t	        ||dd       y r   )r#   r$   rK   r   r   r8   r   r'   s        r-   r   z!TestCSD.test_integer_onesided_oddx  sn    HHRs#!!1a#1299S>#-.HH " #14d3r/   c                     t        j                  dt              }d|d<   d|d<   t        ||dd      \  }}t	        |t        dd             t        j                  g d	      }t	        ||d
d
       y r   )r#   r$   rK   r   r   r   r   r'   s        r-   rP   zTestCSD.test_integer_twosided  sk    HHRs#!!1aE:171c?+HH F G14d3r/   c                     t        j                  dt         j                        }d|d<   d|d<   t        ||dd      \  }}t	        |t        dd             t        j                  g d      }t	        ||d	d	
       y r   )r#   r$   rT   r   r   r   r   r'   s        r-   rU   zTestCSD.test_complex  so    HHR'!!1aE:171c?+HH F G14d3r/   c           	          t        t        t        t        j                  dt        j
                        t        j                  dt        j
                        dd       y r   )rY   rZ   r   r#   r$   rT   r&   r[   s    r-   r\   zTestCSD.test_unk_scaling  s6    j#rxx2=='Agga/	Kr/   c                     t        j                  dt         j                        dz   }t        ||dd      \  }}t	        |t        j
                  |      d       y r   r#   r8   rg   r   r   r   r   s       r-   r   zTestCSD.test_detrend_linear  sD    IIb

+d21aX612==+%8r/   c                     t        j                  dt         j                        dz   }t        ||dd      \  }}t        ||dd       \  }}t	        ||d       t	        ||d       y )	Nrc   rI   r   Fr   c                     | S r   r   r   s    r-   r   z,TestCSD.test_no_detrending.<locals>.<lambda>  s     r/   r5   r6   )r#   r8   rg   r   r   r   s         r-   r   zTestCSD.test_no_detrending  s[    IIb

+d2Q2u5BQ2{;BBU+BU+r/   c                     t        j                  dt         j                        dz   }t        ||dd       \  }}t	        |t        j
                  |      d       y )Nrc   rI   r   c                 0    t        j                  | d      S r   r   r   s    r-   r   z/TestCSD.test_detrend_external.<locals>.<lambda>      v~~c'D r/   r   r5   r6   r  r   s       r-   r   zTestCSD.test_detrend_external  sH    IIb

+d21aDF12==+%8r/   c                     t        j                  dt         j                        dz   }|j                  d      }t	        ||dd       \  }}t        |t        j                  |      d	       y )
Nr  rI   r   r  rc   c                 0    t        j                  | d      S r   r   r   s    r-   r   z5TestCSD.test_detrend_external_nd_m1.<locals>.<lambda>  r  r/   r   r5   r6   )r#   r8   rg   rh   r   r   r   r   s       r-   r  z#TestCSD.test_detrend_external_nd_m1  sV    IIb

+d2IIh1aDF12==+%8r/   c                    t        j                  dt         j                        dz   }|j                  d      }t        j                  |dd      }t        ||ddd 	      \  }}t        |t        j                  |      d
       y )Nr`   rI   r   ra   rb   r   rc   c                 2    t        j                  | dd      S r  r   r   s    r-   r   z4TestCSD.test_detrend_external_nd_0.<locals>.<lambda>  s    v~~c'L r/   r  r5   r6   )r#   r8   rg   rh   r	  r   r   r   r   s       r-   r
  z"TestCSD.test_detrend_external_nd_0  sj    IIb

+d2IIhKK1a 1a!LN12==+%8r/   c                    t        j                  dt         j                        dz   }|j                  d      }t	        ||d      \  }}t        |j                  d       t        |ddd d f   |d	dd d f   d
d
       t	        |ddd d f   |ddd d f   d      \  }}t        |t         j                  d d f   |d	d d f   d
d
       y r  )	r#   r8   rg   rh   r   r   ri   r   rj   rk   s         r-   rn   zTestCSD.test_nd_axis_m1  s    IIb

+d2IIh1a$1177I.!Aa%!AaE(UCQq1uXq1Qx4B2::a<(!AaC&u5Ir/   c                 t   t        j                  dt         j                        dz   }|j                  d      }t	        ||dd      \  }}t        |j                  d       t        |d d ddf   |d d d	df   d
d
       t	        |d d ddf   |d d ddf   d      \  }}t        ||d d d	df   d
d
       y r  )r#   r8   rg   rh   r   r   ri   r   rk   s         r-   rt   zTestCSD.test_nd_axis_0  s    IIb

+d2IIh1a!,1177G,!Aa%!AaE(UCQq1uXq1Qx4BAa!eH5u=r/   c           	         t        j                  d      }d|d<   d|d<   t        ||ddd      \  }}t        j                  dd      }t        ||d|d       \  }}t        ||       t        ||       t        |j                  d       t        |j                  d       t        t        t        ||d|d	       t        j                  dd
      }t        t        t        ||d|d        y )Nr   r   r   r!   rc   rv   r   r  r  rw   )
r#   r$   r   r   rx   r   r   ri   rY   rZ   ry   s           r-   r~   zTestCSD.test_window_external  s    HHRL!!1aVQ'1*Q2sD1B&q"-&q"-288T*288T*j#q!#s	,##FB/j#q!'4	)r/   c                    t        g t        j                  d            \  }}t        |j                  d       t        |j                  d       t        t        j                  d      g       \  }}t        |j                  d       t        |j                  d       dD ]c  }t        t        j
                  |      t        j
                  |            \  }}t        |j                  |       t        |j                  |       e t        t        j                  d      t        j
                  d            \  }}t        |j                  d       t        |j                  d       t        t        j
                  d      t        j                  d            \  }}t        |j                  d       t        |j                  d       y )Nrc   r   r   )r   r   )r   r#   r$   r   ri   r   r&   r   s       r-   r   zTestCSD.test_empty_input  s/   2bhhrl#1177D)177D)288B<#1177D)177D)+ 	/Erxx8DAqqww.qww.	/
 2772;01177E*177E*288E?BGGBK01177E*177E*r/   c                 d   dD ]e  }t        t        j                  |      t        j                  |      d      \  }}t        |j                  |       t        |j                  |       g t        t        j                  d      t        j
                  d      d      \  }}t        |j                  d       t        |j                  d       t        t        j                  d      t        j
                  d      d      \  }}t        |j                  d       t        |j                  d       y )Nr   r   rq   )rc   rc   r   )rc   r   r   )rc   r   r   )r   r#   r   r   ri   r$   r   s       r-   r   z#TestCSD.test_empty_input_other_axis  s    % 	/Erxxa@DAqqww.qww.	/
 288I&(:C1177H-177H-288H%rxx	':C1177H-177H-r/   c                 j   t        j                  d      }d|d<   t               5 }|j                  t        d       t        ||d      \  }}t        ||dd      \  }}d d d        t        ||d	      \  }}t        |       t        |       t        |       t        |       y # 1 sw Y   KxY wr  )r#   r$   r	   r  r  r   r   r  s	            r-   r  zTestCSD.test_short_data  s    HHQK!   	;CJJ{$hiq!F+DAqAfc:FB	; Q1%B22BB	; 	;s   :B))B2c                 j   t        t        t        t        j                  d      t        j
                  d      dt        j                  g d             t        t        t        t        j                  d      t        j
                  d      dt        j                  d      j                  d             y r  )	rY   rZ   r   r#   r$   r&   r   r8   rh   r[   s    r-   r   zTestCSD.test_window_long_or_nd  sh    j#rxx{BGGAJhh{+	-j#rxx{BGGAJiil**51	3r/   c                     t        j                  d      }d|d d d<   t        ||dd      \  }}t        j                  g d      }t	        ||d	       y r"  )r#   r$   r   r   r   r'   s        r-   r(  z TestCSD.test_nondefault_noverlap  sO    HHRL#A#1aa01HH  15)r/   c           
          t        t        t        t        j                  d      t        j
                  d      dddd       y r*  )rY   rZ   r   r#   r$   r&   r[   s    r-   r,  zTestCSD.test_bad_noverlap   s+    j#rxx{BGGAJ6	r/   c                     t        t        t        t        j                  d      t        j
                  d      dd       y r.  )rY   rZ   r   r#   r&   r$   r[   s    r-   r0  zTestCSD.test_nfft_too_short$  s'    j#rwwr{BHHRLq	!r/   c                 :   t        j                  dd      }d|d<   d|d<   t        ||d      \  }}t        |t        j                  ddd             t        j
                  g d	d      }t        ||d
d
       t        |j                  |j                  k(         y r2  )r#   r$   r   r   r%   r   r   rJ   r'   s        r-   r   z"TestCSD.test_real_onesided_even_32(  s    HHR!!1a#12;;q#q12HH "#&(14d3177"#r/   c                 <   t        j                  dd      }d|d<   d|d<   t        ||d      \  }}t        |t        j                  d      d	z         t        j
                  g d
d      }t        ||dd       t        |j                  |j                  k(         y r4  )r#   r$   r   r   r8   r   r   rJ   r'   s        r-   r   z!TestCSD.test_real_onesided_odd_323  s    HHR!!1a#1299S>#-.HH "#&(14d3177"#r/   c                 &   t        j                  dd      }d|d<   d|d<   t        ||dd      \  }}t        |t	        dd             t        j
                  g d	d      }t        ||d
d
       t        |j                  |j                  k(         y r6  r#   r$   r   r   r   r   r   rJ   r'   s        r-   r   zTestCSD.test_real_twosided_32>  s    HHR!!1aE:171c?+HH "#&( 	14d3177"#r/   c                 \   t        j                  dd      }d|d<   d|d<   t        ||dd      \  }}t        |t	        dd             t        j
                  g d	d
      }t        ||dd       t        |j                  |j                  k(  d|j                   d|j                          y r9  r  r'   s        r-   r   zTestCSD.test_complex_32J  s    HHR!!1aE:171c?+HH FGJL14d3177""177)2aggY7	9r/   c                    t        j                  d      }t        j                  d      }d}t        |d      d |dz  dz    }|dxx   dz  cc<   t	        ||d|      \  }}t	        ||d	|      \  }}t        ||       t        ||       d
}t        |d      d |dz   dz   }t	        ||d|      \  }}t	        ||d	|      \  }}t        ||       t        ||       y r>  )r#   r$   r&   r   r   r   )r(   r)   rx  r   r*   rB  rC  rD  s           r-   rE  zTestCSD.test_padded_freqsV  s    HHRLGGBKD#za	*	"aAD1aq!QT2q4 5!D#~A.aAD1aq!QT2q4 5!r/   c                 *   t         j                  j                  d      }|j                         }t	        ||ddd      \  }}t	        ||ddd      \  }}t        ||       t	        ||ddd      \  }}t	        ||ddd      \  }}t        ||       y )Nr#  r!   meanF)r   rm  r<   rl  )r#   r^  r`  copyr   r   )r(   r)   rx  rC  p_samep_copieds         r-   test_copied_datazTestCSD.test_copied_datai  s    IIOOBFFH1a(-/	6!Q6*/18)1a(-/	6!Q8*/18)r/   N)#r   r   r   r{  r}  r.   r9   r@   rG   r   r   rP   rU   r\   r   r   r   r  r
  rn   rt   r~   r   r   r  r   r(  r,  r0  r   r   r   r   rE  r  r   r/   r-   rt  rt  /  s    		44444444K9
,999J>)"+,.  3*!	$	$
$
9"&*r/   rt  c                       e Zd Zd Zd Zy)TestCoherencec                    t         j                  j                  d      }t        j                  |      }t        j                  ddd      }t        j
                  d      }t        ||d      \  }}t        ||       t        ||       y Nr`   r   r   re   rc   r   )r#   r^  r`  r  r%   r&   r   r   r(   r)   rx  r*   Cr   C1s          r-   test_identical_inputz"TestCoherence.test_identical_input{  sf    IIOOBGGAJKK3"GGAJ1a,B22r/   c                     t         j                  j                  d      }| }t        j                  ddd      }t        j                  d      }t        ||d      \  }}t        ||       t        ||       y r  )r#   r^  r`  r%   r&   r   r   r  s          r-   test_phase_shifted_inputz&TestCoherence.test_phase_shifted_input  s`    IIOOBBKK3"GGAJ1a,B22r/   N)r   r   r   r  r  r   r/   r-   r  r  z  s    		r/   r  c                       e Zd Zd Zd Zd Zy)TestSpectrogramc                     t         j                  j                  d      }d}d}d}d}t        |||||      \  }}}t	        |||||      \  }	}
t        ||	       t        t        j                  |d      |
       y )Nr[  r=   rI  g      ?r   rb   r   rq   )r#   r^  r`  r   r   r   r  )r(   r)   rL  r   r   r%  r*   rC  PfwPws              r-   test_average_all_segmentsz)TestSpectrogram.test_average_all_segments  su    IIOOD! aVWh?1aq"fgx8B2+R0r/   c                    t         j                  j                  d      }d}d}d}d}t        |||||      \  }}}t	        j
                  dd      }	t        |||	d d      \  }
}}t        |
j                  d       t        |j                  d       t        t        t        |||	d	
       t	        j
                  dd      }t        t        t        |||d 
       y )Nr[  r=   r  r   rb   r$  )r   )r   I   r!   r   i   )
r#   r^  r`  r   r   rx   r   ri   rY   rZ   )r(   r)   rL  r   r   r%  r*   rC  r  rz   r{   Per}   s                r-   r~   z$TestSpectrogram.test_window_external  s    IIOOD! aVWh?1a42sD1E	Ar288T*288V,j+q#q	*##OT:j+q'4	1r/   c                    t         j                  j                  d      }d}t        ||d      \  }}}t	               5 }|j                  t        d       t        ||dd      \  }}}d d d        t        ||d	      \  }	}}
t        ||d	      \  }}}t        ||	       t        ||
       t        |       t        |       y # 1 sw Y   ^xY w)
Nr[  r=   r  r   zInperseg = 1025 is greater than input length  = 1024, using nperseg = 1024i  r  r  r   )r#   r^  r`  r   r	   r  r  r   )r(   r)   rL  r*   rC  r+   r  r   r   r   r   f3p3s                r-   r  zTestSpectrogram.test_short_data  s    IIOOD! aN;1a  	2CJJ{bd#Ar.,02IB2	2
  2s3	Ar2t4	Ar22BB	2 	2s   *CCN)r   r   r   r  r~   r  r   r/   r-   r  r    s    11& r/   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestLombscarglec                 &   d}d}dt         j                  z  }d}d}d}t         j                  j                  d       t         j                  j	                  |      }t        j
                  dt         j                  z  d	t         j                  z  |      ||k\     }|t        j                  ||z  |z         z  }	t        j
                  dd	|      }
t        ||	|
      }|
d
   |
d   z
  }t        ||
t        j                  |         z
  |dz  k         y)zgTest if frequency location of peak corresponds to frequency of
        generated input signal.
        r    r=   r   d     ffffff?# {Gz?      $@r   r   N)
r#   rN  r^  r_  randr%   rM  r   r   argmax)r(   amplwphininnoutr+   rtr)   r*   r  deltas                r-   test_frequencyzTestLombscargle.test_frequency  s     BEEk 			wIINN3KKRUU
CIs3AF; 266!A#)$$ KKc4( 1a  !qtAbiilO#uRx01r/   c                 N   d}d}dt         j                  z  }d}d}d}t         j                  j                  d       t         j                  j	                  |      }t        j
                  dt         j                  z  d	t         j                  z  |      ||k\     }|t        j                  ||z  |z         z  }	t        j
                  dd	|      }
t        ||	|
      }t        j                  d
|z  |j                  d   z        }t        t        j                  |      |d       y )Nr    r=   r   r  r  r  r  r  r  rW   r   rb   significant)r#   rN  r^  r_  r  r%   rM  r   rO  ri   r   max)r(   r  r  r  r  r  r+   r  r  r)   r*   pgrams               r-   test_amplitudezTestLombscargle.test_amplitude  s    
 BEEk 			wIINN3KKRUU
CIs3AF; 266!A#)$$ KKc4( Aq!$ E	AGGAJ./ 	BFF5M4Q?r/   c                 "   d}d}dt         j                  z  }d}d}d}d}t         j                  j                  d       t         j                  j	                  |      }t        j
                  d	t         j                  z  d
t         j                  z  |      ||k\     }	|t        j                  ||	z  |z         z  |z   }
t        j
                  d	d
|      }t        |	|
|d      }t        |	|
|
j                         z
  |d      }t        ||       y )Nr    r=   r   r  r  r  g333333?r  r  r  T)	precenterF)
r#   rN  r^  r_  r  r%   rM  r   r  r   )r(   r  r  r  r  r  r+   offsetr  r  r)   r*   r  pgram2s                 r-   test_precenterzTestLombscargle.test_precenter  s     BEEk 			wIINN3KKRUU
CIs3AF; 266!A#)$$v- KKc4( Aq!t4QAFFHa5A 	v&r/   c                 h   d}d}dt         j                  z  }d}d}d}t         j                  j                  d       t         j                  j	                  |      }t        j
                  dt         j                  z  d	t         j                  z  |      ||k\     }|t        j                  ||z  |z         z  }	t        j
                  dd	|      }
t        ||	|
      }t        ||	|
d
      }t        |dz  t        j                  |	|	      z  |       t        t        j                  |      dd       y )Nr    r=   r   r  r  r  r  r  r  T)	normalizerb   r  )r#   rN  r^  r_  r  r%   rM  r   r   dotr   r  )r(   r  r  r  r  r  r+   r  r  r)   r*   r  r  s                r-   test_normalizezTestLombscargle.test_normalize&  s     BEEk 			wIINN3KKRUU
CIs3AF; 266!A#)$$ KKc4( Aq!$Q15 		BFF1aL0&9BFF6NCQ?r/   c                     t        j                  ddd      }t        j                  ddd      }t        j                  ddd      }t        t        t        |||       y )Nr   r   rb   r   )r#   r%   rY   rZ   r   r(   r  r)   r*   s       r-   test_wrong_shapez TestLombscargle.test_wrong_shapeD  sH    KK1a KK1a KK1a j+q!Q7r/   c                     t        j                  d      }t        j                  d      }t        j                  d      }t        t        t        |||       y )Nr   )r#   r$   rY   ZeroDivisionErrorr   r  s       r-   test_zero_divisionz"TestLombscargle.test_zero_divisionJ  s:    HHQKHHQKHHQK'aA>r/   c                     t        j                  dddd      }t        j                  d|z        }t        j                  dddd      d	z   }t        |||d
z  t         j                  z         y )Nr   rc   r  F)endpointrW   2   i  rJ  rb   )r#   r%   rM  r   rN  r  s       r-   test_lombscargle_atan_vs_atan2z.TestLombscargle.test_lombscargle_atan_vs_atan2P  sZ     KK2te4FF1Q3KKK2sU3c9Aq!A#bee)$r/   N)
r   r   r   r  r  r  r  r  r  r  r   r/   r-   r  r    s)    2@@B'<@<8?%r/   r  c                       e Zd Zd Zd Zd Zd Zd Zej                  j                  dddg      d	        Zd
 Zd Zd Zej                  j                  dddg      d        Zd Zd Zd Zd Zd Zy)TestSTFTc                 
   d } |d      5  t        ddd       d d d         |d      5  t        ddd       d d d         |d	      5  t        t        j                  d
      dd       d d d         |d      5  t        t        j                  d      dd       d d d         |d      5  t        ddd       d d d         |d      5  t        ddd       d d d         |d	      5  t        t        j                  d
      dd       d d d         |d      5  t        t        j                  d      dd       d d d         |d      5  t        ddd       d d d        t        j                  d      }t        |      d   } |d	      5  t        |t        j                  d
             d d d         |d      5  t        |t        j                  d      d       d d d         |d      5  t        |d       d d d         |d      5  t        |dd       d d d         |d      5  t        |dd       d d d         |d      5  t        |       d d d         |d	      5  t        |t        j                  d
             d d d         |d      5  t        |t        j                  d      d       d d d         |d      5  t        |d       d d d         |d      5  t        |dd       d d d         |d      5  t        |dd       d d d        t        j                  t        d      5  t        |ddd        d d d         |d!      5  t        |dd"       d d d         |d#      5  t        ||d$%       d d d         |d&      5  t        |d d' |d'd  d(%       d d d         |d)      5  t        ||d$*       d d d        d+} |d,|d-      5  t        ||.       d d d         |d,|d-      5  t        ||.       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   `xY w# 1 sw Y   <xY w# 1 sw Y   +xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   {xY w# 1 sw Y   WxY w# 1 sw Y   2xY w# 1 sw Y   !xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   rxY w# 1 sw Y   y xY w)/Nc                 8    t        j                  t        |       S )zAssert for a ValueError matching regexp `match`.

            This little wrapper allows a more concise code layout.
            r   )r   r
   rZ   r   s    r-   chk_VEz.TestSTFT.test_input_validation.<locals>.chk_VE\  s    
 ==599r/   z"nperseg must be a positive integerrv   ir   z#noverlap must be less than nperseg.rc   r`   zwindow must be 1-D)rb   rb   z"window must have length of npersegz"noverlap must be less than npersegz&noverlap must be a nonnegative integerr#  ir[  rb   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'\}rX   )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\])boundary	not_validzParameter scaling=z not in \['spectrum', 'psd'\]!rC   )r   r#   r&   r   r$   r   r   r   warnsr  r   )r(   r  r)   zrD   s        r-   test_input_validationzTestSTFT.test_input_validationZ  s   	: 89 	'vsA&	'9: 	'vr2&	'() 	/rwwvA.	/89 	+rwwr{B*	+ 89 	'vsA&	'89 	'vr2&	'() 	/rwwvA.	/89 	+rwwr{B*	+<= 	(vr3'	( HHTNGAJ () 	,2776?+	, , - 	52772;4	5 89 	"D!	"9: 	0C$/	0DE 	)Ca(	) 56 	!H	() 	-!BGGFO,	-45 	6!BGGBK5	689 	#!T"	#9: 	1!S40	1DE 	*!Sq)	*\\+ .7 8 	=!S1V<	= EF 	/!qA.	/  ) * 	/Q.	/ => 	<QtWagF;	< D E 	3QE2	3 *'+IJK 	%G$	%*'+IJK 	&!W%	& 	&K	' 	'	' 	'	/ 	/	+ 	+	' 	'	' 	'	/ 	/	+ 	+	( 	(	, 	,	5 	5	" 	"	0 	0	) 	)	 		- 	-	6 	6	# 	#	1 	1	* 	*	= 	=	/ 	/	/ 	/	< 	<	3 	3
	% 	%	& 	&sB  PP$!P19!P>*QQ&!Q%!Q2Q?	!R:"R,R&
R3)S S$!S"S'S4%TT6TT(5T5U9UU U)P!$P.1P;>QQQ"%Q/2Q<?R	RR#&R03R= S
SS$'S14S>TTT%(T25T?UUU&)U2c                 `    g d}|D ]%  } dj                   | }t        dt        | |       ' y )N)boxcarrc   r   r   rc   r   rH  3      rv   r     rv   r     blackmanrG     rI  r   r  r#  rv   r     
{}, {}, {}Tr\  )formatr   r   )r(   settingssettingmsgs       r-   test_check_COLAzTestSTFT.test_check_COLA  s?    	   	BG%,%%w/Cz73SA	Br/   c                 &   g d}|D ]%  } dj                   | }t        dt        | |       ' t        j                  d      }d|d d d<   |t        |      t        |      dz  fdg}|D ]%  } dj                   | }t        d	t        | |       ' y )
N)r  r  )r   rc   r+  r  )rH  r  rc   r  r  )rv   r  %   r	  )r
  rG  {   r  )r  r  &   r  )rv   r  '   r  Tr\  r   r   rb   )rv   r#  r   F)r  r   r   r#   r&   len)r(   settings_passr  r  w_failsettings_fails         r-   test_check_NOLAzTestSTFT.test_check_NOLA  s      % 	BG%,%%w/Cz73SA	B ssS[#f+*:;#
 % 	CG%,%%w/C
G 4cB	Cr/   c           
      p   t         j                  j                  d       t         j                  j                  d      }d}d}d}d}t	        |||||ddd       \  }}}t        |||||dd	d
      \  }	}
t        ||	       t        t        j                  t        j                  |      dz  d      |
       y )NrZ  r[  r=   rv   r   r!   F)paddedr<   r  rB   )r<   rD   r   rb   r   rq   )	r#   r^  r_  r`  r   r   r   r  abs)r(   r)   rL  r   r   r%  r*   rC  Zr  r  s              r-   r  z"TestSTFT.test_average_all_segments  s    
		tIIOOD!
 q"fgx',t=1aq"fgx)5:B 	2q	126;r/   c           	         t         j                  j                  d       t         j                  j                  d      }d}d}d}d}t	        |||||      \  }}}t	        |j                  d      ||||d	      \  }	}
}t        |||||      \  }}t        |j                  ||||dd
      \  }}t        ||	       t        ||
       t        ||       t        ||d d ddd d f          t        ||d d ddf          y )NrZ  r[  r=   rv   r   r!   )r   r   r   r   rq   r   r  )	r#   r^  r_  r`  r   rh   r   Tr   )r(   r)   rL  r   r   r%  r   t1Z1r   t2Z2t3x1t4x2s                   r-   test_permute_axeszTestSTFT.test_permute_axes  s    
		tIIOOD!!R(;
B!))J/VWh "
B r2vw9BrttR(a!#%B 	BBBBq!QzN+Bq!QwK(r/   rD   rB   psdc           
      |   t         j                  j                  d       g d}|D ]  \  }}}}t        j                  |      }dt         j                  j	                  |j
                        z  }t        ||||d d|      \  }	}	}
t        |
||||      \  }}| d| }t        |||       t        |||        y )	NrZ  r   r  rc   r   r   r  rc   r   )rH  e   r  r  rv   r[  r  r  )r    r  r#  )rv   r[  r  r  rc   F)r   r%  r   r   r!  rD   )r   r%  r   rD   r<  r\  	r#   r^  r_  r8   r`  sizer   r   r   )r(   rD   r  r   Nr   r%  r  r)   rC  zztrxrr  s                 r-   test_roundtrip_realzTestSTFT.test_roundtrip_real  s    
		t -5 	0(FAw		!A299??166**AAw#)4$+-HAq" 2w"(';FB HBxj)CAr3/Ar3/	0r/   c           
         t         j                  j                  d       t        j                  d      }d|d d d<   |dt	        |      t	        |      dz  fdg}|D ]	  \  }}}}| d| d| d| }t        |||      rJ |       t        j                  |      }dt         j                  j                  |j                        z  }	t        |	|||d d	d
      \  }
}
}t        j                  t        d      5  t        ||||d	      \  }}d d d        t        j                  |d t	        |             sJ |       t        j                  |	d t	        |	             sJ |        y # 1 sw Y   _xY w)NrZ  r   r   rb   r  )rv   r  r#  r   r<  rc   Tr$   r   r%  r   r   r!  r  NOLAr   r   r%  r   r  )r#   r^  r_  r&   r  r   r8   r`  r8  r   r   r  r  r   allclose)r(   r  r  r   r9  r   r%  r  r  r)   rC  r:  r;  r<  s                 r-   test_roundtrip_not_nolaz TestSTFT.test_roundtrip_not_nola"  sj   
		tssS#f+s6{a/?@(

 -5 	8(FAwHBqcG9Bxj9C!&'8<AcA<		!ARYY__QVV,,AAw#)4%,.HAq" k8 =r7X&,t=B= ;;q"Wc!f+.33.{{1b#a&k27C72	8= =s   8E**E3	c           
         t         j                  j                  d       g d}|D ]  \  }}}}| d| d| }t        |||      sJ |       t	        |||      rJ |       t        j
                  |      }dt         j                  j                  |j                        z  }t        ||||d dd      \  }	}	}
t        |
|||d      \  }}| d| }t        ||d t        |       |	       t        ||d t        |       |	        y )
NrZ  ))r   r  rc   r   )rH  r4  r  r  )rv   r[  r     )r  r6  r     )rv   r[  r  r   r<  rc   Tr$   r?  rA  r\  )r#   r^  r_  r   r   r8   r`  r8  r   r   r   r  )r(   r  r   r9  r   r%  r  r  r)   rC  r:  r;  r<  s                r-   test_roundtrip_nola_not_colaz%TestSTFT.test_roundtrip_nola_not_cola=  s   
		t -5 	9(FAwHBwir(4Cfgx8=#=8!&'8<AcA<		!ARYY__QVV,,AAw#)4%,.HAq" 2w"(49FB HBxj)CAr'3q6{C8Ar'3q6{C8#	9r/   c           	         t         j                  j                  d       dg}|D ]  \  }}}}t        j                  |      }dt         j                  j	                  |j
                        z  }|j                  t         j                        }t        ||||d d      \  }}}	t        |	|||      \  }
}| d| }t        |||       t        |||d	d
       t        |j                  |j                  k(          y )NrZ  r5  rc   Fr   r%  r   r   r!  r  r<  r\  g-C6?gh㈵>)r]  r   r7   )r#   r^  r_  r8   r`  r8  astypefloat32r   r   r   r   rJ   r(   r  r   r9  r   r%  r  r)   rC  r:  r;  r<  r  s                r-   test_roundtrip_float32zTestSTFT.test_roundtrip_float32[  s    
		t,-,4 	)(FAw		!A299??166**A$AAw#)4GHAq" 2w"(*FB HBxj)CAq#.Ar3TEAGGrxx'(	)r/   c                    t         j                  j                  d       g d}|D ]  \  }}}}t        j                  |      }dt         j                  j	                  |j
                        z  dt         j                  j	                  |j
                        z  z   }t        ||||d dd|      \  }	}	}
t        |
|||d|      \  }}| d| d| }t        |||	       t        |||	        t               5 }|j                  t        d
       t        d dd|      \  }	}	}
d d d        t        
d|      \  }}| d| d| }t        ||	       t        ||	       y # 1 sw Y   DxY w)NrZ  r1  rc   y              $@F)r   r%  r   r   r!  r<   rD   )r   r%  r   input_onesidedrD   r<  r\  z9Input data is complex, switching to return_onesided=FalseT)r#   r^  r_  r8   r`  r8  r   r   r   r	   r  r  )r(   rD   r  r   r9  r   r%  r  r)   rC  r:  r;  r<  r  r  s                  r-   test_roundtrip_complexzTestSTFT.test_roundtrip_complexp  s   
		t -5 	0(FAw		!A299??166**S1H-HHAAw#)4,17DHAq" 2w"(#*,FB HBwir(4CAr3/Ar3/	0"   	CCJJ{RTAw#)4,0'CHAq"	C r7X$UGMB 7)2hZ02s+2s+	C 	Cs   9.E**E3c                    t         j                  j                  d       ddg}|D ]  \  }}}}t        j                  |      }dt         j                  j	                  |j
                        z  }t        ||||d dd       \  }}}	t        |	||d      \  }}
d	D ]P  }t        ||||d d|      \  }}}t        |||d      \  }}| d
| d
| }t        ||
|       t        |||       R  y )NrZ  r2  r3  rc   Tr?  F)r%  r   r  )evenoddconstantr$   r<  r\  r7  )r(   r  r   r9  r   r%  r  r)   rC  r:  r<  r  zz_extxr_extr  s                  r-   !test_roundtrip_boundary_extensionz*TestSTFT.test_roundtrip_boundary_extension  s   
		t +*
 -5 	8(FAw		!A299??166**AAw"($t$(*HAq" "xOEAr@ 
8#Aw'-tD)1 31f "&8F)-/	6  8*Bxj92s3637
8	8r/   c           	         t         j                  j                  d       ddg}|D ]  \  }}}}t        j                  |      }dt         j                  j	                  |j
                        z  }t        ||||d d      \  }}}	t        |	||      \  }
}| d| }t        ||
d |j
                   |	       t        ||d |j
                   |	        y )
NrZ  )r   r4  rc   r   )rv   r  r  r  rc   TrI  )r%  r   r<  r\  r7  rL  s                r-   test_roundtrip_padded_signalz%TestSTFT.test_roundtrip_padded_signal  s    
		t +,
 -5 	9(FAw		!A299??166**AAw#)4FHAq" 2@FBHBxj)CAr'166{C8Ar'166{C8	9r/   c                 H   t         j                  j                  d       g d}|D ]  \  }}}}}t        j                  |      }dt         j                  j	                  |j
                        z  }|t        j                  dt         j                  z  dz        z  }	t        |||||d d      \  }
}
}t        |	||||d dd	      \  }
}
}t        |||||
      \  }}t        |||||d      \  }}| d| }t        |||       t        |||       t        |	||        y )NrZ  ))rv   r[  r  r  r  )rv   r[  r  r  i  )r   r  rc   r   !   )r  r6  r  r#  r[  rc   y              ?rW   T)r   r%  r   r   r   r!  F)r   r%  r   r   r   r!  r<   )r   r%  r   r   )r   r%  r   r   rO  r<  r\  )r#   r^  r_  r8   r`  r8  exprN  r   r   r   )r(   r  r   r9  r   r%  r   r  r)   xcrC  r  zcr;  r<  xcrr  s                    r-   test_roundtrip_padded_FFTz"TestSTFT.test_roundtrip_padded_FFT  s1   
		t 3; 	2.FAw$		!A299??166**A266"RUU(1*%%B 1gt#)4FGAq! B(#)4,13HAq" 1gt"(*FB B(#)%AGB HBxj)CAr3/Ar3/BS1/	2r/   c                    t         j                  j                  d       t         j                  j                  d      }t	        |      \  }}}t        d      D ]  }dgdz  }d||<   |j                  |      }t	        ||      \  }}}t	        |||j                  z
        \  }}}t        ||j                         |       t        ||j                         ||j                  z
          t        |j                  dd	      \  }}	t        |j                  d
d	      \  }}
t        ||	d       t        ||
d       y )NrZ  r[  r   r   r   rq   r\  r  r   zistft transpose minuszistft transpose plus)r#   r^  r_  r`  r   ra  rh   rb  r   rc  r   r%  r   )r(   rd  rC  z_flatrf  rg  r)   z_plusz_minusx_transpose_mx_transpose_ps              r-   rj  zTestSTFT.test_axis_rolling  s   
		t&F|1fq 		FAtAvHHQKx(A?LAq& 1662MAq'!11=!2AaffHE		F !R2F= Q!D=7NO7MNr/   c                 l   t        j                  dt              }d|d<   t         j                  j	                  |      }t        |dz        t        |      z  }t        |dd      d   }t        |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                        j                         t        |ddd      d   }t        j
                  |j                  dz  |j                  dz  z   d      |j                   d   z  }t        ||       t        |dd	d      d
   }t        ||       t        |d	dd      d   }t        j"                  |dddddf         }	t        |ddddf   |       t        |ddddf   |	       t        j
                  |j                  dz  |j                  dz  z   d      t        j
                  |	j                  dz  |	j                  dz  z   d      z   }
|
|j                   d   |	j                   d   z   z  }t        ||       t        |d	d	d      d
   }t        ||       y)z&Verify behavior of scaling parameter. i  rI   r[  r  rb   rR  rB   )r  rD   Tr   ?   Nr   r   r#  A   r   B   r6   Fr/  )r<   r  rD   rq   )rO  r  rD   rb     )r#   r$   complexfftirfftsumr  r   r   r   r"  finforJ   
resolutionrealimagri   conj)r(   Xr)   power_xZsr+  Zppsd_ZpZp0Zp1s2psd_Zp01s               r-   test_roundtrip_scalingzTestSTFT.test_roundtrip_scaling  sy    HHS(#FFLLOad)c!f$ !fj9!< 2j9!<A 	Br3B3wK(#.Br3B3wK(!,Br3B3wK(#.2b5#2#:1crc6
ABHHRXX,>,I,IJ !UVUKAN 
RWWaZ/a8288A;F( 2edEJ1MA 1dVUKAN ggc"Qr'1*o&4C47S)347S) ffSXX]SXX]2;ffSXX]SXX]2;<1		!45'* 3tdEJ1MAr/   N)r   r   r   r  r  r  r  r.  r   r   parametrizer=  rC  rG  rM  rP  rW  rY  r`  rj  r  r   r/   r-   r  r  Y  s    P&dB C><(). [[YU(;<0 =06869<)* [[YU(;<), =),V8B9,!2FO4?r/   r  )'r   numpyr#   numpy.testingr   r   r   r   r   r   r	   r   r
   rY   rp  scipyr   	scipy.fftr   scipy.signalr   r   r   r   r   r   r   r   r   r   scipy.signal._spectral_pyr   r   r   rt  r  r  r  r  r   r/   r-   <module>r     s    
 N N N  *   L L L 6Z' Z'z}6 }6@
H* H*V
 02  2 hP% P%fv vr/   