o
    EbZ
                    @   s  d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dl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 d dl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" 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZD d dlEmFZFmGZGmHZH d dlImJZJ d dlKmLZL G dd dZMG dd deMZNG dd dZOG dd deOZPG dd dZQdd ZRdd ZSd d! ZTd"d# ZUG d$d% d%ZVG d&d' d'ZWG d(d) d)ZXG d*d+ d+ZYg d,ZZeZeJ7 ZZG d-d. d.Z[G d/d0 d0Z\G d1d2 d2Z]G d3d4 d4Z^G d5d6 d6e^Z_G d7d8 d8e^Z`G d9d: d:e^ZaG d;d< d<e^ZbG d=d> d>e^ZcG d?d@ d@e^ZdG dAdB dBe^ZeG dCdD dDe^ZfdEdF ZgdGdH ZhejijdIejkejlejmejnejoepejqejqejrejsejtegG dJdK dKZuG dLdM dMZvejijdNg dOejijdPdQdRgejijdSg dTdUdV ZwejijdIejxejyejzgG dWdX dXZ{G dYdZ dZZ|G d[d\ d\Z}G d]d^ d^Z~G d_d` d`e~Zdadb ZddcddZdedf Zdgdh ZG didj djZG dkdl dlZG dmdn dnZG dodp dpZG dqdr drZdsdt ZddvdwZejijdxe:e/fdydz ZejijdId{G d|d} d}ZG d~d dZG dd dZG dd dZdS )    N)ThreadPoolExecutoras_completed)Decimalproduct)gcd)raises)	assert_equalassert_almost_equalassert_array_equalassert_array_almost_equalassert_allcloseassert_assert_warnsassert_array_lesssuppress_warnings)arrayarange)fft)correlate1d)fminlinear_sum_assignment)signal)	correlatecorrelation_lagsconvolve
convolve2dfftconvolve
oaconvolvechoose_conv_methodhilberthilbert2lfilter
lfilter_zifiltfiltbutterzpk2tfzpk2sosinvresinvreszvectorstrengthlfiltictf2sossosfiltsosfiltfilt
sosfilt_zitf2zpkBadCoefficientsdetrendunique_rootsresidueresiduez)hann)_filtfilt_gust_compute_factors_group_poles)_upfirdn_modes)
_testutilsc                   @   \   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )_TestConvolvec                 C   s0   g d}g d}t ||}t|tg d d S )N)            r@   r?         r>   )r>   
             rH         r   r   r   selfabc rQ   E/usr/lib/python3/dist-packages/scipy/signal/tests/test_signaltools.py
test_basic(   s   
z_TestConvolve.test_basicc                 C   4   g d}g d}t ||dd}t|tg d d S )Nr>   r?   r@   )rC   rD   r>   r?   samemode)rE   rF   "   rK   rL   rQ   rQ   rR   	test_same.      z_TestConvolve.test_samec                 C   rT   )NrU   rB   rV   rW   )rE   rF   rF   rK   rL   rQ   rQ   rR   test_same_eq4   r[   z_TestConvolve.test_same_eqc                 C   s8   t g d}t ddg}t||}t|t g d d S )N)      ?      ?       @      ?      @      ?r]   r^   )               @y       @      @y      @       @y      @      @)r   r   r   )rM   xyzrQ   rQ   rR   test_complex:   s   
z_TestConvolve.test_complexc                 C   s$   d}d}t ||}t|||  d S )Ni	  i  )r   r	   rL   rQ   rQ   rR   test_zero_rank@   s   
z_TestConvolve.test_zero_rankc                 C   st   t dddd}t d}tdD ]$}dgd }d||< t|||dd}t|||dd}t|| qd S )N   r>   rC   directmethodr   )npr   reshaperanger   r   )rM   rN   rO   ib_shapera   rb   rQ   rQ   rR   test_broadcastableF   s   

z _TestConvolve.test_broadcastablec                 C   0   t dg}t dg}t||}t|||  d S Nig  iP  )r   r   r	   rL   rQ   rQ   rR   test_single_elementP      


z!_TestConvolve.test_single_elementc                 C   sR   g dg dg}g dg dg}t ||}tg dg dg dg}t|| d S NrB   rU   rD   r>   r?   r?   r@   rA   )rD            rJ   )rE      >   :   &   )rJ      r|   1   rz   r   r   r   rM   rN   rO   rP   drQ   rQ   rR   test_2d_arraysV   s   
z_TestConvolve.test_2d_arraysc              	   C   s  t dddd}dt dddd }|t dd d d ddd7 }tg dg dg d	g d
gg dg dg dg dgg dg dg dg dgg dg dg dg dgg}tt||d| tt||d| tt||d|ddddddf  tt||d|ddddddf  tt||d|ddddddf  tt||d|ddddddf  d S )N   rD                 ?rf   r>   )                y      :@        y      9@      ?y      8@       @)y      J@        y     b@      @y      b@      &@y     @W@      &@)y      G@      @y     `@      7@y     _@      =@y     @T@      7@)y      D@      (@y     X@      @@y     @W@     B@y      K@      8@)y      Z@        y     n@      *@y     m@      7@y     `@      5@)y     q@      >@y     @      X@y     @      _@y     t@     U@)y     n@     P@y      @     f@y     @@      j@y     q@     `@)y     a@     P@y     0s@      d@y     r@     `f@y      c@     Z@)y      Q@      B@y     c@     Y@y     `b@     @\@y     @T@     R@)y     e@     @a@y     w@     u@y      v@     w@y     @g@     l@)y     @a@     e@y     r@      {@y     p@     |@y     @a@     `q@)y     Q@     @a@y      b@     0t@y     _@     Pu@y     O@     h@)y      @@      R@y      Q@     d@y     M@     e@y      >@      Y@)y      Q@      h@y     `a@     {@y     @]@     p|@y     L@     o@)y      C@     k@y     @R@     0@y     I@     H@y      5@     0r@)y      (@      b@y      4@     s@y      @     t@y             f@fullrV   rC   r   valid)r   rk   r   r   r   )rM   ZsmallZbigZ	out_arrayrQ   rQ   rR   test_input_swapping_   sP    z!_TestConvolve.test_input_swappingc                 C   v   g d}g d}t tt||dd t tt||ddd t tt||dd	d t tt||d
dd t tt||ddd d S NrU   rB   ZspamrW   Zeggsr   )rX   ri   Zhamrg   r   ZbaconrV   assert_raises
ValueErrorr   rM   rN   rO   rQ   rQ   rR   test_invalid_params      z!_TestConvolve.test_invalid_paramsN)__name__
__module____qualname__rS   rZ   r\   rd   re   ro   rr   r   r   r   rQ   rQ   rQ   rR   r=   &   s    
	%r=   c                   @   s>   e Zd Zdd Zdd Zdd Zddd	Zd
d Zdd ZdS )TestConvolvec                 C   s   g d}g d}g d}t ||d}t|| t ||d}t|| g d}ddg}ddg}t ||d}t|| t ||d}t|| d S )	N)rC   rD   r>   rA   r@   r>   )	rD   r>   r?   r@   r>   r?   rD   rD   rC   )F   N   I   A   r   )y      ?      @       @      y      @               @            ?        y       @      $)r   r   rM   rN   rO   expectedoutrQ   rQ   rR   test_valid_mode2   s   


zTestConvolve.test_valid_mode2c                 C   s6   g d}g d}t ||d}tg d}t|| d S )N)rC   rD   r>   r>   rC   rD   )rC   r?   r>   r?   r@   rA   rw   r?   r>   rD   rC   rC   r>   rV   )9   =   ?   r   -   $   r   r   rQ   rQ   rR   test_same_mode   s
   zTestConvolve.test_same_modec                 C   h   t ddd}t ddd}tttg||fR i ddi tttg||fR i ddi d S 	NrC   rw   rD   r>   r   r>   rD   rX   r   )rj   r   rk   r   r   r   r   rQ   rQ   rR   test_invalid_shapes       $z TestConvolve.test_invalid_shapesd   c           	         s  t dd tj D g dd D dD ]}|v r!| qfddD }tjd tjjdd	g|d
tj|d}|d  |d< |d< |d d|d   |d< |D ]q\}} |t	|j
 ||t	|j
 | fdddD }t|d j	|d j	 d|v rd|v rttd qZtdd ||fD rddd}nd||fv rddd}nddd}t|d |d fi | qZd S ) Nc                 S   s   g | ]\}}|qS rQ   rQ   ).0_trQ   rQ   rR   
<listcomp>       z5TestConvolve.test_convolve_method.<locals>.<listcomp>c                 S   s   h | ]}t |jqS rQ   )rj   dtypenamer   r   rQ   rQ   rR   	<setcomp>       z4TestConvolve.test_convolve_method.<locals>.<setcomp>)

complex256
complex192Zfloat128Zfloat96strZvoidbytesobjectZunicodestringc                    s*   g | ]} D ]}d D ]}|||fq
qqS ))r   r   rV   rQ   )r   t1t2rX   )typesrQ   rR   r      s
    *   r   rC   size)rm   frm   rO   ur                 ?rP   c              	      s   i | ]}|t | d qS ))ri   rX   )r   )r   key)rX   x1x2rQ   rR   
<dictcomp>   s    z5TestConvolve.test_convolve_method.<locals>.<dictcomp>)r   rg   r   rg   boolc                 S   s   g | ]}|d v qS )>   float32	complex64rQ   r   rQ   rQ   rR   r      r   -C6?gư>rtolatolfloat16MbP?h㈵>:0yE>)sumrj   Zsctypesitemsremoverandomseedchoicerandnr   kindastyper	   r   anyr   )	rM   nr   argsZarray_typesr   r   resultskwargsrQ   )rX   r   r   r   rR   test_convolve_method   s<   


z!TestConvolve.test_convolve_methodc                 C   sv   dD ]6}t jd| gt jd}t||dd}t||dd}|dk r8t|| t|dd|   t|dd|   qd S )N)	rE      2   3   4   5   6   <   r{   rD   r   r   rh   rg   r   )rj   r   int64r   r	   )rM   r   rc   r   rg   rQ   rQ   rR    test_convolve_method_large_input   s   
z-TestConvolve.test_convolve_method_large_inputc                 C   x   t ttdgddd t ttddgdd t ttdgddd t ttddgdd t ttdgdgg t ttdgd d S NrC   rD   rg   rh   r   r>   r   rM   rQ   rQ   rR   test_mismatched_dims      z!TestConvolve.test_mismatched_dimsN)r   )	r   r   r   r   r   r   r   r   r   rQ   rQ   rQ   rR   r      s    
0r   c                   @   T   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )_TestConvolve2dc                 C   sR   g dg dg}g dg dg}t g dg dg dg}t||}t|| d S rt   r   r   r   )rM   rN   rO   r   erQ   rQ   rR   r     s   
z_TestConvolve2d.test_2d_arraysc                 C   s^   g dg dg}g dg dg}t g dg}t||d}t|| t||d}t|| d S )NrD   r>   r?   r@   rA   rw   r   r?   r@   rA   rw   r   	   rE   rB   rU   r{   P   b   t      r   r   rM   r   r   hgrQ   rQ   rR   test_valid_mode  s   
z_TestConvolve2d.test_valid_modec                 C   sl   g dg dg}t jg dg dgtdd }tg dg}t||d}t|| t||d}t|| d S )	Nr   r   rB   rU   r   r   )y      O@      8@y      T@      >@y     X@      B@y      ]@      E@y     `@      H@r   )rj   r   complexr   r   r   r  rQ   rQ   rR   test_valid_mode_complx  s   
z&_TestConvolve2d.test_valid_mode_complxc                 C   s\   g dg dg}g dg dg}d}t ||dd|}tg dg d	g d
g}t|| d S )NrB   rU   ru   rv   rC   r   fill)      r~   rY   rH   )rG   (   r{   @   r   )rH   .   C   r{   0   r   r   r   )rM   rN   rO   ZfillvalrP   r   rQ   rQ   rR   test_fillvalue%  s   z_TestConvolve2d.test_fillvaluec                 C   s   t  ?}|tjd |td}tdggddggdd tt|dk t	j
ddtd tttdggddggdd W d    n1 sEw   Y  t  9 t	j
d	d
td tttdggddggddgd t	j
dd
td tttdggddggddgd W d    d S 1 sw   Y  d S )NzCasting complex values to realzcould not cast `fillvalue`rC   rD   r   	fillvalueerror)messagecategoryalwaysz'`fillvalue` must be scalar or an array )r   filterrj   ZComplexWarningrecordDeprecationWarningr   r   lenwarningsfilterwarningsr   r   )rM   suprrQ   rQ   rR   test_fillvalue_deprecations/  s:   "z+_TestConvolve2d.test_fillvalue_deprecationsc                 C   s    t ttdggddggg d d S )NrC   rD   r  r   r   r   r   rQ   rQ   rR   test_fillvalue_emptyH  s   
z$_TestConvolve2d.test_fillvalue_emptyc                 C   sV   g dg dg}g dg dg}t ||dd}tg dg dg dg}t|| d S )	NrB   rU   ru   rv   r   wrap)r   r   J   r   r   )D   r%  r{   r%  r%  r  r   rQ   rQ   rR   test_wrap_boundaryM     z"_TestConvolve2d.test_wrap_boundaryc                 C   sV   g dg dg}g dg dg}t ||dd}tg dg dg d	g}t|| d S )
NrB   rU   ru   rv   r   Zsymm)rY   rz   ,   r{   B   )r   r  r{   r   T   )R   r   \   n   r   r  r   rQ   rQ   rR   test_sym_boundaryV  r'  z!_TestConvolve2d.test_sym_boundaryc                 C   r   r   )rj   r   rk   r   r   r   r   rQ   rQ   rR   r   _  r   z#_TestConvolve2d.test_invalid_shapesN)r   r   r   r   r  r  r  r   r"  r&  r/  r   rQ   rQ   rQ   rR   r     s    	
		r   c                   @   sH   e Zd Zdd Zdd Zdd Zdd Zejj	ej
