
    ge                     X   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 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%dS )    N)assert_assert_approx_equalassert_allcloseassert_array_equalassert_equalassert_array_almost_equal_nulpsuppress_warnings)raises)signal)fftfreq)
periodogramwelchlombscarglecsd	coherencespectrogramstftistft
check_COLA
check_NOLA)_spectral_helperc                   >   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zej                            ej        d
k    d          d             Ze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dS )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          ||           d S )	N      r         ?	          @   npzerosr   r   linspaceonesselfxfpqs        @lib/python3.11/site-packages/scipy/signal/tests/test_spectral.pytest_real_onesided_evenz'TestPeriodogram.test_real_onesided_even   s    HRLL!1~~12;q#q11222GAJJ!	"	Q1    c                    t          j        d          }d|d<   t          |          \  }}t          |t          j        d          dz             t          j        d          }d|d<   |dz  }t          ||d	           d S )
N   r   r          @      .@r!   ?V瞯<atol)r#   r$   r   r   aranger&   r'   s        r-   test_real_onesided_oddz&TestPeriodogram.test_real_onesided_odd   s~    HRLL!1~~129S>>$.///GAJJ!	X15))))))r/   c                     t          j        d          }d|d<   t          |d          \  }}t          |t	          dd                     t          j        dd          }d|d<   t          ||           d S )Nr   r   r   Freturn_onesided      ?      ?)r#   r$   r   r   r   fullr'   s        r-   test_real_twosidedz"TestPeriodogram.test_real_twosided'   sx    HRLL!1e444172s++,,,GB!1r/   c                     t          j        d          }d|d<   t          |d          \  }}t          |d          \  }}t          |t          j        ddd                     t          ||d	z             d S )
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_spectrum0   s|    HRLL!1j11111i00012;q#q1122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	          ||           d S )
Nr   dtyper   r   r   r   r   r    r!   )r#   r$   intr   r   r%   r&   r'   s        r-   test_integer_evenz!TestPeriodogram.test_integer_even8   s    HRs###!1~~12;q#q11222GAJJ!	"	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	
           d S )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_oddC   s    HRs###!1~~129S>>$.///GAJJ!	X15))))))r/   c                     t          j        dt                    }d|d<   t          |d          \  }}t	          |t          dd                     t          j        dd          }d|d<   t	          ||           d S )	Nr   rI   r   r   Fr;   r=   r>   )r#   r$   rK   r   r   r   r?   r'   s        r-   test_integer_twosidedz%TestPeriodogram.test_integer_twosidedM   s    HRs###!1e444172s++,,,GB!1r/   c                    t          j        dt           j                  }d|d<   t          |d          \  }}t	          |t          dd                     t          j        dd          }d|d<   t	          ||           d S )Nr         ?       @r   Fr;   r=         ?)r#   r$   
complex128r   r   r   r?   r'   s        r-   test_complexzTestPeriodogram.test_complexV   s~    HR''!1e444172s++,,,GB!!!1r/   c                 z    t          t          t          t          j        dt          j                  d           d S )N   foorC   )assert_raises
ValueErrorr   r#   r$   rT   r(   s    r-   test_unk_scalingz TestPeriodogram.test_unk_scaling_   s:    j+rx2=/I/I	 	 	 	 	 	r/   l        zOn some 32-bit tolerance issue)reasonc                    t          j        dt           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           d S )	N   rI      r   
   r=   r   ra   r      r   <   )	r#   r$   float64reshaper   r   shaper   newaxisr(   r)   r*   r+   f0p0s         r-   test_nd_axis_m1zTestPeriodogram.test_nd_axis_m1c   s    
 HRrz***IIh!!!AAAa%1~~117I...&q1QQQx1Qqqq52>>>Qq111uX&&B&r"*QQQ,'71QQQ3DDDDDr/   c                    t          j        dt           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                    d S )
Nr_   rI   rb   ra   r   r=   r   axisrd   ra   r   r   re   )r#   r$   rf   rg   r   r   rh   r   rj   s         r-   test_nd_axis_0zTestPeriodogram.test_nd_axis_0q   s    
 HRrz***IIh!AAAaaa%11%%%117G,,,&q1Qx111Qq52>>>Qqqq1uX&&B&r1QQQqU844444r/   c                 V   t          j        d          }d|d<   t          |dd          \  }}t          j        dd          }t          |d|          \  }}t          ||           t          ||           t          j        dd          }t          t          t          |d|           d S )Nr   r   r   rb   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    HRLL!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           d S )Nr   r   r   rv   nfftra   )   )r#   r$   r   r   r   rh   )r(   r)   r*   r+   fppps         r-   test_padded_fftzTestPeriodogram.test_padded_fft   s    HRLL!1~~1QR(((B2ccc7###2ccc7###28U+++++r/   c                 $   t          g           \  }}t          |j        d           t          |j        d           dD ]P}t          t          j        |                    \  }}t          |j        |           t          |j        |           Qd S Nr   r      r   r      ra   )r   r   rh   r#   emptyr(   r*   r+   rh   s       r-   test_empty_inputz TestPeriodogram.test_empty_input   s    2117D)))17D)))+ 	/ 	/Erx//DAqqw...qw....	/ 	/r/   c                     dD ]R}t          t          j        |          d          \  }}t          |j        |           t          |j        |           Sd S Nr   r   r   rp   )r   r#   r   r   rh   r(   rh   r*   r+   s       r-   test_empty_input_other_axisz+TestPeriodogram.test_empty_input_other_axis   s`    % 	/ 	/ErxQ777DAqqw...qw....	/ 	/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          ||           d S )N   r   r   r   r   r   r   r   r    r!   r"   r'   s        r-   test_short_nfftzTestPeriodogram.test_short_nfft       HRLL!12&&&12;q#q11222GAJJ!	"	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          ||           d S )
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                 ^   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               d S )
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    HR!1~~12;q#q11222GAsOO!	"	Q117"#####r/   c                 D   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               d S )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    HR!1~~129S>>$.///GAsOO!	X14((((17"#####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               d S )	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   s    HR!1e444172s++,,,GB$$!117"#####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               d S )
Nr   FrR   r   Fr;   r=   rS   r*   r   r'   s        r-   test_complex_32zTestPeriodogram.test_complex_32   s    HR!1e444172s++,,,GB#&&!117"#####r/   c                     t          j        d          }d|d<   t          j        dd          }d}t	          t
          |          5  t          ||           d d d            d S # 1 swxY w Y   d S )	Nr   r   r   ru   rb   zOthe size of the window must be the same size of the input on the specified axismatchwindow)r#   r$   r   rw   rY   rZ   r   )r(   r)   ry   expected_msgs       r-   test_shorter_window_errorz)TestPeriodogram.test_shorter_window_error   s    HRLL!++=:\::: 	' 	'#&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   A&&A*-A*N)__name__
