U
    Hvf                    @   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
mZ d dl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-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZEmFZFmGZG d dlHmIZI d dlJmKZK G dd dZLG dd deLZMG dd dZNG dd deNZOG dd dZPdd ZQdd ZRd d! ZSd"d# ZTG d$d% d%ZUG d&d' d'ZVG d(d) d)ZWG d*d+ d+ZXd,d-d.d/d0gZYeYeI7 ZYG d1d2 d2ZZG d3d4 d4Z[G d5d6 d6Z\G d7d8 d8Z]G d9d: d:e]Z^G d;d< d<e]Z_G d=d> d>e]Z`G d?d@ d@e]ZaG dAdB dBe]ZbG dCdD dDe]ZcG dEdF dFe]ZdG dGdH dHe]ZedIdJ ZfdKdL Zge
jhidMejjejkejlejmejneoejpejpejqejrejsegG dNdO dOZtG dPdQ dQZue
jhidRdSdTdUge
jhidVdWdXge
jhidYdZd[d\d]d^d_gd`da Zve
jhidMejwejxejygG dbdc dcZzG ddde deZ{G dfdg dgZ|G dhdi diZ}G djdk dke}Z~dldm ZddndoZdpdq Zdrds ZG dtdu duZG dvdw dwZG dxdy dyZG dzd{ d{ZG d|d} d}Zd~d ZdddZe
jhide9e.fdd Ze
jhidMdG dd dZG dd 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_array_lesssuppress_warnings)arrayarange)fft)correlate1d)fminlinear_sum_assignment)signal)	correlatecorrelate2d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                   @   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S )_TestConvolvec                 C   sF   ddddddg}dddg}t ||}t|tdddd	d
d
ddg d S )N                  
                   r   r   r   selfabc rO   G/tmp/pip-unpacked-wheel-96ln3f52/scipy/signal/tests/test_signaltools.py
test_basic'   s    

z_TestConvolve.test_basicc                 C   s<   dddg}ddddg}t ||dd}t|tdd	d
g d S )Nr=   r>   r?   rA   rB   samemoderC   rD   "   rI   rJ   rO   rO   rP   	test_same-   s    
z_TestConvolve.test_samec                 C   s:   dddg}dddg}t ||dd}t|tdd	d	g d S )
Nr=   r>   r?   rA   rB   rR   rS   rC   rD   rI   rJ   rO   rO   rP   test_same_eq3   s    

z_TestConvolve.test_same_eqc                 C   s>   t dddg}t ddg}t||}t|t ddddg d S )N      ?      ?       @      ?      @      ?               @y       @      @y      @       @y      @      @)r   r   r   )rK   xyzrO   rO   rP   test_complex9   s    
z_TestConvolve.test_complexc                 C   s$   d}d}t ||}t|||  d S )Ni	  i  )r   r	   rJ   rO   rO   rP   test_zero_rank?   s    
z_TestConvolve.test_zero_rankc                 C   st   t dddd}t d}tdD ]H}dgd }d||< t|||dd}t|||dd}t|| q&d S )N   r=   rA   directmethodr   )npr   reshaperanger   r   )rK   rL   rM   ib_shaper\   r]   rO   rO   rP   test_broadcastableE   s    

z _TestConvolve.test_broadcastablec                 C   s0   t dg}t dg}t||}t|||  d S Nig  iP  )r   r   r	   rJ   rO   rO   rP   test_single_elementO   s    


z!_TestConvolve.test_single_elementc                 C   sl   dddgdddgg}dddgdddgg}t ||}tdddd	d
gdddddgd
ddddgg}t|| d S NrA   rB   r=   r>   r?   r@            rH   rC      >   :   &      1   r   r   r   rK   rL   rM   rN   drO   rO   rP   test_2d_arraysU   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ddd	d
gddddgddddgddddggddddgddddgdd d!d"gd#d$d%d&ggd'd(d)d*gd+d,d-d.gd/d0d1d2gd3d4d5d6ggd7d8d9d:gd;d<d=d>gd?d@dAdBgdCdDdEdFggg}tt||dG| tt||dG| tt||dH|dIddIddIdf  tt||dH|dJddJddJdf  tt||dK|dIddIddIdf  tt||dK|dIddIddIdf  d S )LN   rB                 ?ra   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@fullrR   rA   r   valid)r   rf   r   r   r   )rK   smallbigZ	out_arrayrO   rO   rP   test_input_swapping^   sP     















z!_TestConvolve.test_input_swappingc                 C   sz   dddg}dddg}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 Nr=   r>   r?   rA   rB   ZspamrS   eggsr   rT   rd   Zhamrb   r   ZbaconrR   assert_raises
ValueErrorr   rK   rL   rM   rO   rO   rP   test_invalid_params   s    

z!_TestConvolve.test_invalid_paramsN)__name__
__module____qualname__rQ   rV   rW   r_   r`   rj   rl   rz   r   r   rO   rO   rO   rP   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   ddddddg}dddddddddg	}ddd	d
g}t ||d}t|| t ||d}t|| dddg}ddg}ddg}t ||d}t|| t ||d}t|| d S )NrA   rB   r=   r@   r?   r>   F   N   I   A   r   y      ?      @       @      y      @               @            ?        y       @      $)r   r   rK   rL   rM   expectedoutrO   rO   rP   test_valid_mode2   s    



zTestConvolve.test_valid_mode2c                 C   s\   ddddddg}dddddddddddddg}t ||d}td	d
dd	ddg}t|| d S )NrA   rB   r=   r>   r?   r@   rn   rR   9   =   ?   -   $   rw   rx   rO   rO   rP   test_same_mode   s
    zTestConvolve.test_same_modec                 C   s\   t ddd}t ddd}tttf||fddi tttf||fddi d S 	NrA   rn   rB   r=   r   r=   rB   rT   r   )re   r   rf   r   r   r   r   rO   rO   rP   test_invalid_shapes   s    z TestConvolve.test_invalid_shapesd   c           	         s  t dd tj D g dd D dD ]}|k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 ]\}} |t	|j
 ||t	|j
 | fdddD }t|d j	|d j	 d|kr<d|kr<ttd qtdd ||fD r`ddd}n$d||fkrzddd}n
ddd}t|d |d f| qd S ) Nc                 S   s   g | ]\}}|qS rO   rO   ).0_trO   rO   rP   
<listcomp>   s     z5TestConvolve.test_convolve_method.<locals>.<listcomp>c                 S   s   h | ]}t |jqS rO   )re   dtypenamer   r   rO   rO   rP   	<setcomp>   s     z4TestConvolve.test_convolve_method.<locals>.<setcomp>)

complex256
complex192Zfloat128Zfloat96strvoidbytesobjectunicodestringc                    s*   g | ]"} D ]}d D ]}|||fqqqS ))r   r   rR   rO   )r   t1t2rT   )typesrO   rP   r      s       *   r   rA   size)rh   frh   rM   ur                 ?rN   c              	      s   i | ]}|t | d qS ))rd   rT   )r   )r   key)rT   x1x2rO   rP   
<dictcomp>   s    z5TestConvolve.test_convolve_method.<locals>.<dictcomp>)r   rb   r   rb   boolc                 S   s   g | ]}|d kqS )>   float32	complex64rO   r   rO   rO   rP   r      s     -C6?gư>rtolatolfloat16MbP?h㈵>:0yE>)sumre   Zsctypesitemsremoverandomseedchoicerandnr   kindastyper	   r   anyr   )	rK   nr   argsZarray_typesr   r   resultskwargsrO   )rT   r   r   r   rP   test_convolve_method   s8    

z!TestConvolve.test_convolve_methodc                 C   sv   dD ]l}t jd| gt jd}t||dd}t||dd}|dk rt|| t|dd|   t|dd|   qd S )N)	rC      2   3   4   5   6   <   rr   rB   r   r   rc   rb   r   )re   r   int64r   r	   )rK   r   r^   r   rb   rO   rO   rP    test_convolve_method_large_input   s    
z-TestConvolve.test_convolve_method_large_inputc                 C   sx   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 NrA   rB   rb   rc   r   r=   r   rK   rO   rO   rP   test_mismatched_dims   s    z!TestConvolve.test_mismatched_dimsN)r   )	r   r   r   r   r   r   r   r   r   rO   rO   rO   rP   r      s   
0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
ejdeegejddddddggfdddddggfgdd Zdd Zdd  Zd!d" Zd#S )$_TestConvolve2dc                 C   sl   dddgdddgg}dddgdddgg}t dddd	d
gdddddgd
ddddgg}t||}t|| d S rm   r   r   r   )rK   rL   rM   ry   erO   rO   rP   rz     s    
z_TestConvolve2d.test_2d_arraysc                 C   s|   dddddddgddddddd	gg}d
ddgdddgg}t dddddgg}t||d}t|| t||d}t|| d S )NrB   r=   r>   r?   r@   rn   r{   	   rC   rA   rr   P   b   t      r   r   rK   r   r   hgrO   rO   rP   test_valid_mode  s    $
z_TestConvolve2d.test_valid_modec                 C   s   dddddddgddddddd	gg}t jd
ddgdddggtdd }tdddddgg}t||d}t|| t||d}t|| d S )NrB   r=   r>   r?   r@   rn   r{   r   rC   rA   r   r|   y      O@      8@y      T@      >@y     X@      B@y      ]@      E@y     `@      H@r   )re   r   complexr   r   r   r   rO   rO   rP   test_valid_mode_complx  s    $"
z&_TestConvolve2d.test_valid_mode_complxc                 C   sv   dddgdddgg}dddgdddgg}d}t ||dd|}td	d
dddgdddddgdddddgg}t|| d S )NrA   rB   r=   r>   r?   r@   r   fill      ru   rU   rF   rE   (   rr   @   r   .   C   0   r   r   r   )rK   rL   rM   ZfillvalrN   ry   rO   rO   rP   test_fillvalue$  s    z_TestConvolve2d.test_fillvaluec              
   C   s   d}t j D}|t jd tt|d tdggddggdd W 5 Q R X W 5 Q R X d}tt|d" tdggddggddgd W 5 Q R X d S )	Nz2could not cast `fillvalue` directly to the output zCasting complex valuesmatchrA   rB   r|   	fillvaluez,`fillvalue` must be scalar or an array with )re   Ztestingr   filterZComplexWarningr   r   r   )rK   msgsuprO   rO   rP   test_fillvalue_errors.  s    ,z%_TestConvolve2d.test_fillvalue_errorsc                 C   s    t ttdggddggg d d S )NrA   rB   r  r   r   r   r   rO   rO   rP   test_fillvalue_empty9  s    z$_TestConvolve2d.test_fillvalue_emptyc                 C   sp   dddgdddgg}dddgdddgg}t ||dd}td	d	d