d	d
d ZdS )TestConvolve2dc                 C   sN   g dg dg}g dg dg}t ||d}tg dg dg}t|| d S )NrB   rU   r   r   rV   )rF   rG   rY   )r   r   r   r  )rM   r   r   r  r  rQ   rQ   rR   r   n  s   zTestConvolve2d.test_same_modec                 C   s   g dg dg}g dg dg}g dg}t ||d}t|| t ||d}t|| ddgd	d
gg}g dg dg}ddgg}t ||d}t|| t ||d}t|| d S )NrB   rU   r   r   r   r   r]   r   r_         @        )r         @       @r1  )r1  y      @      ?y      @      y      ;@      y      G@       @)r   r   )rM   r   r   r   r   rQ   rQ   rR   r   v  s   




zTestConvolve2d.test_valid_mode2c              	   C   st   t d}t g d}dD ])}tt j|||dtj|||d tt tj|g|g|dtj|||d qd S )Nr@   g	@gffffff?r>   r   r   rV   rW   )rj   r   r   r
   r   r   squeezer   rM   rN   rO   rX   rQ   rQ   rR   test_consistency_convolve_funcs  s   
z.TestConvolve2d.test_consistency_convolve_funcsc                 C   s>   t ttdd t ttdgdg t ttdgggdggg d S )Nr>   r?   r!  r   rQ   rQ   rR   test_invalid_dims  s   z TestConvolve2d.test_invalid_dimsz!Can't create large array for testc                 C   s   ddt  j  }td| d t  j d  t jd| t jd}d|d d d< t jjj||dfdd	}t	
|ddgg}t |dk}|d
 jd
ksOJ d S )Nl          rD     g    .Ar   rC   )iH  r   )shapestridesr   )rj   r   itemsizer;   Zcheck_free_memoryzeroslibZstride_tricksZ
as_stridedr   r   wherer   )rM   r   rN   countZfailsrQ   rQ   rR   test_large_array  s    zTestConvolve2d.test_large_arrayN)r   r   r   r   r   r7  r8  pytestmarkslowZxfail_on_32bitrB  rQ   rQ   rQ   rR   r0  l  s    
r0  c                   @   s  e Zd Zejdddddgddggdd Zejdddgddggd	d
 Zejdddddgddggdd Zejdddgddggdd Z	ejdddddgddgddgddgddgddgddgddgg
dd Z
ejdddgddgddgddgddgddgddgddggdd Zejdddddgddgddgddgddgddgddgddgg
dd Zejdddgddgddgddgddgddgddgddggdd Zejdddddgddggdd Zejddddgdggdd Zejdddddgddggdd Zejdddggdd  Zejdddddgddggd!d" Zejdddgddggd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zejdddddgddggd-d. Zejdddgddggd/d0 Zejddd1gd1dgddgddgd2d1gd1d2gd2dgdd2ggd3d4 Zejjejd5eedd6eed7d8 ej d9!d:d;d<"  d=d> Z#dS )?TestFFTConvolveaxes Nr   r   c                 C   H   t g d}t g d}|dkrt||}nt|||d}t|| d S )NrB   rC   r?   rE   rJ         "@rH  rG  r   r   r   rM   rG  rN   r   r   rQ   rQ   rR   	test_real  s   zTestFFTConvolve.test_realrC   c                 C   T   t g d}t g d}t|ddg}t|ddg}t|||d}t|| d S )NrB   rJ  rD   rC   rL  r   rj   tiler   r   rN  rQ   rQ   rR   test_real_axes     zTestFFTConvolve.test_real_axesc                 C   rI  )Nr]          @       @y      @      @r`   y               @y              4@y              8@y              2@rH  rL  rM  rN  rQ   rQ   rR   rd     s   zTestFFTConvolve.test_complexc                 C   rP  )NrU  rW  rD   rC   rL  rQ  rN  rQ   rQ   rR   test_complex_axes  rT  z!TestFFTConvolve.test_complex_axesc                 C   ^   t g dg dg}t g dg dg dg}|dkr!t||}nt|||d}t|| d S )NrB   rv   rC   r?   rE   rJ   r   r   r
  8   r   r   rx   r  r   r   r   rH  rL  rM  rN  rQ   rQ   rR   test_2d_real_same  s   z!TestFFTConvolve.test_2d_real_samerD   c                 C   j   t g dg dg}t g dg dg dg}t|g d}t|g d}t|||d}t|| d S )NrB   rv   r[  r\  r^  rD   rC   rC   rL  rQ  rN  rQ   rQ   rR   test_2d_real_same_axes  s   	z&TestFFTConvolve.test_2d_real_same_axesc                 C   rZ  )N      ?       @      @      @y      @      @r^   y      @      @y      @      @y            @y      $      4@y      5      L@y      2      S@y      &      N@y              $@y              F@y             ]@y             c@y             ^@re  y      $@      4@y      5@      L@y      2@      S@y      &@      N@rH  rL  rM  rN  rQ   rQ   rR   test_2d_complex_same	  s   z$TestFFTConvolve.test_2d_complex_samec                 C   r`  )Nrc  rf  rg  rh  ri  ra  rL  rQ  rN  rQ   rQ   rR   test_2d_complex_same_axes#  s   	z)TestFFTConvolve.test_2d_complex_same_axesc                 C   s   t g d}t g d}t g d}t g d}|dkr#t||d}nt||d|d}t|| |dkr;t||d}nt||d|d}t|| d S )NrB   	r>   r>   r@   rA   r   rw   r   r   rC        A@     D@     G@	rK  g      4@      9@rn  ro  rp       C@g      <@       @rH  rV   rL  rM  rM   rG  rN   rO   Z
expected_1Z
expected_2r   rQ   rQ   rR   test_real_same_mode:  s   
z#TestFFTConvolve.test_real_same_modec                 C   s   t g d}t g d}t g d}t g d}t|ddg}t|ddg}t|ddg}t|ddg}t||d|d}t|| t||d|d}t|| d S )	NrB   rl  rm  rq  rD   rC   rV   rL  rQ  ru  rQ   rQ   rR   test_real_same_mode_axesM  s   
z(TestFFTConvolve.test_real_same_mode_axesc                 C      t g d}t g d}t g d}|dkrt||d}nt||d|d}t|| |dkr5t||d}nt||d|d}t|| d S )Nr>   rD   rC   rl  g      8@g      ?@ro  g     E@g     H@rr        (@rH  r   rL  rM  rM   rG  rN   rO   r   r   rQ   rQ   rR   test_valid_mode_real_  s   
z$TestFFTConvolve.test_valid_mode_realc                 C   sr   t g d}t g d}t g d}t|ddg}t|ddg}t|ddg}t||d|d}t|| d S Nry  rl  rz  rD   rC   r   rL  rQ  r|  rQ   rQ   rR   test_valid_mode_real_axesr  s   z)TestFFTConvolve.test_valid_mode_real_axesc                 C   rx  )N      @      y       @      @r   r2  y      @      y      @        y      @      y       @        y     F@      (@y      >@      7@y      H@      @@rH  r   rL  rM  r|  rQ   rQ   rR   test_valid_mode_complex  s   
z'TestFFTConvolve.test_valid_mode_complexc                 C   s   t g d}t g d}t g d}t|ddg}t|ddg}t|ddg}t||d|d}t|| t||d|d}t|| d S )Nr  r  r  rD   rC   r   rL  rQ  r|  rQ   rQ   rR   test_valid_mode_complex_axes  s   
z,TestFFTConvolve.test_valid_mode_complex_axesc                 C   sr   t g d}t g d}t g d}t|ddg}t|ddg}t|ddg}t||ddd}t|| d S r~  rQ  r   rQ   rQ   rR   test_valid_mode_ignore_nonaxes  s   z.TestFFTConvolve.test_valid_mode_ignore_nonaxesc                 C   F   t tg g jdk t tddgg jdk t tg dgjdk d S Nr   r@   rA   rw   )r   r   r   r   rQ   rQ   rR   
test_empty     zTestFFTConvolve.test_emptyc                 C   ,   t d}t d}t||}t|||  d S rq   r   r   r	   rM   rN   rO   r   rQ   rQ   rR   re        
zTestFFTConvolve.test_zero_rankc                 C   rp   rq   r  r  rQ   rQ   rR   rr     rs   z#TestFFTConvolve.test_single_elementc                 C   s   t jd t jddt jd  }t jddt jd  }t ||d}|dkr4t||d}nt||d|d}tt j||dd	 d S )
N    r   )  r   rH  rL  绽|=r   )rj   r   r   randr   r   r   allcloser|  rQ   rQ   rR   test_random_data  s   z TestFFTConvolve.test_random_datac                 C   s   t jd t jddt jd  }t jddt jd  }t ||d}t |ddg}t |ddg}t |ddg}t||d|d}tt j||d	d
 d S )Nr  r  r   r  r   rD   rC   rL  r  r  )	rj   r   r   r  r   rR  r   r   r  r|  rQ   rQ   rR   test_random_data_axes  s   z%TestFFTConvolve.test_random_data_axesr?   c                 C   s<  d\}}t jd t jj| dt jj|   }t jj| dt jj|   }t||d}|d d d d d d d f }|d d d d d d d f }|d d d d d d d f }t |dddd}t |dddd}t |dddd}t |g d	}t |g d
}t |g d}t||d|d}t	||ddd d S )N)){   rF   )      r  r   r   r   rD   rC   r?   )rD   rC   r>   rC   rC   )rD   rC   rC   r?   rC   )rD   rC   r>   r?   rC   rL  r  r   )
rj   r   r   r  r   ZmoveaxisswapaxesrR  r   r   )rM   rG  Za_shapern   rN   rO   r   r   rQ   rQ   rR   test_random_data_multidim_axes  s    	z.TestFFTConvolve.test_random_data_multidim_axesr   r   r9  i  r  r:  '  r@   c                 C   s   t j|dt j|  }t j|dt j|  }t ||d}t||d}t||dd t||ddgd}t||dd d S )Nr   r   r  r   r   rL  )rj   r   r  r   r   r   )rM   r   rN   rO   r   r   rQ   rQ   rR   test_many_sizes  s   zTestFFTConvolve.test_many_sizes)$r   r   r   rC  rD  parametrizerO  rS  rd   rX  r_  rb  rj  rk  rv  rw  r}  r  r  r  r  r  re   rr   r  r  r  rE  listrl   rj   r   RandomStaterandinttolistr  rQ   rQ   rQ   rR   rF    s    























rF  c                  O   s   t d)NzFell back to fftconvolve)RuntimeError)r   r   rQ   rQ   rR   fftconvolve_err  s   r  c                 C      dd t | ddD S )Nc                 S   s(   g | ]\}}t || d kr||fqS )r>   )absr   rN   rO   rQ   rQ   rR   r     s    z!gen_oa_shapes.<locals>.<listcomp>rD   repeatr   sizesrQ   rQ   rR   gen_oa_shapes     r  c                 C   s@   t | }t | }dd t||D }g d}dd t||D S )Nc                 S   s   g | ]\}}|| qS rQ   rQ   )r   Zishapes0Zishapes1rQ   rQ   rR   r     r   z$gen_oa_shapes_2d.<locals>.<listcomp>r4  c                 S   sb   g | ]-\}}|d ks*|d |d kr|d |d ks*|d |d k r|d |d k r||f qS )r   r   rC   rD   r>   rQ   )r   ZishapesZimoderQ   rQ   rR   r     s    )r  zipr   )r  Zshapes0Zshapes1ZshapesZmodesrQ   rQ   rR   gen_oa_shapes_2d  s   r  c                 C   r  )Nc                 S   s    g | ]\}}||kr||fqS rQ   rQ   r  rQ   rQ   rR   r   $  s    z$gen_oa_shapes_eq.<locals>.<listcomp>rD   r  r   r  rQ   rQ   rR   gen_oa_shapes_eq#  r  r  c                   @   s  e Zd Zej ejdeee	dee	ddd dd Z
ejdeg dejdd	d
gejdg ddd Zejdddgejdeg dejdddgejdddgejdd	d
gejdg ddd Zejdeg dejdd	d
gdd Zejdddgddgddggejdeg dejdddgejdddgejdd	d
gdd Zdd Zd d! Zd"d# Zd$S )%TestOAConvolvezshape_a_0, shape_b_0r   r9  rI   c                 C   s:   t j|}t j|}t||}t||}t|| d S N)rj   r   r  r   r   r   )rM   	shape_a_0	shape_b_0rN   rO   r   r   rQ   rQ   rR   test_real_manylens)  s
   

z!TestOAConvolve.test_real_manylens)r   /   rA   r?   rC   
is_complexTFrX   r4  c           
      C   s~   t j|}t j|}|r"|dt j|  }|dt j|  }t|||d}|tjdt t|||d}	t	|	| d S Nr   rW   r   
rj   r   r  r   setattrr   Z_signaltoolsr  r   r   )
rM   r  r  r  rX   monkeypatchrN   rO   r   r   rQ   rQ   rR   test_1d_noaxes7  s   
zTestOAConvolve.test_1d_noaxesrG  r   rC   )r   r  rA   r?   shape_a_extrar>   shape_b_extrac	                 C   s   |gd }	|gd }
||	|< ||
|< t jj|	 }t jj|
 }|r4|dt jj|	   }|dt jj|
   }t||||d}|tjdt t||||d}t	|| d S )NrD   r   rX   rG  r   r  )rM   rG  r  r  r  r  r  rX   r  ax_aax_brN   rO   r   r   rQ   rQ   rR   test_1d_axesK  s   



zTestOAConvolve.test_1d_axesz0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec                 C   s   t j||}t j||}	|r&|dt j||  }|	dt j||  }	t||	|d}
|tjdt t||	|d}t	||
 d S r  r  )rM   r  r  	shape_a_1	shape_b_1rX   r  r  rN   rO   r   r   rQ   rQ   rR   test_2d_noaxesh  s   
zTestOAConvolve.test_2d_noaxesrD   c                 C   s   |gd }|gd }|||d < |||d < |||d < |||d < t jj| }t jj| }|	rD|dt jj|   }|dt jj|   }t||||d}|
tjdt t||||d}t	|| d S )Nr>   r   rC   r   r  r   r  )rM   rG  r  r  r  r  rX   r  r  r  r  r  r  rN   rO   r   r   rQ   rQ   rR   test_2d_axes}  s"   


zTestOAConvolve.test_2d_axesc                 C   r  r  )r   r   r   r   rQ   rQ   rR   r    r  zTestOAConvolve.test_emptyc                 C   r  rq   r   r   r	   r  rQ   rQ   rR   re     r  zTestOAConvolve.test_zero_rankc                 C   rp   rq   r  r  rQ   rQ   rR   rr     rs   z"TestOAConvolve.test_single_elementN)r   r   r   rC  rD  rE  r  r  r  rl   r  r  r  r  r  r  r  r  re   rr   rQ   rQ   rQ   rR   r  (  sN    	



r  c                   @   s   e Zd Zejdeegdd Zejdeegdd Z	ejddgdfddgfd	gdggfgejdeegd
d Z
ejdeegdd Zejdejejgdd ZdS )TestAllFreqConvolvesconvapproachc                 C   sd   t ddd}t ddd}ttdd |||d	d
 W d    d S 1 s+w   Y  d S )NrC   rw   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionmatchr   rW   )rj   r   rk   r   r   rM   r  rN   rO   rQ   rQ   rR   r     s   "z(TestAllFreqConvolves.test_invalid_shapesc                 C   s`   t g d}t g d}ttdd |||ddgd W d    d S 1 s)w   Y  d S )N)r@   rA   rD   rC   )r@   rA   r>   rC   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r  r   rC   rL  )rj   r>  r   r   r  rQ   rQ   rR   test_invalid_shapes_axes  s   "z-TestAllFreqConvolves.test_invalid_shapes_axesza,brC   rD   r>   c                 C   s<   t tdd ||| W d    d S 1 sw   Y  d S )Nz/in1 and in2 should have the same dimensionalityr  r   r   )rM   rN   rO   r  rQ   rQ   rR   r     s
   "z)TestAllFreqConvolves.test_mismatched_dimsc                 C   s  t tdd |dgdgdd W d    n1 sw   Y  t tdd |dgdgg d W d    n1 s9w   Y  t td	d |dgdgddgd
