
    5[g                     |   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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      Z* G d d      Z+ G d d      Z, G d d      Z- G d d      Z. G d d      Z/ G d d      Z0 G d d      Z1y)    N)assert_assert_approx_equal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                   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        [/var/www/html/bid-api/venv/lib/python3.12/site-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        r2   test_real_onesided_oddz&TestPeriodogram.test_real_onesided_odd$   sg    HHRL!1~1299S>$./GGAJ!	X15)r4   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        r2   test_real_twosidedz"TestPeriodogram.test_real_twosided.   s\    HHRL!1e4172s+,GGB!1r4   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/   r0   gr1   s         r2   test_real_spectrumz"TestPeriodogram.test_real_spectrum7   s]    HHRL!1j111i012;;q#q121T6"r4   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        r2   test_integer_evenz!TestPeriodogram.test_integer_even?   su    HHRs#!1~12;;q#q12GGAJ!	"	Q1r4   c                     t        j                  dt              }d|d<   t        |      \  }}t	        |t        j
                  d      dz         t        j                  d      }d|d<   |dz  }t	        ||d	
       y )Nr6   rN   r!   r   r7   r8   r&   r9   r:   r;   )r(   r)   rP   r   r   r=   r+   r,   s        r2   test_integer_oddz TestPeriodogram.test_integer_oddJ   sj    HHRs#!1~1299S>$./GGAJ!	X15)r4   c                     t        j                  dt              }d|d<   t        |d      \  }}t	        |t        dd             t        j                  dd      }d|d<   t	        ||       y )	Nr    rN   r!   r   Fr@   rB   rC   )r(   r)   rP   r   r   r   rD   r,   s        r2   test_integer_twosidedz%TestPeriodogram.test_integer_twosidedT   s_    HHRs#!1e4172s+,GGB!1r4   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@   rB         ?)r(   r)   
complex128r   r   r   rD   r,   s        r2   test_complexzTestPeriodogram.test_complex]   sc    HHR'!1e4172s+,GGB!!1r4   c                 v    t        t        t        t        j                  dt        j
                        d       y )N   foorH   )assert_raises
ValueErrorr   r(   r)   rY   r-   s    r2   test_unk_scalingz TestPeriodogram.test_unk_scalingf   s"    j+rxx2==/I	r4   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   rN      r!   
   rB   r   rf   r!      r!   <   )	r(   r)   float64reshaper   r   shaper   newaxisr-   r.   r/   r0   f0p0s         r2   test_nd_axis_m1zTestPeriodogram.test_nd_axis_m1j   s    
 HHRrzz*IIh!Aa%1~1177I.&q1Qx1Qq52>Qq1uX&B&r"**Q,'71Q3Dr4   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 )
Nrd   rN   rg   rf   r!   rB   r   axisri   rf   r!   r!   rj   )r(   r)   rk   rl   r   r   rm   r   ro   s         r2   test_nd_axis_0zTestPeriodogram.test_nd_axis_0x   s    
 HHRrzz*IIh!Aa%11%1177G,&q1Qx1Qq52>Qq1uX&B&r1QqU84r4   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   rg   r       )r(   r)   r   r   