d	d	gdddddgd	d	d
d	d	gg}t|| d S )NrA   rB   r=   r>   r?   r@   r   wrapr   J   D   rr   r  rx   rO   rO   rP   test_wrap_boundary>  s    z"_TestConvolve2d.test_wrap_boundaryc                 C   sp   dddgdddgg}dddgdddgg}t ||dd}td	d
dddgdddddgdddddgg}t|| d S )NrA   rB   r=   r>   r?   r@   r   symmrU   rq   ,   rr   B   r   r   r   T   R   r   \   n   r   r  rx   rO   rO   rP   test_sym_boundaryG  s    z!_TestConvolve2d.test_sym_boundaryfunczboundary, expectedr  g     B@g      E@g      F@g     F@r       E@     C@c                 C   s<   t ddddgg}t d}|||d|d}t|| d S )N       @            @      @)rA      rR   rT   boundary)re   r   onesr   )rK   r  r#  r   imagekernelresultrO   rO   rP   test_same_with_boundaryP  s    	
z'_TestConvolve2d.test_same_with_boundaryc                 C   sh   dd l m} tjddtddd}tjddtddd}t||dd	d
}t||j||d	dd d S )Nr   rA   ru   r   rC   r=   e   rR   r  r"  )r}   r}   )rT   origin)	scipy.ndimagendimagere   r   floatrf   r   r   r   )rK   ndirL   rM   rN   rO   rO   rP   test_boundary_extension_samea  s
    z,_TestConvolve2d.test_boundary_extension_samec                 C   s   dd l m} tjddtddd}tjddtddd}t||dd	d
}t|dd	}t||j	||d	dd dd df  d S )Nr   rA   rC   r   r=   %   r@   r   r  r"  )r=   r=   r1  rS   r}   )
r+  r,  re   r   r-  rf   r   padr   r   )rK   r.  rL   rM   rN   ZapadrO   rO   rP   test_boundary_extension_fullk  s    z,_TestConvolve2d.test_boundary_extension_fullc                 C   s\   t ddd}t ddd}tttf||fddi tttf||fddi d S r   )re   r   rf   r   r   r   r   rO   rO   rP   r   v  s    z#_TestConvolve2d.test_invalid_shapesN)r   r   r   rz   r   r   r  r
  r  r  r  pytestmarkparametrizer   r   r(  r/  r3  r   rO   rO   rO   rP   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   sj   dddgdddgg}dddddddgdddddd	d
gg}t ||d}tdddgdddgg}t|| d S )NrA   rB   r=   r>   r?   r@   rn   r{   r   rC   rR   rD   rE   rU   r   r   r   r  )rK   r   r   r   r   rO   rO   rP   r     s    $
zTestConvolve2d.test_same_modec                 C   s   dddgdddgg}dddddddgdddddd	d
gg}dddddgg}t ||d}t|| t ||d}t|| ddgddgg}dddgdddgg}ddgg}t ||d}t|| t ||d}t|| d S )NrA   rB   r=   r>   r?   r@   rn   r{   r   rC   rr   r   r   r   r   r   rX   r   rZ   y      @        r         @       @y      @      ?y      @      y      ;@      y      G@       @)r   r   )rK   r   r   r   r   rO   rO   rP   r     s    $



zTestConvolve2d.test_valid_mode2c              	   C   sv   t d}t dddg}dD ]R}tt j|||dtj|||d tt tj|g|g|dtj|||d qd S )Nr?   皙	@ffffff?r=   r   r   rR   rS   )re   r   r   r
   r   r   squeezer   rK   rL   rM   rT   rO   rO   rP   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   rO   rO   rP   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std S )Nl          rB     g    .Ar   rA   )iH  r{   )shapestridesr   )re   r   itemsizer;   Zcheck_free_memoryzeroslibZstride_tricksZ
as_stridedr   r   wherer   AssertionError)rK   r   rL   countZfailsrO   rO   rP   test_large_array  s     zTestConvolve2d.test_large_arrayN)r   r   r   r   r   r>  r?  r4  r5  slowZxfail_on_32bitrJ  rO   rO   rO   rP   r7    s   
r7  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?d@ Z$dS )ATestFFTConvolveaxes Nr   r}   c                 C   sP   t dddg}t dddddg}|dkr4t||}nt|||d	}t|| d S )
NrA   rB   r=   r>   rC   rH         "@rN  rM  r   r   r   rK   rM  rL   r   r   rO   rO   rP   	test_real  s    zTestFFTConvolve.test_realrA   c                 C   s\   t dddg}t dddddg}t|ddg}t|ddg}t|||d}t|| d S )	NrA   rB   r=   r>   rC   rH   rO  rP  r   re   tiler   r   rR  rO   rO   rP   test_real_axes  s    zTestFFTConvolve.test_real_axesc                 C   sP   t dddg}t dddddg}|d	kr4t||}nt|||d
}t|| d S )NrX          @       @      @      @r[                  @              4@              8@              2@rN  rP  rQ  rR  rO   rO   rP   r_     s    zTestFFTConvolve.test_complexc                 C   s\   t dddg}t dddddg}t|d	d
g}t|d	d
g}t|||d}t|| d S )NrX   rW  rX  r[   rY  rZ  r[  r\  rB   rA   rP  rT  rR  rO   rO   rP   test_complex_axes  s    z!TestFFTConvolve.test_complex_axesc                 C   st   t dddgdddgg}t ddddd	gd
ddddgdddddgg}|dkrXt||}nt|||d}t|| d S )NrA   rB   r=   r>   r?   r@   rC   rH   r   r{   r   8   r   r   ro   r   r   r   rN  rP  rQ  rR  rO   rO   rP   test_2d_real_same  s    
z!TestFFTConvolve.test_2d_real_samerB   c                 C   s   t dddgdddgg}t ddddd	gd
ddddgdddddgg}t|dddg}t|dddg}t|||d}t|| d S )NrA   rB   r=   r>   r?   r@   rC   rH   r   r{   r   r_  r   r   ro   r   r   r   rP  rT  rR  rO   rO   rP   test_2d_real_same_axes  s    	
z&TestFFTConvolve.test_2d_real_same_axesc                 C   st   t dddgdddgg}t ddd	d
dgdddddgdddddgg}|dkrXt||}nt|||d}t|| d S )N      ?       @      @      @      @      @rY         @      @      @      @            @      $      4@      5      L@      2      S@      &      N@              $@              F@             ]@             c@             ^@      $@      4@      5@      L@      2@      S@      &@      N@rN  rP  rQ  rR  rO   rO   rP   test_2d_complex_same   s    
z$TestFFTConvolve.test_2d_complex_samec                 C   s   t dddgdddgg}t ddd	d
dgdddddgdddddgg}t|dddg}t|dddg}t|||d}t|| d S )Nrb  rc  rd  rY   re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  rB   rA   rP  rT  rR  rO   rO   rP   test_2d_complex_same_axes:  s    	
z)TestFFTConvolve.test_2d_complex_same_axesc              
   C   s   t dddg}t dddddddd	dg	}t d
ddg}t dddd
dddddg	}|dkrft||d}nt||d|d}t|| |dkrt||d}nt||d|d}t|| d S )NrA   rB   r=   r?   r@   r{   rn   r   r        A@     D@     G@rO        4@      9@r        <@r  rN  rR   rP  rQ  rK   rM  rL   rM   Z
expected_1Z
expected_2r   rO   rO   rP   test_real_same_modeQ  s    
z#TestFFTConvolve.test_real_same_modec              
   C   s   t dddg}t dddddddd	dg	}t d
ddg}t dddd
dddddg	}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 )NrA   rB   r=   r?   r@   r{   rn   r   r   rw  rx  ry  rO  rz  r{  r  r|  r  rR   rP  rT  r}  rO   rO   rP   test_real_same_mode_axesd  s    
z(TestFFTConvolve.test_real_same_mode_axesc              
   C   s   t dddg}t dddddddd	dg	}t d
ddddddg}|dkrTt||d}nt||d|d}t|| |dkrt||d}nt||d|d}t|| d S )Nr=   rB   rA   r?   r@   r{   rn   r   r         8@      ?@rx  r       H@r{        (@rN  r   rP  rQ  rK   rM  rL   rM   r   r   rO   rO   rP   test_valid_mode_realv  s    
z$TestFFTConvolve.test_valid_mode_realc              
   C   s   t dddg}t dddddddd	dg	}t d
ddddddg}t|ddg}t|ddg}t|ddg}t||d|d}t|| d S Nr=   rB   rA   r?   r@   r{   rn   r   r   r  r  rx  r  r  r{  r  r   rP  rT  r  rO   rO   rP   test_valid_mode_real_axes  s    z)TestFFTConvolve.test_valid_mode_real_axesc                 C   s   t dddg}t dddddg}t d	d
dg}|dkrDt||d}nt||d|d}t|| |dkrtt||d}nt||d|d}t|| d S )N      @             @      @r   r8        @            @              @             @             F@      (@      >@      7@      H@      @@rN  r   rP  rQ  r  rO   rO   rP   test_valid_mode_complex  s    
z'TestFFTConvolve.test_valid_mode_complexc                 C   s   t dddg}t dddddg}t d	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 )Nr  r  r   r8  r  r  r  r  r  r  r  rB   rA   r   rP  rT  r  rO   rO   rP   test_valid_mode_complex_axes  s    
z,TestFFTConvolve.test_valid_mode_complex_axesc              
   C   s   t dddg}t dddddddd	dg	}t d
ddddddg}t|ddg}t|ddg}t|ddg}t||ddd}t|| d S r  rT  r   rO   rO   rP   test_valid_mode_ignore_nonaxes  s    z.TestFFTConvolve.test_valid_mode_ignore_nonaxesc                 C   sF   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?   r@   rn   )r   r   r   r   rO   rO   rP   
test_empty  s    zTestFFTConvolve.test_emptyc                 C   s,   t d}t d}t||}t|||  d S rk   r   r   r	   rK   rL   rM   r   rO   rO   rP   r`     s    
zTestFFTConvolve.test_zero_rankc                 C   s0   t dg}t dg}t||}t|||  d S rk   r  r  rO   rO   rP   rl     s    


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rht||d}nt||d|d}tt j||dd	 d S )
N    r|   )  r   rN  rP  绽|=r   )re   r   r   randr   r   r   allcloser  rO   rO   rP   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   rB   rA   rP  r  r  )	re   r   r   r  r   rU  r   r   r  r  rO   rO   rP   test_random_data_axes  s    z%TestFFTConvolve.test_random_data_axesr>   c                 C   sN  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 |ddd	ddg}t |dddddg}t |ddd	ddg}t||d|d
}t	||ddd d S )N)){   rD   )      r  r|   r   r   rB   rA   r>   r=   rP  r  r   )
re   r   r   r  r   ZmoveaxisswapaxesrU  r   r   )rK   rM  Za_shaperi   rL   rM   r   r   rO   rO   rP   test_random_data_multidim_axes  s     	z.TestFFTConvolve.test_random_data_multidim_axesr   r   r@  i  r  rA  '  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   rP  )re   r   r  r   r   r   )rK   r   rL   rM   r   r   rO   rO   rP   test_many_sizes  s    zTestFFTConvolve.test_many_sizesc              
   C   sp   d}t jd}||}t jt jfD ]D}||d< tdd}tj	t
dd tj||dd	d
 W 5 Q R X q&d S )Nr@  l   [<zn( r      皙?zUse of fft convolutionr  rR   r   r   )re   r   Zdefault_rngstandard_normalnaninfr   firwinr4  warnsRuntimeWarningr   )rK   r   rngZsig_nanvalZcoeffsrO   rO   rP   test_fft_nan#  s    
zTestFFTConvolve.test_fft_nan)%r   r   r   r4  r5  r6  rS  rV  r_   r]  r`  ra  ru  rv  r~  r  r  r  r  r  r  r  r`   rl   r  r  r  rK  listrg   re   r   RandomStaterandinttolistr  r  rO   rO   rO   rP   rL    s   







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

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











rL  c                  O   s   t dd S )NzFell back to fftconvolve)RuntimeError)r   r   rO   rO   rP   fftconvolve_err/  s    r  c                 C   s   dd t | ddD S )Nc                 S   s(   g | ] \}}t || d kr||fqS )r=   )absr   rL   rM   rO   rO   rP   r   4  s    z!gen_oa_shapes.<locals>.<listcomp>rB   repeatr   sizesrO   rO   rP   gen_oa_shapes3  s    r  c                 C   sB   t | }t | }dd t||D }dddg}dd t||D S )Nc                 S   s   g | ]\}}|| qS rO   rO   )r   Zishapes0Zishapes1rO   rO   rP   r   ;  s     z$gen_oa_shapes_2d.<locals>.<listcomp>r   r   rR   c                 S   sb   g | ]Z\}}|d ksT|d |d kr4|d |d ksT|d |d k r|d |d k r||f qS )r   r   rA   rB   r=   rO   )r   ZishapesZimoderO   rO   rP   r   ?  s      )r  zipr   )r  Zshapes0Zshapes1ZshapesmodesrO   rO   rP   gen_oa_shapes_2d8  s    
r  c                 C   s   dd t | ddD S )Nc                 S   s    g | ]\}}||kr||fqS rO   rO   r  rO   rO   rP   r   F  s    z$gen_oa_shapes_eq.<locals>.<listcomp>rB   r  r   r  rO   rO   rP   gen_oa_shapes_eqE  s    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ddd	d
dgejdddgejddddgdd Zejdddgejdeddd	d
gejdddgejdddgejdddgejddddgdd Zejdeddd	d
g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ddd	d
g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   r@  rG   c                 C   s:   t j|}t j|}t||}t||}t|| d S N)re   r   r  r   r   r   )rK   	shape_a_0	shape_b_0rL   rM   r   r   rO   rO   rP   test_real_manylensK  s
    

z!TestOAConvolve.test_real_manylensr   /   r@   r>   rA   
is_complexTFrT   r   r   rR   c           
      C   s~   t j|}t j|}|rD|dt j|  }|dt j|  }t|||d}|tjdt t|||d}	t	|	| d S Nr|   rS   r   
re   r   r  r   setattrr   Z_signaltoolsr  r   r   )
rK   r  r  r  rT   monkeypatchrL   rM   r   r   rO   rO   rP   test_1d_noaxesY  s    
zTestOAConvolve.test_1d_noaxesrM  r   shape_a_extrar=   shape_b_extrac	                 C   s   |gd }	|gd }
||	|< ||
|< t jj|	 }t jj|
 }|rh|dt jj|	   }|dt jj|
   }t||||d}|tjdt t||||d}t	|| d S )NrB   r|   rT   rM  r   r  )rK   rM  r  r  r  r  r  rT   r  ax_aax_brL   rM   r   r   rO   rO   rP   test_1d_axesm  s    



zTestOAConvolve.test_1d_axesz0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec                 C   s   t j||}t j||}	|rL|dt j||  }|	dt j||  }	t||	|d}
|tjdt t||	|d}t	||
 d S r  r  )rK   r  r  	shape_a_1	shape_b_1rT   r  r  rL   rM   r   r   rO   rO   rP   test_2d_noaxes  s    
zTestOAConvolve.test_2d_noaxesrB   c                 C   s   |gd }|gd }|||d < |||d < |||d < |||d < t jj| }t jj| }|	r|dt jj|   }|dt jj|   }t||||d}|
tjdt t||||d}t	|| d S )Nr=   r   rA   r|   r  r   r  )rK   rM  r  r  r  r  rT   r  r  r  r  r  r  rL   rM   r   r   rO   rO   rP   test_2d_axes  s"    


zTestOAConvolve.test_2d_axesc                 C   sF   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 r  )r   r   r   r   rO   rO   rP   r    s    zTestOAConvolve.test_emptyc                 C   s,   t d}t d}t||}t|||  d S rk   r   r   r	   r  rO   rO   rP   r`     s    
zTestOAConvolve.test_zero_rankc                 C   s0   t dg}t dg}t||}t|||  d S rk   r  r  rO   rO   rP   rl     s    