__module____qualname__r.   r9   r@   rG   rL   rN   rP   rU   r\   pytestmarkskipifsysmaxsizerm   rs   r}   r   r   r   r   r   r   r   r   r   r    r/   r-   r   r      s       	 	 	* * *  # # #	 	 	* * *       [u/   E E	 E [u/   5 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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!S )"	TestWelchc                    t          j        d          }d|d<   d|d<   t          |d          \  }}t          |t          j        ddd                     t          j        g d          }t          ||d	d	
           d S 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   s    HRLL!!Q"""12;q#q11222H " " " # #14d333333r/   c                    t          j        d          }d|d<   d|d<   t          |d          \  }}t          |t          j        d          dz             t          j        g d	          }t          ||d
d
           d S 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   s    HRLL!!Q"""129S>>#-...H " " " # #14d333333r/   c                     t          j        d          }d|d<   d|d<   t          |dd          \  }}t          |t	          dd                     t          j        g d          }t          ||d	d	
           d S 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  s    HRLL!!Q5999171c??+++H F F F G G14d33333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
           d S 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  s    HRLL!!Q:66612;q#q11222H " " " # #14d33333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
           d S 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  s    HRs###!!Q"""12;q#q11222H " " " # #14d33333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           d S 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!  s    HRs###!!Q"""129S>>#-...H " " " # #14d333333r/   c                    t          j        dt                    }d|d<   d|d<   t          |dd          \  }}t	          |t          dd                     t          j        g d	          }t	          ||d
d
           d S 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+  s    HRs###!!Q5999171c??+++H F F F G G14d33333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	
           d S 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_complex5  s    HR''!!Q5999171c??+++H F F F G G14d333333r/   c                 |    t          t          t          t          j        dt          j                  dd           d S NrW   rX   )rD   r   )rY   rZ   r   r#   r$   rT   r[   s    r-   r\   zTestWelch.test_unk_scaling?  s<    j%!R])C)C#Q	0 	0 	0 	0 	0 	0r/   c                     t          j        dt           j                  dz   }t          |dd          \  }}t	          |t          j        |          d           d S Nrb   rI   {Gz?linearr   detrendr5   r6   r#   r8   rf   r   r   
zeros_liker(   r)   r*   r+   s       r-   test_detrend_linearzTestWelch.test_detrend_linearC  sZ    Ib
+++d2QH55512=++%888888r/   c                     t          j        dt           j                  dz   }t          |dd          \  }}t          |dd           \  }}t	          ||d           t	          ||d           d S )	Nrb   rI   r   Fr   c                     | S Nr   r)   s    r-   <lambda>z.TestWelch.test_no_detrending.<locals>.<lambda>K  s     r/   r5   r6   )r#   r8   rf   r   r   r(   r)   f1p1f2p2s         r-   test_no_detrendingzTestWelch.test_no_detrendingH  s    Ib
+++d2q"e444Bq"kk:::BBU++++BU++++++r/   c                     t          j        dt           j                  dz   }t          |dd           \  }}t	          |t          j        |          d           d S )Nrb   rI   r   c                 .    t          j        | d          S Nl)typer   r   segs    r-   r   z1TestWelch.test_detrend_external.<locals>.<lambda>R      #)F)F)F r/   r   r5   r6   r   r   s       r-   test_detrend_externalzTestWelch.test_detrend_externalO  sg    Ib
+++d2QFFH H H12=++%888888r/   c                     t          j        dt           j                  dz   }|                    d          }t	          |dd           \  }}t          |t          j        |          d	           d S )
N(   rI   r   ra   ra   rb   rb   c                 .    t          j        | d          S r   r   r   s    r-   r   z7TestWelch.test_detrend_external_nd_m1.<locals>.<lambda>Y  r   r/   r   r5   r6   )r#   r8   rf   rg   r   r   r   r   s       r-   test_detrend_external_nd_m1z%TestWelch.test_detrend_external_nd_m1U  sx    Ib
+++d2IIhQFFH H H12=++%888888r/   c                    t          j        dt           j                  dz   }|                    d          }t          j        |dd          }t          |ddd 	          \  }}t          |t          j        |          d
           d S )Nr_   rI   r   r`   ra   r   rb   c                 0    t          j        | dd          S Nr   r   )rq   r   r   r   s    r-   r   z6TestWelch.test_detrend_external_nd_0.<locals>.<lambda>a  s    !#)N)N)N r/   r   rq   r   r5   r6   )r#   r8   rf   rg   moveaxisr   r   r   r   s       r-   test_detrend_external_nd_0z$TestWelch.test_detrend_external_nd_0\  s    Ib
+++d2IIhK1a  QNNP P P12=++%888888r/   c                    t          j        dt           j                  dz   }|                    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
           d S Nr_   rI   r   r`   rb   r   rc   r   r   vIh%<=r   )	r#   r8   rf   rg   r   r   rh   r   ri   rj   s         r-   rm   zTestWelch.test_nd_axis_m1d  s    Ib
+++d2IIhQ###117I...!Aaaa%!AaE(UCCCCq1QQQx,,,B2:aaa<(!AaaaC&u5IIIIIIr/   c                    t          j        dt           j                  dz   }|                    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
           d S Nr_   rI   r   ro   rb   r   )r   rq   rr   r   r  r   r   )r#   r8   rf   rg   r   r   rh   r   rj   s         r-   rs   zTestWelch.test_nd_axis_0m  s    Ib