dggd W d    n1 s^w   Y  t td	d |dgdgg dd W d    n1 sw   Y  t tdd |dgdgdgd W d    n1 sw   Y  t tdd |dgdgdgd W d    n1 sw   Y  t tdd |dgdgddgd W d    d S 1 sw   Y  d S )Nz4acceptable mode flags are 'valid', 'same', or 'full'r  rC   rD   ZchipsrW   z#when provided, axes cannot be emptyrL  z-axes must be a scalar or iterable of integersr>   r?   )      ?rt        @      @z$axes exceeds dimensionality of inputrY  zall axes must be uniquer   r  )rM   r  rQ   rQ   rR   test_invalid_flags  s>    "z'TestAllFreqConvolves.test_invalid_flagsr   c                 C   sp   t jd|}t jd|}t | r |d7 }|d8 }t||}t|t||dd |j|ks6J d S )N)rf   rf   )r?   r?   y        ?rg   rh   )rj   r   r   Ziscomplexobjr   r   r   r   )rM   r   ra   rb   resrQ   rQ   rR   test_longdtype_input  s   
z)TestAllFreqConvolves.test_longdtype_inputN)r   r   r   rC  rD  r  r   r   r   r  r   r  rj   Z	longfloatZlongcomplexr  rQ   rQ   rQ   rR   r    s2    

	
r  c                   @   s@  e Zd Zg dg dg dg dg dg dg dg dg d	g d
g
Zg dg dg dg dg dg dg dg dg dg dg
ZddgZdd Zej	de
je
je
je
je
jee
je
je
je
je
jgdd Zej	de
je
je
je
je
jgdd Zdd Zd d! Zd"d# Zej	de
je
je
jgd$d% Zd&S )'TestMedFilt)
r   r   r   r   r   r,     rf   r   r  )
r   r   r   r   r   r   H   M   r%  r)  )
r   r   r   r   r   r  r     r  r  )
r   r   r   r   r   r         _   #   )
r   r   r   r   r   r  rY   r      r)  )
r   a   rG   r%  r   r  r   r|   G   r   )
r  r   r(  r  r%  rH   r  r%  r	  r*  )
r>   !   r   r  rC   r   r$  7   rJ   S   )
rw   r  r  r   r   r  r	  +   r   r
  )
rH   r   X   rw   '   r?   r,  r  r   r   )
r   r   r   r   r   r  r  r  rf   r   )
r   r   r   r   r   r   r  r  r  r   )
r   r   r   r   r   r  rY   rY   r  r  )
r   r   r   r   r   r   r   r  r  r   )
r   r   r   r   r   r   r  r  r  r  )
r  r   r   r   r   r  r  r  r  r
  )
rH   r   r   r   r   r  r  r   r  r
  )
rw   r  r   r   r  r  r  r  r   r  )
r   rH   r  r  rH   rH   r  r  r  r   )
r   rw   r  rw   r?   r?   r  r  r	  r   rw   r>   c                 C   sB   t | j| j}t t| jt| j}t|| j	 t|| d S r  )
r   medfiltINKERNEL_SIZE	medfilt2drj   r   floatr   OUT)rM   r   r   rQ   rQ   rR   rS     s   zTestMedFilt.test_basicr   c                 C   s8   t j| j|d}tt|j| tt|j| d S Nr   )rj   r   r  r	   r   r  r   r  rM   r   in_typedrQ   rQ   rR   
test_types   s   zTestMedFilt.test_typesc                 C   s   t j| j|d}tjtdd t| W d    n1 sw   Y  tjtdd t| W d    d S 1 s<w   Y  d S )Nr   Zorder_filterNDr  )	rj   r   r  rC  r   r   r   r  r  r  rQ   rQ   rR   test_invalid_dtypes)  s   "zTestMedFilt.test_invalid_dtypesc                 C   sr   t t tttjd  W d    n1 sw   Y  tjdtj	d}|dd }d|_
tt|ddk d S )NrE   r   r@   rA   rx   rC         @)rC  warnsUserWarningr   	TypeErrorr   r  rj   r   float64r<  r   )rM   ZdummyrN   rQ   rQ   rR   	test_none3  s   zTestMedFilt.test_nonec                 C   s   t d}tj||gtd}ttdrdt| }nd}tt	 t
|D ]}t| q&W d    n1 s8w   Y  ttdrKtt||k  t|||g d S )Nr  r   getrefcountrD   rE   )r   rj   r   r   hasattrsysr  rC  r  r  rl   r   r  r   r	   )rM   rN   ra   r   jrQ   rQ   rR   test_refcounting?  s   

zTestMedFilt.test_refcountingc                 C   s8   t j| jtd}t j| jtd}tt|| j| d S r  )	rj   r   r  r   r  r   r   r  r  )rM   Z	in_objectZ
out_objectrQ   rQ   rR   test_objectO  s
   zTestMedFilt.test_objectc           
         s  t jj|dt jj|d}j|jksJ |jd d  |jd d jd d d jd d d  fddt |}tdd*h d	}fd
d|D }t|D ]}|	 \}}}	||||	f< q`W d    n1 szw   Y  t
|| d S )Nr   r   rD   rC   c                    s   | \}}|dkrt d  }t d }t d }nt   d }t d }t  d }|dkrCt d }t d }t d}nt  d }t d }t d }||f }	t|	j}
|
||f ||fS )Nr   )slicer   r  r  )chunkMNZMinZMselZMoutZNinZNselZNoutZ
chunk_dataZmed)M1N1r  offMoffNrM   rQ   rR   applye  s$   



z2TestMedFilt.test_medfilt2d_parallel.<locals>.applyr?   )Zmax_workers>   rC   r   r   r   r   rC   rC   rC   c                    s   h | ]}  |qS rQ   )Zsubmit)r   r  )r	  poolrQ   rR   r     r   z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>)rj   r   r  r  r;  r  Z
zeros_liker   r   resultr   )
rM   r   r   outputchunksZfuturesZfuturedataZMsliceZNslicerQ   )r  r  r	  r  r  r  r  rM   rR   test_medfilt2d_parallelU  s$   
	z#TestMedFilt.test_medfilt2d_parallelN) r   r   r   r  r  r  rS   rC  rD  r  rj   ubytebyteushortshortuintint	ulonglongr   r  
longdoubler  Zbool_Zcfloatcdoubleclongdoubler   r  r  r  r   r  rQ   rQ   rQ   rR   r     sN    

r  c                   @      e Zd Zdd ZdS )
TestWienerc                 C   sr   t g dg dg dg dgd}t g dg dg dg d	g}tt||d
d ttj|dd|d
d d S )N)r@   rA   r?   r>   )r>   r@   rA   rD   )rD   r>   r@   rA   )rC   rA   r   rw   r   )gSXO@gXq	@gq@g?)g]`UUU@gFUUUU@gq@gcq@)gyq@gXq@gXq@gUJ4@)gUUUU?g2k6k@gҷWH@g@_)@rA   decimalr>   )Zmysize)r   r   r   Zwiener)rM   r  r  rQ   rQ   rR   rS     s   zTestWiener.test_basicNr   r   r   rS   rQ   rQ   rQ   rR   r        r  )meanmedianminimummaximumlinec                	   @   s  e Zd Zdd Zejddejddejddd	d
 Zdd Zejddejddejdddd Z	ejde
dd Zejde
dd Zejde
ejdejejgdd Zejddgeedgddge
 d d! Zd"d# Zd$d% Zd&S )'TestResamplec              	   C   s   t d}d}tdd}tttj|||d tttj|dd tttj|dd tttj|d	dd
d tttj|d	dddd t t dd}tj||d|d t	|j
dk d S )N      )kaiser       @   windowyorC   r   rD   rH  padtyper$  rE   )r3  Zcval)rD   rC   r   axisr0  )r.  )rj   r   r   Z
get_windowr   r   resampleresample_polyrR  r   r;  )rM   ZsignumwinZsig2rQ   rQ   rR   rS     s   
zTestResample.test_basicr0  )Nhammingr  )r   r  r8  )r   e   rE   r  c                 C   s   t jdd|dd}t |d  d }ttj|||dtj|d ||dj t t |d  d t |d  d g}|d }ttj||d	|d
tj||d	|d
jdd d S )Nr   rE   F)ZendpointrD   g      @r/  r   rC   r4  &.>r  )	rj   linspacecosr   r   r6  realr   sin)rM   r  r8  r0  ra   rb   Z	y_complexrQ   rQ   rR   	test_rfft  s   .
zTestResample.test_rfftc                 C   sD   t dd }t|}d}ttj||ddtj||dddd d S )Nr+  r   freq)domaintimer<  r  )rj   r   r   r   r   r6  )rM   ZtsigZfsigr8  rQ   rQ   rR   test_input_domain  s   
zTestResample.test_input_domainnx)rC   rD   r>   r@   r   nyr   )r  r  c                 C   s2   t dg| |}t||}t|dg|  d S )NrC   )rj   r   r   r6  r   )rM   rF  rG  r   ra   rb   rQ   rQ   rR   test_dc  s   zTestResample.test_dcr3  c                 C   sF   t d}t jdd}| }tj|dd||d t|| d S )Nr>   r   rD   r@   rC   r0  r3  )	rj   r>  r   r  r   copyr   r7  r   )rM   r3  Zimpulser0  Zwindow_origrQ   rQ   rR   test_mutable_window  s
   
z TestResample.test_mutable_windowc                 C   sL   t jdt jd}t jg dt jd}tj|dd||d}|jt jks$J d S )NrE   r   rC   rC   rC   rC   rD   rI  )rj   r   r   r   r   r7  r   )rM   r3  ra   r  rb   rQ   rQ   rR   test_output_float32  s   z TestResample.test_output_float32c                 C   s4   t jd|d}tj|dd|d}|j|jksJ d S )NrE   r   rC   rD   r2  )rj   r   r   r7  r   )rM   r3  r   ra   rb   rQ   rQ   rR   test_output_match_dtype  s   z$TestResample.test_output_match_dtypezmethod, ext, padtype)r   FNZ	polyphaseFTc                  C   s  d}g d}t |t| }t dd d t jf }t dt j | | t| }|D ]}	t |	t|	 }
t dt j | |
 t|	 }|dkrUtj	||	dd}nC|r|	|krt
|	|}|	| }|| }t||}d| }d	| }tjd| d
 |dd}||d}nd|i}tj||	|fddi|}t|||D ]>\}}}|d|	 kr|d |dv rt||dd qt||dd qt|j|j t ||d }t|dk|||	fd qq-t jd}t|t || }|D ]>}	t |	t|	 }