z"TestOAConvolve.test_single_elementN)r   r   r   r4  r5  rK  r6  r  r  rg   r  r  r  r  r  r  r  r  r`   rl   rO   rO   rO   rP   r  J  sL   	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   sN   t ddd}t ddd}ttdd |||d	d
 W 5 Q R X d S )NrA   rn   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr  r   rS   )re   r   rf   r   r   rK   r  rL   rM   rO   rO   rP   r     s    z(TestAllFreqConvolves.test_invalid_shapesc              	   C   sR   t ddddg}t ddddg}ttdd |||ddgd	 W 5 Q R X d S )
Nr?   r@   rB   rA   r=   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r  r   rP  )re   rE  r   r   r  rO   rO   rP   test_invalid_shapes_axes  s    z-TestAllFreqConvolves.test_invalid_shapes_axesza,brA   rB   r=   c              	   C   s&   t tdd ||| W 5 Q R X d S )Nz/in1 and in2 should have the same dimensionalityr  r   r   )rK   rL   rM   r  rO   rO   rP   r     s    z)TestAllFreqConvolves.test_mismatched_dimsc              	   C   sF  t tdd |dgdgdd W 5 Q R X t tdd |dgdgg d W 5 Q R X t td	d$ |dgdgddgd
dggd W 5 Q R X t td	d  |dgdgddddgd W 5 Q R X t tdd |dgdgdgd W 5 Q R X t tdd |dgdgdgd W 5 Q R X t tdd |dgdgddgd W 5 Q R X d S )Nz4acceptable mode flags are 'valid', 'same', or 'full'r  rA   rB   ZchipsrS   z#when provided, axes cannot be emptyrP  z-axes must be a scalar or iterable of integersr=   r>         ?r  r  r   z$axes exceeds dimensionality of inputr^  zall axes must be uniquer   r  )rK   r  rO   rO   rP   test_invalid_flags  s0    ($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sltd S )N)ra   ra   )r>   r>   y        ?rb   rc   )	re   r   r   Ziscomplexobjr   r   r   r   rH  )rK   r   r\   r]   resrO   rO   rP   test_longdtype_input  s    
z)TestAllFreqConvolves.test_longdtype_inputN)r   r   r   r4  r5  r6  r   r   r   r  r   r  re   Z	longfloatZlongcomplexr  rO   rO   rO   rP   r    s0   

	
r  c                   @   s  e Zd Zddddddddddg
dddddddd	d
dg
dddddddddd	g
ddddddddddg
ddddddddddg
dddd
dd	ddddg
ddddd
d dd
d!d"g
d#d$dd%d&dd'd(d)d*g
d+d,ddd-dd!d.dd/g
d dd0d+d1d2ddd3dg
g
Zddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
dddddddd(ddg
d$ddddddd.d(d/g
d ddddddd3d(d/g
d+ddddddd.d3dg
dd d$d1d d d.d.d.dg
dd+d,d+d2d2ddd!dg
g
Zd+d#gZd4d5 Zej	d6e
je
je
je
je
jee
je
je
je
je
jgd7d8 Zej	d6e
je
je
je
je
jgd9d: Zd;d< Zd=d> Zd?d@ Zej	d6e
je
je
jgdAdB ZdCS )DTestMedFiltr   r     ra   r   r   r   H   M   r  r  r     r   r         _   #   rU   r   r!  r   a   rE   r   r   rs   G   r   r  rF   r   r  r=   !   r   rA   r  7   rH   S   rn   r  r   +   r   X   '   r>   r   c                 C   sB   t | j| j}t t| jt| j}t|| j	 t|| d S r  )
r   medfiltINKERNEL_SIZE	medfilt2dre   r   r-  r   OUT)rK   ry   r   rO   rO   rP   rQ   <  s    zTestMedFilt.test_basicr   c                 C   s8   t j| j|d}tt|j| tt|j| d S Nr   )re   r   r  r	   r   r  r   r  rK   r   in_typedrO   rO   rP   
test_typesB  s    zTestMedFilt.test_typesc              	   C   s\   t j| j|d}tjtdd t| W 5 Q R X tjtdd t| W 5 Q R X d S )Nr   Zorder_filterNDr  )	re   r   r  r4  r   r   r   r  r  r  rO   rO   rP   test_invalid_dtypesK  s
    zTestMedFilt.test_invalid_dtypesc              	   C   s^   t t tttjd  W 5 Q R X tjdtj	d}|dd }d|_
tt|ddk d S )NrC   r   r?   r@   ro   rA         @)r4  r  UserWarningr   	TypeErrorr   r  re   r   float64rC  r   )rK   dummyrL   rO   rO   rP   	test_noneU  s    zTestMedFilt.test_nonec              	   C   s   t d}tj||gtd}ttdr4dt| }nd}tt	 t
|D ]}t| qLW 5 Q R X ttdrtt||k  t|||g d S )Nr  r   getrefcountrB   rC   )r   re   r   r   hasattrsysr  r4  r  r  rg   r   r  r   r	   )rK   rL   r\   r   jrO   rO   rP   test_refcountinga  s    

zTestMedFilt.test_refcountingc                 C   s8   t j| jtd}t j| jtd}tt|| j| d S r  )	re   r   r  r   r  r   r   r  r  )rK   Z	in_objectZ
out_objectrO   rO   rP   test_objectq  s
    zTestMedFilt.test_objectc           
   	      s   t jj|dt jj|d}j|jks0t|jd d  |jd d jd d d jd d d  fddt |}tddNd	d
ddh}fdd|D }t	|D ]}|
 \}}}	||||	f< qW 5 Q R X t|| d S )Nr   r   rB   rA   c                    s   | \}}|dkr6t d  }t d }t d }n"t   d }t d }t  d }|dkrt 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offNrK   rO   rP   apply  s$    



z2TestMedFilt.test_medfilt2d_parallel.<locals>.applyr>   )max_workersr   r   r   rA   )rA   r   rA   rA   c                    s   h | ]}  |qS rO   )Zsubmit)r   r  )r  poolrO   rP   r     s     z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>)re   r   r  r  rB  rH  r  Z
zeros_liker   r   r'  r   )
rK   r   r   outputchunksZfuturesfuturedataZMsliceZNslicerO   )r  r  r  r  r  r  r  rK   rP   test_medfilt2d_parallelw  s     
z#TestMedFilt.test_medfilt2d_parallelN) r   r   r   r  r  r  rQ   r4  r5  r6  re   ubytebyteushortshortuintint	ulonglongr   r  
longdoubler  Zbool_Zcfloatcdoubleclongdoubler   r   r  r  r  r  rO   rO   rO   rP   r  "  sX        
 