+++d2IIhQ+++117G,,,!!!Aa%!AAAaE(UCCCCq1Qx,,,BAaaa!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            d S )Nr   r   r   r!   rb   ru   r   r   rW   rv   )
r#   r$   r   r   rw   r   r   rh   rY   rZ   rx   s           r-   r}   zTestWelch.test_window_externalv  s   HRLL!!QFA...1**q"c4000B&q"---&q"---28T***28T***j%#q	* 	* 	* 	*#FB//j%'4	1 	1 	1 	1 	1 	1r/   c                 $   t          g           \  }}t          |j        d           t          |j        d           dD ]P}t          t          j        |                    \  }}t          |j        |           t          |j        |           Qd S r   )r   r   rh   r#   r   r   s       r-   r   zTestWelch.test_empty_input  s    Ryy117D)))17D)))+ 	/ 	/E%))DAqqw...qw....	/ 	/r/   c                     dD ]R}t          t          j        |          d          \  }}t          |j        |           t          |j        |           Sd S r   )r   r#   r   r   rh   r   s       r-   r   z%TestWelch.test_empty_input_other_axis  s`    % 	/ 	/E%q111DAqqw...qw....	/ 	/r/   c                    t          j        d          }d|d<   t                      5 }|                    t          d           t          |d          \  }}t          |dd          \  }}d d d            n# 1 swxY w Y   t          |d	          \  }}t          ||           t          ||           t          ||           t          ||           d S 
Nr!   r   r   zBnperseg = 256 is greater than input length  = 8, using nperseg = 8ru   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   HQKK!    	9CJJ{$hiii&)))DAq1FC888FB	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 q!$$$B22BBs   AA99A= A=c           
      4   t          t          t          t          j        d          dt          j        g d                     t          t          t          t          j        d          dt          j        d                              d                     d S NrW   r   )r   r   r   r   r   rd   )ra   r   )rY   rZ   r   r#   r$   r   r8   rg   r[   s    r-   test_window_long_or_ndz TestWelch.test_window_long_or_nd  ss    j%!a+++9N9NOOOj%!aill**511	3 	3 	3 	3 	3r/   c                     t          j        d          }d|d d d<   t          |dd          \  }}t          j        g d          }t	          ||d	           d S 
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  sq    HRLL##A#QQ///1H     15))))))r/   c           	      h    t          t          t          t          j        d          dddd           d S NrW   r   ru   ra      )rY   rZ   r   r#   r$   r[   s    r-   test_bad_noverlapzTestWelch.test_bad_noverlap  s*    j%!aAFFFFFr/   c                 f    t          t          t          t          j        d          dd           d S 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HHHHHHr/   c                 B   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               d S 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    HR!!Q"""12;q#q11222H " " "#&( (14d333317"#####r/   c                 D   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               d S 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    HR!!Q"""129S>>#-...H " " "#&( (14d333317"#####r/   c                 8   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 S 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    HR!!Q5999171c??+++H " " "#&( ( 	14d333317"#####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                    d S Nr   r   rR   r   r!   Fr   r=   )g%?A2q?d^?r9  g~?r9  r9  r8  r*   r   r   zdtype mismatch, , r5  r'   s        r-   r   zTestWelch.test_complex_32  s    HR!!Q5999171c??+++H F F FGJL L14d333317"71777ag77	9 	9 	9 	9 	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	          ||           d S Nr-     r=   ra   r   r   r   r   r   rd      )r#   r$   r   r   r   )r(   r)   r   r*   fodd_fevens          r-   test_padded_freqszTestWelch.test_padded_freqs  s   HRLLD#za	z*	"14000aAD111q4   5!!!D#~A~.14000aAD11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           d S )Nr_   g     @rb   ,  ra   )ru   bartlett)tukey皙?flattoprB   )fsr   r   rD   rE   r    gMbP?)r   )	rK   r#   r8   sinpir   r   sqrttrapz)r(   ArJ  r   fsigiittr)   r   rA  p_specfreqp_denss                r-   test_window_correctionz TestWelch.test_window_correction  s0   b"f++gr!""Yr]]2bfQruWT\"_%%%E 
	' 
	'FaB&02 2 2IAv r76)24 4 4LD& F2J1S111BGBHVT$:$:;;Qrwqzz\!^!%' ' ' ' '
	' 
	'r/   c                 
   t           j                            d           t           j                            d          }t	          |          \  }}t          d          D ]}dgdz  }d||<   |                    |          }t	          ||          \  }}t	          |||j        z
            \  }}t          ||	                                |           t          ||	                                ||j        z
             d S )N     r   r   r   rp   err_msg)
r#   randomseedrandnr   rangerg   ndimr   squeeze)	r(   x_flatrA  p_flatanewshaper)   p_plusp_minuss	            r-   test_axis_rollingzTestWelch.test_axis_rolling  s    
	t&&&MM	6q 		F 		FAtAvHHQKx((Aaa(((IAvqqx000JAw!1!11====!2!2AafHEEEEE		F 		Fr/   c                 B   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           d S )Nr   r   r   r!   median)r   averager   r   )rH  g?        g&E    9rl  r   r   zunrecognised-average)r#   r$   r   r   r%   r   rY   rZ   r'   s        r-   test_averagezTestWelch.test_average  s    HRLL!!Q844412;q#q11222H6667714d3333j%A4	6 	6 	6 	6 	6 	6r/   N)#r   r   r   r.   r9   r@   rG   r   r   rP   rU   r\   r   r   r   r  r	  rm   rs   r}   r   r   r  r  r&  r*  r.  r   r   r   r   rC  rV  rh  rm  r   r/   r-   r   r      s        4 4 44 4 44 4 44 4 44 4 44 4 44 4 44 4 40 0 09 9 9
, , ,9 9 99 9 99 9 9J J J> > >1 1 1"/ / // / /     3 3 3
* * *G G GI I I	$ 	$ 	$	$ 	$ 	$
$ 
$ 
$
9 
9 
9" " "$' ' ',F F F"
6 
6 
6 
6 
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"d!S )"TestCSDc                 ,   t          j        d          }t          j        d          }t          j        ddd          }t          j        dt           j                  }t	          ||d          \  }}t          ||           t          ||           d S )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_x-  s    HQKKHRLLK3""HQR]+++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          ||           d S )Nr-  r!   r   r   r)  rI   r   rq  rr  s          r-   test_pad_shorter_yzTestCSD.test_pad_shorter_y8  s    HRLLHQKKK3""HQR]+++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	
           d S r   r#   r$   r   r   r%   r   r'   s        r-   r.   zTestCSD.test_real_onesided_evenC  s    HRLL!!1a###12;q#q11222H " " " # #14d333333r/   c                    t          j        d          }d|d<   d|d<   t          ||d          \  }}t          |t          j        d          dz             t          j        g d	          }t          ||d
d
           d S r   )r#   r$   r   r   r8   r   r'   s        r-   r9   zTestCSD.test_real_onesided_oddM  s    HRLL!!1a###129S>>#-...H " " " # #14d333333r/   c                     t          j        d          }d|d<   d|d<   t          ||dd          \  }}t          |t	          dd                     t          j        g d          }t          ||d	d	
           d S r   )r#   r$   r   r   r   r   r'   s        r-   r@   zTestCSD.test_real_twosidedW  s    HRLL!!1aE:::171c??+++H F F F G G14d33333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
           d S r   rz  r'   s        r-   rG   zTestCSD.test_real_spectruma  s    HRLL!!1aJ77712;q#q11222H " " " # #14d33333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
           d S r   )r#   r$   rK   r   r   r%   r   r'   s        r-   r   z"TestCSD.test_integer_onesided_evenk  s    HRs###!!1a###12;q#q11222H " " " # #14d33333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           d S r   )r#   r$   rK   r   r   r8   r   r'   s        r-   r   z!TestCSD.test_integer_onesided_oddu  s    HRs###!!1a###129S>>#-...H " " " # #14d333333r/   c                 
   t          j        dt                    }d|d<   d|d<   t          ||dd          \  }}t	          |t          dd                     t          j        g d	          }t	          ||d