t |
||}|dkrt	||	}n	tj||	||d}t|j|j t ||d }t|dk|d q|dkrnt ddg}t	|d}t g d}t||dd t g d }t	|d}t ddg}t||dd d S d S )!Nr   )	r   r   r   c   r   r;           )r        $@g      D@rD   r   r   r5  r  rE   rC   )r,  r  r/  rI  r3  r5        ?        )r&  r'  333333?r  r   r  gGz?)msgr   r2  r   r   r?   )r         ?        r   rY  -q=)r  rU  rV  rU  )rj   r   r  r   newaxisr@  pir6   r   r6  r   maxfirwinr7  r  r  r   r   r;  Zcorrcoefr   r   r  Zcumsumr   Zinterp) rM   ri   extr3  raterates_tor   freqsra   rate_tot_toZy_tos	y_resampsr  updownZmax_rateZf_cZhalf_lenr0  ZpolyargsZy_toZy_resamprB  Zcorrrngr   Zy1_testZy1_truer   Zy2_testZy2_truerQ   rQ   rR   test_resample_methods  st     





z"TestResample.test_resample_methodsc                 C   s   t jd}tt jt jttf}d}g d}|D ]Z}||	|}|t jt j
fv r2|d|| 7 }d|d< d|d< |D ]4}tjdd| d	d
}t|d|ddd d | }	t||d d d }
tj|d||
d
}t|	|ddd q<qd S )Nry   r  )rD   r  O   r   r   r   r~   r  r:  r/  constantr2  rC   Hz>r   r   )rj   r   r  r  r   r   r  r  r   r   
complex128r   r^  r$   r   r7  r   )rM   Zrandom_stateZ	try_typesr   Zdown_factorsr   ra   rg  r  yfZhcrb   rQ   rQ   rR   test_poly_vs_filtfiltG  s$   z"TestResample.test_poly_vs_filtfiltc              	   C   s   dD ]=}t dd|D ]4}dD ]/}tj|f}tj|f}t||d d d dd}tj|d||d}t|d d | | qq
qd S )	N)rD   r?   rC   r  )rH   r  r   rk  rW   )rf  rg  r0  )rl   rj   r   r   r   r7  r   )rM   rg  rF  Znweightsra   ZweightsZy_gZy_srQ   rQ   rR   test_correlate1dc  s   zTestResample.test_correlate1dN)r   r   r   rS   rC  rD  r  rA  rE  rH  padtype_optionsrK  rM  rj   r   r  rN  r  r   ri  rp  rq  rQ   rQ   rQ   rR   r)    s>    



	Ir)  c                   @      e Zd Zdd Zdd ZdS )TestCSpline1DEvalc                 C   sx   t g d}tt|}|d |d  }t|}tt|d d }tj||||d d}t|d d d |dd d S )	N)	rC   rD   r>   r?   r>   rD   rC   rD   r  rC   r   rS  )dxZx0rE   r@   r   )r   r   r  r   	cspline1dcspline1d_evalr   )rM   rb   ra   ru  Zcjr   y2rQ   rQ   rR   rS   q  s   
zTestCSpline1DEval.test_basicc                 C   st   t d}t j|jt jd}d}d| }t dt j | | }t|}t 	dg}t
||}t|j|j d S )NrD   r   rS  r  r`   rU  )rj   r   r>  r;  r   expr\  r   rv  r   rw  r	   r   )rM   ra   rb   Tr   cyZxnewZynewrQ   rQ   rR   rd   }  s   

zTestCSpline1DEval.test_complexN)r   r   r   rS   rd   rQ   rQ   rQ   rR   rt  o  s    rt  c                   @   r  )TestOrderFiltc                 C   s$   t tg dg ddg d d S )NrB   rC   r   rC   rC   )rD   r>   rD   )r   r   Zorder_filterr   rQ   rQ   rR   rS     s   zTestOrderFilt.test_basicNr"  rQ   rQ   rQ   rR   r|    r#  r|  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3S )4_TestLinearFilterc                 C   s.   t dt |d t ||}| |S )Nr   rC   )rj   r=  prodrk   convert_dtype)rM   r;  ra   rQ   rQ   rR   generate  s   $
z_TestLinearFilter.generatec                 C   s~   | j t dkr6t|}t|j| j }t||gddgdgdgg}|D ]\}}| |d |d< q&|S tj|| j dd	S )
NOZrefs_okZzerosize_okreadonlyZ	writeonlyrQ   .F)rJ  )r   rj   asarrayemptyr;  Znditertyper   )rM   Zarrr   iterra   rb   rQ   rQ   rR   r    s   

z_TestLinearFilter.convert_dtypec                 C   sJ   |  d}| ddg}| ddg}| g d}tt|||| d S NrA   rC   r   rU        ࿩r   rD   r?   rA   r   rS  r  r  r   r"   rM   ra   rO   rN   y_rrQ   rQ   rR   test_rank_1_IIR  s
   
z!_TestLinearFilter.test_rank_1_IIRc                 C   sH   |  d}| ddg}| dg}| g d}tt|||| d S )Nr  rC   r   rC   r>   r@   rw   rK  r  r  rQ   rQ   rR   test_rank_1_FIR  s
   
z!_TestLinearFilter.test_rank_1_FIRc           	      C   s|   |  d}| g d}| ddg}| ddg}| g d}| dd	g}t||||d
\}}t|| t|| d S )Nr  rC   r   r   rU  r  rC   rD   )rC   r@   r      ry   r  r  zir  r  r"   r   	rM   ra   rO   rN   r  r  zf_rrb   zfrQ   rQ   rR   test_rank_1_IIR_init_cond  s   

z+_TestLinearFilter.test_rank_1_IIR_init_condc           	      C   sz   |  d}| g d}| dg}| ddg}| g d}| ddg}t||||d\}}t|| t|| d S )Nr  rL  rC   )rC   rD   r>   rA   r   r{  r   r@   r  r  r  rQ   rQ   rR   test_rank_1_FIR_init_cond  s   

z+_TestLinearFilter.test_rank_1_FIR_init_condc                 C   sf   |  d}| ddg}| ddg}| g dg dg dg dg}t|||dd}t|| d S )	Nr?   r>   rC   r   rU  r   rD   r?   rA   r?   rD   r   rT  r  )rM   ra   rO   rN   y_r2_a0rb   rQ   rQ   rR   test_rank_2_IIR_axis_0     
z(_TestLinearFilter.test_rank_2_IIR_axis_0c                 C   sf   |  d}| ddg}| ddg}| g dg dg dg dg}t|||dd	}t|| d S )
Nr  rC   r   rU  r   rD   r   rA   r  rA   rJ   r  rJ   r  ir  rT  r  )rM   ra   rO   rN   y_r2_a1rb   rQ   rQ   rR   test_rank_2_IIR_axis_1  r  z(_TestLinearFilter.test_rank_2_IIR_axis_1c           	      C   s   |  d}| ddg}| ddg}| td}| g dg dg dg d	g}| g d
d d tjf }t|||d|d\}}t|| t|| d S )Nr  rC   r   rU  )r?   rC   rL  )rw   rw   )r  r  )r  r  )r  r  iir5  r  )r  r  rj   onesr[  r"   r   )	rM   ra   rO   rN   r  Z	y_r2_a0_1r  rb   r  rQ   rQ   rR    test_rank_2_IIR_axis_0_init_cond  s   

z2_TestLinearFilter.test_rank_2_IIR_axis_0_init_condc           	      C   s   |  d}| ddg}| ddg}| td}| g dg dg dg dg}| g dg}t|||d	|d
\}}t|| t|| d S )Nr  rC   r   rU  )rC   r>   )rC   r>   r@   )r@   r>   rC   )r  r  r   r  )r  r  rj   r  r"   r   )	rM   ra   rO   rN   r  Z	y_r2_a0_0r  rb   r  rQ   rQ   rR    test_rank_2_IIR_axis_1_init_cond  s   

z2_TestLinearFilter.test_rank_2_IIR_axis_1_init_condc                    sj   |  d}| ddg| ddg t|jD ]}t ||}t fdd||}t|| qd S )Nr?   r>   rD   rC   r   rU  c                       t  | S r  r"   wrN   rO   rQ   rR   <lambda>      z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>r  r  rl   ndimr"   rj   apply_along_axisr   rM   ra   r5  rb   r  rQ   r  rR   test_rank_3_IIR  s   
z!_TestLinearFilter.test_rank_3_IIRc                    s   |  d}| ddg| ddg t|jD ]K}t|j}d||< | t|}| dgt |||\}} fdd} fdd}t	|||}	t	|||}
t
||	 t
||
 qd S )Nr  rC   r   rU  c                       t  | dd S Nr  r   r  r  rN   rO   zi1rQ   rR   r    r   z=_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.<lambda>c                    r  Nr  rC   r  r  r  rQ   rR   r    r   r  r  rl   r  r  r;  rj   r  r"   r  r   rM   ra   r5  Zzi_shaper  rb   r  Zlf0Zlf1r  r  rQ   r  rR   test_rank_3_IIR_init_cond  s    


z+_TestLinearFilter.test_rank_3_IIR_init_condc                    sh   |  d}| g d| dg t|jD ]}t ||}t fdd||}t|| qd S )Nr  r  rC   c                    r  r  r  r  r  rQ   rR   r    r  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>r  r  rQ   r  rR   test_rank_3_FIR  s   
z!_TestLinearFilter.test_rank_3_FIRc                    s   |  d}| g d| dg t|jD ]L}t|j}d||< | t|}| ddgt |||\}} fdd} fdd}t	|||}	t	|||}
t
||	 t
||
 qd S )Nr  r  rC   rD   c                    r  r  r  r  r  rQ   rR   r  (  r   z=_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.<lambda>c                    r  r  r  r  r  rQ   rR   r  )  r   r  r  rQ   r  rR   test_rank_3_FIR_init_cond  s    


z+_TestLinearFilter.test_rank_3_FIR_init_condc              
   C   s   |  d}tjdddd\}}| |}| |}|jd d }| tdd	|f}| tdd|f}t||||d
\}}t||||d
\}	}
t|	| t||
 t	t
t|||dt| d S )N)r?   r@   r   r   皙?Zbar  r   rC   r?   r@   r  r   )r  r   r%   r  r;  rj   r  r"   r   r   r   )rM   ra   rO   rN   Zzi_sizeZzi_fullZzi_singZy_fullZzf_fullZy_singZzf_singrQ   rQ   rR   test_zi_pseudobroadcast/  s   




z)_TestLinearFilter.test_zi_pseudobroadcastc                 C   sP   |  d}| g d}| dg}| g d}t||d |}t|| d S )NrA   r  rC   )r   rC   rD   rD   rD   rD   r   r  )rM   ra   rO   rN   r  rb   rQ   rQ   rR   test_scalar_aD  s   
z_TestLinearFilter.test_scalar_ac                 C   s6  |  tdd}|  tdd}|  tg d}tdd}|dd d d d f  d9  < |dd d d d f  d9  < |  |}|  td	d}tdd}dggdggdggg|d d d d d d
f< |  |}t|||d|\}}t|| t|| t||d |d|\}	}
t|	| t|
| d S )N)r>   rD   r@   lr@   rC   r   r   )r>   rC   r?   rC   rD   r>   )r>   rD   r?   r?   r   r   )r  rj   r>  r  r   r"   r   )rM   ra   rO   rN   r  Zzf_expectedZ
y_expectedZy_iirZzf_iirZy_firZzf_firrQ   rQ   rR   test_zi_some_singleton_dimsN  s"   
,



z-_TestLinearFilter.test_zi_some_singleton_dimsc                 C   s@   |  |}|  |}|  |}|  |}ttt||||| d S r  )r  r   r   r"   )rM   rO   rN   ra   r5  r  rQ   rQ   rR   base_bad_size_zii  s
   



z"_TestLinearFilter.base_bad_size_zic                 C   s	  t d}| dgdg|ddg | ddgdg|dddg | ddgdg|ddgg | ddgdg|dg d | g ddg|ddgg | g ddg|dg d | dgddg|dddg | dgddg|ddgg | dgddg|dg d | g dddg|ddg | g dddg|ddgdgg | g dddg|dg d | g dddg|dg d | ddgg d|ddg | ddgg d|ddgdgg | ddgg d|dg d | ddgg d|dg d t dd	}| dgdg|ddg | ddgdg|dg d | ddgdg|dg dgg | ddgdg|ddgdgd
gg | ddgdg|dddgg | ddgdg|dg dg | g ddg|dg d | g ddg|dg dg dgg | g ddg|dddgd
dgddgg | g ddg|dddgd
dgg | g ddg|dg dg dg | dgddg|dg d | dgddg|dg dgg | dgddg|ddgdgd
gg | dgddg|dddgg | dgddg|dg dg | dgg d|dg d | dgg d|dg dg dgg | dgg d|dddgd
dgddgg | dgg d|dddgd
dgg | dgg d|dg dg dg | g dddg|dg d | g dddg|dg dg dgg | g dddg|dddgd
dgddgg | g dddg|dddgd
dgg | g dddg|dg dg dg | dgdg|ddg | ddgdg|dg d | ddgdg|ddgdgd
gdggg | ddgdg|dg dg | ddgdg|ddgdgd
gg | ddgdg|ddgdgd
gdgdgg | g ddg|dg d | g ddg|dddgd
dgddgddggg | g ddg|dg dg dg | g ddg|dddgd
dgddgg | g ddg|dddgd
dgddgddgddgg | dgddg|dg d | dgddg|ddgdgd
gdggg | dgddg|dg dg | dgddg|ddgdgd
gg | dgddg|ddgdgd
gdgdgg | dgg d|dg d | dgg d|dddgd
dgddgddggg | dgg d|dg dg dg | dgg d|dddgd
dgddgg | dgg d|dddgd
dgddgddgddgg | g dddg|dg d | g dddg|dddgd
dgddgddggg | g dddg|dg dg dg | g dddg|dddgd
dgddgg | g dddg|dddgd
dgddgddgddgg d S )NrA   rC   r   r   )r   rC   rD   rL  r   rC   rD   r>   rJ   r  rD   )r   rC   rD   r>   r?   r@   rU   r>   r?   r@   )r?   r@   rA   rw   )r   rC   rD   r>   r?   r@   rA   rw   rw   r   r   )rj   r   r  rk   )rM   r   r   rQ   rQ   rR   test_bad_size_zip  s   
""	 $&*$$ $&*$$(,&&*$,2$*6*$,2$*64&,<z"_TestLinearFilter.test_bad_size_zic                 C   sh   |  d}| dg}| dg}| g }t||||d\}}t|| t|j| j t|jd d S )N)r@   rC   r  r   )r  r  r"   r   r	   r   r   )rM   ra   rN   rO   r  rb   r  rQ   rQ   rR   test_empty_zi  s   


z_TestLinearFilter.test_empty_zic                 C   s`   |  dg}|  dg}t||ddg}t||ddg}t||ddg}t|| t|| d S )NrC   r  r   TF)r  r+   r   )rM   rN   rO   r  Zzi_1Zzi_2rQ   rQ   rR   test_lfiltic_bad_zi  s   
z%_TestLinearFilter.test_lfiltic_bad_zic           	      C   sz   |  dg}|  g d}|  ddg}|  dg}|  dg}|  ddg}t||||d\}}t|| t|| d S )	NrC   r  rD   rw   r  r$  r  r  r"   r   	rM   rN   rO   r  ra   ZyeZzferb   r  rQ   rQ   rR   test_short_x_FIR  s   
z"_TestLinearFilter.test_short_x_FIRc           	      C   s|   |  ddg}|  g d}|  ddg}|  dg}|  dg}|  ddg}t||||d	\}}t|| t|| d S )
NrC   r  rD   rw   r  r$  ir  r  r  r  rQ   rQ   rR   test_short_x_IIR  s   
z"_TestLinearFilter.test_short_x_IIRc                 C   sr   |  d}| ddg}| }| ddg}| }| g d}t|||}t|| t|| t|| d S r  r  r  rJ  r"   r   r	   rM   ra   rO   Zb0rN   a0r  y_frQ   rQ   rR   test_do_not_modify_a_b_IIR   s   