r  c                   @   s   e Zd Zdd ZdS )
TestWienerc                 C   s   t ddddgddddgddddgddddggd	}t d
dddgddddgddddgddddgg}tt||dd ttj|dd|dd d S )Nr?   r@   r>   r=   rB   rA   r   rn   ry   gSXO@gXq	@gq@g?g]`UUU@gFUUUU@gq@gcq@gyq@gXq@gXq@gUJ4@gUUUU?g2k6k@gҷWH@g@_)@decimal)Zmysize)r   r   r   Zwiener)rK   r   r   rO   rO   rP   rQ     s    





zTestWiener.test_basicNr   r   r   rQ   rO   rO   rO   rP   r*    s   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yorA   r   rB   rN  padtyper.  rC   )r=  cval)rB   rA   r}   axisr:  )r8  )re   r   r   Z
get_windowr   r   resampleresample_polyrU  r   rB  )rK   signumwinZsig2rO   rO   rP   rQ     s    
 zTestResample.test_basicr:  )Nhammingr  )r   r  rD  )r   r)  rC   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   rC   F)ZendpointrB   g      @r9  r~   rA   r?  &.>r  )	re   linspacecosr   r   rA  realr   sin)rK   r  rD  r:  r\   r]   Z	y_complexrO   rO   rP   	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 )Nr5  r~   freq)domaintimerG  r  )re   r   r   r   r   rA  )rK   ZtsigZfsigrD  rO   rO   rP   test_input_domain  s    zTestResample.test_input_domainnx)rA   rB   r=   r?   r{   nyr   )r-  r   c                 C   s2   t dg| |}t||}t|dg|  d S )NrA   )re   r   r   rA  r   )rK   rQ  rR  r   r\   r]   rO   rO   rP   test_dc  s    zTestResample.test_dcr=  c                 C   sF   t d}t jdd}| }tj|dd||d t|| d S )Nr=   r   rB   r?   rA   r:  r=  )	re   rE  r   r  r   copyr   rB  r   )rK   r=  Zimpulser:  Zwindow_origrO   rO   rP   test_mutable_window  s
    
z TestResample.test_mutable_windowc                 C   sN   t jdt jd}t jdddgt jd}tj|dd||d}|jt jksJtd S )NrC   r   rA   rB   rT  )re   r   r   r   r   rB  r   rH  )rK   r=  r\   r   r]   rO   rO   rP   test_output_float32  s    z TestResample.test_output_float32c                 C   s4   t jd|d}tj|dd|d}|j|jks0td S )NrC   r   rA   rB   r<  )re   r   r   rB  r   rH  )rK   r=  r   r\   r]   rO   rO   rP   test_output_match_dtype  s    z$TestResample.test_output_match_dtypezmethod, ext, padtype)r   FNZ	polyphaseFTc               	   C   s   d}ddddddddd	g	}t |t| }t d
d d t jf }t dt j | | t| }|D ]j}	t |	t|	 }
t dt j | |
 t|	 }|dkrtj	||	dd}n|r"|	|kr"t
|	|}|	| }|| }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krt||dd nt||dd n4t|j|j t ||d }t|dk|||	fd qPqht 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rt d"d#g}t	|d$}t d"d%d#d%g}t||d&d t ddddg}t	|d}t ddg}t||d&d d S )'Nr   rv   r   r   c   r)     r     )r        $@g      D@rB   r   r}   r@  r  rC   rA   )r6  r  r9  rT  r=  r@        ?        )r0  r1  333333?r  r   r  gGz?)r  r   r<  r   r~   r>   y      ?        -q=)re   r   r-  r   newaxisrK  pir6   r   rA  r   maxr  rB  r  r   r   r   rB  Zcorrcoefr   r   r  Zcumsumr   Zinterp) rK   rd   extr=  raterates_tor   freqsr\   rate_tot_toZy_tos	y_resampsr   updownZmax_rateZf_cZhalf_lenr:  ZpolyargsZy_toZy_resamprM  Zcorrr  r   Zy1_testZy1_truer   Zy2_testZy2_truerO   rO   rP   test_resample_methods  sp     
 






z"TestResample.test_resample_methodsc                 C   s   t jd}tt jt jttf}d}dddg}|D ]}||	|}|t jt j
fkrf|d|| 7 }d|d< d|d< |D ]h}tjd	d
| dd}t|d
|ddd d | }	t||d d d }
tj|d||
d}t|	|ddd qzq0d S )Nrp   r  rB   r  O   r|   r   r}   ru   r  rF  r9  constantr<  rA   Hz>r   r   )re   r   r  r%  r   r   r-  r   r   r   
complex128r   r  r$   r   rB  r   )rK   Zrandom_stateZ	try_typesr   Zdown_factorsr   r\   rm  r   yfZhcr]   rO   rO   rP   test_poly_vs_filtfilti  s     
z"TestResample.test_poly_vs_filtfiltc              	   C   s   dD ]z}t dd|D ]h}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)rB   r>   rA   r   )rF   r  r}   rp  rS   )rl  rm  r:  )rg   re   r   r   r   rB  r   )rK   rm  rQ  Znweightsr\   weightsZy_gZy_srO   rO   rP   test_correlate1d  s       zTestResample.test_correlate1dN)r   r   r   rQ   r4  r5  r6  rL  rP  rS  padtype_optionsrV  rW  re   r   r  rX  r  r   rn  ru  rw  rO   rO   rO   rP   r3    s@   


  	
Ir3  c                   @   s   e Zd Zdd Zdd ZdS )TestCSpline1DEvalc              
   C   s   t dddddddddg	}tt|}|d |d  }t|}tt|d d }tj||||d d}t|d d d	 |d
d d S )NrA   rB   r=   r>   r  r   r\  )dxZx0rC   r?   r+  )r   r   lenr   	cspline1dcspline1d_evalr   )rK   r]   r\   rz  cjr   y2rO   rO   rP   rQ     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 )NrB   r   r\  r  r[   r^  )re   r   rE  rB  r   exprc  r   r|  r   r}  r	   r   )rK   r\   r]   Tr   cyZxnewZynewrO   rO   rP   r_     s    

zTestCSpline1DEval.test_complexN)r   r   r   rQ   r_   rO   rO   rO   rP   ry    s   ry  c                   @   s   e Zd Zdd ZdS )TestOrderFiltc                 C   s*   t tdddgdddgddddg d S NrA   rB   r=   r   )r   r   Zorder_filterr   rO   rO   rP   rQ     s    zTestOrderFilt.test_basicNr-  rO   rO   rO   rP   r    s   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   rA   )re   rH  prodrf   convert_dtype)rK   rB  r\   rO   rO   rP   generate  s    $z_TestLinearFilter.generatec                 C   s   | j t dkrlt|}t|j| j }t||gddgdgdgg}|D ]\}}| |d |d< qL|S tj|| j dd	S d S )
NOZrefs_okZzerosize_okreadonlyZ	writeonlyrO   .F)rU  )r   re   asarrayemptyrB  Znditertyper   )rK   Zarrr   iterr\   r]   rO   rO   rP   r    s    

z_TestLinearFilter.convert_dtypec                 C   sR   |  d}| ddg}| ddg}| dddd	d
dg}tt|||| d S Nr@   rA   r}   r^        r   rB   r>   r@   r{   r\  r  r  r   r"   rK   r\   rM   rL   y_rrO   rO   rP   test_rank_1_IIR  s
    
z!_TestLinearFilter.test_rank_1_IIRc                 C   sP   |  d}| ddg}| dg}| ddddddg}tt|||| d S )Nr  rA   r   r=   r?   rn   rO  r  r  rO   rO   rP   test_rank_1_FIR  s
    
z!_TestLinearFilter.test_rank_1_FIRc           	      C   s   |  d}| dddg}| ddg}| ddg}| ddd	d
ddg}| d
dg}t||||d\}}t|| t|| d S )Nr  rA   r   r}   r^  r  rB   r?   r      rp   r!  zir  r  r"   r   	rK   r\   rM   rL   r  r  zf_rr]   zfrO   rO   rP   test_rank_1_IIR_init_cond  s    

z+_TestLinearFilter.test_rank_1_IIR_init_condc           	      C   s   |  d}| dddg}| dg}| ddg}| ddddddg}| ddg}t||||d	\}}t|| t|| d S )
Nr  rA   rB   r=   r@   r   r  r?   r  r  r  rO   rO   rP   test_rank_1_FIR_init_cond  s    

z+_TestLinearFilter.test_rank_1_FIR_init_condc                 C   sn   |  d}| ddg}| ddg}| dddgdddgdddgdddgg}t|||dd	}t|| d S )
Nr>   r=   rA   r}   r^  r   rB   r>   r@   r]  r  )rK   r\   rM   rL   y_r2_a0r]   rO   rO   rP   test_rank_2_IIR_axis_0  s    
z(_TestLinearFilter.test_rank_2_IIR_axis_0c                 C   sn   |  d}| ddg}| ddg}| dddgdddgd	d
d	gdddgg}t|||dd}t|| d S )Nr  rA   r}   r^  r   rB   r@   r  rH   r  r  r]  r  )rK   r\   rM   rL   y_r2_a1r]   rO   rO   rP   test_rank_2_IIR_axis_1  s    
z(_TestLinearFilter.test_rank_2_IIR_axis_1c           	      C   s   |  d}| ddg}| ddg}| td}| dddgdddgdd	dgd
dd
gg}| ddddgd d tjf }t|||d|d\}}t|| t|| d S )Nr  rA   r}   r^  )r>   rA   rn   r  r  iiir@  r  )r  r  re   r$  rb  r"   r   )	rK   r\   rM   rL   r  Z	y_r2_a0_1r  r]   r  rO   rO   rP    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}| dddgdddgdddgdddgg}| dddgg}t|||d	|d
\}}t|| t|| d S )Nr  rA   r}   r^  )rA   r=   r=   r?   ir   r  )r  r  re   r$  r"   r   )	rK   r\   rM   rL   r  Z	y_r2_a0_0r  r]   r  rO   rO   rP    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 ]4}t ||}t fdd||}t|| q0d S )Nr>   r=   rB   rA   r}   r^  c                    s   t  | S r  r"   wrL   rM   rO   rP   <lambda>       z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>r  r  rg   ndimr"   re   apply_along_axisr   rK   r\   r@  r]   r  rO   r  rP   test_rank_3_IIR  s    
z!_TestLinearFilter.test_rank_3_IIRc                    s   |  d}| ddg| ddg t|jD ]}t|j}d||< | t|}| dgt |||\}} fdd} fdd}t	|||}	t	|||}
t
||	 t
||
 q0d S )Nr  rA   r}   r^  c                    s   t  | dd S Nr  r   r  r  rL   rM   zi1rO   rP   r  .  r  z=_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.<lambda>c                    s   t  | dd S Nr  rA   r  r  r  rO   rP   r  /  r  r  r  rg   r  r  rB  re   r$  r"   r  r   rK   r\   r@  Zzi_shaper  r]   r  Zlf0Zlf1r  r  rO   r  rP   test_rank_3_IIR_init_cond#  s    


z+_TestLinearFilter.test_rank_3_IIR_init_condc                    sj   |  d}| dddg| dg t|jD ]4}t ||}t fdd||}t|| q0d S )Nr  rA   r   r}   c                    s   t  | S r  r  r  r  rO   rP   r  <  r  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>r  r  rO   r  rP   test_rank_3_FIR5  s    
z!_TestLinearFilter.test_rank_3_FIRc                    s   |  d}| dddg| dg t|jD ]}t|j}d||< | t|}| ddgt |||\}} fdd} fdd}t	|||}	t	|||}
t
||	 t
||
 q0d S )	Nr  rA   r   r}   rB   c                    s   t  | dd S r  r  r  r  rO   rP   r  J  r  z=_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.<lambda>c                    s   t  | dd S r  r  r  r  rO   rP   r  K  r  r  r  rO   r  rP   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{   r  bar  r   rA   r>   r?   r  r}   )r  r   r%   r  rB  re   r$  r"   r   r   r   )rK   r\   rM   rL   Zzi_sizeZzi_fullZzi_singZy_fullZzf_fullZy_singZzf_singrO   rO   rP   test_zi_pseudobroadcastQ  s    




z)_TestLinearFilter.test_zi_pseudobroadcastc                 C   sZ   |  d}| dddg}| dg}| ddddddg}t||d |}t|| d S )Nr@   rA   r   r}   rB   r  )rK   r\   rM   rL   r  r]   rO   rO   rP   test_scalar_af  s    
z_TestLinearFilter.test_scalar_ac                 C   s8  |  tdd}|  tdd}|  tdddg}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=   rB   r?   lr?   rA   r   )r=   rA   r>   rB   r=   )r=   rB   r>   r>   r}   )r  re   rE  r$  r   r"   r   )rK   r\   rM   rL   r  Zzf_expectedZ
y_expectedZy_iirZzf_iirZy_firZzf_firrO   rO   rP   test_zi_some_singleton_dimsp  s"    
,



z-_TestLinearFilter.test_zi_some_singleton_dimsc                 C   s@   |  |}|  |}|  |}|  |}ttt||||| d S r  )r  r   r   r"   )rK   rM   rL   r\   r@  r  rO   rO   rP   base_bad_size_zi  s
    



z"_TestLinearFilter.base_bad_size_zic                 C   sz
  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dddg | dddgdg|ddgg | dddgdg|ddddg | dgddg|dddg | dgddg|ddgg | dgddg|ddddg | dddgddg|ddg | dddgddg|ddgdgg | dddgddg|ddddg | dddgddg|dddddg | ddgdddg|ddg | ddgdddg|ddgdgg | ddgdddg|ddddg | ddgdddg|dddddg t dd}| dgdg|ddg | ddgdg|ddddg | ddgdg|ddddg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ddddgg | dddgdg|dddddd	d
g | dddgdg|ddddgdd	d
ggg | dddgdg|dddgddgd	d
gg | dddgdg|dddgddgg | dddgdg|dddddgd	d
ddgg | dgddg|ddddg | dgddg|ddddg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ddddgg | dgdddg|dddddd	d
g | dgdddg|ddddgdd	d
ggg | dgdddg|dddgddgd	d
gg | dgdddg|dddgddgg | dgdddg|dddddgd	d
ddgg | dddgddg|dddddd	d
g | dddgddg|ddddgdd	d
ggg | dddgddg|dddgddgd	d
gg | dddgddg|dddgddgg | dddgddg|dddddgd	d
ddgg | dgdg|ddg | ddgdg|dddddg | ddgdg|ddgdgdgdggg | ddgdg|dddddg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 | dddgdg|dddddd	d
ddg | dddgdg|dddgddgd	d
gddggg | dddgdg|dddddgd	d
ddgg | dddgdg|dddgddgd	d
gg | dddg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ddddg | dgddg|ddgdgdgdggg | dgddg|dddddg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dddg|dddddd	d
ddg | dgdddg|dddgddgd	d
gddggg | dgdddg|dddddgd	d
ddgg | dgdddg|dddgddgd	d
gg | dgdddg|dddgddgd	d
gddgddgg | dddgddg|dddddd	d
ddg | dddgddg|dddgddgd	d
gddggg | dddgddg|dddddgd	d
ddgg | dddgddg|dddgddgd	d
gg | dddgddg|dddgddgd	d
gddgddgg d S )Nr@   rA   r}   r   rB   r=   rH   r  r>   r?   rn   r{   r   )re   r   r  rf   )rK   r   r   rO   rO   rP   test_bad_size_zi  s    
 $"$$"$	"$"&,,&."$"&,,&.(..(0 *"$,*4.,8 *"$,*4.,8,60.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?   rA   r  r   )r  r  r"   r   r	   r   r   )rK   r\   rL   rM   r  r]   r  rO   rO   rP   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 )NrA   r  r   TF)r  r+   r   )rK   rL   rM   r  Zzi_1Zzi_2rO   rO   rP   test_lfiltic_bad_zi  s    
z%_TestLinearFilter.test_lfiltic_bad_zic           	      C   s|   |  dg}|  dddg}|  ddg}|  dg}|  dg}|  ddg}t||||d	\}}t|| t|| d S )
NrA   r   r}   rB   rn   r  r  r  r  r"   r   	rK   rL   rM   r  r\   ZyeZzfer]   r  rO   rO   rP   test_short_x_FIR  s    
z"_TestLinearFilter.test_short_x_FIRc           	      C   s~   |  ddg}|  dddg}|  ddg}|  dg}|  dg}|  dd	g}t||||d
\}}t|| t|| d S )NrA   r   r}   rB   rn   r  r  ir  r  r  r  rO   rO   rP   test_short_x_IIR  s    
z"_TestLinearFilter.test_short_x_IIRc                 C   sz   |  d}| ddg}| }| ddg}| }| dddd	d
dg}t|||}t|| t|| t|| d S r  r  r  rU  r"   r   r	   rK   r\   rM   Zb0rL   a0r  y_frO   rO   rP   test_do_not_modify_a_b_IIR"  s    


z,_TestLinearFilter.test_do_not_modify_a_b_IIRc                 C   sz   |  d}| dddg}| }| dg}| }| ddddddg}t|||}t|| t|| t|| d S )Nr  rA   r   rB   r^  r=   r   r  r  rO   rO   rP   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  rO   rO   rO   rP   r    s2   		


`r  c                   @   s   e Zd ZedZdS )TestLinearFilterFloat32r   Nr   r   r   re   r   rO   rO   rO   rP   r  ;  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterFloat64ry   Nr  rO   rO   rO   rP   r  ?  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterFloatExtendedr   Nr  rO   rO   rO   rP   r  C  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterComplex64FNr  rO   rO   rO   rP   r  G  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterComplex128DNr  rO   rO   rO   rP   r  K  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterComplexExtendedGNr  rO   rO   rO   rP   r  O  s   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   rK   r\   rO   rO   rP   r  U  s    zTestLinearFilterDecimal.typeN)r   r   r   re   r   r  rO   rO   rO   rP   r  R  s   
r  c                   @   s   e Zd ZedZeZdS )TestLinearFilterObjectr  N)r   r   r   re   r   r-  r  rO   rO   rO   rP   r  Y  s   
r  c                   C   sR   t ttdgdgdd dg t ttdgd gdddg t ttd gdgdddg d S )Nr  r  r  )r   r  r"   rO   rO   rO   rP   test_lfilter_bad_object^  s    r  c                
   C   s&   t ttddgddgdddddg d S )NrB   r=   r>   r?   rA   )r   NotImplementedErrorr"   rO   rO   rO   rP   !test_lfilter_notimplemented_inputf  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   sL   t ddd|}t ddd|}t dddddg|}|||fS )Nr   r=   r>   rA   rB   r?   r{   )re   rH  r   r   rK   r  rL   rM   r  rO   rO   rP   _setup_rank1p  s    zTestCorrelateReal._setup_rank1c                 C   sJ   d}z,t |}t|dr.tdt |j }W n tk