d
           d S r   )r#   r$   rK   r   r   r   r   r'   s        r-   rP   zTestCSD.test_integer_twosided  s    HRs###!!1aE:::171c??+++H F F F G G14d33333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	
           d S r   )r#   r$   rT   r   r   r   r   r'   s        r-   rU   zTestCSD.test_complex  s    HR''!!1aE:::171c??+++H F F F G G14d333333r/   c           	          t          t          t          t          j        dt          j                  t          j        dt          j                  dd           d S r   )rY   rZ   r   r#   r$   rT   r&   r[   s    r-   r\   zTestCSD.test_unk_scaling  sR    j#rx2='A'Aga//	K 	K 	K 	K 	K 	Kr/   c                     t          j        dt           j                  dz   }t          ||dd          \  }}t	          |t          j        |          d           d S r   r#   r8   rf   r   r   r   r   s       r-   r   zTestCSD.test_detrend_linear  s\    Ib
+++d21aX66612=++%888888r/   c                     t          j        dt           j                  dz   }t          ||dd          \  }}t          ||dd           \  }}t	          ||d           t	          ||d           d S )	Nrb   rI   r   Fr   c                     | S r   r   r   s    r-   r   z,TestCSD.test_no_detrending.<locals>.<lambda>  s     r/   r5   r6   )r#   r8   rf   r   r   r   s         r-   r   zTestCSD.test_no_detrending  s    Ib
+++d2Q2u555BQ2{{;;;BBU++++BU++++++r/   c                     t          j        dt           j                  dz   }t          ||dd           \  }}t	          |t          j        |          d           d S )Nrb   rI   r   c                 .    t          j        | d          S r   r   r   s    r-   r   z/TestCSD.test_detrend_external.<locals>.<lambda>      v~c'D'D'D r/   r   r5   r6   r  r   s       r-   r   zTestCSD.test_detrend_external  si    Ib
+++d21aDDF F F12=++%888888r/   c                     t          j        dt           j                  dz   }|                    d          }t	          ||dd           \  }}t          |t          j        |          d	           d S )
Nr   rI   r   r  rb   c                 .    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   rf   rg   r   r   r   r   s       r-   r  z#TestCSD.test_detrend_external_nd_m1  sz    Ib
+++d2IIh1aDDF F F12=++%888888r/   c                    t          j        dt           j                  dz   }|                    d          }t          j        |dd          }t          ||ddd 	          \  }}t          |t          j        |          d
           d S )Nr_   rI   r   r`   ra   r   rb   c                 0    t          j        | dd          S r  r   r   s    r-   r   z4TestCSD.test_detrend_external_nd_0.<locals>.<lambda>  s    v~c'L'L'L r/   r  r5   r6   )r#   r8   rf   rg   r  r   r   r   r   s       r-   r	  z"TestCSD.test_detrend_external_nd_0  s    Ib
+++d2IIhK1a  1a!LLN N N12=++%888888r/   c                    t          j        dt           j                  dz   }|                    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
           d S r  )	r#   r8   rf   rg   r   r   rh   r   ri   rj   s         r-   rm   zTestCSD.test_nd_axis_m1  s    Ib
+++d2IIh1a$$$117I...!Aaaa%!AaE(UCCCCQq111uXq1QQQx444B2:aaa<(!AaaaC&u5IIIIIIr/   c                    t          j        dt           j                  dz   }|                    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
           d S r  )r#   r8   rf   rg   r   r   rh   r   rj   s         r-   rs   zTestCSD.test_nd_axis_0  s    Ib
+++d2IIh1a!,,,117G,,,!!!Aa%!AAAaE(UCCCCQqqq1uXq1Qx444BAaaa!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            d S )Nr   r   r   r!   rb   ru   r   r  r  rv   )
r#   r$   r   r   rw   r   r   rh   rY   rZ   rx   s           r-   r}   zTestCSD.test_window_external  s   HRLL!!1aVQ''1**Q2sD111B&q"---&q"---28T***28T***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        |           dt          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           d S )Nrb   r   r   )r   r   )r   r#   r$   r   rh   r   r&   r   s       r-   r   zTestCSD.test_empty_input  sm   2bhrll##117D)))17D)))28B<<##117D)))17D)))+ 	/ 	/Erx88DAqqw...qw....272;;00117E***17E***28E??BGBKK00117E***17E*****r/   c                 b   dD ]e}t          t          j        |          t          j        |          d          \  }}t          |j        |           t          |j        |           ft          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           d S )Nr   r   rp   )rb   rb   r   )rb   r   r   )rb   r   r   )r   r#   r   r   rh   r$   r   s       r-   r   z#TestCSD.test_empty_input_other_axis  s   % 	/ 	/Erxa@@@DAqqw...qw....28I&&(:(:CCC117H---17H---28H%%rx	':':CCC117H---17H-----r/   c                    t          j        d          }d|d<   t                      5 }|                    t          d           t          ||d          \  }}t          ||dd          \  }}d d d            n# 1 swxY w Y   t          ||d	          \  }}t          ||           t          ||           t          ||           t          ||           d S r  )r#   r$   r	   r  r  r   r   r  s	            r-   r  zTestCSD.test_short_data  s   HQKK!    	;CJJ{$hiiiq!F+++DAqAfc:::FB	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; Q1%%%B22BBs   AA;;A?A?c                    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                              d                     d S r  )	rY   rZ   r   r#   r$   r&   r   r8   rg   r[   s    r-   r  zTestCSD.test_window_long_or_nd  s    j#rx{{BGAJJh{{{++	- 	- 	-j#rx{{BGAJJill**511	3 	3 	3 	3 	3r/   c                     t          j        d          }d|d d d<   t          ||dd          \  }}t          j        g d          }t	          ||d	           d S r   )r#   r$   r   r   r   r'   s        r-   r&  z TestCSD.test_nondefault_noverlap  ss    HRLL##A#1aa0001H     15))))))r/   c           
          t          t          t          t          j        d          t          j        d          dddd           d S r(  )rY   rZ   r   r#   r$   r&   r[   s    r-   r*  zTestCSD.test_bad_noverlap  s?    j#rx{{BGAJJ6	 	 	 	 	r/   c                     t          t          t          t          j        d          t          j        d          dd           d S r,  )rY   rZ   r   r#   r&   r$   r[   s    r-   r.  zTestCSD.test_nfft_too_short!  s@    j#rwr{{BHRLLq	! 	! 	! 	! 	! 	!r/   c                 D   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               d S r0  )r#   r$   r   r   r%   r   r   rJ   r'   s        r-   r   z"TestCSD.test_real_onesided_even_32%  s    HR!!1a###12;q#q11222H " " "#&( (14d333317"#####r/   c                 F   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               d S r2  )r#   r$   r   r   r8   r   r   rJ   r'   s        r-   r   z!TestCSD.test_real_onesided_odd_320  s    HR!!1a###129S>>#-...H " " "#&( (14d333317"#####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 S r4  r#   r$   r   r   r   r   r   rJ   r'   s        r-   r   zTestCSD.test_real_twosided_32;  s    HR!!1aE:::171c??+++H " " "#&( ( 	14d333317"#####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                    d S r7  r  r'   s        r-   r   zTestCSD.test_complex_32G  s    HR!!1aE:::171c??+++H F F FGJL L14d333317"71777ag77	9 	9 	9 	9 	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          ||           d S r<  )r#   r$   r&   r   r   r   )r(   r)   rs  r   r*   r@  rA  rB  s           r-   rC  zTestCSD.test_padded_freqsS  s)   HRLLGBKKD#za	z*	"aAD111aq!QT222q4   5!!!D#~A~.aAD111aq!QT222q4   5!!!!!r/   c                 d   t           j                            d          }|                                }t	          ||ddd          \  }}t	          ||ddd          \  }}t          ||           t	          ||ddd          \  }}t	          ||ddd          \  }}t          ||           d S )Nr!  r!   meanF)r   rk  r<   rj  )r#   r\  r^  copyr   r   )r(   r)   rs  rA  p_samep_copieds         r-   test_copied_datazTestCSD.test_copied_dataf  s    IOOBFFHH1a(-/ / /	6!Q6*/1 1 18)))1a(-/ / /	6!Q8*/1 1 18)))))r/   N)#r   r   r   rv  rx  r.   r9   r@   rG   r   r   rP   rU   r\   r   r   r   r  r	  rm   rs   r}   r   r   r  r  r&  r*  r.  r   r   r   r   rC  r  r   r/   r-   ro  ro  ,  s       	 	 		 	 	4 4 44 4 44 4 44 4 44 4 44 4 44 4 44 4 4K K K9 9 9
, , ,9 9 99 9 99 9 9J J J> > >) ) )"+ + +,. . .      3 3 3* * *  ! ! !	$ 	$ 	$	$ 	$ 	$
$ 
$ 
$
9 
9 
9" " "&* * * * *r/   ro  c                       e Zd Zd Zd ZdS )TestCoherencec                 *   t           j                            d          }t          j        |          }t          j        ddd          }t          j        d          }t          ||d          \  }}t          ||           t          ||           d S Nr_   r   r   rd   rb   r   )r#   r\  r^  r  r%   r&   r   r   r(   r)   rs  r*   Cr   C1s          r-   test_identical_inputz"TestCoherence.test_identical_inputx  s    IOOBGAJJK3""GAJJ1a,,,B22r/   c                    t           j                            d          }| }t          j        ddd          }t          j        d          }t          ||d          \  }}t          ||           t          ||           d S r  )r#   r\  r^  r%   r&   r   r   r  s          r-   test_phase_shifted_inputz&TestCoherence.test_phase_shifted_input  sz    IOOBBK3""GAJJ1a,,,B22r/   N)r   r   r   r  r  r   r/   r-   r  r  w  s2        	 	 		 	 	 	 	r/   r  c                        e Zd Zd Zd Zd ZdS )TestSpectrogramc                    t           j                            d          }d}d}d}d}t          |||||          \  }}}t	          |||||          \  }	}
t          ||	           t          t          j        |d          |
           d S )NrY  r=   rG  g      ?r   ra   r   rp   )r#   r\  r^  r   r   r   r  )r(   r)   rJ  r   r   r#  r*   rA  PfwPws              r-   test_average_all_segmentsz)TestSpectrogram.test_average_all_segments  s    IOOD!! aVWh??1aq"fgx88B2+++R00000r/   c                    t           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 
           d S )NrY  r=   r  r   ra   r"  )r   )r   I   r!   r   i   )
r#   r\  r^  r   r   rw   r   rh   rY   rZ   )r(   r)   rJ  r   r   r#  r*   rA  r  ry   rz   Per|   s                r-   r}   z$TestSpectrogram.test_window_external  s    IOOD!! aVWh??1a442sD1EEE	Ar28T***28V,,,j+q#q	* 	* 	* 	*#OT::j+q'4	1 	1 	1 	1 	1 	1r/   c                    t           j                            d          }d}t          ||d          \  }}}t	                      5 }|                    t          d           t          ||dd          \  }}}d d d            n# 1 swxY w Y   t          ||d	          \  }	}}
t          ||d	          \  }}}t          ||	           t          ||
           t          ||           t          ||           d S )
NrY  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)   rJ  r*   rA  r+   r  r   r   r   r   f3p3s                r-   r  zTestSpectrogram.test_short_data  sQ   IOOD!! aN;;;1a   	2CJJ{bd d d#Ar.,02 2 2IB2	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2
  2s333	Ar2t444	Ar22BBs   3BB	B	N)r   r   r   r  r}   r  r   r/   r-   r  r    sA        1 1 11 1 1&         r/   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestLombscarglec                 4   d}d}dt           j        z  }d}d}d}t           j                            d           t           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                dS )zgTest if frequency location of peak corresponds to frequency of
        generated input signal.
        r    r=   r   d     ffffff?# {Gz?      $@r   r   N)
r#   rL  r\  r]  randr%   rK  r   r   argmax)r(   amplwphininnoutr+   rtr)   r*   r  deltas                r-   test_frequencyzTestLombscargle.test_frequency  s     BEk 		wINN3KRU
CIs33AF; 26!A#)$$$ Kc4(( 1a   !qtAbillO#uRx011111r/   c                 B   d}d}dt           j        z  }d}d}d}t           j                            d           t           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           d S )Nr    r=   r   r  r  r  r  r  r  rW   r   ra   significant)r#   rL  r\  r]  r  r%   rK  r   rM  rh   r   max)r(   r  r  r  r  r  r+   r  r  r)   r*   pgrams               r-   test_amplitudezTestLombscargle.test_amplitude  s   
 BEk 		wINN3KRU
CIs33AF; 26!A#)$$$ Kc4(( Aq!$$ E	AGAJ.// 	BF5MM4Q??????r/   c                 .   d}d}dt           j        z  }d}d}d}d}t           j                            d           t           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          |	|
|
                                z
  |d          }t          ||           d S )Nr    r=   r   r  r  r  g333333?r  r  r  T)	precenterF)
r#   rL  r\  r]  r  r%   rK  r   r  r   )r(   r  r  r  r  r  r+   offsetr  r  r)   r*   r  pgram2s                 r-   test_precenterzTestLombscargle.test_precenter  s    BEk 		wINN3KRU
CIs33AF; 26!A#)$$$v- Kc4(( Aq!t444QAFFHHa5AAA 	v&&&&&r/   c                 p   d}d}dt           j        z  }d}d}d}t           j                            d           t           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           d S )Nr    r=   r   r  r  r  r  r  r  T)	normalizera   r  )r#   rL  r\  r]  r  r%   rK  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    BEk 		wINN3KRU
CIs33AF; 26!A#)$$$ Kc4(( Aq!$$Q1555 		BF1aLL0&999BF6NNCQ??????r/   c                     t          j        ddd          }t          j        ddd          }t          j        ddd          }t          t          t          |||           d S )Nr   r   ra   r   )r#   r%   rY   rZ   r   r(   r  r)   r*   s       r-   test_wrong_shapez TestLombscargle.test_wrong_shapeA  sW    K1a  K1a  K1a  j+q!Q77777r/   c                     t          j        d          }t          j        d          }t          j        d          }t          t          t          |||           d S )Nr   )r#   r$   rY   ZeroDivisionErrorr   r  s       r-   test_zero_divisionz"TestLombscargle.test_zero_divisionG  sF    HQKKHQKKHQKK'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             d S )Nr   rb   r  F)endpointrW   2   i  rH  ra   )r#   r%   rK  r   rL  r  s       r-   test_lombscargle_atan_vs_atan2z.TestLombscargle.test_lombscargle_atan_vs_atan2M  sl     K2te444F1Q3KKK2sU333c9Aq!A#be)$$$$$r/   N)
r   r   r   r  r  r  r  r  r  r  r   r/   r-   r  r    s        2 2 2@@ @ @B' ' '<@ @ @<8 8 8? ? ?% % % % %r/   r  c                       e Zd Zd Zd Zd Zd Zd Zej	        
                    dddg          d	             Zd
 Zd Zd Zej	        
                    dddg          d             Zd Zd Zd Zd Zd ZdS )TestSTFTc                    d } |d          5  t          ddd           d d d            n# 1 swxY w Y    |d          5  t          ddd           d d d            n# 1 swxY w Y    |d	          5  t          t          j        d
          dd           d d d            n# 1 swxY w Y    |d          5  t          t          j        d          dd           d d d            n# 1 swxY w Y    |d          5  t          ddd           d d d            n# 1 swxY w Y    |d          5  t          ddd           d d d            n# 1 swxY w Y    |d	          5  t          t          j        d
          dd           d d d            n# 1 swxY w Y    |d          5  t          t          j        d          dd           d d d            n# 1 swxY w Y    |d          5  t          ddd           d d d            n# 1 swxY w Y   t          j        d          }t          |          d         } |d	          5  t          |t          j        d
                     d d d            n# 1 swxY w Y    |d          5  t          |t          j        d          d           d d d            n# 1 swxY w Y    |d          5  t          |d           d d d            n# 1 swxY w Y    |d          5  t          |dd           d d d            n# 1 swxY w Y    |d          5  t          |dd           d d d            n# 1 swxY w Y    |d          5  t          |           d d d            n# 1 swxY w Y    |d	          5  t          |t          j        d
                     d d d            n# 1 swxY w Y    |d          5  t          |t          j        d          d           d d d            n# 1 swxY w Y    |d          5  t          |d           d d d            n# 1 swxY w Y    |d          5  t          |dd           d d d            n# 1 swxY w Y    |d          5  t          |dd           d d d            n# 1 swxY w Y   t          j        t          d          5  t          |ddd            d d d            n# 1 swxY w Y    |d!          5  t          |dd"           d d d            n# 1 swxY w Y    |d#          5  t          ||d$%           d d d            n# 1 swxY w Y    |d&          5  t          |d d'         |d'd          d(%           d d d            n# 1 swxY w Y    |d)          5  t          ||d$*           d d d            n# 1 swxY w Y   d+} |d,|d-          5  t          ||.           d d d            n# 1 swxY w Y    |d,|d-          5  t          ||.           d d d            d S # 1 swxY w Y   d S )/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_VEY  s    
 =59999r/   z"nperseg must be a positive integerru   ir   z#noverlap must be less than nperseg.rb   r_   zwindow must be 1-D)ra   ra   z"window must have length of npersegz"noverlap must be less than npersegz&noverlap must be a nonnegative integerr!  irY  ra   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_validationW  s   	: 	: 	: V899 	' 	'vsA&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'V9:: 	' 	'vr2&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'V()) 	/ 	/rwvA...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/V899 	+ 	+rwr{{B***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ V899 	' 	'vsA&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'V899 	' 	'vr2&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'V()) 	/ 	/rwvA...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/V899 	+ 	+rwr{{B***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+V<== 	( 	(vr3'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( HTNNGGAJ V()) 	, 	,276??++++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,V , - - 	5 	5272;;4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 V899 	" 	"D!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"V9:: 	0 	0C$////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0VDEE 	) 	)Ca((((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) V566 	 	!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	V()) 	- 	-!BGFOO,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-V455 	6 	6!BGBKK5555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6V899 	# 	#!T""""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#V9:: 	1 	1!S40000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1VDEE 	* 	*!Sq))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*\+ .7 8 8 8 	= 	=!S1V<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= VEFF 	/ 	/!qA....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ V ) * * 	/ 	/Q....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ V=>> 	< 	<QttWagF;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<V D E E 	3 	3QE2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 VJ'JJJKK 	% 	%G$$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%VJ'JJJKK 	& 	&!W%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s  -11A!!A%(A%7$B''B+.B+=$C--C14C1D!!D%(D%7EEE+$FF"F1$G!!G%(G%7HHH$JJJ%KKK!K??LLL44L8;L8
M))M-0M-?NN"N1$O!!O%(O%7%P((P,/P,>QQ #Q 2RRR'SS
S
,TTT"UUUU66U:=U:#V;;V?V?W00W47W4X**X.1X.Y##Y'*Y'c                 ^    g d}|D ]%} dj         | }t          dt          | |           &d S )N)boxcarrb   r   r  rb   r   rF  3      ru   r     ru   r     blackmanrE     rG  r   r  r!  ru   r     
{}, {}, {}TrZ  )formatr   r   )r(   settingssettingmsgs       r-   test_check_COLAzTestSTFT.test_check_COLA  s^    	 	 	   	B 	BG%,%w/Cz73SAAAAA	B 	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          | |           &d S )
N)r  r  )r  rb   r)  r  )rF  r  rb   r   r  )ru   r  %   r  )r  rE  {   r  )r  r  &   r	  )ru   r  '   r  TrZ  r   r   ra   )ru   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 	BG%,%w/Cz73SAAAAAsssS[[#f++*:;#
 % 	C 	CG%,%w/C
G 4cBBBBB	C 	Cr/   c           
         t           j                            d           t           j                            d          }d}d}d}d}t	          |||||ddd           \  }}}t          |||||dd	d
          \  }	}
t          ||	           t          t          j        t          j        |          dz  d          |
           d S )NrX  rY  r=   ru   r   r!   F)paddedr<   r  rB   )r<   rD   r   ra   r   rp   )	r#   r\  r]  r^  r   r   r   r  abs)r(   r)   rJ  r   r   r#  r*   rA  Zr  r  s              r-   r  z"TestSTFT.test_average_all_segments  s    
	tIOOD!!
 q"fgx',t= = =1aq"fgx)5: : :B 	2q		12666;;;;;r/   c           	      R   t           j                            d           t           j                            d          }d}d}d}d}t	          |||||          \  }}}t	          |                    d          ||||d	          \  }	}
}t          |||||          \  }}t          |j        ||||dd
          \  }}t          ||	           t          ||
           t          ||           t          ||d d ddd d f                    t          ||d d ddf                    d S )NrX  rY  r=   ru   r   r!   )r   r   r   r   rp   r   r  )	r#   r\  r]  r^  r   rg   r   Tr   )r(   r)   rJ  r   r   r#  r   t1Z1r   t2Z2t3x1t4x2s                   r-   test_permute_axeszTestSTFT.test_permute_axes  sI   
	tIOOD!!!R(;;
B!))J//VWh " " "
B r2vw99BrtR(a!#% % %B 	BBBBqqq!QzN+++Bqqq!QwK(((((r/   rD   rB   psdc           
         t           j                            d           g d}|D ]\  }}}}t          j        |          }dt           j                            |j                  z  }t          ||||d d|          \  }	}	}
t          |
||||          \  }}| d| }t          |||           t          |||           d S )	NrX  r  r  rb   r   r  r  rb   r   )rF  e   r  r  ru   rY  r  r  )r    r  r!  )ru   rY  r  r
  rb   F)r   r#  r   r   r  rD   )r   r#  r   rD   r:  rZ  	r#   r\  r]  r8   r^  sizer   r   r   )r(   rD   r  r   Nr   r#  r  r)   rA  zztrxrr  s                 r-   test_roundtrip_realzTestSTFT.test_roundtrip_real  s   
	t   -5 	0 	0(FAw	!A29??16***AAw#)4$+- - -HAq" 2w"('; ; ;FB ))x))CAr3////Ar3/////	0 	0r/   c           
      <   t           j                            d           t          j        d          }d|d d d<   |dt	          |          t	          |          dz  fdg}|D ]7\  }}}}| d| d| d| }t          |||          r
J |            t          j        |          }dt           j                            |j                  z  }	t          |	|||d d	d
          \  }
}
}t          j        t          d          5  t          ||||d	          \  }}d d d            n# 1 swxY w Y   t          j        ||d t	          |                             s
J |            t          j        |	|d t	          |	                             r
J |            9d S )NrX  r   r   ra   r  )ru   r  r!  r   r:  rb   Tr$   r   r#  r   r   r  r  NOLAr   r   r#  r   r  )r#   r\  r]  r&   r  r   r8   r^  r3  r   r   r  r  r   allclose)r(   r  r  r   r4  r   r#  r  r  r)   rA  r5  r6  r7  s                 r-   test_roundtrip_not_nolaz TestSTFT.test_roundtrip_not_nola  s   
	tsssS#f++s6{{a/?@(

 -5 	8 	8(FAw99q99G99x99C!&'8<<AAcAAA	!ARY__QV,,,AAw#)4%,. . .HAq" k888 = =r7X&,t= = =B= = = = = = = = = = = = = = = ;q"Wc!ffW+..33333{1b#a&&k2277C7777	8 	8s   D''D+	.D+	c           
      f   t           j                            d           g d}|D ]	\  }}}}| d| d| }t          |||          s
J |            t	          |||          r
J |            t          j        |          }dt           j                            |j                  z  }t          ||||d dd          \  }	}	}
t          |
|||d          \  }}| d| }t          ||d t          |                   |	           t          ||d t          |                   |	           d S )
NrX  ))r  r  rb   r   )rF  r/  r  r  )ru   rY  r     )r  r1  r     )ru   rY  r  r   r:  rb   Tr$   r:  r<  rZ  )r#   r\  r]  r   r   r8   r^  r3  r   r   r   r  )r(   r  r   r4  r   r#  r  r  r)   rA  r5  r6  r7  s                r-   test_roundtrip_nola_not_colaz%TestSTFT.test_roundtrip_nola_not_cola:  sz   
	t   -5 	9 	9(FAw44w44(44Cfgx88==#===!&'8<<AAcAAA	!ARY__QV,,,AAw#)4%,. . .HAq" 2w"(49 9 9FB ))x))CAr'3q66'{C8888Ar'3q66'{C88888#	9 	9r/   c           	         t           j                            d           dg}|D ]\  }}}}t          j        |          }dt           j                            |j                  z  }|                    t           j                  }t          ||||d d          \  }}}	t          |	|||          \  }
}| d| }t          |||           t          |||d	d
           t          |j        |j        k               d S )NrX  r0  rb   Fr   r#  r   r   r  r  r:  rZ  g-C6?gh㈵>)r[  r   r7   )r#   r\  r]  r8   r^  r3  astypefloat32r   r   r   r   rJ   r(   r  r   r4  r   r#  r  r)   rA  r5  r6  r7  r  s                r-   test_roundtrip_float32zTestSTFT.test_roundtrip_float32X  s$   
	t,-,4 	) 	)(FAw	!A29??16***A$$AAw#)4G G GHAq" 2w"(* * *FB ))x))CAq#....Ar3TEEEEAGrx'((((	) 	)r/   c                 ,   t           j                            d           g d}|D ]\  }}}}t          j        |          }dt           j                            |j                  z  dt           j                            |j                  z  z   }t          ||||d dd|          \  }	}	}
t          |
|||d|          \  }}| d| d| }t          |||	           t          |||	           t                      5 }|
                    t          d
           t          ||||d dd|          \  }	}	}
d d d            n# 1 swxY w Y   t          |
|||d|          \  }}| d| d| }t          |||	           t          |||	           d S )NrX  r,  rb   y              $@F)r   r#  r   r   r  r<   rD   )r   r#  r   input_onesidedrD   r:  rZ  z9Input data is complex, switching to return_onesided=FalseT)r#   r\  r]  r8   r^  r3  r   r   r   r	   r  r  )r(   rD   r  r   r4  r   r#  r  r)   rA  r5  r6  r7  r  r  s                  r-   test_roundtrip_complexzTestSTFT.test_roundtrip_complexm  sW   
	t   -5 	0 	0(FAw	!A29??16***S1H1H-HHAAw#)4,17D D DHAq" 2w"(#*, , ,FB 44w44(44CAr3////Ar3/////    	CCJJ{RT T TAw#)4,0'C C CHAq"	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C r7X$UGM M MB 00700h002s++++2s++++++s    7EE
Ec                    t           j                            d           ddg}|D ]\  }}}}t          j        |          }dt           j                            |j                  z  }t          ||||d dd           \  }}}	t          |	||d          \  }}
d	D ]`}t          ||||d d|          \  }}}t          |||d          \  }}| d
| d
| }t          ||
|           t          |||           ad S )NrX  r-  r.  rb   Tr:  F)r#  r   r  )evenoddconstantr$   r:  rZ  r2  )r(   r  r   r4  r   r#  r  r)   rA  r5  r7  r  zz_extxr_extr  s                  r-   !test_roundtrip_boundary_extensionz*TestSTFT.test_roundtrip_boundary_extension  sa   
	t +*
 -5 	8 	8(FAw	!A29??16***AAw"($t$(* * *HAq" "xOOOEAr@ 
8 
8#Aw'-tD)1 3  3  31f "&8F)-/ / /	6  99899x992s33336377777
8	8 	8r/   c           	         t           j                            d           ddg}|D ]\  }}}}t          j        |          }dt           j                            |j                  z  }t          ||||d d          \  }}}	t          |	||          \  }
}| d| }t          ||
d |j                 |	           t          ||d |j                 |	           d S )
NrX  )r  r/  rb   r   )ru   r  r  r  rb   TrD  )r#  r   r:  rZ  r2  rG  s                r-   test_roundtrip_padded_signalz%TestSTFT.test_roundtrip_padded_signal  s   
	t +,
 -5 	9 	9(FAw	!A29??16***AAw#)4F F FHAq" 2@@@FB))x))CAr'16'{C8888Ar'16'{C88888	9 	9r/   c                 l   t           j                            d           g d}|D ]\  }}}}}t          j        |          }dt           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          |	||           d S )NrX  ))ru   rY  r  r  r  )ru   rY  r  r  i  )r  r  rb   r   !   )r  r1  r  r!  rY  rb   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   rJ  r:  rZ  )r#   r\  r]  r8   r^  r3  exprL  r   r   r   )r(   r  r   r4  r   r#  r   r  r)   xcrA  r  zcr6  r7  xcrr  s                    r-   test_roundtrip_padded_FFTz"TestSTFT.test_roundtrip_padded_FFT  s   
	t   3; 	2 	2.FAw$	!A29??16***A26"RU(1*%%%B 1gt#)4F F FGAq! B(#)4,13 3 3HAq" 1gt"(* * *FB B(#)%A A AGB ))x))CAr3////Ar3////BS11111/	2 	2r/   c                    t           j                            d           t           j                            d          }t	          |          \  }}}t          d          D ]}dgdz  }d||<   |                    |          }t	          ||          \  }}}t	          |||j        z
            \  }}}t          ||	                                |           t          ||	                                ||j        z
             t          |j        dd	          \  }}	t          |j        d