z,_TestLinearFilter.test_do_not_modify_a_b_IIRc                 C   sp   |  d}| g d}| }| dg}| }| g d}t|||}t|| t|| t|| d S )Nr  r}  rD   )r   rU  rC   rD   r>   r  r  r  rQ   rQ   rR   test_do_not_modify_a_b_FIR  s   


z,_TestLinearFilter.test_do_not_modify_a_b_FIRN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rQ   rQ   rQ   rR   r~    s4    		


`r~  c                   @      e Zd ZedZdS )TestLinearFilterFloat32r   Nr   r   r   rj   r   rQ   rQ   rQ   rR   r        r  c                   @   r  )TestLinearFilterFloat64r   Nr  rQ   rQ   rQ   rR   r    r  r  c                   @   r  )TestLinearFilterFloatExtendedr  Nr  rQ   rQ   rQ   rR   r  !  r  r  c                   @   r  )TestLinearFilterComplex64FNr  rQ   rQ   rQ   rR   r  %  r  r  c                   @   r  )TestLinearFilterComplex128DNr  rQ   rQ   rQ   rR   r  )  r  r  c                   @   r  )TestLinearFilterComplexExtendedGNr  rQ   rQ   rQ   rR   r  -  r  r  c                   @   s   e Zd ZedZdd ZdS )TestLinearFilterDecimalr  c                 C   s   t t|S r  )r   r   rM   ra   rQ   rQ   rR   r  3  s   zTestLinearFilterDecimal.typeN)r   r   r   rj   r   r  rQ   rQ   rQ   rR   r  0  s    
r  c                   @   s   e Zd ZedZeZdS )TestLinearFilterObjectr  N)r   r   r   rj   r   r  r  rQ   rQ   rQ   rR   r  7  s    
r  c                   C   sL   t ttdgdgg d t ttdgd gg d t ttd gdgg d d S )Nr  )r  Nrt  r  rt  r  )r   r  r"   rQ   rQ   rQ   rR   test_lfilter_bad_object<  s   r  c                   C   s    t ttddgddgg d d S )NrD   r>   r?   r@   )rC   rD   r>   r?   r@   )r   NotImplementedErrorr"   rQ   rQ   rQ   rR   !test_lfilter_notimplemented_inputD  s    r  dtc                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestCorrelateRealc                 C   sF   t ddd|}t ddd|}t g d|}|||fS )Nr   r>   r?   rC   rD   )r   rD   r@   r   r>   )rj   r=  r   r   rM   r  rN   rO   r  rQ   rQ   rR   _setup_rank1N  s   
zTestCorrelateReal._setup_rank1c                 C   sN   d}zt |}t|drtdt |j }W |S W |S  ty&   Y |S w )NrA   
resolutionr  )rj   finfor  r  Zlog10r  	Exception)rM   res_dtr!  Zdt_inforQ   rQ   rR   equal_toleranceU  s   

z!TestCorrelateReal.equal_tolerancec                 C   s    |t jkr| t jS | |S r  )rj   r  r  Zdouble)rM   r  rQ   rQ   rR   equal_tolerance_fft`  s   

z%TestCorrelateReal.equal_tolerance_fftc                 C   s   |t krtt dgt dg}t|d d S | |\}}}t||dd}t||dd}t||| |jd t||| |jd t|j| t|j| d S )Nr?   r>   rg   r   rh   r   )	r   r   r	   _setup_rank3r   r   r  r   r  )rM   r  ri   rN   rO   r  Zy_fftZy_directrQ   rQ   rR   test_methodh  s   zTestCorrelateReal.test_methodc                 C   sr   |  |\}}}t||d}t||dd  t|j| t||d}t||dd d d d  t|j| d S )Nr   rC   r?   r   r  r   r   r	   r   rM   r  rN   rO   r  rb   rQ   rQ   rR   test_rank1_validv  s   z"TestCorrelateReal.test_rank1_validc                 C   s>   |  |\}}}t||d}t||d d  t|j| d S )NrV   r   r  r  rQ   rQ   rR   test_rank1_same  s   z!TestCorrelateReal.test_rank1_samec                 C   s6   |  |\}}}t||d}t|| t|j| d S )Nr   r  r  rQ   rQ   rR   test_rank1_full  s   
z!TestCorrelateReal.test_rank1_fullc              
   C   s   t dddjddd|}t dddjd	dd|}tg d
g dg dg dg dg dgg dg dg dg dg dg dgg dg dg dg dg dg dgg|d}|||fS )Nr   r  r  )rD   r?   r@   r  )orderrI   r	  ru   )rV  g      g@g     @g     @     @@g     @g     }@g      d@)g      G@g      {@g     @g     @g     @     @g      @g     p@)     `@g      @g     @g     @     @g     @g     @@g     s@)g     @p@g     @g     0@g     @g     p@g     (@g     `@g     t@)g     @i@g     @     (@g      @g      @g     ؘ@g     @@g     b@)g     \@g     u@g     @g      @g      @g     @g     r@g      C@)g      7@g      y@g     ,@     @g     @g     $@g     @@g     Pr@)r  g     @g     @g     @g     @g     ԩ@g     @g     }@)g     Pt@g      @g     R@g     @g     (@g     K@g      @g     @)g     ؁@g     @g     f@g     @g     (@g     }@g     (@g     @)g      {@r  g     4@r  g     @g     ܧ@g     @     l@)g      n@g     @g     @g     @g     @g     @g     @rs  )g      6@g     j@g     @g     @g     Д@g     p@g     z@g     `@)g     U@g     @~@g     (@r	  g     P@g     @g      @g     i@)g     g@g     @r  g     X@g     @g     @g     Џ@g     @k@)g     @s@g     p@g     x@g     h@g     @g     @g     ؐ@r
  )r
  g     @r  g      @g     @g     Ȗ@g     @g     S@)g     _@g      v@g     @g     @g     @g     p@g     @m@rV  r   )rj   r=  rk   r   r   r  rQ   rQ   rR   r    s>   
zTestCorrelateReal._setup_rank3c                 C   s   |  |\}}}t||d}t||ddddddf  t|j| t||d}t||ddddddf d d dd d dd d df  t|j| d S )Nr   rC   rD   r?   r>   r@   r   r  r   r   r	   r   r  rQ   rQ   rR   test_rank3_valid  s    <z"TestCorrelateReal.test_rank3_validc                 C   sL   |  |\}}}t||d}t||ddddddf  t|j| d S )NrV   r   r   rC   rY  r  r  rQ   rQ   rR   test_rank3_same  s    z!TestCorrelateReal.test_rank3_samec                 C   s4   |  |\}}}t||}t|| t|j| d S r  r  r  rQ   rQ   rR   test_rank3_all  s   

z TestCorrelateReal.test_rank3_allN)r   r   r   r  r  r  r  r   r  r  r  r  r  r  rQ   rQ   rQ   rR   r  I  s    r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestCorrelatec                 C   r   r   )rj   r   rk   r   r   r   r   rQ   rQ   rR   r     r   z!TestCorrelate.test_invalid_shapesc                 C   r   r   r   r   r   r   rQ   rQ   rR   r     r   z!TestCorrelate.test_invalid_paramsc                 C   r   r   r  r   rQ   rQ   rR   r     r   z"TestCorrelate.test_mismatched_dimsc                 C   s   g d}ddg}t t||ddg d g d}g d}t t||ddg d t t||d	dg d
 t t||dddg d S )NrB   r?   r@   rV   rW   )r@      rI   rv   )ry   rH   rI   r   )rA   ry   rH   rI   rJ   r   rH   )r   r   r   rQ   rQ   rR   test_numpy_fastpath  s   z!TestCorrelate.test_numpy_fastpathN)r   r   r   r   r   r   r  rQ   rQ   rQ   rR   r    s
    		r  rX   r   rV   r   behindTF
input_size)r   r;  r9  r:  r  i'  c                 C   s   t jd}||}t|d }|r!t |||g}| }n||d  }|}t||| d}t|j|j| d}	t 	|}
t
|	|
 | t
|	j|j d S )Nr   rE   rW   )rj   r   r  Zstandard_normalr  concatenater   r   r   Zargmaxr	   r;  )rX   r  r  rh  Zin1offsetZin2r   ZcorrelationZlagsZ	lag_indexrQ   rQ   rR   test_correlation_lags  s   

r  c                   @   r   )TestCorrelateComplexc                 C   s(   |t jkrt j}tdt |j d S )NrD   r>   )rj   r  r  r  r  Z	precision)rM   r  rQ   rQ   rR   r!    s   
zTestCorrelateComplex.decimalc                 C   s   t jd t jd|}|dt jd| 7 }t jd|}|dt jd| 7 }t|j|j|dt|j|j|d |}|dt|j|j|d t|j|j|d  7 }|||fS )Nr   rE   r   r   rW   )rj   r   r   r   r   r   r?  imag)rM   r  rX   rN   rO   r  rQ   rQ   rR   r    s   
z!TestCorrelateComplex._setup_rank1c                 C   s|   |  |d\}}}t||d}t||| |d t|j| t||d}t||d d d  | |d t|j| d S )Nr   r   r   )r  r   r   r!  r	   r   conjr  rQ   rQ   rR   r   '  s   "z%TestCorrelateComplex.test_rank1_validc                 C   B   |  |d\}}}t||d}t||| |d t|j| d S )NrV   r   r  r   r   r!  r	   r   r  rQ   rQ   rR   r  2     z$TestCorrelateComplex.test_rank1_samec                 C   r  )Nr   r   r  r  rQ   rQ   rR   r  8  r  z$TestCorrelateComplex.test_rank1_fullc                 C   s@   t jg d|d}t jg d|d}t||}t|g d d S )Nr   r]   rV  r   y      ?      @y       @      @y      @      @y      @      @)r         $@             <@            6@      y      0@      y       @      )rj   r   r   r	   rM   r  r   krb   rQ   rQ   rR   test_swap_full>  s   
z#TestCorrelateComplex.test_swap_fullc                 C   s0   g d}g d}t ||dd}t|g d d S )Nr  r   rV   rW   )r!  r"  r#  )r   r	   r$  rQ   rQ   rR   test_swap_sameD  s   z#TestCorrelateComplex.test_swap_samec                 C   s   t jddd|}|dt jddd| 7 }t jddd|}|dt jddd| 7 }t|j|jt|j|j |}|dt|j|j t|j|j  7 }t||d}t||| |d d t	|j
| d S )	NrE   r   rA   r   r?   r   rC   r   )rj   r   r   r   r   r?  r  r   r!  r	   r   r  rQ   rQ   rR   
test_rank3J  s   &zTestCorrelateComplex.test_rank3c                 C   s2  t t j |}|dt t j | 7 }t t j |}|dt t j | 7 }t|j|jt|j|j |}|dt|j|j t|j|j  7 }t||d}t||| 	|d d t
|j| t
tdgdgtdd t
tdgdgtdd t
tdgdgtdd d S )Nr   r   rC   r   r`                 @r?   )rj   r   r   r   r   r   r?  r  r   r!  r	   r   r  rQ   rQ   rR   
test_rank0X  s    &zTestCorrelateComplex.test_rank0N)r   r   r   r!  r  r   r  r  r&  r'  r(  r*  rQ   rQ   rQ   rR   r    s    	r  c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestCorrelate2dc              	   C   s   t d}t g d}dD ]T}tt j|||dtj|||d tt tj|g|g|dtj|||d |dkrbtt j|||dtj|||d tt tj|g|g|dtj|||d qd S )Nr@   r3  r4  rW   r   )rj   r   r   r
   r   r   r5  correlate2dr6  rQ   rQ   rR    test_consistency_correlate_funcsm  s,   