rD   Y nX |S )Nr@   
resolutionr  )re   finfor  r%  log10r  	Exception)rK   res_dtr,  Zdt_inforO   rO   rP   equal_tolerancew  s    

z!TestCorrelateReal.equal_tolerancec                 C   s$   |t jkr| t jS | |S d S r  )re   r'  r  double)rK   r  rO   rO   rP   equal_tolerance_fft  s    
z%TestCorrelateReal.equal_tolerance_fftc                 C   s   |t kr*tt dgt dg}t|d np| |\}}}t||dd}t||dd}t||| |jd t||| |jd t|j| t|j| d S )Nr>   r=   rb   r   rc   r+  )	r   r   r	   _setup_rank3r   r   r  r   r  )rK   r  rd   rL   rM   r  Zy_fftZy_directrO   rO   rP   test_method  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   rA   r>   r}   r  r   r   r	   r   rK   r  rL   rM   r  r]   rO   rO   rP   test_rank1_valid  s    z"TestCorrelateReal.test_rank1_validc                 C   s>   |  |\}}}t||d}t||d d  t|j| d S )NrR   r}   r  r  rO   rO   rP   test_rank1_same  s    z!TestCorrelateReal.test_rank1_samec                 C   s6   |  |\}}}t||d}t|| t|j| d S )Nr   r  r  rO   rO   rP   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d
dddddddgddddddddgddddddd d!gd"d#d$d%d&d'd(d)gd*d+d,d-d.d/d0d1gd2d3d4d5d6d7d8d9ggd:d;d<d=d>d?d@dAgddBdCdDdEdFdGdHgdIdJdKdLdMdNdOdPgdQdRdSdTdUdVdWdXgdYddZdd[d\d]d^gd_d`dadbdcdddedfggdgdhdidjdkdldmdngdodpdqd=drdsdtdugdvdwddxdydzd{d|gd}d~dddddd^gd^dd,dddddgdddddddd
ggg|d}|||fS )Nr   r  r   )rB   r>   r?   r  )orderrG   r   )rB   r=   r>   r_  g      g@g     @g     @g     @@g     @g     }@g      d@g      G@g      {@g     @g     @g     @g     @g      @g     p@g     `@g      @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     @@g     b@g     \@g     u@g     @g      @g      @g     @g     r@g      C@g      7@g      y@g     ,@g     @g     @g     $@g     @@g     Pr@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      {@g     4@g     @g     ܧ@g     @g     l@g      n@g     @g     @g     @g     @g     @g     @r  g      6@g     j@g     @g     @g     Д@g     p@g     z@g     `@g     U@g     @~@g     (@g     P@g     @g      @g     i@g     g@g     @g     X@g     @g     @g     Џ@g     @k@g     @s@g     p@g     x@g     h@g     @g     @g     ؐ@g     @g      @g     @g     Ȗ@g     @g     S@g     _@g      v@g     @g     @g     @g     p@g     @m@r   )re   rH  rf   r   r   r  rO   rO   rP   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   rA   rB   r>   r=   r?   r}   r  r   r   r	   r   r  rO   rO   rP   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 )NrR   r   r}   rA   r^  r  r  rO   rO   rP   test_rank3_same  s     z!TestCorrelateReal.test_rank3_samec                 C   s4   |  |\}}}t||}t|| t|j| d S r  r  r  rO   rO   rP   test_rank3_all  s    

z TestCorrelateReal.test_rank3_allN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  rO   rO   rO   rP   r  k  s   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestCorrelatec                 C   s\   t ddd}t ddd}tttf||fddi tttf||fddi d S r   )re   r   rf   r   r   r   r   rO   rO   rP   r     s    z!TestCorrelate.test_invalid_shapesc                 C   sz   dddg}dddg}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 r   r   r   r   r   rO   rO   rP   r     s    

z!TestCorrelate.test_invalid_paramsc                 C   sx   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 r   r  r   rO   rO   rP   r     s    z"TestCorrelate.test_mismatched_dimsc                 C   s   dddg}ddg}t t||ddddd	g dddg}ddd
g}t t||ddddd	g t t||ddd
ddd	dg t t||dddg d S )NrA   rB   r=   r>   r?   rR   rS      rG   r@   rp   rF   r   rH   r   )r   r   r   rO   rO   rP   test_numpy_fastpath  s    


z!TestCorrelate.test_numpy_fastpathN)r   r   r   r   r   r   r  rO   rO   rO   rP   r    s   		r  rT   r   rR   r   behindTF
input_sizer   r)  r@  rA  r  i'  c                 C   s   t jd}||}t|d }|rBt |||g}| }n||d  }|}t||| d}t|j|j| d}	t 	|}
t
|	|
 | t
|	j|j d S )Nr   rC   rS   )re   r   r  r  r%  concatenater   r   r   Zargmaxr	   rB  )rT   r  r  r  Zin1offsetZin2r   ZcorrelationZlagsZ	lag_indexrO   rO   rP   test_correlation_lags  s    

r  c                   @   sT   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 )TestCorrelateComplexc                 C   s(   |t jkrt j}tdt |j d S )NrB   r=   )re   r)  r(  r%  r  Z	precision)rK   r  rO   rO   rP   r,  7  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   rC   r|   r{   rS   )re   r   r   r   r   r   rJ  imag)rK   r  rT   rL   rM   r  rO   rO   rP   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  rO   rO   rP   r  I  s    "z%TestCorrelateComplex.test_rank1_validc                 C   sB   |  |d\}}}t||d}t||| |d t|j| d S )NrR   r+  r  r   r   r,  r	   r   r  rO   rO   rP   r  T  s    z$TestCorrelateComplex.test_rank1_samec                 C   sB   |  |d\}}}t||d}t||| |d t|j| d S )Nr   r+  r
  r  rO   rO   rP   r  Z  s    z$TestCorrelateComplex.test_rank1_fullc                 C   sN   t jdddg|d}t jddddg|d}t||}t|dd	d