d	          \  }}
t          ||	d           t          ||
d           d S )NrX  rY  r   r   r   rp   rZ  r  r   zistft transpose minuszistft transpose plus)r#   r\  r]  r^  r   r_  rg   r`  r   ra  r   r   r   )r(   rb  rA  z_flatrd  re  r)   z_plusz_minusx_transpose_mx_transpose_ps              r-   rh  zTestSTFT.test_axis_rolling  sZ   
	t&&F||1fq 		F 		FAtAvHHQKx((A???LAq& 16222MAq'!1!11====!2!2AafHEEEEE
 !R2FFF= Q!DDD=7NOOOO7MNNNNNNr/   c                    t          j        dt                    }d|d<   t           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          ||           dS )z&Verify behavior of scaling parameter. i  rI   rY  r  ra   rM  rB   )r  rD   Tr   ?   Nr   r   r!  A   r   B   r6   Fr*  )r<   r  rD   rp   )rJ  r  rD   r]     )r#   r$   complexfftirfftsumr  r   r   r   r  finforJ   
resolutionrealimagrh   conj)r(   Xr)   power_xZsr&  Zppsd_ZpZp0Zp1s2psd_Zp01s               r-   test_roundtrip_scalingzTestSTFT.test_roundtrip_scaling  s    HS(((#FLLOOad))c!ff$ !fj999!< 2j999!<A 	Br3B3wK((#...Br3B3wK((!,,,Br3B3wK((#...2b5#2#:111crc6
ABHRX,>,>,IJJJJ !UVUKKKAN 
RWaZ/a88828A;F((( 2edEJJJ1MA 1dVUKKKAN gc"Qr'111*o&&4C47S)))3447S))) fSX]SX]2;;;fSX]SX]2;;;<1	!45'*** 3tdEJJJ1MAr/   N)r   r   r   r  r  r  r  r)  r   r   parametrizer8  r>  rB  rH  rK  rR  rT  r[  rh  rz  r   r/   r-   r  r  V  sM       P& P& P&dB B B C C C>< < <() ) ). [YU(;<<0 0 =<068 8 869 9 9<) ) )* [YU(;<<), ), =<),V8 8 8B9 9 9,!2 !2 !2FO O O4? ? ? ? ?r/   r  )&r   numpyr#   numpy.testingr   r   r   r   r   r   r	   r   r
   rY   scipyr   	scipy.fftr   scipy.signalr   r   r   r   r   r   r   r   r   r   scipy.signal._spectral_pyr   r   r   ro  r  r  r  r  r   r/   r-   <module>r     s   



    N N N N N N N N N N N N N N N N N N  * * * * * *            L L L L L L L L L L L L L L L L L L L L L L L L 6 6 6 6 6 6Z' Z' Z' Z' Z' Z' Z' Z'z{6 {6 {6 {6 {6 {6 {6 {6|	H* H* H* H* H* H* H* H*V
       02  2  2  2  2  2  2  2 hP% P% P% P% P% P% P% P%fv v v v v v v v v vr/   