z0TestCorrelate2d.test_consistency_correlate_funcsc                 C   sl   t ddd}t ddd}tttjg||fR i ddi tttjg||fR i ddi d S r   )rj   r   rk   r   r   r   r-  r   rQ   rQ   rR   r     s   "&z#TestCorrelate2d.test_invalid_shapesc                 C   sR   t tdggdggd t tdggdggd t tdggdggd d S )NrC   r`   y              r)  rA   r?   y              (@)r	   r   r-  r   rQ   rQ   rR   test_complex_input  s   z"TestCorrelate2d.test_complex_inputN)r   r   r   r.  r   r/  rQ   rQ   rQ   rR   r,  k  s    r,  c                   @   rs  )TestLFilterZIc                 C   sB   t g d}t g d}t ddg}t||}t|| d S )N)r        rU  )r  rV  rt  r  r1  )rj   r   r#   r   )rM   rN   rO   Zzi_expectedr  rQ   rQ   rR   rS     s
   
zTestLFilterZI.test_basicc                 C   sJ   t g d}t g d}t||}td| d| }t||dd d S )N)rD   r   r@   )rC   rC   r   rD   rZ  r  )rj   r   r#   r   )rM   rO   rN   r  Zzi2rQ   rQ   rR   test_scale_invariance  s
   
z#TestLFilterZI.test_scale_invarianceN)r   r   r   rS   r2  rQ   rQ   rQ   rR   r0    s    r0  c                   @   sN   e Zd ZdZ		dddZdd	 Zd
d Zdd Zdd Zdd Z	dd Z
dS )TestFiltFilttfr   oddNpadc              	   C   sR   | j dkrt| \}}	t||	||||||S | j dkr't| }
t|
||||S d S )Nr4  sos)filtfilt_kindr&   r$   r'   r.   )rM   zpkra   r5  r3  padlenri   irlenrO   rN   r7  rQ   rQ   rR   r$     s   

zTestFiltFilt.filtfiltc                 C   s:   t g dg d}| |td}t|tddd d S )NrB   rJ   g6{=r  )r0   r$   rj   r   r   )rM   r9  r   rQ   rQ   rR   rS     s   zTestFiltFilt.test_basicc                 C   s*  d}t dd|d }t dt j | }t dt j | }|| }tddd	d
}t |d  }d}tt t 	|t 	| }	| j
|||	d}
t |
|  }t|dk  t ||| g}| j
|||	dd}t|j|j t ||  }t|dk  | j
||j|	dd}t||j d S )Ni  r   r  rC   rE   i  r         ?r9  r  r   )r:  r   r:  r5  )rj   r=  r@  r\  r%   r  r]  r  ceillogr$   r   vstackr	   r;  rz  )rM   r`  r   ZxlowZxhighra   r9  r  epsr   rb   errZx2dZy2dZy2dtrQ   rQ   rR   	test_sine  s&   zTestFiltFilt.test_sinec                 C   s   t dddd}tdddd}| j||d	d	d
}| j|t |d	dd	dd
}t|t |d	d | j|t |d	dd	dd
}t|t |d	d d S )Ng     @rE   r  rJ   r>   r<  r9  r  r   r=  rC   rD   )rj   r   rk   r%   r$   r  r   )rM   ra   r9  Zy0y1rx  rQ   rQ   rR   	test_axis  s   zTestFiltFilt.test_axisc                 C   s@   | j dkrd S tddgdtd}t|tdddd d S )Nr4  rU  rC   rE   +=r   )r8  r   r$   rj   r   r   )rM   r   rQ   rQ   rR   test_acoeff  s   
zTestFiltFilt.test_acoeffc                 C   s   | j dkr
td tddg}tdg}tddg}t|||\}}}t|d |d gd|d  d	|d
   d	|d  d|d
   g t||d d|d   d|d   d|d
   d|d  |d  d|d   d|d
   g d S )Nr4  $gust only implemented for TF systemsr  rt  rU  r  r   rW  r  rC         ?r<  )r8  rC  skiprj   r   r7   r   )rM   ra   rO   rN   rb   z1z2rQ   rQ   rR   test_gust_simple  s   

..*
zTestFiltFilt.test_gust_simplec                 C   sT   | j dkr
td td}d}d}t|||dd}|| d | }t|| d S )	Nr4  rH  rJ   r  rt  gustrh   rD   )r8  rC  rJ  rj   r   r$   r   )rM   ra   rO   rN   rb   r   rQ   rQ   rR   test_gust_scalars  s   


zTestFiltFilt.test_gust_scalars)r   r5  Nr6  N)r   r   r   r8  r$   rS   rC  rE  rG  rM  rO  rQ   rQ   rQ   rR   r3    s    
	"
r3  c                   @   s   e Zd ZdZdd ZdS )TestSOSFiltFiltr7  c           	      C   st   t jdd}tddD ])}tj|ddd}t| \}}t| }t	|||}t
||}t||dd	| d
 qdS )z1Test equivalence between sosfiltfilt and filtfiltr   r9  rC   rA   ffffff?r9  r  rZ  zorder=%s)r   err_msgN)rj   r   r  r   rl   r   r%   r&   r'   r$   r.   r   )	rM   ra   r  r9  rO   rN   r7  rb   y_sosrQ   rQ   rR   test_equivalence	  s   
z TestSOSFiltFilt.test_equivalenceN)r   r   r   r8  rT  rQ   rQ   rQ   rR   rP  	  s    rP  c                 C   s   dd }t t|t| d }t| |}t|d|  | || d  | f}t||| ||fdddddd	d
	}|\}}	}
}}|dkrMtd| |d| }||d }t| ||ddd |dd ddd }t| |||dd }|||fS )aP  
    An alternative implementation of filtfilt with Gustafsson edges.

    This function computes the same result as
    `scipy.signal._signaltools._filtfilt_gust`, but only 1-d arrays
    are accepted.  The problem is solved using `fmin` from `scipy.optimize`.
    `_filtfilt_gust` is significanly faster than this implementation.
    c                 S   s   t t|t|d }| d| }| |d }t||||dd }t|||ddd |dd ddd }t|||ddd |dd ddd }	t|||	|dd }
t||
 d }|S )z-Objective function used in filtfilt_gust_opt.rC   Nr  r   r   rD   )r]  r  r"   rj   r   )icsrO   rN   ra   mz0fz0br  Zy_fby_bZy_bfvaluerQ   rQ   rR   filtfilt_gust_opt_func	  s   ((z1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_funcrC   Nr  rZ  r  TF)r   ZxtolZftolZmaxfunmaxiterZfull_outputZdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%dr   r  )	r]  r  r#   rj   r  r$  r   r  r"   )rO   rN   ra   r[  rV  r  rU  r  ZoptZfoptZniterZfuncallsZwarnflagrW  rX  rY  rb   rQ   rQ   rR   filtfilt_gust_opt	  s&   	
0(
r]  c                 C   sH  t jd t jj| }t| |||d|d}t| ||||d\}}}	t ||d}
|
jd d }t |
}t	t
|t
| d }t ||f }t ||f }tdd |D  D ]}t| ||
| \||< ||< ||< qYt |d|}t |d|}t |d|}t||d	d
d t||d	d
d t||d	d
d t|	|d	d
d d S )Nr  rN  )r5  ri   r;  )r5  r;  r   rC   c                 S   s   g | ]}t |qS rQ   )rl   )r   r   rQ   rQ   rR   r   T	  r   z'check_filtfilt_gust.<locals>.<listcomp>r   r<  r   )rj   r   r   r   r$   r7   r  r;  Z
empty_liker]  r  r  r   r]  r   )rO   rN   r;  r5  r;  ra   rb   ZygZzg1Zzg2ZxxZ	out_shaper1  rV  Zzo1Zzo2ZindxrQ   rQ   rR   check_filtfilt_gust@	  s&   
$r^  c                  C   sN  dD ]} dD ]K}d\}}}t jj|f|  }t jj|f|  }t||| d}t|| t||| dd\}}	t|dv  tt|	tu  td|	 v oOd	|	 v  qd
}dD ]}
t	t |
rrt j
||
d}| }tt||| dd	 qVt jdgt jd}| }tt||| dd	 tdtdg}tdtdg}tt||| dd	 qd S )Nr  )rC   rD   )r   rA   rg   rW   T)rX   Zmeasure>   r   rg   r   rg   rE   )r   r   r   l         @ r>   rD   rC   r?   )rj   r   r   r   r	   r   r  dictkeysr  r  rJ  r   r   r   )rX   r  r   r%  Ztrue_methodra   r  ri   Z
method_trytimesZnot_fft_conv_supprQ   rQ   rR   test_choose_conv_method`	  s2   


rb  c                  C   s   t jdddddd\} }}d}tt|}ttt|t| }tj	d t
| ||\}}d |fD ]&}d	| }	t|||	fd
| tdD ]}
g d}|	||
< t||||
| qKq8d| d }t|||fd
| d S )Nr>   {Gz?x   gffffff?r9  r  r  r  r@   r   )rD   rD   rD   rD   r   )r   Zelliprj   r]  r  r  r>  r?  r   r   r&   r^  rl   )rc   pr%  rA  r  Zapprox_impulse_lenrO   rN   r;  Z
signal_lenr5  r;  lengthrQ   rQ   rR   test_filtfilt_gust	  s    rg  c                   @   r<   )TestDecimatec                 C   s6   t d}tttj|ddd tttj|ddd d S )NrJ   rU  rC   )qr   rD   )rj   r   r   r  r   decimater  rQ   rQ   rR   test_bad_args	  s   
zTestDecimate.test_bad_argsc                 C   :   t d}tj|ddddd }t||d d d  d S )NrJ   rD   rC   iirFr   ftype
zero_phaserj   r   r   rj  roundr   rM   ra   rb   rQ   rQ   rR   test_basic_IIR	     
zTestDecimate.test_basic_IIRc                 C   rl  )NrJ   rD   rC   firFrn  rq  rs  rQ   rQ   rR   test_basic_FIR	  ru  zTestDecimate.test_basic_FIRc                 C   sJ   t d}tj|dddd}t|jd tj|dddd}t|jd d S )	N)rz   rz   rD   r   F)r5  rp  )r  rz   rC   )rz   r  )rj   r>  r   rj  r	   r;  )rM   rc   Zd0Zd1rQ   rQ   rR   
test_shape	  s
   
zTestDecimate.test_shapec                 C   F   t  }|td | jddd W d    d S 1 sw   Y  d S )NBadly conditioned filterrv  Fri   rp  r   r  r1   _test_phaseshiftrM   r  rQ   rQ   rR   test_phaseshift_FIR	     "z TestDecimate.test_phaseshift_FIRc                 C   ry  )Nrz  rv  Tr{  r|  r~  rQ   rQ   rR   test_zero_phase_FIR	  r  z TestDecimate.test_zero_phase_FIRc                 C      | j ddd d S )Nrm  Fr{  r}  r   rQ   rQ   rR   test_phaseshift_IIR	     z TestDecimate.test_phaseshift_IIRc                 C   r  )Nrm  Tr{  r  r   rQ   rQ   rR   test_zero_phase_IIR	  r  z TestDecimate.test_zero_phase_IIRc                 C   s  d}g d}t d}t|| d t| }t|d d }tdtj |d d tjf  | tj	
|jd }|D ]}	||	 }
t|	| d t|	 }tdtj |d d tjf  | tj	
|jd }|d	krd
}ttj|d d|
 ddd}n|dkrd}dtj |
 }tjt|d|tj  }|du rt|j|j|| d tj \}}|t| }nt|}tj|j|
|||d}tj| | dd}|t| }|d|	 k }tt| | | dddd q=d S )Nrd  )r  r   rz   r  r   rC   皙?rD   r`   皙?rv  rz   r  r:  r/  rm  r   g?F)ro  rp  r   rT  rU  r   r   rm  )r  rj   r   r  r   ry  r\  r[  r   ZwindowsZtukeyr   Zdltir^  Zcheby1Zfreqzr8  Zdenr  Z	ones_likerj  r?  r   r  r   angle)rM   ri   rp  r`  ra  Zt_totr   rb  r   rc  ri  rd  Zd_tosr   systemZwcr   Zh_respsre  Z	h_resampsZsubnyqrQ   rQ   rR   r}  	  sR   $$
zTestDecimate._test_phaseshiftc                 C   s|   d}d}t || }t d| t dt j |d  |  }tt j|ddd tj	|d	d
d}t
t j|d d S )Ng      Y@r9  rt  rD   g      >@r  r   r  rz   rv  )ro  rc  )rj   r   Zsqrtr@  r\  r   ZlinalgZnormr   rj  r   )rM   Zsfreqr   r   ra   Zx_outrQ   rQ   rR   test_auto_n	  s   *zTestDecimate.test_auto_nN)r   r   r   rk  rt  rw  rx  r  r  r  r  r}  r  rQ   rQ   rQ   rR   rh  	  s    0rh  c                   @   r+  )TestHilbertc                 C   s6   t dg}ttt| t d}ttt|dd d S )Nr   r-  r   r  )rj   r   r   r   r    r   r  rQ   rQ   rR   rk  
  s   