dddg d S )Nr~   rX   rW  r         ?      @       @      @      @      @      @      @      $@             <@            6@      y      0@      y       @      )re   r   r   r	   rK   r  ry   kr]   rO   rO   rP   test_swap_full`  s    
z#TestCorrelateComplex.test_swap_fullc                 C   s8   dddg}ddddg}t ||dd	}t|d
ddg d S )Nr~   rX   rW  r  r  r  r  rR   rS   r  r  r  )r   r	   r  rO   rO   rP   test_swap_samef  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 )	NrC   r{   r@   r|   r>   r   rA   r+  )re   r   r   r   r   rJ  r  r   r,  r	   r   r  rO   rO   rP   
test_rank3l  s    &zTestCorrelateComplex.test_rank3c                 C   s8  t t j |}|dt t j | 7 }t t j |}|dt t j | 7 }t|j|jt|j|j |}|dt 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   rA   r+  r[                 @r>   )re   r   r   r   r   r   rJ  r  r   r,  r	   r   r  rO   rO   rP   
test_rank0z  s$    
zTestCorrelateComplex.test_rank0N)r   r   r   r,  r  r  r  r  r  r  r  r  rO   rO   rO   rP   r  .  s   	r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestCorrelate2dc              	   C   s   t d}t dddg}dD ]}tt j|||dtj|||d tt tj|g|g|dtj|||d |dkrtt j|||dtj|||d tt tj|g|g|dtj|||d qd S )Nr?   r9  r:  r=   r;  rS   r   )re   r   r   r
   r   r   r<  r   r=  rO   rO   rP    test_consistency_correlate_funcs  s(    
z0TestCorrelate2d.test_consistency_correlate_funcsc                 C   s`   t ddd}t ddd}tttjf||fddi tttjf||fddi d S r   )re   r   rf   r   r   r   r   r   rO   rO   rP   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 )NrA   r[   y              r  r@   r>   y              (@)r	   r   r   r   rO   rO   rP   test_complex_input  s    z"TestCorrelate2d.test_complex_inputN)r   r   r   r  r   r  rO   rO   rO   rP   r    s   r  c                   @   s:   e Zd Zdd Zdd Zejdej	ej
gdd ZdS )	TestLFilterZIc                 C   sF   t dddg}t dddg}t ddg}t||}t|| d S )Nr  r  r^  r_  r  r  )re   r   r#   r   )rK   rL   rM   Zzi_expectedr  rO   rO   rP   rQ     s
    
zTestLFilterZI.test_basicc                 C   sN   t dddg}t dddg}t||}td| d| }t||dd d S )NrB   r{   r?   rA   ra  r  )re   r   r#   r   )rK   rM   rL   r  Zzi2rO   rO   rP   test_scale_invariance  s
    
z#TestLFilterZI.test_scale_invariancer   c                 C   s<   t jd|d}t jdg|d}tt t||j| d S )Nr{   r   rA   )re   rE  r   r	   rJ  r   r#   r   )rK   r   rM   rL   rO   rO   rP   r    s    zTestLFilterZI.test_typesN)r   r   r   rQ   r  r4  r5  r6  re   r   r  r  rO   rO   rO   rP   r    s   	r  c                   @   sJ   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}   oddNr2  c              	   C   sR   | j dkr,t| \}}	t||	||||||S | j dkrNt| }
t|
||||S d S )Nr  sos)filtfilt_kindr&   r$   r'   r.   )rK   zpkr\   r@  r=  padlenrd   irlenrM   rL   r!  rO   rO   rP   r$     s    

zTestFiltFilt.filtfiltc                 C   s>   t dddgdddg}| |td}t|tddd d S )NrA   rB   r=   rH   g6{=r  )r0   r$   re   r   r   )rK   r#  r   rO   rO   rP   rQ     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  rA   rC   i  r{         ?r#  r  r   )r$  r   r$  r@  )re   rH  rK  rc  r%   r  rd  r%  ceillogr$   r   vstackr	   rB  r  )rK   rf  r   ZxlowZxhighr\   r#  repsr   r]   errZx2dZy2dZy2dtrO   rO   rP   	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     @rC   r  rH   r=   r&  r#  r  r   r'  rA   rB   )re   r   rf   r%   r$   r  r   )rK   r\   r#  Zy0y1r  rO   rO   rP   	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 )Nr  r^  rA   rC   +=r   )r"  r   r$   re   r   r   )rK   r   rO   rO   rP   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 )Nr  $gust only implemented for TF systemsr  r  r^  r  r   r`  r  rA         ?r&  )r"  r4  skipre   r   r7   r   )rK   r\   rM   rL   r]   z1z2rO   rO   rP   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 )	Nr  r3  rH   r  r  gustrc   rB   )r"  r4  r5  re   r   r$   r   )rK   r\   rM   rL   r]   r   rO   rO   rP   test_gust_scalars 	  s    


zTestFiltFilt.test_gust_scalars)r}   r   Nr2  N)r   r   r   r"  r$   rQ   r.  r0  r2  r8  r:  rO   rO   rO   rP   r    s       
	"
r  c                   @   s   e Zd ZdZdd ZdS )TestSOSFiltFiltr!  c           	      C   st   t jdd}tddD ]R}tj|ddd}t| \}}t| }t	|||}t
||}t||dd	| d
 qdS )z1Test equivalence between sosfiltfilt and filtfiltr   r@  rA   r@   ffffff?r#  r  ra  zorder=%s)r   err_msgN)re   r   r  r   rg   r   r%   r&   r'   r$   r.   r   )	rK   r\   r  r#  rM   rL   r!  r]   y_sosrO   rO   rP   test_equivalence1	  s    
z TestSOSFiltFilt.test_equivalenceN)r   r   r   r"  r?  rO   rO   rO   rP   r;  .	  s   r;  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rt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.rA   Nr  r   r}   rB   )rd  r{  r"   re   r   )icsrM   rL   r\   mz0fz0br  Zy_fby_bZy_bfvaluerO   rO   rP   filtfilt_gust_opt_funcF	  s    ((z1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_funcrA   Nr  ra  r  TF)r   ZxtolZftolZmaxfunmaxiterZfull_outputZdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%dr}   r  )	rd  r{  r#   re   r  r.  r   r  r"   )rM   rL   r\   rF  rA  r  r@  r'  optZfoptZniterZfuncallsZwarnflagrB  rC  rD  r]   rO   rO   rP   filtfilt_gust_opt=	  s,    	
0   (rI  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| ||
| \||< ||< ||< qt |d|}t |d|}t |d|}t||d	d
d t||d	d
d t||d	d
d t|	|d	d
d d S )Nr  r9  )r@  rd   r%  )r@  r%  r}   rA   c                 S   s   g | ]}t |qS rO   )rg   )r   ry   rO   rO   rP   r   }	  s     z'check_filtfilt_gust.<locals>.<listcomp>r   rG  r   )re   r   r   r   r$   r7   r  rB  Z
empty_likerd  r{  r  r   rI  r   )rM   rL   rB  r@  r%  r\   r]   ZygZzg1Zzg2ZxxZ	out_shaper;  rA  Zzo1Zzo2ZindxrO   rO   rP   check_filtfilt_gusti	  s&    
$rJ  c                  C   sP  dD ]D} dD ]}d\}}}t jj|f|  }t jj|f|  }t||| d}t|| t||| dd\}}	t|dk tt|	tk td|	 kod	|	 k qd
}dD ]8}
t	t |
rt j
||
d}| }tt||| dd	 qt 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 )N)r   rR   r   )rA   rB   )r{   r@   rb   rS   T)rT   Zmeasure>   rb   r   r   rb   rC   )r   r   r   l         @ r=   rB   rA   r>   )re   r   r   r   r	   r   r  dictkeysr  r$  rU  r   r   r   )rT   r  r   r  Ztrue_methodr\   r   rd   Z
method_trytimesZnot_fft_conv_supprO   rO   rP   test_choose_conv_method	  s.    



rN  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 ]N}d	| }	t|||	fd
| tdD ]&}
dddg}|	||
< t||||
| qqpd| d }t|||fd
| d S )Nr=   {Gz?x   gffffff?r#  r  r  r  r?   r   rB   r   )r   Zellipre   rd  r  r%  r(  r)  r   r   r&   rJ  rg   )r^   pr  r,  r+  Zapprox_impulse_lenrM   rL   r%  Z
signal_lenr@  rB  lengthrO   rO   rP   test_filtfilt_gust	  s    
rS  c                   @   sl   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S )TestDecimatec                 C   s6   t d}tttj|ddd tttj|ddd d S )NrH   r^  rA   )qr   rB   )re   r   r   r  r   decimater  rO   rO   rP   test_bad_args	  s    
zTestDecimate.test_bad_argsc                 C   s:   t d}tj|ddddd }t||d d d  d S )NrH   rB   rA   iirFr   ftype
zero_phasere   r   r   rV  roundr   rK   r\   r]   rO   rO   rP   test_basic_IIR	  s    
zTestDecimate.test_basic_IIRc                 C   s:   t d}tj|ddddd }t||d d d  d S )NrH   rB   rA   firFrY  r\  r^  rO   rO   rP   test_basic_FIR	  s    
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)rq   rq   rB   r   F)r@  r[  )r  rq   rA   )rq   r  )re   rE  r   rV  r	   rB  )rK   r^   Zd0d1rO   rO   rP   
test_shape	  s
    
zTestDecimate.test_shapec              	   C   s0   t   }|td | jddd W 5 Q R X d S )NBadly conditioned filterr`  Frd   r[  r   r  r1   _test_phaseshiftrK   r	  rO   rO   rP   test_phaseshift_FIR	  s    z TestDecimate.test_phaseshift_FIRc              	   C   s0   t   }|td | jddd W 5 Q R X d S )Nrd  r`  Tre  rf  rh  rO   rO   rP   test_zero_phase_FIR	  s    z TestDecimate.test_zero_phase_FIRc                 C   s   | j ddd d S )NrX  Fre  rg  r   rO   rO   rP   test_phaseshift_IIR	  s    z TestDecimate.test_phaseshift_IIRc                 C   s   | j ddd d S )NrX  Tre  rk  r   rO   rO   rP   test_zero_phase_IIR	  s    z TestDecimate.test_zero_phase_IIRc                 C   s  d}ddddg}t d}t|| d t| }t|d d	 }td
tj |d d tjf  | tj	
|jd }|D ]r}	||	 }
t|	| d t|	 }td
tj |d d tjf  | tj	
|jd }|dkrd}ttj|d d|
 ddd}n6|dkrBd}dtj |
 }tjt|d|tj  }|dk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 )NrP  r  r   rq   r   r   rA   皙?rB   r[   皙?r`  r  rF  r9  rX  r{   g?F)rZ  r[  r}   r]  r^  r   r   rr  )r%  re   r   r-  r   r  rc  rb  r   ZwindowsZtukeyr   Zdltir  Zcheby1ZfreqzrD  Zdenr  Z	ones_likerV  rJ  r   r	  r   angle)rK   rd   r[  rf  rg  Zt_totr   rh  ry   ri  rU  rj  Zd_tosr   systemZwcr   Zh_respsrk  Z	h_resampsZsubnyqrO   rO   rP   rg  	  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@r@  r  rB   g      >@r  r   r  rq   r`  )rZ  rO  )re   r   sqrtrK  rc  r   ZlinalgZnormr   rV  r   )rK   Zsfreqr   r   r\   Zx_outrO   rO   rP   test_auto_n
  s    *zTestDecimate.test_auto_nc                 C   s.   t tjdtjdd}tt|r*td S )Nr  r   rC   )r   rV  re   r$  r   r   isnanrH  r  rO   rO   rP   test_long_float32+
  s    zTestDecimate.test_long_float32c                 C   s.   t tjdtjdd}|jjtjks*td S )Nr   r   rC   )	r   rV  re   r$  r   r   r  r  rH  r  rO   rO   rP   test_float16_upcast1
  s    z TestDecimate.test_float16_upcastN)r   r   r   rW  r_  ra  rc  ri  rj  rl  rm  rg  rs  ru  rv  rO   rO   rO   rP   rT  	  s   0rT  c                   @   sB   e Zd Zdd Zdd Zdd Zejde	j