get_windowr   r^   r_   r-   r.   r/   r0   winfepewin_errs           r2   test_window_externalz$TestPeriodogram.test_window_external   s    HHRL!1b&)1+QC(B&q"-&q"-##FB/j+q'	#r4   c                     t        j                  d      }d|d<   t        |      \  }}t        |d      \  }}t        ||d d d          t        ||d d d          t	        |j
                  d       y )Nr    r!   r   rz   nfftrf   )   )r(   r)   r   r   r   rm   )r-   r.   r/   r0   fppps         r2   test_padded_fftzTestPeriodogram.test_padded_fft   sg    HHRL!1~1QR(B2cc7#2cc7#288U+r4   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      rf   )r   r   rm   r(   emptyr-   r/   r0   rm   s       r2   test_empty_inputz TestPeriodogram.test_empty_input   sg    21177D)177D)+Erxx/DAqqww.qww. ,r4   c                     dD ]Q  }t        t        j                  |      d      \  }}t        |j                  |       t        |j                  |       S y Nr   r   r!   ru   )r   r(   r   r   rm   r-   rm   r/   r0   s       r2   test_empty_input_other_axisz+TestPeriodogram.test_empty_input_other_axis   s@    %ErxxQ7DAqqww.qww. &r4   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        r2   test_short_nfftzTestPeriodogram.test_short_nfft   u    HHRL!12&12;;q#q12GGAJ!	"	Q1r4   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        r2   test_nfft_is_xshapez#TestPeriodogram.test_nfft_is_xshape   r   r4   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   rO   r,   s        r2   test_real_onesided_even_32z*TestPeriodogram.test_real_onesided_even_32   s    HHR!1~12;;q#q12GGAsO!	"	Q1177"#r4   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 )Nr6   r/   r!   r   r7   r8   r&   r9   Hz>r;   )r(   r)   r   r   r=   r+   r   rO   r,   s        r2   test_real_onesided_odd_32z)TestPeriodogram.test_real_onesided_odd_32   s    HHR!1~1299S>$./GGAsO!	X14(177"#r4   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@   rB   rC   r(   r)   r   r   r   rD   r   rO   r,   s        r2   test_real_twosided_32z%TestPeriodogram.test_real_twosided_32   sv    HHR!1e4172s+,GGB$!1177"#r4   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    FrW   r   Fr@   rB   rX   r/   r   r,   s        r2   test_complex_32zTestPeriodogram.test_complex_32   sv    HHR!1e4172s+,GGB#&!1177"#r4   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   r   rg   zOthe size of the window must be the same size of the input on the specified axismatchwindow)r(   r)   r   r{   r^   r_   r   )r-   r.   r}   expected_msgs       r2   test_shorter_window_errorz)TestPeriodogram.test_shorter_window_error   sQ    HHRL!+=:\:#& ;::s   AA$N)__name__
__module____qualname__r3   r>   rE   rL   rQ   rS   rU   rZ   ra   pytestmarkskipifsysmaxsizerr   rx   r   r   r   r   r   r   r   r   r   r   r    r4   r2   r   r      s    	*#	* [[u/  E	E [[u/  5	5
#,//		
$	$$$'r4   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!)"	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   r<   rtolr(   r)   r   r   r*   arrayr,   s        r2   r3   z!TestWelch.test_real_onesided_even   si    HHRL!!Q"12;;q#q12HH " #14d3r4   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   r=   r   r,   s        r2   r>   z TestWelch.test_real_onesided_odd   si    HHRL!!Q"1299S>#-.HH " #14d3r4   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   rA   rB   r   S8?r   r   r   r   r   r   r   r   )r(   r)   r   r   r   r   r,   s        r2   rE   zTestWelch.test_real_twosided
  sf    HHRL!!Q59171c?+HH F G14d3r4   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&   rG   )r   rI   r"   r   )g      ?g-UU?.iqUU?r   g-UU?r   r   r   r,   s        r2   rL   zTestWelch.test_real_spectrum  sk    HHRL!!Q:612;;q#q12HH " #14d3r4   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    rN   r!   r   r&   r   r"   r   r   r   r   )r(   r)   rP   r   r   r*   r   r,   s        r2   test_integer_onesided_evenz$TestWelch.test_integer_onesided_even  sl    HHRs#!!Q"12;;q#q12HH " #14d3r4   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    rN   r!   r   r&   r#   r   r   r   r   r   r   )r(   r)   rP   r   r   r=   r   r,   s        r2   test_integer_onesided_oddz#TestWelch.test_integer_onesided_odd(  sl    HHRs#!!Q"1299S>#-.HH " #14d3r4   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    rN   r!   r   r&   Fr   rB   r   r   r   )r(   r)   rP   r   r   r   r   r,   s        r2   rU   zTestWelch.test_integer_twosided2  si    HHRs#!!Q59171c?+HH F G14d3r4   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    rW   r   r&   Fr   rB   )g&>?#q?n)t?r   r   r   r   r   r   r   )r(   r)   rY   r   r   r   r   r,   s        r2   rZ   zTestWelch.test_complex<  sm    HHR'!!Q59171c?+HH F G14d3r4   c                 x    t        t        t        t        j                  dt        j
                        dd       y Nr\   r]   )rI   r   )r^   r_   r   r(   r)   rY   r`   s    r2   ra   zTestWelch.test_unk_scalingF  s$    j%!R]])C#Q	0r4   c                     t        j                  dt         j                        dz   }t        |dd      \  }}t	        |t        j
                  |      d       y Nrg   rN   {Gz?linearr   detrendr:   r;   r(   r=   rk   r   r   
zeros_liker-   r.   r/   r0   s       r2   test_detrend_linearzTestWelch.test_detrend_linearJ  sB    IIb

+d2QH512==+%8r4   c                     t        j                  dt         j                        dz   }t        |dd      \  }}t        |dd       \  }}t	        ||d       t	        ||d       y )	Nrg   rN   r   Fr   c                     | S Nr   r.   s    r2   <lambda>z.TestWelch.test_no_detrending.<locals>.<lambda>R  s    r4   r:   r;   )r(   r=   rk   r   r   r-   r.   f1p1f2p2s         r2   test_no_detrendingzTestWelch.test_no_detrendingO  sW    IIb

+d2q"e4Bq"k:BBU+BU+r4   c                     t        j                  dt         j                        dz   }t        |dd       \  }}t	        |t        j
                  |      d       y )Nrg   rN   r   c                 0    t        j                  | d      S Nl)typer   r   segs    r2   r   z1TestWelch.test_detrend_external.<locals>.<lambda>Y      #)Fr4   r   r:   r;   r   r   s       r2   test_detrend_externalzTestWelch.test_detrend_externalV  sF    IIb

+d2QFH12==+%8r4   c                     t        j                  dt         j                        dz   }|j                  d      }t	        |dd       \  }}t        |t        j                  |      d	       y )
N(   rN   r   rf   rf   rg   rg   c                 0    t        j                  | d      S r   r   r   s    r2   r   z7TestWelch.test_detrend_external_nd_m1.<locals>.<lambda>`  r  r4   r   r:   r;   )r(   r=   rk   rl   r   r   r   r   s       r2   test_detrend_external_nd_m1z%TestWelch.test_detrend_external_nd_m1\  sT    IIb

+d2IIhQFH12==+%8r4   c                    t        j                  dt         j                        dz   }|j                  d      }t        j                  |dd      }t        |ddd 	      \  }}t        |t        j                  |      d
       y )Nrd   rN   r   re   rf   r   rg   c                 2    t        j                  | dd      S Nr   r   )rv   r   r   r   s    r2   r   z6TestWelch.test_detrend_external_nd_0.<locals>.<lambda>h  s    !#)Nr4   r   rv   r   r:   r;   )r(   r=   rk   rl   moveaxisr   r   r   r   s       r2   test_detrend_external_nd_0z$TestWelch.test_detrend_external_nd_0c  sh    IIb