zTestHilbert.test_bad_argsc                 C   sj  d}t j}t dd| |d }t |}t |}t d| }t d| }t ||||g}t|}	t |	}
t |	}t 	|	}t
||| t
|
t |j| t
|dd df t | d |d |d | t
|dd df t d||d | t
|dd df t | d |d |d | t
|dd df t d||d | t
|	d j|| d S )Nr  r   rD   r+  rC   r*  r>   )rj   r\  r   r@  r>  r@  r    r  r  r?  r
   r  r;  r  )rM   r!  r\  r   r  a1a2a3rN   r  Zh_absZh_angleZh_realrQ   rQ   rR   test_hilbert_theoretical
  s:   




  z$TestHilbert.test_hilbert_theoreticalc                 C   s   t ddd}t|dd}tt|jdd|j tt|d |d d t|ddd	}t|jddg tt|jddd	jddg t g d
}t|d |dd d S )Nr  r>   rA   r   rT  r   r  r   )r  r5  )y        Bm}ąy      ?a y?0fy      @Wa94y      @"nWy      @hIX@y<nm@yF8O2k{?yډoP?y̼YC?y433333<c4Qe?yȒ40p$?yESU?yffffff<?7?y433333<wEoy!5P{3'ſy        _N@տy<}ٿy<-cyF8<2OW\zN regression)	rj   r   rk   r    r	   rz  r
   r;  r   )rM   rN   ZaaZaanZa0hilbrQ   rQ   rR   test_hilbert_axisN4
  s   zTestHilbert.test_hilbert_axisNN)r   r   r   rk  r  r  rQ   rQ   rQ   rR   r  
  s    )r  c                   @   r  )TestHilbert2c                 C   s   t dgg}ttt| t dddd}ttt| t ddd}ttt|dd ttt|d	d ttt|d
d d S )Nr   r	  rD   r>   r?   rx   r   r  )rD   r   )rD   )rj   r   r   r   r!   r   rk   r  rQ   rQ   rR   rk  \
  s   zTestHilbert2.test_bad_argsN)r   r   r   rk  rQ   rQ   rQ   rR   r  Z
  r#  r  c                   @   s   e Zd Zed#ddZdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"S )$TestPartialFractionExpansionrw   c                 C   s   t |}t |}t t|d d d f | t| d d d f | }t|\}}t|| || |d t| | || |d d S )Nr   )rj   r  Zhypotr  r   r
   )r  re  Zr_trueZp_truer!  ZdistanceZrowsZcolsrQ   rQ   rR   assert_rp_almost_equalm
  s   

z3TestPartialFractionExpansion.assert_rp_almost_equalc                 C   sP  t g dg d\}}tt|d t|d tg d t|d tg d t|d tg d	 t|tg d
 t g dg ddd\}}tt|d t|d tg d t|d tg d t|d tg d t|d tg d t|d tg d t|d tg d	 t|tg d
 d S )NrB   ry  r>   r   )rD   rD   r>   rC   )rC   rC   rC   r>   rD   )rC   rC   rC   rD   rD   )rC   rC   rC   rD   rD   r>   T)Zinclude_powersrA   )rC   rC   rD   rD   r>   )rC   rD   rD   r>   )rC   rC   rC   rD   r>   r?   r@   )r8   r	   r  r
   rj   poly)rM   Zfactorsr  rQ   rQ   rR   test_compute_factorsy
  s"   
z1TestPartialFractionExpansion.test_compute_factorsc                 C   s4   t g ddd\}}t|g d t|g d d S )N)r  gjt?g?5^I?rt  g/$ @r  r  minr  ry  )r9   r	   rM   uniquemultiplicityrQ   rQ   rR   test_group_poles
  s
   
z-TestPartialFractionExpansion.test_group_polesc                 C   s>  t g dg d\}}}t|g ddd t|g ddd t|dgdd t dd	gg d
\}}}t|d	dg t|ddg t|jd t ddgg d\}}}t|ddg t|ddg t|jd t ddgg d\}}}| ||g dg d t|jd t ddgg d\}}}| ||g dg d t|jd t g dg d\}}}t|g d t|g d t|ddg t dgg d\}}}t|ddg t|dd g t|jd t g d!g d"\}}}| ||g d#g d$ t|jd t g d%g d&\}}}| ||g d'g d( t|jd t ddgg d)\}}}t|dd*g t|ddg t|jd t g d+g d)\}}}t|dd,g t|ddg t|dg t g d-g d)\}}}t|d.d/g t|ddg t|d0d1g t g d+g d2\}}}| ||g d3g d4 t|jd d S )5Nr@   r>   rY  rw   r  r   r   r>   )gZd;O?g9#Jg&䃞ͪr?   r   )g-1ڿgeagvq-?g      r  r   rC   rA   r   irY  r   rC   )rC   r   rY  r>   r   rD   )rD   g333333gGz?gClٿ)y      2     @*y      2     @*@g      B@)y      ?ɿy      ??gffffff?)rC   r@   r   r?   )r   rC   r>   )r   rY  rY  )r>   gg)\(?g^I+g rh?)rC   gffffffgQg~jt?)r?   rC   )r  g333333ӿr  )rC   rD   r  rI        пr  )rC   r   r  )rC   r   r   r   r   )rC   y              ?y             r   )r                r   rC   )r>   r   rA   rC   r>   r>   rC   rB   r   r   r   )rC   r  rD   r@   )rD   r>   r   r  )rw   rD   r>   r   r  E   rw   rI   )rC   r  r?   rY  )r?   y            @y            )rC         ?      r]   )r4   r
   r	   r   r  rM   r  re  r%  rQ   rQ   rR   test_residue_general
  sp   

z1TestPartialFractionExpansion.test_residue_generalc                 C      t g dg d\}}}t g dg d\}}}t g dg d\}}}	t g dg d\}
}}t|| t|| t||
 t|| t|| t|| t|| t||	 t|| d S )Nr  r  )r   r@   r>   rY  rw   )r   r  r   r   r>   )r   r   r@   r>   rY  rw   )r   r   r   r  r   r   r>   )r4   r
   rM   Zr0Zp0Zk0Zr1Zp1Zk1Zr2Zp2Zk2Zr3Zp3Zk3rQ   rQ   rR   test_residue_leading_zeros
  s   







z7TestPartialFractionExpansion.test_residue_leading_zerosc                 C   s   t ddgg d\}}}t|ddg t|ddg t|jd t dd\}}}t|jd t|jd t|jd tjtdd t dd W d    d S 1 sRw   Y  d S )Nr   r  rY  r  rC   Denominator `a` is zero.r  )r4   r
   r	   r   rC  r   r   r  rQ   rQ   rR   test_resiude_degenerate
  s   "z4TestPartialFractionExpansion.test_resiude_degeneratec                 C   s  t g dg d\}}}| ||g dg d t|dg t g dg d\}}}| j||dd	gd
dgdd t|dgdd t ddgg d\}}}t|ddg t|ddg t|jd t g dg d\}}}| ||g dg d t|jd t g dg d\}}}t|ddg t|ddg t|ddg t dgg d\}}}| ||g d g d! t|jd t ddgtdd"gdd#g\}}}t|d$d%g t|d&dg t|jd t g d'ddg\}}}t|dg t|dg t|ddg t ddd(g\}}}t|dg t|d)g t|jd t dg d*\}}}t|ddg t|ddg t|jd t dg d+\}}}t|ddg t|d#dg t|jd t g d,g d'\}}}t|d-d.g t|ddg t|dg t d/dgg d'\}}}t|d0d1g t|ddg t|jd t g dg d'\}}}t|d2d3g t|ddg t|d4dg t g d5g d6\}}}| j||g d7g d8dd t|jd d S )9N)rC   rA   rA   rD   )rC   y             rd  r  )y             @y      @      @y            ()r   rC   rC   r`   )rC   rD   rC   )rC   r   g'W?y	c-y	c-@y      ?*D?y      ?*DԿr?   r   gŏ1w@rC   r   )rC   r  rA   rD   r>   r   ru   r  )r?   r  r>   r  )rC   r  r  r?   )rD   rY  r  rU  g            ?r  )r  r>   r  r   )g
ףp=
?gQ?皙?)rU  UUUUUUտr  r  rI  g
gUUUUUU@r  rC   rY  rC   r  r   )rC   r   rI  )rC   g      r<  )rC   rA   rD   r  r   rA   rY  r   ir  rE   r}  )rC   r   r   r   r   r   )yoT?c=yX?yoT?c=yXȿr  yjM?%uyjM?%u?)ySsA?ySsAr  y-?8gDio?y-?8gDio)r5   r  r
   r	   r   rj   Zpolymulr  rQ   rQ   rR   test_residuez_general
  s   $z2TestPartialFractionExpansion.test_residuez_generalc                 C   r  )Nr  r  )r@   r>   rY  rw   r   )r  r   r   r>   r   )r@   r>   rY  rw   r   r   )r  r   r   r>   r   r   r   )r5   r
   r  rQ   rQ   rR   test_residuez_trailing_zerosF  s   







z9TestPartialFractionExpansion.test_residuez_trailing_zerosc                 C   s   t ddgg d\}}}t|ddg t|ddg t|jd t dd\}}}t|jd t|jd t|jd tjtdd t dd W d    n1 sQw   Y  tjtdd t dg d	 W d    d S 1 spw   Y  d S )
Nr   r  rY  r  rC   r  r  z6First coefficient of determinant `a` must be non-zero.r  )r5   r
   r	   r   rC  r   r   r  rQ   rQ   rR   test_residuez_degenerateW  s    "z5TestPartialFractionExpansion.test_residuez_degeneratec           	      C   s   g d}g d}g }g d}g d}dD ]*}t ||||d\}}t|| t|| t||||d\}}t|| t|| qd S )N)rW  UUUUUUſg)r   rY  r  )r   rC   r>   )rC   rw   rE   r   avgr$  r  r&  r]  r'  rtyper(   r   r)   )	rM   r  re  r%  
b_expected
a_expectedr  rO   rN   rQ   rQ   rR   *test_inverse_unique_roots_different_rtypesj  s   


zGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypesc           
      C   s   g d}g d}g }g d}g d}g d}dD ].}t ||||d\}}	t||dd	 t|	| t||||d\}}	t||dd	 t|	| qd S )
Ng333333?g98ȿr  gll?r   rY  rY  r  )r   r   rC   r>   )r  gUUUUUUgUUUUUU?r>   )rC   r   r	  r   r   r  r  rF  r  r  )
rM   r  re  r%  r  Zb_expected_zr  r  rO   rN   rQ   rQ   rR   ,test_inverse_repeated_roots_different_rtypes}  s   
zITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypesc                 C   s   g d}g d}g }t jtdd t|||dd W d    n1 s$w   Y  t jtdd t|||dd W d    d S 1 sDw   Y  d S )Nr  r  z`rtype` must be one ofr  r%  r  )rC  r   r   r(   r)   r  rQ   rQ   rR   test_inverse_bad_rtype  s   "z3TestPartialFractionExpansion.test_inverse_bad_rtypec                 C   s@   dg}dg}dg}t |||\}}t|dg t|ddg d S )NrC   rD   r   r  g       )r)   r   )rM   r  re  r%  rO   rN   rQ   rQ   rR    test_invresz_one_coefficient_bug  s   z=TestPartialFractionExpansion.test_invresz_one_coefficient_bugc                 C   
  t dgdgg \}}t|dg t|ddg t g dg dg \}}t|g d t|g d t ddgdd	gg d