e	jgdd	 Zd
S )TestHilbertc                 C   s6   t dg}ttt| t d}ttt|dd d S )Nr   r7  r   r  )re   r   r   r   r    r   r  rO   rO   rP   rW  9
  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   rB   r5  rA   r4  r=   )re   rc  r   rK  rI  r*  r    r  rp  rJ  r
   r$  rB  r  )rK   r,  rc  r   r  a1a2a3rL   r   Zh_absZh_angleZh_realrO   rO   rP   test_hilbert_theoretical?
  sB    




    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 d
dddddddddddddddddddg}t|d |dd d S )Nr  r=   r@   r}   r]  r   r   r   )r  r@  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)	re   r   rf   r    r	   r  r
   rB  r   )rK   rL   ZaaZaanZa0hilbrO   rO   rP   test_hilbert_axisNh
  s:    zTestHilbert.test_hilbert_axisNr   c                 C   s*   t jd|d}tt t|j| d S )Nr{   r   )re   rE  r	   rJ  r   r    r   r  rO   rO   rP   test_hilbert_types
  s    zTestHilbert.test_hilbert_typesN)r   r   r   rW  r|  r}  r4  r5  r6  re   r   r  r~  rO   rO   rO   rP   rw  7
  s
   )%rw  c                   @   s2   e Zd Zdd Zejdejej	gdd Z
dS )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   rB   r=   r>   ro   r   rx  )rB   r   )rB   )re   r   r   r   r!   r   rf   r  rO   rO   rP   rW  
  s    zTestHilbert2.test_bad_argsr   c                 C   s*   t jd|d}tt t|j| d S )N)rB   rF   r   )re   rE  r	   rJ  r   r!   r   r  rO   rO   rP   test_hilbert2_types
  s    z TestHilbert2.test_hilbert2_typesN)r   r   r   rW  r4  r5  r6  re   r   r  r  rO   rO   rO   rP   r  
  s   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 )$TestPartialFractionExpansionrn   c                 C   s   t |}t |}t t|d d d f | t| d d d f | }t|\}}t|| || |d t| | || |d d S )Nr+  )re   r  hypotr  r   r
   )r+  rQ  Zr_trueZp_truer,  ZdistanceZrowscolsrO   rO   rP   assert_rp_almost_equal
  s    

z3TestPartialFractionExpansion.assert_rp_almost_equalc              
   C   s  t dddgdddg\}}tt|d t|d tdddg t|d tddddg t|d tdddddg t|tddddddg t dddgdddgdd\}}tt|d t|d tdddddg t|d tddddg t|d tdddg t|d tdddddg t|d tddddg t|d	 tdddddg t|tddddddg d S )
NrA   rB   r=   r   T)Zinclude_powersr@   r>   r?   )r8   r	   r{  r
   re   poly)rK   Zfactorsr  rO   rO   rP   test_compute_factors
  s"    
z1TestPartialFractionExpansion.test_compute_factorsc                 C   s@   t ddddddgdd\}}t|dddg t|d	d
dg d S )Nr  gjt?g?5^I?r  g/$ @r  ro  minr=   rB   rA   )r9   r	   rK   uniquemultiplicityrO   rO   rP   test_group_poles
  s      z-TestPartialFractionExpansion.test_group_polesc              	   C   s  t ddddgddddg\}}}t|dd	d
gdd t|dddgdd t|dgdd t ddgdddg\}}}t|ddg t|ddg t|jd t ddgdddg\}}}t|ddg t|ddg t|jd t ddgddddg\}}}| ||dddgdddg t|jd t ddgddddg\}}}| ||dddgdddg t|jd t ddd d!d"gdd#d$d%g\}}}t|d&ddg t|d'd(d)g t|ddg t dgddd&g\}}}t|d*d+g t|dd&g t|jd t ddd,gdddddg\}}}| ||dd-d.dgdd/d0dg t|jd t dddgddddg\}}}| ||dddgdddg t|jd t ddgdd&dg\}}}t|ddg t|ddg t|jd t dddgdd&dg\}}}t|dd1g t|ddg t|dg t ddddgdd&dg\}}}t|d2d3g t|ddg t|dd4g t dddgdd&ddg\}}}| ||dd5d6gdd7d8g t|jd d S )9Nr?   r=   r^  rn   r  r   r{   gZd;O?g9#Jg&䃞ͪr>   r+  g-1ڿgeagvq-?g      rA   r@   ir}   rB   g333333gGz?gClٿy      2     @*y      2     @*@g      B@y      ?ɿy      ??gffffff?gg)\(?g^I+g rh?gffffffgQg~jt?r  g333333ӿrn  r4        пr  y              ?y                          r|   r  r  E   rG   y            @y                  ?      rX   )r4   r
   r	   r   r  rK   r+  rQ  r  rO   rO   rP   test_residue_general
  sv       

 
 
z1TestPartialFractionExpansion.test_residue_generalc              	   C   s   t ddddgddddg\}}}t dddddgddddg\}}}t ddddgdddddg\}}}	t ddddddgdddddddg\}
}}t|| t|| t||
 t|| t|| t|| t|| t||	 t|| d S Nr?   r=   r^  rn   r  r   r{   )r4   r
   rK   Zr0Zp0Zk0Zr1p1Zk1Zr2p2Zk2Zr3Zp3Zk3rO   rO   rP   test_residue_leading_zeros  s     ""*







z7TestPartialFractionExpansion.test_residue_leading_zerosc              	   C   s   t ddgdddg\}}}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 5 Q R X d S )	Nr   rA   r@   r{   r^  r  Denominator `a` is zero.r  )r4   r
   r	   r   r4  r   r   r  rO   rO   rP   test_resiude_degenerate$  s    z4TestPartialFractionExpansion.test_resiude_degeneratec              	   C   s
  t ddddgddddg\}}}| ||ddd	gd
ddg t|dg t dddgdddg\}}}| j||ddgddgdd t|dgdd t ddgdddg\}}}t|ddg t|ddg t|jd t dddgddddg\}}}| ||dddgdddg t|jd t ddddgdddg\}}}t|ddg t|ddg t|ddg t dgddddg\}}}| ||dd d!gdd"d"g 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 dddg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ddd$g\}}}t|ddg t|ddg t|jd t ddd(d)g\}}}t|ddg t|d$dg t|jd t dddgdddg\}}}t|dd*g t|ddg t|dg t ddgdddg\}}}t|dd+g t|ddg t|jd t ddddgdddg\}}}t|d,d-g t|ddg t|d.dg t dddgddddddg\}}}| j||d/d0d!d1d2gd3d4d5d6d7gdd t|jd d S )8NrA   r@   rB   y             rb  r  y             @y      @      @y            (r|   r[   r}   g'W?y	c-y	c-@y      ?*D?y      ?*DԿr>   r+  gŏ1w@r  r=   r   r  r  r^  r^  g            ?r  g
ףp=
?gQ?g?gUUUUUUտr  r4  g
gUUUUUU@r  g      r&  r   r{   ir  rC   yoT?c=yX?yoT?c=yXȿyjM?%uyjM?%u?ySsA?ySsAr  y-?8gDio?y-?8gDio)r5   r  r
   r	   r   re   Zpolymulr  rO   rO   rP   test_residuez_general3  s      $"    z2TestPartialFractionExpansion.test_residuez_generalc              	   C   s   t ddddgddddg\}}}t dddddgddddg\}}}t ddddgdddddg\}}}	t ddddddgdddddddg\}
}}t|| t|| t||
 t|| t|| t|| t|| t||	 t|| d S r  )r5   r
   r  rO   rO   rP   test_residuez_trailing_zeros  s     ""*







z9TestPartialFractionExpansion.test_residuez_trailing_zerosc              	   C   s   t ddgdddg\}}}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 5 Q R X tjtd	d t dddd
dg W 5 Q R X d S )Nr   rA   r@   r{   r^  r  r  r  z6First coefficient of determinant `a` must be non-zero.rB   r=   )r5   r
   r	   r   r4  r   r   r  rO   rO   rP   test_residuez_degenerate  s    z5TestPartialFractionExpansion.test_residuez_degeneratec           	      C   s   dddg}dddg}g }dddg}dd	d