+d2IIhKK1a QNP12==+%8r4   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 Nrd   rN   r   re   rg   r   rh   r   r!   vIh%<=r   )	r(   r=   rk   rl   r   r   rm   r   rn   ro   s         r2   rr   zTestWelch.test_nd_axis_m1k  s    IIb

+d2IIhQ#1177I.!Aa%!AaE(UCq1Qx,B2::a<(!AaC&u5Ir4   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 Nrd   rN   r   rt   rg   r   )r   rv   rw   r!   r  r   r   )r(   r=   rk   rl   r   r   rm   r   ro   s         r2   rx   zTestWelch.test_nd_axis_0t  s    IIb

+d2IIhQ+1177G,!Aa%!AaE(UCq1Qx,BAa!eH5u=r4   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&   rg   r   r   r   r\   rz   )
r(   r)   r   r   r{   r   r   rm   r^   r_   r|   s           r2   r   zTestWelch.test_window_external}  s    HHRL!!QFA.1*q"c40B&q"-&q"-288T*288T*j%#q	*##FB/j%'4	1r4   c                     t        g       \  }}t        |j                  d       t        |j                  d       dD ]O  }t        t        j                  |            \  }}t        |j                  |       t        |j                  |       Q y r   )r   r   rm   r(   r   r   s       r2   r   zTestWelch.test_empty_input  sg    Ry1177D)177D)+E%)DAqqww.qww. ,r4   c                     dD ]Q  }t        t        j                  |      d      \  }}t        |j                  |       t        |j                  |       S y r   )r   r(   r   r   rm   r   s       r2   r   z%TestWelch.test_empty_input_other_axis  s@    %E%q1DAqqww.qww. &r4   c                 h   t        j                  d      }d|d<   t               5 }d}|j                  t        |       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 = 8r   r      r   r   r   )r(   r)   r	   filterUserWarningr   r   
r-   r.   supmsgr/   r0   r   r   r   r   s
             r2   test_short_datazTestWelch.test_short_data  s    HHQK!  CVCJJ{C(&)DAq1FC8FB	 !
 q!$B22BB ! s   :B((B1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 Nr\   r!   )r!   r!   r!   r!   r!   ri   )rf   r   )r^   r_   r   r(   r)   r   r=   rl   r`   s    r2   test_window_long_or_ndz TestWelch.test_window_long_or_nd  sQ    j%!a+9NOj%!aiil**51	3r4   c                     t        j                  d      }d|d d d<   t        |dd      \  }}t        j                  g d      }t	        ||d	       y 
N@   r!   r&   r    r\   r   noverlap)	r   gUUUUUU?UUUUUU?皙?r)  r*  r)  r*  gUUUUUU?g-q=r;   )r(   r)   r   r   r   r,   s        r2   test_nondefault_noverlapz"TestWelch.test_nondefault_noverlap  sM    HHRL#A#QQ/1HH  15)r4   c           	      \    t        t        t        t        j                  d      dddd       y Nr\   r!   r   rf      )r^   r_   r   r(   r)   r`   s    r2   test_bad_noverlapzTestWelch.test_bad_noverlap  s    j%!aAFr4   c                 Z    t        t        t        t        j                  d      dd       y N   r   r\   )r   r   )r^   r_   r   r(   r+   r`   s    r2   test_nfft_too_shortzTestWelch.test_nfft_too_short  s    j%1aHr4   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   rO   r,   s        r2   r   z$TestWelch.test_real_onesided_even_32  s    HHR!!Q"12;;q#q12HH "#&(14d3177"#r4   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   r=   r   r   rO   r,   s        r2   r   z#TestWelch.test_real_onesided_odd_32  s    HHR!!Q"1299S>#-.HH "#&(14d3177"#r4   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   rB   r   r   r   r(   r)   r   r   r   r   r   rO   r,   s        r2   r   zTestWelch.test_real_twosided_32  s    HHR!!Q59171c?+HH "#&( 	14d3177"#r4   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   rW   r   r&   Fr   rB   )g%?A2q?d^?r>  g~?r>  r>  r=  r/   r   r   zdtype mismatch, , r:  r,   s        r2   r   zTestWelch.test_complex_32  s    HHR!!Q59171c?+HH FGJL14d3177""177)2aggY7	9r4   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 Nr2     rB   rf   r!   r$   r   r   r   ri      )r(   r)   r   r   r   )r-   r.   r   r/   fodd_fevens          r2   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!r4   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        ||            |t        j                  d      z  dz  d        y )Nrd   g     @rg   ,  rf   )r   bartlett)tukey皙?flattoprG   )fsr   r   rI   rJ   r%   gMbP?r   )	rP   r(   r=   sinpir   r   sqrtr   )r-   ArO  r   fsigiittr.   r   rF  p_specfreqp_denss                r2   test_window_correctionz TestWelch.test_window_correction   s    b"f+gr!"YYr]2bffQruuWT\"_%%EFaB&02IAv r76)24LD& F2J1S1BGGIfd$;<a
l1n!%' Fr4   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$   ru   err_msg)
r(   randomseedrandnr   rangerl   ndimr   squeeze)	r-   x_flatrF  p_flatanewshaper.   p_plusp_minuss	            r2   test_axis_rollingzTestWelch.test_axis_rolling  s    
		t&&M	6qAtAvHHQKx(Aaa(IAvqqx0JAw!11=!2AaffHE r4   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   )rM  g?        g&E    9rq  r   r   zunrecognised-average)r(   r)   r   r   r*   r   r^   r_   r,   s        r2   test_averagezTestWelch.test_average'  sz    HHRL!!Q8412;;q#q12HH6714d3j%A4	6r4   N)#r   r   r   r3   r>   rE   rL   r   r   rU   rZ   ra   r   r   r  r  r  rr   rx   r   r   r   r   r#  r+  r/  r3  r   r   r   r   rH  r[  rm  rr  r   r4   r2   r   r      s    4444444409
,999J>1"//  3
*GI	$	$
$
9"$',F"
6r4   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&   r2  r   r"   r.  rN   r   r(   r)   r*   rY   csdr   r-   r.   yr/   cr   c1s          r2   test_pad_shorter_xzTestCSD.test_pad_shorter_x5  sh    HHQKHHRLKK3"HHQR]]+Q2&B22r4   c                 "   t        j                  d      }t        j                  d      }t        j                  ddd      }t        j                  dt         j                        }t	        ||d      \  }}t        ||       t        ||       y )Nr2  r&   r   r"   r.  rN   r   rv  rx  s          r2   test_pad_shorter_yzTestCSD.test_pad_shorter_y@  sh    HHRLHHQKKK3"HHQR]]+Q2&B22r4   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)   rw  r   r*   r   r,   s        r2   r3   zTestCSD.test_real_onesided_evenK  sk    HHRL!!1a#12;;q#q12HH " #14d3r4   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)   rw  r   r=   r   r,   s        r2   r>   zTestCSD.test_real_onesided_oddU  sk    HHRL!!1a#1299S>#-.HH " #14d3r4   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)   rw  r   r   r   r,   s        r2   rE   zTestCSD.test_real_twosided_  sh    HHRL!!1aE:171c?+HH F G14d3r4   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        r2   rL   zTestCSD.test_real_spectrumi  sm    HHRL!!1aJ712;;q#q12HH " #14d3r4   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)   rP   rw  r   r*   r   r,   s        r2   r   z"TestCSD.test_integer_onesided_evens  sn    HHRs#!!1a#12;;q#q12HH " #14d3r4   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)   rP   rw  r   r=   r   r,   s        r2   r   z!TestCSD.test_integer_onesided_odd}  sn    HHRs#!!1a#1299S>#-.HH " #14d3r4   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)   rP   rw  r   r   r   r,   s        r2   rU   zTestCSD.test_integer_twosided  sk    HHRs#!!1aE:171c?+HH F G14d3r4   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)   rY   rw  r   r   r   r,   s        r2   rZ   zTestCSD.test_complex  so    HHR'!!1aE:171c?+HH F G14d3r4   c           	          t        t        t        t        j                  dt        j
                        t        j                  dt        j
                        dd       y r   )r^   r_   rw  r(   r)   rY   r+   r`   s    r2   ra   zTestCSD.test_unk_scaling  s6    j#rxx2=='Agga/	Kr4   c                     t        j                  dt         j                        dz   }t        ||dd      \  }}t	        |t        j
                  |      d       y r   r(   r=   rk   rw  r   r   r   s       r2   r   zTestCSD.test_detrend_linear  sD    IIb

+d21aX612==+%8r4   c                     t        j                  dt         j                        dz   }t        ||dd      \  }}t        ||dd       \  }}t	        ||d       t	        ||d       y )	Nrg   rN   r   Fr   c                     | S r   r   r   s    r2   r   z,TestCSD.test_no_detrending.<locals>.<lambda>  s    r4   r:   r;   )r(   r=   rk   rw  r   r   s         r2   r   zTestCSD.test_no_detrending  s[    IIb

+d2Q2u5BQ2{;BBU+BU+r4   c                     t        j                  dt         j                        dz   }t        ||dd       \  }}t	        |t        j
                  |      d       y )Nrg   rN   r   c                 0    t        j                  | d      S r   r   r   s    r2   r   z/TestCSD.test_detrend_external.<locals>.<lambda>      v~~c'Dr4   r   r:   r;   r  r   s       r2   r  zTestCSD.test_detrend_external  sH    IIb