\}}t|g d t|g d t g dg dg \}}t|g d t|g d t ddgddgddg\}}t|g d t|g d d S )NrC   r   r  rD         ?      rC   r   r]   y      @      y      !      ?y      @      
@rC   y             y      ?       @y      ?      rU  r  rV  rB   )rC                     ?       r  rE   rC               r?   r   rD   r   r  r?   rY  r   r   r   r>   r>   r>   )y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     prC   y      (       @y     J@      4y      X      Q@y      ;@      Ry      [@      Ky     @T      [@r   rD   )rC   r   r  r_   r  )r(   r
   rM   rO   rN   rQ   rQ   rR   test_invres  "   z(TestPartialFractionExpansion.test_invresc                 C   r  )NrC   r   r  r  r  r  rU  r  rV  rB   )g      @r  r  y            rJ   r  r  r  )rA   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rr  r   rD   )r   rC   r  rD   r  )r)   r
   r  rQ   rQ   rR   test_invresz  r  z)TestPartialFractionExpansion.test_invreszc                 C   s\   t ddd\}}t|ddg t|ddg tddd\}}t|ddg t|ddg d S )NrC   r   r   rD   )r(   r
   r)   r  rQ   rQ   rR   test_inverse_scalar_arguments  s   z:TestPartialFractionExpansion.test_inverse_scalar_argumentsN)rw   )r   r   r   staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rQ   rQ   rQ   rR   r  l
  s$    DQ		r  c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestVectorstrengthc                 C   s`   t dg}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )NrU  r  r  r  r   rD   rj   r   r*   r	   r  r
   r\  rM   eventsperiodtarg_strengthZ
targ_phasestrengthphaserQ   rQ   rR   test_single_1dperiod  s   
z'TestVectorstrength.test_single_1dperiodc                 C   st   t dg}g d}dgd }t g d}t||\}}t|jd t|jd t|| t|dt j |  d S )NrU  )rC   rD   r  r  r>   )rU  rI  r  rC   rD   )rj   r   r*   r	   r  r   r
   r\  r  rQ   rQ   rR   test_single_2dperiod  s   

z'TestVectorstrength.test_single_2dperiodc                 C   sb   t g d}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )NrI  rI  rI  rI  rI  rI  rD   r  r<  r   r  r  rQ   rQ   rR   test_equal_1dperiod     
z&TestVectorstrength.test_equal_1dperiodc                 C   sv   t g d}ddg}dgd }t ddg}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr  rC   rD   r  rI  r<  r  r  rQ   rQ   rR   test_equal_2dperiod     

z&TestVectorstrength.test_equal_2dperiodc                 C   b   t g d}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr  g?g @gffffff@g333333$@rC   r  r  r   rD   r  r  rQ   rQ   rR   test_spaced_1dperiod  r  z'TestVectorstrength.test_spaced_1dperiodc                 C   sv   t g d}ddg}dgd }t ddg}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr  rC   rU  r  rD   r  r  r  r  rQ   rQ   rR   test_spaced_2dperiod  r  z'TestVectorstrength.test_spaced_2dperiodc                 C   r  )NrI  rU        ?rC   UUUUUU?rU  r   rD   r  r  rQ   rQ   rR   test_partial_1dperiod*  r  z(TestVectorstrength.test_partial_1dperiodc                 C   sv   t g d}g d}dgd }t g d}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr  )r  r  r  r  r  r?   )rU  rU  rU  rU  rC   rD   r  r  rQ   rQ   rR   test_partial_2dperiod7  r  z(TestVectorstrength.test_partial_2dperiodc                 C   sJ   t g d}d}d}t||\}}t|jd t|jd t|| d S )Nr   rI  rU  r  r  r   rj   r   r*   r	   r  r
   rM   r  r  r  r  r  rQ   rQ   rR   test_opposite_1dperiodD  s   z)TestVectorstrength.test_opposite_1dperiodc                 C   sV   t g d}dgd }dgd }t||\}}t|jd t|jd t|| d S )Nr  r  rE   rV  rC   r  r  rQ   rQ   rR   test_opposite_2dperiodO  s   

z)TestVectorstrength.test_opposite_2dperiodc                 C   s&   t ddgg}d}ttt|| d S )NrC   rD   r  rj   r   r   r   r*   rM   r  r  rQ   rQ   rR   test_2d_events_ValueErrorZ  s   z,TestVectorstrength.test_2d_events_ValueErrorc                 C   s$   d}t dgg}ttt|| d S )Nr  rC   r  r  rQ   rQ   rR   test_2d_period_ValueError_  s   z,TestVectorstrength.test_2d_period_ValueErrorc                 C      d}d}t tt|| d S )Nr  r   r   r   r*   r  rQ   rQ   rR   test_zero_period_ValueErrord     z.TestVectorstrength.test_zero_period_ValueErrorc                 C   r  )Nr  r   r  r  rQ   rQ   rR   test_negative_period_ValueErrori  r  z2TestVectorstrength.test_negative_period_ValueErrorN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  rQ   rQ   rQ   rR   r    s    r  c                 C   s8   t | j}t | t j} t |t j}t| ||S )zEConvert TF2SOS, casting to complex128 and back to the original dtype.)rj   r  r   r   rn  r,   r   )rO   rN   r   rQ   rQ   rR   cast_tf2soso  s   r  rl  c                 C   sF   | j jdkrt| jd j }| |||} }t| ||| dS )z1Wrap assert_allclose while casting object arrays.r  r   N)r   r   rj   r   Zflatr   r   )actualdesiredr   r   r   rQ   rQ   rR   assert_allclose_cast}  s   r  funcc                 C   s0  t dt dt dg}t dt dt dg}t dt dt dg}t|}|jjdks.J tt|tt|t|t}| tu rLt|| g|}nt|||}t	dd |D s]J t
|t|t | tu rqddg}ntddg}tjtdd	 | |d
di W d    d S 1 sw   Y  d S )NrC   rD   r>   r  c                 s   s    | ]}t |tV  qd S r  )
isinstancer   )r   ra   rQ   rQ   rR   	<genexpr>  s    z)test_nonnumeric_dtypes.<locals>.<genexpr>r  zmust be at least 1-Dr  ra   )r   rj   r   r   r   r"   r  r   r-   allr   r,   rC  r   r   )r   ra   rO   rN   r  r  r   rQ   rQ   rR   test_nonnumeric_dtypes  s"   
"
"r  ZfdgFDGOc                   @   D   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestSOSFiltc                 C   s  t ddd|}t ddg|}t ddg|}t g d|}t||}ttt|||| t ddg|}t ddg|}t g d	|}ttt|||| g d
}g d}t d}t ||f}d|_	t||}t
|g d d S )Nr   r@   rA   rC   r   rU  r  r  r  )rC   rC   r   r  r   )rC   rA   )rC   rD   rD   rD   rD   rD   rD   rD   )rj   r=  r   r   r  r   r-   r  r  r;  r   )rM   r  ra   rO   rN   r  r7  rb   rQ   rQ   rR   
test_rank1  s"   


zTestSOSFilt.test_rank1c           	      C   s   d}t dt |d t ||}||}t ddg|}t ddg|}t jg dg dg dg dg|d}t jg d	g d
g dg dg|d}tt|||dd}t|| tt|||dd}t|| d S )Nr  r   rC   r   rU  r  r  r   r  r  r  r  rT  )	rj   r=  r  rk   r   r   r-   r  r   )	rM   r  r;  ra   rO   rN   r  r  rb   rQ   rQ   rR   
test_rank2  s"   $

zTestSOSFilt.test_rank2c           	   
   C   s   d}t dt |d t ||}t ddg|}t ddg|}tt|||}t|j	d D ]}t|j	d D ]}t
|||f t|||||f  q@q7d S )Nr  r   rC   r   rU  )rj   r=  r  rk   r   r   r-   r  rl   r;  r   r"   )	rM   r  r;  ra   rO   rN   rb   rm   r  rQ   rQ   rR   r(    s   $$zTestSOSFilt.test_rank3c                 C   s<  t ddd\}}t ddd\}}t ddd\}}tt|||}tt|||}	ttj||f tj||f tj||f f}
tjd|}t	||	|d d t
dd\}}tj|t	||	|dd  |dd	 f }t|t	||	| t|
|d d t
d
d\}}tj|t|
|dd  |dd	 f }t|| t|
}td|}t|
||d\}}t|td t|| d|j |_ttt|
||d | }|jd	 dd|jd f|_ttt|
||d d d d d d g df d t|
||d\}}t|d td t|d d d	d	d d f | d S )NrD   rI  Zlowr  r   r   rA   r  r   r   r   r  rC   r   )r   rC   rC   r  )r   r%   rj   r   r   Zr_r   r  r   r"   r>  r  r-   r/   r  r;  r   r   rJ  )rM   r  Zb1r  Zb2r  Zb3r  rO   rN   r7  ra   Zy_truer  rS  rb   r  Zzi_ndrQ   rQ   rR   test_initial_conditions  s8   ."& $


"z#TestSOSFilt.test_initial_conditionsc                 C   s  t jdjdddd}||}tjdddd	}t| }|jd }d
}t	|j}d||< |g| }t 
|}t||||d\}	}
t||d d d dd d f ||d\}}t||d d dd d d f ||d\}}t j||f|d}t||	ddd t||
ddd t|}|d
dd
g|_||d d dd
d d f  }t||||dd }t| \}}t||}d
|jd
g|_||d d dd
d d f  }t|||||dd }t||ddd d S )N   r   r@   )rD   r  r>   r   rA   rQ  r9  r  rC   rD   r  rT  r  vIh%<=r   )rj   r   r  r  r   r   r%   r'   r;  r  r>  r-   r  r  r/   r&   r#   r   r"   )rM   r  ra   r9  r7  Z	nsectionsr5  ZshpZz0ro  r  rD  rK  rx  rL  rb   r  rO   rN   Zy_tfrQ   rQ   rR    test_initial_conditions_3d_axis1  s4   




**
z,TestSOSFilt.test_initial_conditions_3d_axis1c                 C   s   t d|}t d}t d}tjtdd t|||dd W d    n1 s*w   Y  d|d d d	f< tjtd
d t|||dd W d    d S 1 sRw   Y  d S )N)r>   r  r>   )r?   rA   )r?   r>   r>   rD   zshould be all onesr  rC   )r  r5  r  r>   zInvalid zi shape)rj   r  r>  rC  r   r   r-   )rM   r  ra   r7  r  rQ   rQ   rR   test_bad_zi_shape/  s   

"zTestSOSFilt.test_bad_zi_shapec                 C   s   t jdddd}t|}t|td||d\}}t||dd t|d d d d	f jd
d|d d d	d f jd
d }t||dd t|td||	 d\}}t||dd d S )NrA   r  r7  r  r  r  r  r  r>   r   rT  )
r   r%   r/   r-   rj   r  r  r  r   r  )rM   r  r7  r  rb   r  ssr   rQ   rQ   rR   test_sosfilt_zi;  s   >zTestSOSFilt.test_sosfilt_ziN)
r   r   r   r  r  r(  r	  r  r  r  rQ   rQ   rQ   rR   r    s    &.r  c                   @   r  )TestDeconvolvec                 C   s6   g d}ddg}g d}t ||\}}t|| d S )N)r   rC   r   r   rC   rC   r   r   rD   rC   )	r   rD   rC   r   rD   r>   rC   r   r   )r   Z
deconvolver   )rM   ZoriginalZimpulse_responseZrecordedZ	recoveredZ	remainderrQ   rQ   rR   rS   M  s
   zTestDeconvolve.test_basicNr"  rQ   rQ   rQ   rR   r  K  r#  r  c                   @   rs  )TestDetrendc                 C   s*   t tg d}tg d}t|| d S )NrB   )r   r   r   )r2   r   r   )rM   Z	detrendedZdetrended_exactrQ   rQ   rR   rS   X  s   zTestDetrend.test_basicc                 C   s2   t g d}t|dd}t|dd}t|| d S )N)rC   333333?r  g?g333333@F)Zoverwrite_dataT)r   r2   r   )rM   ra   Z
copy_arrayZinplacerQ   rQ   rR   	test_copy]  s   zTestDetrend.test_copyN)r   r   r   rS   r  rQ   rQ   rQ   rR   r  V  s    r  c                   @   r  )TestUniqueRootsc                 C   :   g d}t |\}}t||dd t|tt| d S )N)r1  r  rW  r  rS  r  r   r3   r
   r	   rj   r  r  rM   re  r  r  rQ   rQ   rR   test_real_no_repeate     z#TestUniqueRoots.test_real_no_repeatc                 C      g d}t |ddd\}}t|g ddd t|g d t |dd	d\}}t|g d
dd t|g d t |ddd\}}t|g ddd t|g d d S )N)r1  ffffff{Gz皙rU  r  ?r  r  tolr  )r1  r  rU  r  r  r   rD   rD   rC   rD   r]  )r  r  rU  r  r  )g333333g
ףp=
rU  gffffff?r3   r
   r	   r  rQ   rQ   rR   test_real_repeatk  s   z TestUniqueRoots.test_real_repeatc                 C   r  )N)r1  r         ?      ?r  r2  r  r   r  r  rQ   rQ   rR   test_complex_no_repeatz  r  z&TestUniqueRoots.test_complex_no_repeatc                 C   r  )N)r1        𿚙?ffffff333333?333333?rV  r$  ??r  r  r  )r1  r'  rV  r)  r  r   r!  r]  )r&  r(  rV  r$  r  )y      𿚙?y333333?rV  yffffff??r"  r  rQ   rQ   rR   test_complex_repeat  s$   
z#TestUniqueRoots.test_complex_repeatc                 C   sb   t t t dt d}g d}t|\}}t |}tt ||dd t|g d d S )Nr@   )yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?rw   r   )rD   rD   rD   rD   )rj   rootsr   r  r3   sortr
   r	   )rM   re  Z
true_rootsr  r  rQ   rQ   rR   test_gh_4915  s   
zTestUniqueRoots.test_gh_4915c                 C   sh   t g d\}}t|ddgdd t|ddg t g dd	d
\}}t|ddgdd t|ddg d S )N)r  r   r  r  r   r  r   rD   rC   )rC   g_p   ?&.>      ?r  )r   r.  r"  r  rQ   rQ   rR   test_complex_roots_extra  s   z(TestUniqueRoots.test_complex_roots_extrac                 C   sP   t jddt jd  }t|d\}}t|t |gdd t|dg d S )Nr   r   rD   r  r   )rj   r   r  r3   r
   r  r	   r  rQ   rQ   rR   test_single_unique_root  s   z'TestUniqueRoots.test_single_unique_rootN)
r   r   r   r  r#  r%  r*  r-  r/  r0  rQ   rQ   rQ   rR   r  d  s    
	r  r  )rl  r   )r  Zconcurrent.futuresr   r   r!  r   	itertoolsr   Zmathr   r  rC  r   r   Znumpy.testingr	   r
   r   r   r   r   r   r   r   Znumpyr   r   rj   Z	scipy.fftr   Zscipy.ndimager   Zscipy.optimizer   r   Zscipyr   Zscipy.signalr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   Zscipy.signal.windowsr6   Zscipy.signal._signaltoolsr7   r8   r9   Zscipy.signal._upfirdnr:   Z
scipy._libr;   r=   r   r   r0  rF  r  r  r  r  r  r  r  r  rr  r)  rt  r|  r~  r  r  r  r  r  r  r  r  r  r  rD  r  r  r  r  r  r  r  r  r   r  r  r  r  r  Zcsingler  r  r  r,  r0  r3  rP  r]  r^  rb  rg  rh  r  r  r  r  r  r  r  r  r  r  r  rQ   rQ   rQ   rR   <module>   s   ,|htjB  a 	P  O   v-^'`
, eW  p 

 .