dg}dD ]T}t ||||d\}}t|| t|| t||||d\}}t|| t|| q2d S )Nr`  UUUUUUſgr   r^  r  rA   r=   rn   rC   avgr.  r  r0  rd  r1  rtyper(   r   r)   )	rK   r+  rQ  r  
b_expected
a_expectedr  rM   rL   rO   rO   rP   *test_inverse_unique_roots_different_rtypes  s    





zGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypesc           
      C   s   ddddg}ddddg}g }dddd	g}dd
dd	g}dddddg}dD ]\}t ||||d\}}	t||dd t|	| t||||d\}}	t||dd t|	| qFd S )N333333?98ȿr  ll?r   r^  r  rA   r=   gUUUUUUgUUUUUU?r   r   r   r  r  r1  r  r  )
rK   r+  rQ  r  r  Zb_expected_zr  r  rM   rL   rO   rO   rP   ,test_inverse_repeated_roots_different_rtypes  s    
zITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypesc              	   C   st   ddddg}ddddg}g }t jtdd	 t|||d
d W 5 Q R X t jtdd	 t|||d
d W 5 Q R X d S )Nr  r  r  r  r   r^  r  z`rtype` must be one ofr  r/  r  )r4  r   r   r(   r)   r  rO   rO   rP   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 )NrA   rB   r   r  g       )r)   r   )rK   r+  rQ  r  rM   rL   rO   rO   rP    test_invresz_one_coefficient_bug  s    z=TestPartialFractionExpansion.test_invresz_one_coefficient_bugc              	   C   sF  t dgdgg \}}t|dg t|ddg t dddgdddgg \}}t|dd	d
g t|ddddg t ddgddgdddg\}}t|dddddg t|dddg t ddddddgddddddgg \}}t|ddddddg t|dd d!d"d#d$d%g t ddgddgddg\}}t|dd&d'd(g t|dddg d S ))NrA   r}   r  rB         ?      r   rX         @            !      ?      @      
@                   ?       @      ?      r^  rW  r=                     ?       rC               r>   r|   r  r^  r   y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     p      (       @     J@      4      X      Q@      ;@      R      [@      K     @T      [@r   r  rZ   )r(   r
   rK   rM   rL   rO   rO   rP   test_invres  s0       z(TestPartialFractionExpansion.test_invresc              	   C   sF  t dgdgg \}}t|dg t|ddg t dddgdddgg \}}t|dd	d
g t|ddddg t ddgddgdddg\}}t|dddddg t|dddg t ddddddgddddddgg \}}t|dddddd g t|dd!d"d#d$d%d&g t ddgddgddg\}}t|ddd'dg t|dddg d S )(NrA   r}   r  rB   r  r   rX   r  r  r  r  r  r  r^  rW  r=   g      @r  r  y            rH   r>   r|   r  r^  r   r@   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rr  r  r  r  r  r  r  )r)   r
   r  rO   rO   rP   test_invresz  s0       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 )NrA   r   r}   rB   )r(   r
   r)   r  rO   rO   rP   test_inverse_scalar_arguments  s    z:TestPartialFractionExpansion.test_inverse_scalar_argumentsN)rn   )r   r   r   staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rO   rO   rO   rP   r  
  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 )Nr^  r  r  ro  r   rB   re   r   r*   r	   r  r
   rc  rK   eventsperiodtarg_strengthZ
targ_phasestrengthphaserO   rO   rP   test_single_1dperiod  s    
z'TestVectorstrength.test_single_1dperiodc                 C   sx   t dg}dddg}dgd }t dddg}t||\}}t|jd t|jd t|| t|dt j |  d S )	Nr^  rA   rB   r  r  r=   r4  ro  )re   r   r*   r	   r  r   r
   rc  r  rO   rO   rP   test_single_2dperiod'  s    


z'TestVectorstrength.test_single_2dperiodc                 C   sj   t ddddddg}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr4  rB   r  r&  r   r  r  rO   rO   rP   test_equal_1dperiod4  s    
z&TestVectorstrength.test_equal_1dperiodc                 C   s~   t ddddddg}ddg}dgd }t ddg}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr4  rA   rB   r  r&  r  r  rO   rO   rP   test_equal_2dperiodA  s    

z&TestVectorstrength.test_equal_2dperiodc                 C   sh   t dddddg}d}d}d}t||\}}t|jd t|jd t|| t|d	t j |  d S )
Nro  皙? @ffffff@333333$@rA   r  r   rB   r  r  rO   rO   rP   test_spaced_1dperiodN  s    
z'TestVectorstrength.test_spaced_1dperiodc                 C   s|   t dddddg}ddg}dgd	 }t dd
g}t||\}}t|jd t|jd t|| t|d	t j |  d S )Nro  r  r  r  r  rA   r^  r  rB   r  r  r  rO   rO   rP   test_spaced_2dperiod[  s    

z'TestVectorstrength.test_spaced_2dperiodc                 C   sd   t dddg}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr4  r^        ?rA   UUUUUU?r   rB   r  r  rO   rO   rP   test_partial_1dperiodh  s    
z(TestVectorstrength.test_partial_1dperiodc                 C   s   t dddg}ddddg}dgd }t ddddg}t||\}}t|jd t|jd t|| t|dt j |  d S )	Nr4  r^  r  r  r  r>   rA   rB   r  r  rO   rO   rP   test_partial_2dperiodu  s    

z(TestVectorstrength.test_partial_2dperiodc                 C   sN   t ddddg}d}d}t||\}}t|jd t|jd t|| d S )Nr   r4  r^  r  r  re   r   r*   r	   r  r
   rK   r  r  r  r  r  rO   rO   rP   test_opposite_1dperiod  s    z)TestVectorstrength.test_opposite_1dperiodc                 C   sZ   t ddddg}dgd }dgd }t||\}}t|jd t|jd t|| d S )	Nr   r4  r^  r  r  rC   r_  rA   r  r  rO   rO   rP   test_opposite_2dperiod  s    

z)TestVectorstrength.test_opposite_2dperiodc                 C   s&   t ddgg}d}ttt|| d S )NrA   rB   r  re   r   r   r   r*   rK   r  r  rO   rO   rP   test_2d_events_ValueError  s    z,TestVectorstrength.test_2d_events_ValueErrorc                 C   s$   d}t dgg}ttt|| d S )Nr  rA   r  r  rO   rO   rP   test_2d_period_ValueError  s    z,TestVectorstrength.test_2d_period_ValueErrorc                 C   s   d}d}t tt|| d S )Nr  r   r   r   r*   r  rO   rO   rP   test_zero_period_ValueError  s    z.TestVectorstrength.test_zero_period_ValueErrorc                 C   s   d}d}t tt|| d S )Nr  r}   r  r  rO   rO   rP   test_negative_period_ValueError  s    z2TestVectorstrength.test_negative_period_ValueErrorN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  rO   rO   rO   rP   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.)re   r  r   r   rs  r,   r   )rM   rL   r   rO   rO   rP   cast_tf2sos  s    r  rq  c                 C   sF   | j jdkr4t| jd j }| ||| } }t| ||| dS )z1Wrap assert_allclose while casting object arrays.r  r   N)r   r   re   r   Zflatr   r   )actualdesiredr   r   r   rO   rO   rP   assert_allclose_cast  s    r  r  c              	   C   s  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\ttt|tt|t|t}| t	krt	|| g|}nt|||}t
dd |D stt|t|t | tkrddg}ntddg}tjtdd	 | |d
di W 5 Q R X d S )NrA   rB   r=   r  c                 s   s   | ]}t |tV  qd S r  )
isinstancer   )r   r\   rO   rO   rP   	<genexpr>  s     z)test_nonnumeric_dtypes.<locals>.<genexpr>r  zmust be at least 1-Dr  r\   )r   re   r   r   r   rH  r"   r-  r   r-   allr   r,   r4  r   r   )r  r\   rM   rL   r  r  r   rO   rO   rP   test_nonnumeric_dtypes  s     
"
r  ZfdgFDGOc                   @   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S )TestSOSFiltc              
   C   s<  t ddd|}t ddg|}t ddg|}t ddd	dd
dg|}t||}|jj|ksrttt	t|||| t ddg|}t ddg|}t ddddddg|}tt	t|||| dddg}dddg}t 
d
}t ||f}d|_t	||}t|ddddddddg d S )Nr   r?   r@   rA   r}   r^  r  rB   r>   r{   r\  r=   rn   rO  )rA   r@   )re   rH  r   r   r  r   charrH  r   r-   r$  r  rB  r   )rK   r  r\   rM   rL   r  r!  r]   rO   rO   rP   
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dddgdddgdddgdddgg|d	}t jdddgdd
dgdddgdddgg|d	}tt|||dd}t|| tt|||dd}t|| d S )Nr  r   rA   r}   r^  rB   r>   r@   r   r  rH   r  r  r  r]  )	re   rH  r  rf   r   r   r-   r  r   )	rK   r  rB  r\   rM   rL   r  r  r]   rO   rO   rP   
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  qqnd S )Nr  r   rA   r}   r^  )re   rH  r  rf   r   r   r-   r  rg   rB  r   r"   )	rK   r  rB  r\   rM   rL   r]   rh   r
  rO   rO   rP   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 d	ddgf d t|
||d\}}t|d td t|d d d	d	d d f | d S )NrB   r4  lowr  r   r   r@   r  r   r   r{   r  rA   r}   r  )r   r%   re   r   r   Zr_r   r  r   r"   rE  r  r-   r/   r$  rB  r   r   rU  )rK   r  Zb1ry  Zb2rz  Zb3r{  rM   rL   r!  r\   Zy_truer  r>  r]   r  Zzi_ndrO   rO   rP   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?   )rB   r  r=   r   r@   r<  r#  r  rA   rB   r  r]  r  vIh%<=r   )re   r   r  r  r   r   r%   r'   rB  r  rE  r-   r  r  r/   r&   r#   r   r"   )rK   r  r\   r#  r!  Z	nsectionsr@  ZshpZz0rt  r  r/  r6  r  r7  r]   r  rM   rL   Zy_tfrO   rO   rP    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 5 Q R X d|d d d	f< tjtd
d t|||dd W 5 Q R X d S )N)r=   r  r=   )r>   r@   )r>   r=   r=   rB   zshould be all onesr  rA   )r  r@  r  r=   zInvalid zi shape)re   r  rE  r4  r   r   r-   )rK   r  r\   r!  r  rO   rO   rP   test_bad_zi_shapen  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 )Nr@   r  r!  r  r   r  r  r  r=   r}   r]  )
r   r%   r/   r-   re   r$  r  r  r   r  )rK   r  r!  r  r]   r  ssr   rO   rO   rP   test_sosfilt_ziz  s    >zTestSOSFilt.test_sosfilt_ziN)
r   r   r   r  r  r  r  r  r  r  rO   rO   rO   rP   r    s   &.r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestDeconvolvec              	   C   sP   ddddddddg}ddg}dddddddddg	}t ||\}}t|| d S )Nr   rA   rB   r=   )r   
deconvolver   )rK   originalimpulse_responserecordedZ	recovered	remainderrO   rO   rP   rQ     s
    zTestDeconvolve.test_basicc              	   C   sF   ddgddgg}ddg}t jtdd t||\}}W 5 Q R X d S )Nr   zsignal must be 1-D.r  r4  r   r   r   r  rK   r  r  Zquotientr  rO   rO   rP   test_n_dimensional_signal  s    z(TestDeconvolve.test_n_dimensional_signalc              	   C   sF   ddg}ddgddgg}t jtdd t||\}}W 5 Q R X d S )Nr   zdivisor must be 1-D.r  r  r  rO   rO   rP   test_n_dimensional_divisor  s    z)TestDeconvolve.test_n_dimensional_divisorN)r   r   r   rQ   r  r   rO   rO   rO   rP   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )TestDetrendc                 C   s.   t tdddg}tdddg}t|| d S r  )r2   r   r   )rK   Z	detrendedZdetrended_exactrO   rO   rP   rQ     s    zTestDetrend.test_basicc                 C   s8   t dddddg}t|dd}t|dd}t|| d S )	NrA   333333?r  g?g333333@F)Zoverwrite_dataT)r   r2   r   )rK   r\   Z
copy_arrayZinplacerO   rO   rP   	test_copy  s    zTestDetrend.test_copyN)r   r   r   rQ   r  rO   rO   rO   rP   r    s   r  c                   @   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S )TestUniqueRootsc                 C   s@   dddddg}t |\}}t||dd t|tt| d S )Nr  r  r`  r  r\  r  r+  r3   r
   r	   re   r$  r{  rK   rQ  r  r  rO   rO   rP   test_real_no_repeat  s    z#TestUniqueRoots.test_real_no_repeatc                 C   s   dddddddg}t |dd	d
\}}t|ddddgdd t|ddddg t |ddd
\}}t|ddddgdd t|ddddg t |ddd
\}}t|ddddgdd t|ddddg d S )Nr  gffffffg{Gzgr^  r  g?ro  r  tolr  r  r+  rB   rA   rd  r  g333333g
ףp=
gffffff?r3   r
   r	   r  rO   rO   rP   test_real_repeat  s    z TestUniqueRoots.test_real_repeatc                 C   s@   dddddg}t |\}}t||dd t|tt| d S )Nr  r|         ?      ?r  r8  r  r+  r  r  rO   rO   rP   test_complex_no_repeat  s    z&TestUniqueRoots.test_complex_no_repeatc                 C   s   dddddddg}t |dd	d
\}}t|ddddgdd t|ddddg t |ddd
\}}t|ddddgdd t|ddddg t |ddd
\}}t|ddddgdd t|ddddg d S )Nr  y      𿚙?yffffff333333?y333333?r_  r  y??ro  r  r  r  r+  rB   rA   rd  r  y      𿚙?y333333?yffffff??r
  r  rO   rO   rP   test_complex_repeat  s,    
 
 
z#TestUniqueRoots.test_complex_repeatc                 C   sj   t t t dt d}ddddg}t|\}}t |}tt ||dd t|ddddg d S )	Nr?   yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?rn   r+  rB   )re   rootsr   r$  r3   sortr
   r	   )rK   rQ  Z
true_rootsr  r  rO   rO   rP   test_gh_4915  s    
zTestUniqueRoots.test_gh_4915c                 C   sl   t dddg\}}t|ddgdd t|ddg t dddgd	d
\}}t|ddgdd t|ddg d S )Nr  r|   r  r+  rB   rA   g_p   ?y&.>      ?ro  )r	  r
  r  rO   rO   rP   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|   rB   r  r+  )re   r   r  r3   r
   r  r	   r  rO   rO   rP   test_single_unique_root  s    z'TestUniqueRoots.test_single_unique_rootN)
r   r   r   r  r  r  r  r  r  r  rO   rO   rO   rP   r    s   
	r  )N)rq  r   )r	  concurrent.futuresr   r   r,  r   	itertoolsr   mathr   r4  r   r   Znumpy.testingr	   r
   r   r   r   r   r   r   Znumpyr   r   re   Z	scipy.fftr   r+  r   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.   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   r7  rL  r  r  r  r  r  r  r  r*  rx  r3  ry  r  r  r  r  r  r  r  r  r  r  r  r  r5  r6  r   r!  r"  r#  r$  r%  r&  r   r  r'  r  r  r  Zcsingler(  r)  r  r  r  r  r;  rI  rJ  rN  rS  rT  rw  r  r  r  r  r  r  r  r  r  r  rO   rO   rO   rP   <module>   s   (ht B  l 	P  O        v-_'`,
 p\  p 

 /