+d21aDF12==+%8r4   c                     t        j                  dt         j                        dz   }|j                  d      }t	        ||dd       \  }}t        |t        j                  |      d	       y )
Nr  rN   r   r  rg   c                 0    t        j                  | d      S r   r   r   s    r2   r   z5TestCSD.test_detrend_external_nd_m1.<locals>.<lambda>  r  r4   r   r:   r;   )r(   r=   rk   rl   rw  r   r   r   s       r2   r  z#TestCSD.test_detrend_external_nd_m1  sV    IIb

+d2IIh1aDF12==+%8r4   c                    t        j                  dt         j                        dz   }|j                  d      }t        j                  |dd      }t        ||ddd 	      \  }}t        |t        j                  |      d
       y )Nrd   rN   r   re   rf   r   rg   c                 2    t        j                  | dd      S r
  r   r   s    r2   r   z4TestCSD.test_detrend_external_nd_0.<locals>.<lambda>  s    v~~c'Lr4   r  r:   r;   )r(   r=   rk   rl   r  rw  r   r   r   s       r2   r  z"TestCSD.test_detrend_external_nd_0  sj    IIb

+d2IIhKK1a 1a!LN12==+%8r4   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(   r=   rk   rl   rw  r   rm   r   rn   ro   s         r2   rr   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Ir4   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(   r=   rk   rl   rw  r   rm   r   ro   s         r2   rx   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=r4   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&   rg   r   r   r  r  rz   )
r(   r)   rw  r   r{   r   r   rm   r^   r_   r|   s           r2   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	)r4   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 )Nrg   r   r   )r   r   )rw  r(   r)   r   rm   r   r+   r   s       r2   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*r4   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!   ru   )rg   rg   r   )rg   r   r!   )rg   r   r   )rw  r(   r   r   rm   r)   r   s       r2   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-r4   c                 n   t        j                  d      }d|d<   t               5 }d}|j                  t        |       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  rw  r   r  s
             r2   r   zTestCSD.test_short_data  s    HHQK!  CVCJJ{C(q!F+DAqAfc:FB	 !
 Q1%B22BB ! s   <B++B4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"  )	r^   r_   rw  r(   r)   r+   r   r=   rl   r`   s    r2   r#  zTestCSD.test_window_long_or_nd  sh    j#rxx{BGGAJhh{+	-j#rxx{BGGAJiil**51	3r4   c                     t        j                  d      }d|d d d<   t        ||dd      \  }}t        j                  g d      }t	        ||d	       y r%  )r(   r)   rw  r   r   r,   s        r2   r+  z TestCSD.test_nondefault_noverlap  sO    HHRL#A#1aa01HH  15)r4   c           
          t        t        t        t        j                  d      t        j
                  d      dddd       y r-  )r^   r_   rw  r(   r)   r+   r`   s    r2   r/  zTestCSD.test_bad_noverlap&  s+    j#rxx{BGGAJ6	r4   c                     t        t        t        t        j                  d      t        j
                  d      dd       y r1  )r^   r_   rw  r(   r+   r)   r`   s    r2   r3  zTestCSD.test_nfft_too_short*  s'    j#rwwr{BHHRLq	!r4   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 r5  )r(   r)   rw  r   r*   r   r   rO   r,   s        r2   r   z"TestCSD.test_real_onesided_even_32.  s    HHR!!1a#12;;q#q12HH "#&(14d3177"#r4   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 r7  )r(   r)   rw  r   r=   r   r   rO   r,   s        r2   r   z!TestCSD.test_real_onesided_odd_329  s    HHR!!1a#1299S>#-.HH "#&(14d3177"#r4   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 r9  r(   r)   rw  r   r   r   r   rO   r,   s        r2   r   zTestCSD.test_real_twosided_32D  s    HHR!!1aE:171c?+HH "#&( 	14d3177"#r4   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 r<  r  r,   s        r2   r   zTestCSD.test_complex_32P  s    HHR!!1aE:171c?+HH FGJL14d3177""177)2aggY7	9r4   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 rA  )r(   r)   r+   r   rw  r   )r-   r.   ry  r   r/   rE  rF  rG  s           r2   rH  zTestCSD.test_padded_freqs\  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!r4   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   rp  rA   ro  )r(   ra  rc  copyrw  r   )r-   r.   ry  rF  p_samep_copieds         r2   test_copied_datazTestCSD.test_copied_datao  s    IIOOBFFH1a(-/	6!Q6*/18)1a(-/	6!Q8*/18)r4   N)#r   r   r   r|  r~  r3   r>   rE   rL   r   r   rU   rZ   ra   r   r   r  r  r  rr   rx   r   r   r   r   r#  r+  r/  r3  r   r   r   r   rH  r  r   r4   r2   rt  rt  4  s    		44444444K9
,999J>)"+,. "3*!	$	$
$
9"&*r4   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 Nrd   r   r"   ri   rg   r   )r(   ra  rc  r  r*   r+   r   r   r-   r.   ry  r/   Cr   C1s          r2   test_identical_inputz"TestCoherence.test_identical_input  sf    IIOOBGGAJKK3"GGAJ1a,B22r4   c                     t         j                  j                  d      }| }t        j                  ddd      }t        j                  d      }t        ||d      \  }}t        ||       t        ||       y r  )r(   ra  rc  r*   r+   r   r   r  s          r2   test_phase_shifted_inputz&TestCoherence.test_phase_shifted_input  s`    IIOOBBKK3"GGAJ1a,B22r4   N)r   r   r   r  r  r   r4   r2   r  r    s    		r4   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^  rB   rL  g      ?r    rf   r$   ru   )r(   ra  rc  r   r   r   r  )r-   r.   rO  r   r   r(  r/   rF  PfwPws              r2   test_average_all_segmentsz)TestSpectrogram.test_average_all_segments  su    IIOOD! aVWh?1aq"fgx8B2+R0r4   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^  rB   r  r    rf   r'  )r#   )r#   I   r&   r   i   )
r(   ra  rc  r   r   r{   r   rm   r^   r_   )r-   r.   rO  r   r   r(  r/   rF  r  r}   r~   Per   s                r2   r   z$TestSpectrogram.test_window_external  s    IIOOD! aVWh?1a42sD1E	Ar288T*288V,j+q#q	*##OT:j+q'4	1r4   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^  rB   r  r   zInperseg = 1025 is greater than input length  = 1024, using nperseg = 1024i  r  r  r   )r(   ra  rc  r   r	   r  r  r   )r-   r.   rO  r/   rF  r0   r  r   r   r   r   f3p3s                r2   r   zTestSpectrogram.test_short_data  s    IIOOD! aN;1a CJJ{.0 $Ar.,02IB2	 !  2s3	Ar2t4	Ar22BB ! s   *CCN)r   r   r   r  r   r   r   r4   r2   r  r    s    11& r4   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%   rB   r"   d     ffffff?# {Gz?      $@r!   r   N)
r(   rR  ra  rb  randr*   rQ  r   r   argmax)r-   amplwphininnoutr0   rtr.   r/   r  deltas                r2   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1r4   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%   rB   r"   r  r  r  r  r  r  r\   r   rf   significant)r(   rR  ra  rb  r  r*   rQ  r   rS  rm   r   max)r-   r  r  r  r  r  r0   r  r  r.   r/   pgrams               r2   test_amplitudezTestLombscargle.test_amplitude  s    
 BEEk 			wIINN3KKRUU
CIs3AF; 266!A#)$$ KKc4( Aq!$ E	AGGAJ./ 	BFF5M4Q?r4   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%   rB   r"   r  r  r  g333333?r  r  r  T)	precenterF)
r(   rR  ra  rb  r  r*   rQ  r   r  r   )r-   r  r  r  r  r  r0   offsetr  r  r.   r/   r  pgram2s                 r2   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&r4   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%   rB   r"   r  r  r  r  r  r  T)	normalizerf   r  )r(   rR  ra  rb  r  r*   rQ  r   r   dotr   r  )r-   r  r  r  r  r  r0   r  r  r.   r/   r  r  s                r2   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?r4   c                     t        j                  ddd      }t        j                  ddd      }t        j                  ddd      }t        t        t        |||       y )Nr   r!   rf   r   )r(   r*   r^   r_   r   r-   r  r.   r/   s       r2   test_wrong_shapez TestLombscargle.test_wrong_shapeK  sH    KK1a KK1a KK1a j+q!Q7r4   c                     t        j                  d      }t        j                  d      }t        j                  d      }t        t        t        |||       y )Nr!   )r(   r)   r^   ZeroDivisionErrorr   r  s       r2   test_zero_divisionz"TestLombscargle.test_zero_divisionQ  s:    HHQKHHQKHHQK'aA>r4   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   rg   r  F)endpointr\   2   i  rM  rf   )r(   r*   rQ  r   rR  r  s       r2   test_lombscargle_atan_vs_atan2z.TestLombscargle.test_lombscargle_atan_vs_atan2W  sZ     KK2te4FF1Q3KKK2sU3c9Aq!A#bee)$r4   N)
r   r   r   r  r  r  r  r  r  r  r   r4   r2   r  r    s)    2@@B'<@<8?%r4   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
   r_   r   s    r2   chk_VEz.TestSTFT.test_input_validation.<locals>.chk_VEc  s    
 ==599r4   z"nperseg must be a positive integerr   ir   z#noverlap must be less than nperseg.rg   rd   zwindow must be 1-D)rf   rf   z"window must have length of npersegz"noverlap must be less than npersegz&noverlap must be a nonnegative integerr&  ir^  rf   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&   rC  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'\}r]   )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'\]!rH   )r   r(   r+   r   r)   r  istftr   warnsr  r   )r-   r  r.   zrI   s        r2   test_input_validationzTestSTFT.test_input_validationa  sL   	: 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?+ * , -2772;4- 89D! :9:C$/ ;DECa( F 56!H 7()!BGGFO, *45!BGGBK5 689!T" :9:!S40 ;DE!Sq) F\\+ .7 8!S1V<8 EF!qA. G  ) *Q.* =>QtWagF; ? D EQE2E *'+IJKG$ L*'+IJK!W% LKK :9::))99 :999))99== *)- - :9::EE 76))5599::EE8 8 GF* * ?>E E
 LKKKsB  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)boxcarrg   r   r  rg   r#   rK  3      r   r     r   r     blackmanrJ     rL  r"   r  r&  r   r     
{}, {}, {}Tr_  )formatr   r   )r-   settingssettingr  s       r2   test_check_COLAzTestSTFT.test_check_COLA  s8    	  G%,%%w/Cz73SA  r4   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  rg   r.  r  )rK  r  rg   r  r
  )r   r  %   r  )r  rJ  {   r  )r  r  &   r  )r   r  '   r  Tr_  r    r   rf   )r   r&  r   F)r  r   r   r(   r+   len)r-   settings_passr  r  w_failsettings_fails         r2   test_check_NOLAzTestSTFT.test_check_NOLA  s      %G%,%%w/Cz73SA % ssS[#f+*:;#
 %G%,%%w/C
G 4cB %r4   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 )Nr]  r^  rB   r   r    r&   F)paddedrA   r  rG   )rA   rI   r   rf   r$   ru   )	r(   ra  rb  rc  r  r   r   r  abs)r-   r.   rO  r   r   r(  r/   rF  Zr  r  s              r2   r  z"TestSTFT.test_average_all_segments  s    
		tIIOOD!
 q"fgx',t=1aq"fgx)5:B 	2q	126;r4   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 )Nr]  r^  rB   r   r    r&   )r$   r!   r!   r   ru   r$   r  )	r(   ra  rb  rc  r  rl   r  Tr   )r-   r.   rO  r   r   r(  r   t1Z1r   t2Z2t3x1t4x2s                   r2   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(r4   rI   rG   psdc           
      |   t         j                  j                  d       g d}|D ]  \  }}}}t        j                  |      }dt         j                  j	                  |j
                        z  }t        ||||d d|      \  }	}	}
t        |
||||      \  }}| d| }t        |||       t        |||        y )	Nr]  r  r  rg   r   r  r  rg   r#   )rK  e   r  r  r   r^  r  r	  )r    r  r&  )r   r^  r  r  rg   F)r   r(  r   r   r#  rI   )r   r(  r   rI   r?  r_  	r(   ra  rb  r=   rc  sizer  r  r   )r-   rI   r  r   Nr   r(  r  r.   rF  zztrxrr  s                 r2   test_roundtrip_realzTestSTFT.test_roundtrip_real  s    
		t -5(FAw		!A299??166**AAw#)4$+-HAq" 2w"(';FB HBxj)CAr3/Ar3/ -5r4   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)Nr]  r    r   rf   r  )r   r  r&  r   r?  rg   Tr)   r   r(  r   r   r#  r  NOLAr   r   r(  r   r  )r(   ra  rb  r+   r  r   r=   rc  r:  r  r   r  r  r  allclose)r-   r  r  r   r;  r   r(  r  r  r.   rF  r<  r=  r>  s                 r2   test_roundtrip_not_nolaz TestSTFT.test_roundtrip_not_nola)  s^   
		tssS#f+s6{a/?@(

 -5(FAwHBqcG9Bxj9C!&'8<AcA<		!ARYY__QVV,,AAw#)4%,.HAq" k8r7X&,t=B 9 ;;q"Wc!f+.33.{{1b#a&k27C72 -5 98s   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 )
Nr]  ))r  r  rg   r   )rK  r6  r  r  )r   r^  r     )r  r8  r     )r   r^  r  r   r?  rg   Tr)   rA  rC  r_  )r(   ra  rb  r   r   r=   rc  r:  r  r  r   r  )r-   r  r   r;  r   r(  r  r  r.   rF  r<  r=  r>  s                r2   test_roundtrip_nola_not_colaz%TestSTFT.test_roundtrip_nola_not_colaD  s   
		t -5(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# -5r4   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 )Nr]  r7  rg   Fr   r(  r   r   r#  r  r?  r_  g-C6?gh㈵>)r`  r   r<   )r(   ra  rb  r=   rc  r:  astypefloat32r  r  r   r   rO   r-   r  r   r;  r   r(  r  r.   rF  r<  r=  r>  r  s                r2   test_roundtrip_float32zTestSTFT.test_roundtrip_float32b  s    
		t,-,4(FAw		!A299??166**A$AAw#)4GHAq" 2w"(*FB HBxj)CAq#.Ar3TEAGGrxx'( -5r4   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)Nr]  r3  rg   y              $@F)r   r(  r   r   r#  rA   rI   )r   r(  r   input_onesidedrI   r?  r_  z9Input data is complex, switching to return_onesided=FalseT)r(   ra  rb  r=   rc  r:  r  r  r   r	   r  r  )r-   rI   r  r   r;  r   r(  r  r.   rF  r<  r=  r>  r  r  s                  r2   test_roundtrip_complexzTestSTFT.test_roundtrip_complexw  s}   
		t -5(FAw		!A299??166**S1H-HHAAw#)4,17DHAq" 2w"(#*,FB HBwir(4CAr3/Ar3/ -5"  CJJ{RTAw#)4,0'CHAq" ! r7X$UGMB 7)2hZ02s+2s+ ! 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 )Nr]  r4  r5  rg   TrA  F)r(  r   r  )evenoddconstantr)   r?  r_  r9  )r-   r  r   r;  r   r(  r  r.   rF  r<  r>  r  zz_extxr_extr  s                  r2   !test_roundtrip_boundary_extensionz*TestSTFT.test_roundtrip_boundary_extension  s   
		t +*
 -5(FAw		!A299??166**AAw"($t$(*HAq" "xOEAr@#Aw'-tD)1 31f "&8F)-/	6  8*Bxj92s3637 A -5r4   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 )
Nr]  )r  r6  rg   r   )r   r  r  r	  rg   TrK  )r(  r   r?  r_  r9  rN  s                r2   test_roundtrip_padded_signalz%TestSTFT.test_roundtrip_padded_signal  s    
		t +,
 -5(FAw		!A299??166**AAw#)4FHAq" 2@FBHBxj)CAr'166{C8Ar'166{C8 -5r4   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 )Nr]  ))r   r^  r  r	  r  )r   r^  r  r	  i  )r  r  rg   r   !   )r  r8  r  r&  r^  rg   y              ?r\   T)r   r(  r   r   r   r#  F)r   r(  r   r   r   r#  rA   )r   r(  r   r   )r   r(  r   r   rQ  r?  r_  )r(   ra  rb  r=   rc  r:  exprR  r  r  r   )r-   r  r   r;  r   r(  r   r  r.   xcrF  r  zcr=  r>  xcrr  s                    r2   test_roundtrip_padded_FFTz"TestSTFT.test_roundtrip_padded_FFT  s,   
		t 3;.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/ 3;r4   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 )Nr]  r^  r   r!   r$   ru   r_  r  r   zistft transpose minuszistft transpose plus)r(   ra  rb  rc  r  rd  rl   re  r   rf  r  r'  r   )r-   rg  rF  z_flatri  rj  r.   z_plusz_minusx_transpose_mx_transpose_ps              r2   rm  zTestSTFT.test_axis_rolling  s   
		t&F|1fqAtAvHHQKx(A?LAq& 1662MAq'!11=!2AaffHE  !R2F= Q!D=7NO7MNr4   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  rN   r^  r  rf   rT  rG   )r  rI   Tr!   ?   Nr$   r"   r&  A   r   B   r;   Fr1  )rA   r  rI   ru   )rQ  r  rI   rd     )r(   r)   complexr   r   sumr  r  r  r   r$  finforO   
resolutionrealimagrm   conj)r-   Xr.   power_xZsr-  Zppsd_ZpZp0Zp1s2psd_Zp01s               r2   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r4   N)r   r   r   r   r  r!  r  r0  r   r   parametrizer?  rE  rI  rO  rR  rY  r[  rb  rm  r  r   r4   r2   r  r  `  s    P&dB C><(). [[YU(;<0 =06869<)* [[YU(;<), =),V8B9,!2FO4?r4   r  c                       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 Zedefd       Zedefd       Zd Zd Zy)"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``
    rz   nrC   r'  r   a_refl_ax_refX_refE_refP_refc                    t        | j                  | j                        }t        j                  |      }d| _        | j                  dz  | j                  z  || j
                  <   t        |      | _        t        | j                        | _
        | j                  | j                  dz  z  dz  | _        | j                  dz  dz  | _        y)z5Create Cosine signal with amplitude a from spectrum. r   rf   N)r   r  r'  r(   r   r  r  r   r  r   r  taur  r  )r-   r/   r  s      r2   setup_methodz/TestSampledSpectralRepresentations.setup_methodj  s    TVVTVV$a **Q,/dhh5\
_
 XX

A-1
ZZ]Q&
r4   returnc                 4    | j                   | j                  z  S )zDuration of signal. r  r'  r`   s    r2   r  z&TestSampledSpectralRepresentations.tauw  s     vvr4   c                 :    d| j                   | j                  z  z  S )z
Bin width r!   r  r`   s    r2   delta_fz*TestSampledSpectralRepresentations.delta_f|  s     DFFTVVO$$r4   c                    t        d| j                  z  t        j                  | j                        d       t        | j
                  t        | j                  dz        z  | j                         t        | j                  j                  dz  | j                  j                  dz  z         }t        | j
                  | j                  z  |z  | j                         t        d| j                  dz  z  |z  | j                         y)z Test energy and power formulas. rf   rM  rP  r!   N)r   r  r(   ptpr  r'  rp  r  r  rs  rt  r  r  )r-   sum_X_ref_squareds     r2   test_reference_signalz8TestSampledSpectralRepresentations.test_reference_signal  s     	$**bffTZZ&8sCTZZ1_!55tzzB  

 2TZZ__a5G GHtvv(994::F$&&!)&77Dr4   c                    t        | j                  d      }t        t        |            t	        j
                  t        |j                  dz  |j                  dz  z               }}t        | j                  |z        }t        | j                  || j                     z  |z  | j                  | j                  z  dz         t        || j                     |z  | j                  dz         | j                  | j                  z  t        ||z        dz  z  }| j                  t        ||z        dz  z  }t        | j                  t        |      z  | j                          t        | j                  t        |      z  | j"                         t%        d| j                  z  |dd      }t'        | j                  fddi|\  }}	t'        | j                  fddi|\  }}
t	        j(                  |	j*                        j,                  }t        |	t        ||z        dz  |t/        |	      z  	       t        |
||t/        |
      z  	       t%        dt1        | j                        d
d|}t        t3        | j                  fddi|d   |	|t/        |	      z  	       t        t3        | j                  fddi|d   |
|t/        |
      z  	       y)zVerify spectral representations of windowed DFT.

        Furthermore, the scalings of `periodogram` and `welch` are verified.
        F)symrf   r!   )rO  r   r   rA   rI   rG   rJ   r;   r   r'  Nr   )r   r  r$  rp  r(   rS  rs  rt  r   r  r   r  r  r  r'  r  r  r  dictr   rq  rO   rr  r  r  r   )r-   r  c_ampc_rmsXwX_ESDX_PSDkwrF  P_magP_psd	float_ress               r2   test_windowed_DFTz4TestSampledSpectralRepresentations.test_windowed_DFT  sF   
 U#3q6{BGGC	AFFAI0E,F$GuA 	2dhh</%7dhh9NQR9RS488u,djjl; 466!CU
OQ$66R%Z!++s5z14::>s5z14::> QtvvXaNtzzD:DD5tzzC9CC5 HHU[[)44	s2e8}a/iE
6JKu9SZ+?@ <#djj/A<<djjC*CCAF&s5z1	3djjB)BrB1Eu&s5z1	3r4   N)r   r   r   __doc__r  rP   __annotations__r'  floatr  r  r(   ndarrayr  propertyr  r  r  r  r   r4   r2   r  r  Y  s     AsKAuOE5CL::::LL' U   % % %
E$3r4   r  )2r   numpyr(   numpy.testingr   r   r   r   r   r   r	   r   r
   r^   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   rw  r   r   rt  r  r  r  r  r  r   r4   r2   <module>r     s    
 N N N  *  3 3 %? ? ? % 6 N O KZ' Z'z|6 |6~	I* I*X
 03  3 jP% P%fv vrX3 X3r4   