a
    BCCf(                    @   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 d dlLmMZMmNZNmOZO G dd dZPG dd dePZQG dd dZRG dd deRZSG dd dZTdd ZUdd  ZVd!d" ZWd#d$ ZXG d%d& d&ZYG d'd( d(ZZG d)d* d*Z[G d+d, d,Z\g d-Z]e]eI7 Z]G d.d/ d/Z^G d0d1 d1Z_G d2d3 d3Z`G d4d5 d5ZaG d6d7 d7eaZbG d8d9 d9eaZcG d:d; d;eaZdG d<d= d=eaZeG d>d? d?eaZfG d@dA dAeaZgG dBdC dCeaZhG dDdE dEeaZidFdG ZjdHdI Zke
jlmdJejnejoejpejqeOeNejrejrejsejtejuegG dKdL dLZvG dMdN dNZwe
jlmdOg dPe
jlmdQdRdSge
jlmdTg dUdVdW Zxe
jlmdJejyejzej{gG dXdY dYZ|G dZd[ d[Z}G d\d] d]Z~G d^d_ d_ZG d`da daeZdbdc ZddddeZdfdg Zdhdi ZG djdk dkZG dldm dmZG dndo doZG dpdq dqZG drds dsZddudvZe
jlmdwe9e.fdxdy Ze
jlmdJdzG d{d| d|ZG d}d~ d~ZG dd 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)
_testutils)ComplexWarningnp_longnp_ulongc                   @   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   s0   g d}g d}t ||}t|tg d d S )N)            rB   rA         r@   )r@   
             rJ         r   r   r   selfabc rS   _/var/www/html/django/DPS/env/lib/python3.9/site-packages/scipy/signal/tests/test_signaltools.py
test_basic'   s    
z_TestConvolve.test_basicc                 C   s4   g d}g d}t ||dd}t|tg d d S )Nr@   rA   rB   )rE   rF   r@   rA   samemode)rG   rH   "   rM   rN   rS   rS   rT   	test_same-   s    z_TestConvolve.test_samec                 C   s4   g d}g d}t ||dd}t|tg d d S )NrV   rD   rW   rX   )rG   rH   rH   rM   rN   rS   rS   rT   test_same_eq3   s    z_TestConvolve.test_same_eqc                 C   s8   t g d}t ddg}t||}t|t g d d S )N)      ?      ?       @      ?      @      ?r]   r^   )               @y       @      @y      @       @y      @      @)r   r   r   )rO   xyzrS   rS   rT   test_complex9   s    
z_TestConvolve.test_complexc                 C   s$   d}d}t ||}t|||  d S )Ni	  i  )r   r	   rN   rS   rS   rT   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@   rE   directmethodr   )npr   reshaperanger   r   )rO   rP   rQ   ib_shapera   rb   rS   rS   rT   test_broadcastableE   s    

z _TestConvolve.test_broadcastablec                 C   s0   t dg}t dg}t||}t|||  d S Nig  iP  )r   r   r	   rN   rS   rS   rT   test_single_elementO   s    


z!_TestConvolve.test_single_elementc                 C   sR   g dg dg}g dg dg}t ||}tg dg dg dg}t|| d S NrD   rV   rF   r@   rA   rA   rB   rC   )rF            rL   )rG      >   :   &   )rL      rz   1   rx   r   r   r   rO   rP   rQ   rR   drS   rS   rT   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g dg dg d	g d
gg dg dg dg dgg dg dg dg dgg dg dg dg dgg}tt||d| tt||d| tt||d|ddddddf  tt||d|ddddddf  tt||d|ddddddf  tt||d|ddddddf  d S )N   rF                 ?rf   r@   )                y      :@        y      9@      ?y      8@       @)y      J@        y     b@      @y      b@      &@y     @W@      &@)y      G@      @y     `@      7@y     _@      =@y     @T@      7@)y      D@      (@y     X@      @@y     @W@     B@y      K@      8@)y      Z@        y     n@      *@y     m@      7@y     `@      5@)y     q@      >@y     @      X@y     @      _@y     t@     U@)y     n@     P@y      @     f@y     @@      j@y     q@     `@)y     a@     P@y     0s@      d@y     r@     `f@y      c@     Z@)y      Q@      B@y     c@     Y@y     `b@     @\@y     @T@     R@)y     e@     @a@y     w@     u@y      v@     w@y     @g@     l@)y     @a@     e@y     r@      {@y     p@     |@y     @a@     `q@)y     Q@     @a@y      b@     0t@y     _@     Pu@y     O@     h@)y      @@      R@y      Q@     d@y     M@     e@y      >@      Y@)y      Q@      h@y     `a@     {@y     @]@     p|@y     L@     o@)y      C@     k@y     @R@     0@y     I@     H@y      5@     0r@)y      (@      b@y      4@     s@y      @     t@y             f@fullrW   rE   r   valid)r   rk   r   r   r   )rO   ZsmallbigZ	out_arrayrS   rS   rT   test_input_swapping^   sP     z!_TestConvolve.test_input_swappingc                 C   sv   g d}g d}t tt||dd t tt||ddd t tt||dd	d t tt||d
dd t tt||ddd d S NrV   rD   ZspamrX   eggsr   rY   ri   Zhamrg   r   baconrW   assert_raises
ValueErrorr   rO   rP   rQ   rS   rS   rT   test_invalid_params   s    z!_TestConvolve.test_invalid_paramsN)__name__
__module____qualname__rU   r[   r\   rd   re   ro   rq   r   r   r   rS   rS   rS   rT   r?   %   s   
	%r?   c                   @   s>   e Zd Zdd Zdd Zdd Zddd	Zd
d Zdd ZdS )TestConvolvec                 C   s   g d}g d}g d}t ||d}t|| t ||d}t|| g d}ddg}ddg}t ||d}t|| t ||d}t|| d S )	N)rE   rF   r@   rC   rB   r@   )	rF   r@   rA   rB   r@   rA   rF   rF   rE   )F   N   I   A   r   )y      ?      @       @      y      @               @            ?        y       @      $)r   r   rO   rP   rQ   expectedoutrS   rS   rT   test_valid_mode2   s    


zTestConvolve.test_valid_mode2c                 C   s6   g d}g d}t ||d}tg d}t|| d S )N)rE   rF   r@   r@   rE   rF   )rE   rA   r@   rA   rB   rC   ru   rA   r@   rF   rE   rE   r@   rW   )9   =   ?   r   -   $   r~   r   rS   rS   rT   test_same_mode   s
    zTestConvolve.test_same_modec                 C   sh   t ddd}t ddd}tttg||fR i ddi tttg||fR i ddi d S 	NrE   ru   rF   r@   r   r@   rF   rY   r   )rj   r   rk   r   r   r   r   rS   rS   rT   test_invalid_shapes   s     z TestConvolve.test_invalid_shapesd   c                    sd  h d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|v rd|v rtt	d qxt
dd ||fD r ddd}n$d||fv r:ddd}n
ddd}t|d |d fi | qxd S )N>   
complex128int64	complex64Zuint32Zuint8float32float64float16Zint32Zuint16Zuint64boolZint16Zint8c                    s*   g | ]"} D ]}d D ]}|||fqqqS ))r   r   rW   rS   ).0t1t2rY   )typesrS   rT   
<listcomp>   s   z5TestConvolve.test_convolve_method.<locals>.<listcomp>*   r   rE   size)rm   frm   rQ   ur                 ?rR   c              	      s   i | ]}|t | d qS ))ri   rY   )r   )r   key)rY   x1x2rS   rT   
<dictcomp>   s   z5TestConvolve.test_convolve_method.<locals>.<dictcomp>)r   rg   r   rg   r   c                 S   s   g | ]}|d v qS )>   r   r   rS   )r   trS   rS   rT   r          -C6?gư>rtolatolr   MbP?h㈵>:0yE>)rj   randomseedchoicerandndtypekindastyper	   r   anyr   )rO   nargsZarray_typesr   r   resultskwargsrS   )rY   r   r   r   rT   test_convolve_method   s0    

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)	rG      2   3   4   5   6   <   ry   rF   r   r   rh   rg   r   )rj   r   r   r   r	   )rO   r   rc   r   rg   rS   rS   rT    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 NrE   rF   rg   rh   r   r@   r   rO   rS   rS   rT   test_mismatched_dims   s    z!TestConvolve.test_mismatched_dimsN)r   )	r   r   r   r   r   r   r   r   r   rS   rS   rS   rT   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
ejdeegejddg dgfdg dgfgdd Zdd Zdd Zdd ZdS ) _TestConvolve2dc                 C   sR   g dg dg}g dg dg}t g dg dg dg}t||}t|| d S rr   r   r   r   )rO   rP   rQ   r   erS   rS   rT   r      s    
z_TestConvolve2d.test_2d_arraysc                 C   s^   g dg dg}g dg dg}t g dg}t||d}t|| t||d}t|| d S )NrF   r@   rA   rB   rC   ru   r   rA   rB   rC   ru   r   	   rG   rD   rV   ry   P   b   t      r   r   rO   r   r   hgrS   rS   rT   test_valid_mode  s    
z_TestConvolve2d.test_valid_modec                 C   sl   g dg dg}t jg dg dgtdd }tg dg}t||d}t|| t||d}t|| d S )	Nr   r   rD   rV   r   r   )y      O@      8@y      T@      >@y     X@      B@y      ]@      E@y     `@      H@r   )rj   r   complexr   r   r   r   rS   rS   rT   test_valid_mode_complx  s    
z&_TestConvolve2d.test_valid_mode_complxc                 C   s\   g dg dg}g dg dg}d}t ||dd|}tg dg d	g d
g}t|| d S )NrD   rV   rs   rt   rE   r   fill)      r|   rZ   rJ   )rI   (   ry   @   r   )rJ   .   C   ry   0   r   r   r   )rO   rP   rQ   ZfillvalrR   r   rS   rS   rT   test_fillvalue   s    z_TestConvolve2d.test_fillvaluec              	   C   s   d}t j `}|td tt|d( tdggddggdd W d    n1 sV0    Y  W d    n1 st0    Y  d}tt|d, tdggddggddgd W d    n1 s0    Y  d S )	Nz2could not cast `fillvalue` directly to the output zCasting complex valuesmatchrE   rF   r   	fillvaluez,`fillvalue` must be scalar or an array with )rj   testingr   filterr<   r   r   r   )rO   msgsuprS   rS   rT   test_fillvalue_errors*  s    Tz%_TestConvolve2d.test_fillvalue_errorsc                 C   s    t ttdggddggg d d S )NrE   rF   r  r   r   r   r   rS   rS   rT   test_fillvalue_empty5  s    z$_TestConvolve2d.test_fillvalue_emptyc                 C   sV   g dg dg}g dg dg}t ||dd}tg dg dg dg}t|| d S )	NrD   rV   rs   rt   r   wrap)r   r   J   r   r   )D   r  ry   r  r  r   r   rS   rS   rT   test_wrap_boundary:  s    z"_TestConvolve2d.test_wrap_boundaryc                 C   sV   g dg dg}g dg dg}t ||dd}tg dg dg d	g}t|| d S )
NrD   rV   rs   rt   r   symm)rZ   rx   ,   ry   B   )r   r   ry   r   T   )R   r   \   n   r   r   r   rS   rS   rT   test_sym_boundaryC  s    z!_TestConvolve2d.test_sym_boundaryfunczboundary, expectedr  )g     B@      E@      F@g     F@r  )     E@r  r       C@c                 C   s8   t g dg}t d}|||d|d}t|| d S )N)       @            @      @)rE      rW   rY   boundary)rj   r   onesr   )rO   r  r$  r   imageZkernelresultrS   rS   rT   test_same_with_boundaryL  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   rE   r|   r   rG   r@   e   rW   r  r#  )r   r   )rY   origin)	scipy.ndimagendimagerj   r   floatrk   r   r   r   )rO   ndirP   rQ   rR   rS   rS   rT   test_boundary_extension_same]  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   rE   rG   r   r@   %   rC   r   r  r#  )r@   r@   r1  rX   r   )
r+  r,  rj   r   r-  rk   r   padr   r   )rO   r.  rP   rQ   rR   ZapadrS   rS   rT   test_boundary_extension_fullg  s    z,_TestConvolve2d.test_boundary_extension_fullc                 C   sh   t ddd}t ddd}tttg||fR i ddi tttg||fR i ddi d S r   )rj   r   rk   r   r   r   r   rS   rS   rT   r   r  s     z#_TestConvolve2d.test_invalid_shapesN)r   r   r   r   r   r   r   r	  r  r  r  pytestmarkparametrizer   r   r(  r/  r3  r   rS   rS   rS   rT   r      s$   	
		
r   c                   @   sH   e Zd Zdd Zdd Zdd Zdd Zejj	ej
d	d
d ZdS )TestConvolve2dc                 C   sN   g dg dg}g dg dg}t ||d}tg dg dg}t|| d S )NrD   rV   r   r   rW   )rH   rI   rZ   )r   r   r   r   )rO   r   r   r   r   rS   rS   rT   r     s    zTestConvolve2d.test_same_modec                 C   s   g dg dg}g dg dg}g dg}t ||d}t|| t ||d}t|| ddgd	d
gg}g dg dg}ddgg}t ||d}t|| t ||d}t|| d S )NrD   rV   r   r   r   r   r]   r   r_         @        )r         @       @r8  )r8  y      @      ?y      @      y      ;@      y      G@       @)r   r   )rO   r   r   r   r   rS   rS   rT   r     s    




zTestConvolve2d.test_valid_mode2c              	   C   st   t d}t g d}dD ]R}tt j|||dtj|||d tt tj|g|g|dtj|||d qd S )NrB   g	@gffffff?r@   r   r   rW   rX   )rj   r   r   r
   r   r   squeezer   rO   rP   rQ   rY   rS   rS   rT   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@   rA   r
  r   rS   rS   rT   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sJ d S )Nl          rF     g    .Ar   rE   )iH  r   )shapestridesr   )rj   r   itemsizer;   Zcheck_free_memoryzeroslibZstride_tricksZ
as_stridedr   r   wherer   )rO   r   rP   countZfailsrS   rS   rT   test_large_array  s     zTestConvolve2d.test_large_arrayN)r   r   r   r   r   r>  r?  r4  r5  slowZxfail_on_32bitrI  rS   rS   rS   rT   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   sH   t g d}t g d}|dkr,t||}nt|||d}t|| d S )NrD   rE   rA   rG   rL         "@rM  rL  r   r   r   rO   rL  rP   r   r   rS   rS   rT   	test_real  s    zTestFFTConvolve.test_realrE   c                 C   sT   t g d}t g d}t|ddg}t|ddg}t|||d}t|| d S )NrD   rN  rF   rE   rP  r   rj   tiler   r   rR  rS   rS   rT   test_real_axes  s    zTestFFTConvolve.test_real_axesc                 C   sH   t g d}t g d}|dkr,t||}nt|||d}t|| d S )Nr]          @       @y      @      @r`   y               @y              4@y              8@y              2@rM  rP  rQ  rR  rS   rS   rT   rd     s    zTestFFTConvolve.test_complexc                 C   sT   t g d}t g d}t|ddg}t|ddg}t|||d}t|| d S )NrW  rY  rF   rE   rP  rT  rR  rS   rS   rT   test_complex_axes  s    z!TestFFTConvolve.test_complex_axesc                 C   s^   t g dg dg}t g dg dg dg}|dkrBt||}nt|||d}t|| d S )NrD   rt   rE   rA   rG   rL   r   r   r   8   r   r   rv   r   r   r   r   rM  rP  rQ  rR  rS   rS   rT   test_2d_real_same  s    z!TestFFTConvolve.test_2d_real_samerF   c                 C   sj   t g dg dg}t g dg dg dg}t|g d}t|g d}t|||d}t|| d S )NrD   rt   r\  r]  r_  rF   rE   rE   rP  rT  rR  rS   rS   rT   test_2d_real_same_axes  s    	z&TestFFTConvolve.test_2d_real_same_axesc                 C   s^   t g dg dg}t g dg dg dg}|dkrBt||}nt|||d}t|| d S )N      ?       @      @      @y      @      @r^   y      @      @y      @      @y            @y      $      4@y      5      L@y      2      S@y      &      N@y              $@y              F@y             ]@y             c@y             ^@re  y      $@      4@y      5@      L@y      2@      S@y      &@      N@rM  rP  rQ  rR  rS   rS   rT   test_2d_complex_same  s    z$TestFFTConvolve.test_2d_complex_samec                 C   sj   t g dg dg}t g dg dg dg}t|g d}t|g d}t|||d}t|| d S )Nrc  rf  rg  rh  ri  ra  rP  rT  rR  rS   rS   rT   test_2d_complex_same_axes6  s    	z)TestFFTConvolve.test_2d_complex_same_axesc                 C   s   t g d}t g d}t g d}t g d}|dkrFt||d}nt||d|d}t|| |dkrvt||d}nt||d|d}t|| d S )NrD   	r@   r@   rB   rC   r   ru   r   r   rE        A@     D@     G@	rO  g      4@      9@rn  ro  rp  r  g      <@r  rM  rW   rP  rQ  rO   rL  rP   rQ   Z
expected_1Z
expected_2r   rS   rS   rT   test_real_same_modeM  s    
z#TestFFTConvolve.test_real_same_modec                 C   s   t g d}t g d}t g d}t g d}t|ddg}t|ddg}t|ddg}t|ddg}t||d|d}t|| t||d|d}t|| d S )	NrD   rl  rm  rq  rF   rE   rW   rP  rT  rs  rS   rS   rT   test_real_same_mode_axes`  s    
z(TestFFTConvolve.test_real_same_mode_axesc                 C   s   t g d}t g d}t g d}|dkr:t||d}nt||d|d}t|| |dkrjt||d}nt||d|d}t|| d S )Nr@   rF   rE   rl  g      8@g      ?@ro  r  g     H@rr        (@rM  r   rP  rQ  rO   rL  rP   rQ   r   r   rS   rS   rT   test_valid_mode_realr  s    
z$TestFFTConvolve.test_valid_mode_realc                 C   sr   t g d}t g d}t g d}t|ddg}t|ddg}t|ddg}t||d|d}t|| d S Nrv  rl  rw  rF   rE   r   rP  rT  ry  rS   rS   rT   test_valid_mode_real_axes  s    z)TestFFTConvolve.test_valid_mode_real_axesc                 C   s   t g d}t g d}t g d}|dkr:t||d}nt||d|d}t|| |dkrjt||d}nt||d|d}t|| d S )N      @      y       @      @r   r9  y      @      y      @        y      @      y       @        y     F@      (@y      >@      7@y      H@      @@rM  r   rP  rQ  ry  rS   rS   rT   test_valid_mode_complex  s    
z'TestFFTConvolve.test_valid_mode_complexc                 C   s   t g d}t g d}t g d}t|ddg}t|ddg}t|ddg}t||d|d}t|| t||d|d}t|| d S )Nr}  r  r  rF   rE   r   rP  rT  ry  rS   rS   rT   test_valid_mode_complex_axes  s    
z,TestFFTConvolve.test_valid_mode_complex_axesc                 C   sr   t g d}t g d}t g d}t|ddg}t|ddg}t|ddg}t||ddd}t|| d S r{  rT  r   rS   rS   rT   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   rB   rC   ru   )r   r   r   r   rS   rS   rT   
test_empty  s    zTestFFTConvolve.test_emptyc                 C   s,   t d}t d}t||}t|||  d S rp   r   r   r	   rO   rP   rQ   r   rS   rS   rT   re     s    
zTestFFTConvolve.test_zero_rankc                 C   s0   t dg}t dg}t||}t|||  d S rp   r  r  rS   rS   rT   rq     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   rM  rP  绽|=r   )rj   r   r   randr   r   r   allclosery  rS   rS   rT   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   rF   rE   rP  r  r  )	rj   r   r   r  r   rU  r   r   r  ry  rS   rS   rT   test_random_data_axes  s    z%TestFFTConvolve.test_random_data_axesrA   c                 C   s<  d\}}t jd t jj| dt jj|   }t jj| dt jj|   }t||d}|d d d d d d d f }|d d d d d d d f }|d d d d d d d f }t |dddd}t |dddd}t |dddd}t |g d	}t |g d
}t |g d}t||d|d}t	||ddd d S )N)){   rH   )      r  r   r   r   rF   rE   rA   )rF   rE   r@   rE   rE   )rF   rE   rE   rA   rE   )rF   rE   r@   rA   rE   rP  r  r   )
rj   r   r   r  r   ZmoveaxisswapaxesrU  r   r   )rO   rL  Za_shapern   rP   rQ   r   r   rS   rS   rT   test_random_data_multidim_axes  s     	z.TestFFTConvolve.test_random_data_multidim_axesr   r   r@  i  r  rA  '  rB   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  )rj   r   r  r   r   r   )rO   r   rP   rQ   r   r   rS   rS   rT   test_many_sizes  s    zTestFFTConvolve.test_many_sizesc              	   C   s   d}t jd}||}t jt jfD ]\}||d< tdd}d}tj	t
|d" tj||dd	d
 W d    q&1 sx0    Y  q&d S )Nr@  l   [<zn( r      皙?z4Use of fft convolution.*|invalid value encountered.*r  rW   r   r   )rj   r   Zdefault_rngstandard_normalnaninfr   firwinr4  warnsRuntimeWarningr   )rO   r   rngZsig_nanvalZcoeffsr  rS   rS   rT   test_fft_nan  s    
zTestFFTConvolve.test_fft_nan)%r   r   r   r4  r5  r6  rS  rV  rd   rZ  r`  rb  rj  rk  rt  ru  rz  r|  r  r  r  r  re   rq   r  r  r  rJ  listrl   rj   r   RandomStaterandinttolistr  r  rS   rS   rS   rT   rK    s   







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

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











rK  c                  O   s   t dd S )NzFell back to fftconvolve)RuntimeError)r   r   rS   rS   rT   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   rP   rQ   rS   rS   rT   r   1  s   z!gen_oa_shapes.<locals>.<listcomp>rF   repeatr   sizesrS   rS   rT   gen_oa_shapes0  s    r  c                 C   s@   t | }t | }dd t||D }g d}dd t||D S )Nc                 S   s   g | ]\}}|| qS rS   rS   )r   Zishapes0Zishapes1rS   rS   rT   r   8  r   z$gen_oa_shapes_2d.<locals>.<listcomp>r;  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   rE   rF   r@   rS   )r   ZishapesZimoderS   rS   rT   r   <  s     )r  zipr   )r  Zshapes0Zshapes1ZshapesmodesrS   rS   rT   gen_oa_shapes_2d5  s    r  c                 C   s   dd t | ddD S )Nc                 S   s    g | ]\}}||kr||fqS rS   rS   r  rS   rS   rT   r   C  s   z$gen_oa_shapes_eq.<locals>.<listcomp>rF   r  r   r  rS   rS   rT   gen_oa_shapes_eqB  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g dejdd	d
gejdg ddd Zejdddgejdeg dejdddgejdddgejdd	d
gejdg ddd Zejdeg dejdd	d
gdd Zejdddgddgddggejdeg dejdddgejdddgejdd	d
gdd Zdd Zd d! Zd"d# Zd$S )%TestOAConvolvezshape_a_0, shape_b_0r   r@  rK   c                 C   s:   t j|}t j|}t||}t||}t|| d S N)rj   r   r  r   r   r   )rO   	shape_a_0	shape_b_0rP   rQ   r   r   rS   rS   rT   test_real_manylensH  s
    

z!TestOAConvolve.test_real_manylens)r   /   rC   rA   rE   
is_complexTFrY   r;  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   rX   r   
rj   r   r  r   setattrr   Z_signaltoolsr  r   r   )
rO   r  r  r  rY   monkeypatchrP   rQ   r   r   rS   rS   rT   test_1d_noaxesV  s    
zTestOAConvolve.test_1d_noaxesrL  r   rE   )r   r  rC   rA   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 )NrF   r   rY   rL  r   r  )rO   rL  r  r  r  r  r  rY   r  ax_aax_brP   rQ   r   r   rS   rS   rT   test_1d_axesj  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  )rO   r  r  	shape_a_1	shape_b_1rY   r  r  rP   rQ   r   r   rS   rS   rT   test_2d_noaxes  s    
zTestOAConvolve.test_2d_noaxesrF   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   rE   r   r  r   r  )rO   rL  r  r  r  r  rY   r  r  r  r  r  r  rP   rQ   r   r   rS   rS   rT   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   rS   rS   rT   r    s    zTestOAConvolve.test_emptyc                 C   s,   t d}t d}t||}t|||  d S rp   r   r   r	   r  rS   rS   rT   re     s    
zTestOAConvolve.test_zero_rankc                 C   s0   t dg}t dg}t||}t|||  d S rp   r  r  rS   rS   rT   rq     s    


z"TestOAConvolve.test_single_elementN)r   r   r   r4  r5  rJ  r6  r  r  rl   r  r  r  r  r  r  r  r  re   rq   rS   rS   rS   rT   r  G  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   sb   t ddd}t ddd}ttdd |||d	d
 W d    n1 sT0    Y  d S )NrE   ru   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr  r   rX   )rj   r   rk   r   r   rO   r  rP   rQ   rS   rS   rT   r     s    z(TestAllFreqConvolves.test_invalid_shapesc                 C   s^   t g d}t g d}ttdd" |||ddgd W d    n1 sP0    Y  d S )N)rB   rC   rF   rE   )rB   rC   r@   rE   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r  r   rE   rP  )rj   rE  r   r   r  rS   rS   rT   test_invalid_shapes_axes  s    z-TestAllFreqConvolves.test_invalid_shapes_axesza,brE   rF   r@   c                 C   s:   t tdd ||| W d    n1 s,0    Y  d S )Nz/in1 and in2 should have the same dimensionalityr  r   r   )rO   rP   rQ   r  rS   rS   rT   r     s    z)TestAllFreqConvolves.test_mismatched_dimsc                 C   s  t tdd" |dgdgdd W d    n1 s40    Y  t tdd" |dgdgg d W d    n1 sr0    Y  t td	d. |dgdgddgd
dggd W d    n1 s0    Y  t td	d& |dgdgg dd W d    n1 s0    Y  t tdd$ |dgdgdgd W d    n1 s@0    Y  t tdd$ |dgdgdgd W d    n1 s0    Y  t tdd& |dgdgddgd W d    n1 s0    Y  d S )Nz4acceptable mode flags are 'valid', 'same', or 'full'r  rE   rF   ZchipsrX   z#when provided, axes cannot be emptyrP  z-axes must be a scalar or iterable of integersr@   rA   )      ?r  r   r!  z$axes exceeds dimensionality of inputr[  zall axes must be uniquer   r  )rO   r  rS   rS   rT   test_invalid_flags  s0    00<444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slJ d S )N)rf   rf   )rA   rA   y        ?rg   rh   )rj   r   r   Ziscomplexobjr   r   r   r   )rO   r   ra   rb   resrS   rS   rT   test_longdtype_input  s    
z)TestAllFreqConvolves.test_longdtype_inputN)r   r   r   r4  r5  r6  r   r   r   r  r   r  rj   
longdoubleclongdoubler  rS   rS   rS   rT   r    s0   

	
r  c                   @   sJ  e Zd Zg dg dg dg dg dg dg dg dg d	g d
g
Zg dg dg dg dg dg dg dg dg dg dg
ZddgZdd Zej	de
je
je
je
jeee
je
je
je
jg
dd Zdd Zej	de
je
je
je
je
jgdd Zd d! Zd"d# Zd$d% Zd&d' Zej	de
je
je
jgd(d) Z d*S )+TestMedFilt)
r   r   r   r   r   r     rf   r   r   )
r   r   r   r   r   r   H   M   r  r  )
r   r   r   r   r   r   r     r   r  )
r   r   r   r   r   r         _   #   )
r   r   r   r   r   r   rZ   r   r"  r  )
r   a   rI   r  r   r  r   rz   G   r   )
r   r   r  r  r  rJ   r  r  r   r  )
r@   !   r   r   rE   r   r  7   rL   S   )
ru   r  r   r   r   r  r   +   r   r   )
rJ   r   X   ru   '   rA   r  r   r   r   )
r   r   r   r   r   r  r  r  rf   r   )
r   r   r   r   r   r   r  r"  r  r   )
r   r   r   r   r   r  rZ   rZ   r   r  )
r   r   r   r   r   r   r   r  r   r   )
r   r   r   r   r   r   r   r  r   r  )
r  r   r   r   r   r  r   r  r  r   )
rJ   r   r   r   r   r  r   r   r  r   )
ru   r   r   r   r  r   r   r  r   r"  )
r   rJ   r  r  rJ   rJ   r  r  r  r   )
r   ru   r  ru   rA   rA   r  r  r   r   ru   r@   c                 C   sB   t | j| j}t t| jt| j}t|| j	 t|| d S r  )
r   medfiltINKERNEL_SIZE	medfilt2drj   r   r-  r   OUT)rO   r   r   rS   rS   rT   rU   9  s    zTestMedFilt.test_basicr   c                 C   s8   t j| j|d}tt|j| tt|j| d S )Nr   )rj   r   r  r	   r   r  r   r  rO   r   in_typedrS   rS   rT   
test_types?  s    zTestMedFilt.test_typesc                 C   s   t j}t j| j|d}d}tj|d" tt|j	| W d    n1 sN0    Y  tj|d" tt
|j	| W d    n1 s0    Y  d S )Nr   "Using medfilt with arrays of dtyper  )rj   r  r   r  r4  deprecated_callr	   r   r  r   r  )rO   r   r  r  rS   rS   rT   test_types_deprecatedH  s    0z!TestMedFilt.test_types_deprecatedc                 C   s   t j| j|d}tjtdd t| W d    n1 s>0    Y  tjtdd t| W d    n1 sv0    Y  d S )Nr   znot supportedr  )	rj   r   r  r4  r   r   r   r  r  r  rS   rS   rT   test_invalid_dtypesR  s
    (zTestMedFilt.test_invalid_dtypesc                 C   sH   d}t jttf|d tttjd  W d    n1 s:0    Y  d S )NAkernel_size exceeds volume.*|Using medfilt with arrays of dtype.*r  )r4  r  UserWarningDeprecationWarningr   	TypeErrorr   r  )rO   r  rS   rS   rT   	test_none\  s    zTestMedFilt.test_nonec                 C   s:   t jdt jd}|dd }d|_tt|ddk d S )NrG   r   rB   rC   rv   rE         @)rj   r   r   rC  r   r   r  )rO   dummyrP   rS   rS   rT   test_odd_stridesb  s    zTestMedFilt.test_odd_stridesc                 C   s   t d}tj||gtd}ttdr4dt| }nd}d}tjt	t
f|d( t|D ]}t| qXW d    n1 s|0    Y  ttdrtt||k  t|||g d S )Nr  r   getrefcountrF   rG   r  r  )r   rj   r   objecthasattrsysr  r4  r  r  r  rl   r   r  r   r	   )rO   rP   ra   r   r  jrS   rS   rT   test_refcountingk  s    
*
zTestMedFilt.test_refcountingc                 C   sh   d}t j|dD tj| jtd}tj| jtd}tt	|| j
| W d    n1 sZ0    Y  d S )Nr  r  r   )r4  r  rj   r   r  r  r  r   r   r  r  )rO   r  Z	in_objectZ
out_objectrS   rS   rT   test_object|  s    zTestMedFilt.test_objectc           
         s  t jj|dt jj|d}j|jks0J |jd d  |jd d jd d d jd d d  fddt |}tddTh d	}fd
d|D }t|D ]}|	 \}}}	||||	f< qW d    n1 s0    Y  t
|| d S )Nr   r   rF   rE   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offNrO   rS   rT   apply  s$    



z2TestMedFilt.test_medfilt2d_parallel.<locals>.applyrA   )max_workers>   r   rE   )rE   r   rE   rE   r   r   c                    s   h | ]}  |qS rS   )submit)r   r  )r  poolrS   rT   	<setcomp>  r   z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>)rj   r   r  r  rB  r  Z
zeros_liker   r   r'  r   )
rO   r   r   outputchunksfuturesfuturedataZMsliceZNslicerS   )r  r	  r  r  r
  r  r  rO   rT   test_medfilt2d_parallel  s     
,z#TestMedFilt.test_medfilt2d_parallelN)!r   r   r   r  r  r  rU   r4  r5  r6  rj   ubytebyteushortshortr>   r=   	ulonglongr   r   r  r  Zbool_r   r   r  r   r  r  r  r  r  r  rS   rS   rS   rT   r    sP   


	r  c                   @   s   e Zd Zdd ZdS )
TestWienerc                 C   sr   t g dg dg dg dgd}t g dg dg dg d	g}tt||d
d ttj|dd|d
d d S )N)rB   rC   rA   r@   )r@   rB   rC   rF   )rF   r@   rB   rC   )rE   rC   r   ru   r   )gSXO@gXq	@gq@g?)g]`UUU@gFUUUU@gq@gcq@)gyq@gXq@gXq@gUJ4@)gUUUU?g2k6k@gҷWH@g@_)@rC   decimalr@   )Zmysize)r   r   r   Zwiener)rO   r   r   rS   rS   rT   rU     s    zTestWiener.test_basicNr   r   r   rU   rS   rS   rS   rT   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yorE   r   rF   rM  padtyper#  rG   )r2  cval)rF   rE   r   axisr/  )r-  )rj   r   r   Z
get_windowr   r   resampleresample_polyrU  r   rB  )rO   signumwinZsig2rS   rS   rT   rU     s    
zTestResample.test_basicr/  )Nhammingr  )r   r  r9  )r   r)  rG   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   rG   F)ZendpointrF   g      @r.  r   rE   r4  &.>r  )	rj   linspacecosr   r   r6  realr   sin)rO   r  r9  r/  ra   rb   Z	y_complexrS   rS   rT   	test_rfft  s    .zTestResample.test_rfftc                 C   sD   t dd }t|}d}ttj||ddtj||dddd d S )Nr*  r   freq)domaintimer<  r  )rj   r   r   r   r   r6  )rO   ZtsigZfsigr9  rS   rS   rT   test_input_domain  s    zTestResample.test_input_domainnx)rE   rF   r@   rB   r   nyr   )r-  r   c                 C   s2   t dg| |}t||}t|dg|  d S )NrE   )rj   r   r   r6  r   )rO   rF  rG  r   ra   rb   rS   rS   rT   test_dc  s    zTestResample.test_dcr2  c                 C   sF   t d}t jdd}| }tj|dd||d t|| d S )Nr@   r   rF   rB   rE   r/  r2  )	rj   rE  r   r  r   copyr   r7  r   )rO   r2  Zimpulser/  Zwindow_origrS   rS   rT   test_mutable_window  s
    
z TestResample.test_mutable_windowc                 C   sL   t jdt jd}t jg dt jd}tj|dd||d}|jt jksHJ d S )NrG   r   rE   rE   rE   rE   rF   rI  )rj   r   r   r   r   r7  r   )rO   r2  ra   r   rb   rS   rS   rT   test_output_float32  s    z TestResample.test_output_float32c                 C   s4   t jd|d}tj|dd|d}|j|jks0J d S )NrG   r   rE   rF   r1  )rj   r   r   r7  r   )rO   r2  r   ra   rb   rS   rS   rT   test_output_match_dtype  s    z$TestResample.test_output_match_dtypezmethod, ext, padtype)r   FNZ	polyphaseFTc                  C   s  d}g d}t |t| }t dd d t jf }t dt j | | t| }|D ]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v r~t||dd nt||dd n4t|j|j t ||d }t|dk|||	fd qBqZt 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 g d}t||dd t g d }t	|d}t ddg}t||dd d S )!Nr   )	r}   r   r   c   r   r)     r     )r        $@g      D@rF   r   r   r5  r  rG   rE   )r+  r  r.  rI  r2  r5        ?        )r%  r&  333333?r  r   r  gGz?)r  r   r1  r   r   rA   )r         ?        r   rW  -q=)r  rT  rU  rT  )rj   r   r-  r   newaxisr@  pir6   r   r6  r   maxr  r7  r  r   r   r   rB  Zcorrcoefr   r   r  Zcumsumr   Zinterp) rO   ri   extr2  raterates_tor   freqsra   rate_tot_toZy_tos	y_resampsr   updownZmax_rateZf_cZhalf_lenr/  ZpolyargsZy_toZy_resamprB  Zcorrr  r   Zy1_testZy1_truer   Zy2_testZy2_truerS   rS   rT   test_resample_methods$  sp     
 






z"TestResample.test_resample_methodsc                 C   s   t jd}tt jt jttf}d}g d}|D ]}||	|}|t jt j
fv rd|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 qxq.d S )Nrw   r  )rF   r  O   r   r   r   r|   r  r;  r.  constantr1  rE   Hz>r   r   )rj   r   r  intr   r   r-  r   r   r   r   r   r  r$   r   r7  r   )rO   Zrandom_stateZ	try_typesr   Zdown_factorsr   ra   rd  r   yfZhcrb   rS   rS   rT   test_poly_vs_filtfiltv  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)rF   rA   rE   r   )rJ   r  r   rg  rX   )rc  rd  r/  )rl   rj   r   r   r   r7  r   )rO   rd  rF  Znweightsra   weightsZy_gZy_srS   rS   rT   test_correlate1d  s    zTestResample.test_correlate1dN)r   r   r   rU   r4  r5  r6  rA  rE  rH  padtype_optionsrK  rM  rj   r   r   rN  r  r   re  rl  rn  rS   rS   rS   rT   r(    s<   


	
Ir(  c                   @   s   e Zd Zdd Zdd ZdS )TestCSpline1DEvalc                 C   sx   t g d}tt|}|d |d  }t|}tt|d d }tj||||d d}t|d d d |dd d S )	N)	rE   rF   r@   rA   r@   rF   rE   rF   r   rE   r   rR  )dxZx0rG   rB   r   )r   r   lenr   	cspline1dcspline1d_evalr   )rO   rb   ra   rq  cjr   y2rS   rS   rT   rU     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 )NrF   r   rR  r  r`   rT  )rj   r   rE  rB  r   exprZ  r   rs  r   rt  r	   r   )rO   ra   rb   Tr   cyZxnewZynewrS   rS   rT   rd     s    

zTestCSpline1DEval.test_complexN)r   r   r   rU   rd   rS   rS   rS   rT   rp    s   rp  c                   @   s   e Zd Zdd ZdS )TestOrderFiltc                 C   s$   t tg dg ddg d d S )NrD   rE   r   rE   rE   )rF   r@   rF   )r   r   Zorder_filterr   rS   rS   rT   rU     s    zTestOrderFilt.test_basicNr"  rS   rS   rS   rT   rz    s   rz  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ejd3d4d4ge d4gejd5d4d4ge d4gd6d7 Z!d8S )9_TestLinearFilterc                 C   s.   t dt |d t ||}| |S )Nr   rE   )rj   r=  prodrk   convert_dtype)rO   rB  ra   rS   rS   rT   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S d S )	NOZrefs_okZzerosize_okreadonlyZ	writeonlyrS   .r   )r   rj   asarrayemptyrB  Znditertype)rO   Zarrr   iterra   rb   rS   rS   rT   r~    s    

z_TestLinearFilter.convert_dtypec                 C   sJ   |  d}| ddg}| ddg}| g d}tt|||| d S NrC   rE   r   rT        ࿩r   rF   rA   rC   r   rR  r  r~  r   r"   rO   ra   rQ   rP   y_rrS   rS   rT   test_rank_1_IIR  s
    
z!_TestLinearFilter.test_rank_1_IIRc                 C   sH   |  d}| ddg}| dg}| g d}tt|||| d S )Nr  rE   r   rE   r@   rB   ru   rO  r  r  rS   rS   rT   test_rank_1_FIR  s
    
z!_TestLinearFilter.test_rank_1_FIRc           	      C   s|   |  d}| g d}| ddg}| ddg}| g d}| dd	g}t||||d
\}}t|| t|| d S )Nr  rE   r   r   rT  r  rE   rF   )rE   rB   r      rw   r"  r  zir  r~  r"   r   	rO   ra   rQ   rP   r  r  zf_rrb   zfrS   rS   rT   test_rank_1_IIR_init_cond  s    

z+_TestLinearFilter.test_rank_1_IIR_init_condc           	      C   sz   |  d}| g d}| dg}| ddg}| g d}| ddg}t||||d\}}t|| t|| d S )Nr  rL  rE   )rE   rF   r@   rC   r   rx  r   rB   r  r  r  rS   rS   rT   test_rank_1_FIR_init_cond  s    

z+_TestLinearFilter.test_rank_1_FIR_init_condc                 C   sf   |  d}| ddg}| ddg}| g dg dg dg dg}t|||dd}t|| d S )	NrA   r@   rE   r   rT  r   rF   rA   rC   rA   rF   r   rS  r  )rO   ra   rQ   rP   y_r2_a0rb   rS   rS   rT   test_rank_2_IIR_axis_0  s    
z(_TestLinearFilter.test_rank_2_IIR_axis_0c                 C   sf   |  d}| ddg}| ddg}| g dg dg dg dg}t|||dd	}t|| d S )
Nr  rE   r   rT  r   rF   r   rC   r  rC   rL   r  rL   r  ir  rS  r  )rO   ra   rQ   rP   y_r2_a1rb   rS   rS   rT   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}| g dg dg dg d	g}| g d
d d tjf }t|||d|d\}}t|| t|| d S )Nr  rE   r   rT  )rA   rE   rL  )ru   ru   )r  r  )r  r  )r  r  iir5  r  )r  r~  rj   r%  rY  r"   r   )	rO   ra   rQ   rP   r  Z	y_r2_a0_1r  rb   r  rS   rS   rT    test_rank_2_IIR_axis_0_init_cond  s    

z2_TestLinearFilter.test_rank_2_IIR_axis_0_init_condc           	      C   s   |  d}| ddg}| ddg}| td}| g dg dg dg dg}| g dg}t|||d	|d
\}}t|| t|| d S )Nr  rE   r   rT  )rE   r@   )rE   r@   rB   )rB   r@   rE   )r  r  r   r  )r  r~  rj   r%  r"   r   )	rO   ra   rQ   rP   r  Z	y_r2_a0_0r  rb   r  rS   rS   rT    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rA   r@   rF   rE   r   rT  c                    s   t  | S r  r"   wrP   rQ   rS   rT   <lambda>-  r   z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>r  r~  rl   ndimr"   rj   apply_along_axisr   rO   ra   r5  rb   r  rS   r  rT   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  rE   r   rT  c                    s   t  | dd S Nr  r   r  r  rP   rQ   zi1rS   rT   lf0;  s    z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf0c                    s   t  | dd S Nr  rE   r  r  r  rS   rT   lf1=  s    z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf1r  r~  rl   r  r  rB  rj   r%  r"   r  r   rO   ra   r5  Zzi_shaper  rb   r  r  r  r  r  rS   r  rT   test_rank_3_IIR_init_cond0  s    


z+_TestLinearFilter.test_rank_3_IIR_init_condc                    sh   |  d}| g d| dg t|jD ]4}t ||}t fdd||}t|| q.d S )Nr  r  rE   c                    s   t  | S r  r  r  r  rS   rT   r  K  r   z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>r  r  rS   r  rT   test_rank_3_FIRD  s    
z!_TestLinearFilter.test_rank_3_FIRc                    s   |  d}| g d| dg t|jD ]}t|j}d||< | t|}| ddgt |||\}} fdd} fdd}t	|||}	t	|||}
t
||	 t
||
 q.d S )	Nr  r  rE   rF   c                    s   t  | dd S r  r  r  r  rS   rT   r  Y  s    z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf0c                    s   t  | dd S r  r  r  r  rS   rT   r  [  s    z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf1r  r  rS   r  rT   test_rank_3_FIR_init_condN  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)rA   rB   r   r   r  bar  r   rE   rA   rB   r  r   )r  r   r%   r~  rB  rj   r%  r"   r   r   r   )rO   ra   rQ   rP   Zzi_sizeZzi_fullZzi_singZy_fullZzf_fullZy_singZzf_singrS   rS   rT   test_zi_pseudobroadcastb  s    




z)_TestLinearFilter.test_zi_pseudobroadcastc                 C   sP   |  d}| g d}| dg}| g d}t||d |}t|| d S )NrC   r  rE   )r   rE   rF   rF   rF   rF   r   r  )rO   ra   rQ   rP   r  rb   rS   rS   rT   test_scalar_aw  s    
z_TestLinearFilter.test_scalar_ac                 C   s6  |  tdd}|  tdd}|  tg d}tdd}|dd d d d f  d9  < |dd d d d f  d9  < |  |}|  td	d}tdd}dggdggdggg|d d d d d d
f< |  |}t|||d|\}}t|| t|| t||d |d|\}	}
t|	| t|
| d S )N)r@   rF   rB   lrB   rE   r   r   )r@   rE   rA   rE   rF   r@   )r@   rF   rA   rA   r   r   )r~  rj   rE  r%  r   r"   r   )rO   ra   rQ   rP   r  Zzf_expectedZ
y_expectedZy_iirZzf_iirZy_firZzf_firrS   rS   rT   test_zi_some_singleton_dims  s"    
,



z-_TestLinearFilter.test_zi_some_singleton_dimsc                 C   s@   |  |}|  |}|  |}|  |}ttt||||| d S r  )r~  r   r   r"   )rO   rQ   rP   ra   r5  r  rS   rS   rT   base_bad_size_zi  s
    



z"_TestLinearFilter.base_bad_size_zic                 C   s	  t d}| dgdg|ddg | ddgdg|dddg | ddgdg|ddgg | ddgdg|dg d | g ddg|ddgg | g ddg|dg d | dgddg|dddg | dgddg|ddgg | dgddg|dg d | g dddg|ddg | g dddg|ddgdgg | g dddg|dg d | g dddg|dg d | ddgg d|ddg | ddgg d|ddgdgg | ddgg d|dg d | ddgg d|dg d t dd	}| dgdg|ddg | ddgdg|dg d | ddgdg|dg dgg | ddgdg|ddgdgd
gg | ddgdg|dddgg | ddgdg|dg dg | g ddg|dg d | g ddg|dg dg dgg | g ddg|dddgd
dgddgg | g ddg|dddgd
dgg | g ddg|dg dg dg | dgddg|dg d | dgddg|dg dgg | dgddg|ddgdgd
gg | dgddg|dddgg | dgddg|dg dg | dgg d|dg d | dgg d|dg dg dgg | dgg d|dddgd
dgddgg | dgg d|dddgd
dgg | dgg d|dg dg dg | g dddg|dg d | g dddg|dg dg dgg | g dddg|dddgd
dgddgg | g dddg|dddgd
dgg | g dddg|dg dg dg | dgdg|ddg | ddgdg|dg d | ddgdg|ddgdgd
gdggg | ddgdg|dg dg | ddgdg|ddgdgd
gg | ddgdg|ddgdgd
gdgdgg | g ddg|dg d | g ddg|dddgd
dgddgddggg | g ddg|dg dg dg | g ddg|dddgd
dgddgg | g ddg|dddgd
dgddgddgddgg | dgddg|dg d | dgddg|ddgdgd
gdggg | dgddg|dg dg | dgddg|ddgdgd
gg | dgddg|ddgdgd
gdgdgg | dgg d|dg d | dgg d|dddgd
dgddgddggg | dgg d|dg dg dg | dgg d|dddgd
dgddgg | dgg d|dddgd
dgddgddgddgg | g dddg|dg d | g dddg|dddgd
dgddgddggg | g dddg|dg dg dg | g dddg|dddgd
dgddgg | g dddg|dddgd
dgddgddgddgg d S )NrC   rE   r   r   r   rE   rF   rL  r   rE   rF   r@   rL   r  rF   )r   rE   rF   r@   rA   rB   rV   r@   rA   rB   )rA   rB   rC   ru   )r   rE   rF   r@   rA   rB   rC   ru   ru   r   r   )rj   r   r  rk   )rO   r   r   rS   rS   rT   test_bad_size_zi  s    
""	 $&*$$ $&*$$(,&&*$,2$*6*$,2$*64&,z"_TestLinearFilter.test_bad_size_zic                 C   sh   |  d}| dg}| dg}| g }t||||d\}}t|| t|j| j t|jd d S )N)rB   rE   r  r   )r  r~  r"   r   r	   r   r   )rO   ra   rP   rQ   r  rb   r  rS   rS   rT   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 )NrE   r  r   TF)r~  r+   r   )rO   rP   rQ   r  Zzi_1Zzi_2rS   rS   rT   test_lfiltic_bad_zi  s    
z%_TestLinearFilter.test_lfiltic_bad_zic           	      C   sz   |  dg}|  g d}|  ddg}|  dg}|  dg}|  ddg}t||||d\}}t|| t|| d S )	NrE   r  rF   ru   r  r  r  r~  r"   r   	rO   rP   rQ   r  ra   ZyeZzferb   r  rS   rS   rT   test_short_x_FIR  s    
z"_TestLinearFilter.test_short_x_FIRc           	      C   s|   |  ddg}|  g d}|  ddg}|  dg}|  dg}|  ddg}t||||d	\}}t|| t|| d S )
NrE   r  rF   ru   r  r  ir  r  r  r  rS   rS   rT   test_short_x_IIR&  s    
z"_TestLinearFilter.test_short_x_IIRc                 C   sr   |  d}| ddg}| }| ddg}| }| g d}t|||}t|| t|| t|| d S r  r  r~  rJ  r"   r   r	   rO   ra   rQ   Zb0rP   a0r  y_frS   rS   rT   test_do_not_modify_a_b_IIR3  s    


z,_TestLinearFilter.test_do_not_modify_a_b_IIRc                 C   sp   |  d}| g d}| }| dg}| }| g d}t|||}t|| t|| t|| d S )Nr  r{  rF   )r   rT  rE   rF   r@   r!  r  r  rS   rS   rT   test_do_not_modify_a_b_FIR?  s    


z,_TestLinearFilter.test_do_not_modify_a_b_FIRrP   r  rQ   c                 C   s:   t jd}ttt dgt dg|t||| d S )NrG   r  )rj   r   r   r   r"   r   )rO   rP   rQ   r  rS   rS   rT   test_scalar_inputK  s
    
z#_TestLinearFilter.test_scalar_inputN)"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  r4  r5  r6  rj   r   r  rS   rS   rS   rT   r|    s8   		


`r|  c                   @   s   e Zd ZedZdS )TestLinearFilterFloat32r   Nr   r   r   rj   r   rS   rS   rS   rT   r  T  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterFloat64r   Nr  rS   rS   rS   rT   r  X  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterFloatExtendedr   Nr  rS   rS   rS   rT   r  \  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterComplex64FNr  rS   rS   rS   rT   r  `  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterComplex128DNr  rS   rS   rS   rT   r  d  s   r  c                   @   s   e Zd ZedZdS )TestLinearFilterComplexExtendedGNr  rS   rS   rS   rT   r  h  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   strrO   ra   rS   rS   rT   r  n  s    zTestLinearFilterDecimal.typeN)r   r   r   rj   r   r  rS   rS   rS   rT   r  k  s   
r  c                   @   s   e Zd ZedZeZdS )TestLinearFilterObjectr  N)r   r   r   rj   r   r-  r  rS   rS   rS   rT   r  r  s   
r  c                   C   sj   t tdrdtjv rtd tttdgdgg d tttdgd gg d tttd gdgg d d S )Nabiflagsr   z'test is flaky when run with python3-dbgr  )r  Nr  r  r  r   )r  r   r  r4  skipr   r  r"   rS   rS   rS   rT   test_lfilter_bad_objectw  s
    
r  c                   C   s    t ttddgddgg d d S )NrF   r@   rA   rB   )rE   rF   r@   rA   rB   )r   NotImplementedErrorr"   rS   rS   rS   rT   !test_lfilter_notimplemented_input  s    r  dtc                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestCorrelateRealc                 C   sF   t ddd|}t ddd|}t g d|}|||fS )Nr   r@   rA   rE   rF   )r   rF   rB   r   r@   )rj   r=  r   r   rO   r  rP   rQ   r  rS   rS   rT   _setup_rank1  s    zTestCorrelateReal._setup_rank1c                 C   sH   d}z,t |}t|dr.tdt |j }W n tyB   Y n0 |S )NrC   
resolutionr  )rj   finfor  rj  log10r  	Exception)rO   res_dtr!  Zdt_inforS   rS   rT   equal_tolerance  s    

z!TestCorrelateReal.equal_tolerancec                 C   s$   |t jkr| t jS | |S d S r  )rj   r  r  r   )rO   r  rS   rS   rT   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 )NrA   r@   rg   r   rh   r   )	r   r   r	   _setup_rank3r   r   r  r   r  )rO   r  ri   rP   rQ   r  Zy_fftZy_directrS   rS   rT   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   rE   rA   r   r  r   r   r	   r   rO   r  rP   rQ   r  rb   rS   rS   rT   test_rank1_valid  s    z"TestCorrelateReal.test_rank1_validc                 C   s>   |  |\}}}t||d}t||d d  t|j| d S )NrW   r   r  r  rS   rS   rT   test_rank1_same  s    z!TestCorrelateReal.test_rank1_samec                 C   s6   |  |\}}}t||d}t|| t|j| d S )Nr   r  r  rS   rS   rT   test_rank1_full  s    
z!TestCorrelateReal.test_rank1_fullc              
   C   s   t dddjddd|}t dddjd	dd|}tg d
g dg dg dg dg dgg dg dg dg dg dg dgg dg dg dg dg dg dggt jd|}|||fS )Nr   r  r   )rF   rA   rB   r  )orderrK   r   rs   )rU  g      g@g     @g     @     @@g     @g     }@g      d@)g      G@g      {@g     @g     @g     @     @g      @g     p@)     `@g      @g     @g     @     @g     @g     @@g     s@)g     @p@g     @g     0@g     @g     p@g     (@g     `@g     t@)g     @i@g     @     (@g      @g      @g     ؘ@g     @@g     b@)g     \@g     u@g     @g      @g      @g     @g     r@g      C@)g      7@g      y@g     ,@     @g     @g     $@g     @@g     Pr@)r  g     @g     @g     @g     @g     ԩ@g     @g     }@)g     Pt@g      @g     R@g     @g     (@g     K@g      @g     @)g     ؁@g     @g     f@g     @g     (@g     }@g     (@g     @)g      {@r  g     4@r  g     @g     ܧ@g     @     l@)g      n@g     @g     @g     @g     @g     @g     @r  )g      6@g     j@g     @g     @g     Д@g     p@g     z@g     `@)g     U@g     @~@g     (@r  g     P@g     @g      @g     i@)g     g@g     @r  g     X@g     @g     @g     Џ@g     @k@)g     @s@g     p@g     x@g     h@g     @g     @g     ؐ@r	  )r	  g     @r  g      @g     @g     Ȗ@g     @g     S@)g     _@g      v@g     @g     @g     @g     p@g     @m@rU  r   )rj   r=  rk   r   r   r   r  rS   rS   rT   r    sB    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   rE   rF   rA   r@   rB   r   r  r   r   r	   r   r  rS   rS   rT   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 )NrW   r   r   rE   r[  r
  r  rS   rS   rT   test_rank3_same  s     z!TestCorrelateReal.test_rank3_samec                 C   s4   |  |\}}}t||}t|| t|j| d S r  r
  r  rS   rS   rT   test_rank3_all  s    

z TestCorrelateReal.test_rank3_allN)r   r   r   r  r  r  r  r  r   r  r  r  r  r  rS   rS   rS   rT   r    s   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestCorrelatec                 C   sh   t ddd}t ddd}tttg||fR i ddi tttg||fR i ddi d S r   )rj   r   rk   r   r   r   r   rS   rS   rT   r     s     z!TestCorrelate.test_invalid_shapesc                 C   sv   g d}g d}t tt||dd t tt||ddd t tt||dd	d t tt||d
dd t tt||ddd d S r   r   r   r   r   rS   rS   rT   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   rS   rS   rT   r     s    z"TestCorrelate.test_mismatched_dimsc                 C   s   g d}ddg}t t||ddg d g d}g d}t t||ddg d t t||d	dg d
 t t||dddg d S )NrD   rA   rB   rW   rX   )rB      rK   rt   )rw   rJ   rK   r   )rC   rw   rJ   rK   rL   r   rJ   )r   r   r   rS   rS   rT   test_numpy_fastpath%  s    z!TestCorrelate.test_numpy_fastpathN)r   r   r   r   r   r   r  rS   rS   rS   rT   r    s   		r  rY   r   rW   r   behindTF
input_size)r   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   rG   rX   )rj   r   r  r  rj  concatenater   r   r   Zargmaxr	   rB  )rY   r  r  r  Zin1offsetZin2r   ZcorrelationZlagsZ	lag_indexrS   rS   rT   test_correlation_lags1  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 )NrF   r@   )rj   r  cdoublerj  r  	precision)rO   r  rS   rS   rT   r!  V  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   rG   r   r   rX   )rj   r   r   r   r   r   r?  imag)rO   r  rY   rP   rQ   r  rS   rS   rT   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  rS   rS   rT   r  h  s    "z%TestCorrelateComplex.test_rank1_validc                 C   sB   |  |d\}}}t||d}t||| |d t|j| d S )NrW   r   r  r   r   r!  r	   r   r  rS   rS   rT   r   s  s    z$TestCorrelateComplex.test_rank1_samec                 C   sB   |  |d\}}}t||d}t||| |d t|j| d S )Nr   r   r  r  rS   rS   rT   r  y  s    z$TestCorrelateComplex.test_rank1_fullc                 C   s@   t jg d|d}t jg d|d}t||}t|g d d S )Nr   r]   rX  r   y      ?      @y       @      @y      @      @y      @      @)r         $@             <@            6@      y      0@      y       @      )rj   r   r   r	   rO   r  r   krb   rS   rS   rT   test_swap_full  s    
z#TestCorrelateComplex.test_swap_fullc                 C   s0   g d}g d}t ||dd}t|g d d S )Nr  r  rW   rX   )r   r!  r"  )r   r	   r#  rS   rS   rT   test_swap_same  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 )	NrG   r   rC   r   rA   r   rE   r   )rj   r   r   r   r   r?  r  r   r!  r	   r   r  rS   rS   rT   
test_rank3  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   rE   r   r`                 @rA   )rj   r   r   r   r   r   r?  r  r   r!  r	   r   r  rS   rS   rT   
test_rank0  s$    
zTestCorrelateComplex.test_rank0N)r   r   r   r!  r  r  r   r  r%  r&  r'  r)  rS   rS   rS   rT   r  M  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 g d}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 )NrB   r:  r;  rX   r   )rj   r   r   r
   r   r   r<  r   r=  rS   rS   rT    test_consistency_correlate_funcs  s(    
z0TestCorrelate2d.test_consistency_correlate_funcsc                 C   sl   t ddd}t ddd}tttjg||fR i ddi tttjg||fR i ddi d S r   )rj   r   rk   r   r   r   r   r   rS   rS   rT   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 )NrE   r`                 r(  rC   rA   y              (@)r	   r   r   r   rS   rS   rT   test_complex_input  s    z"TestCorrelate2d.test_complex_inputN)r   r   r   r+  r   r-  rS   rS   rS   rT   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   sB   t g d}t g d}t ddg}t||}t|| d S )N)r  r  rT  )r  rU  r  r  r  )rj   r   r#   r   )rO   rP   rQ   Zzi_expectedr  rS   rS   rT   rU     s
    
zTestLFilterZI.test_basicc                 C   sJ   t g d}t g d}t||}td| d| }t||dd d S )N)rF   r   rB   )rE   rE   r   rF   rX  r  )rj   r   r#   r   )rO   rQ   rP   r  Zzi2rS   rS   rT   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   rE   )rj   rE  r   r	   r?  r   r#   r   )rO   r   rQ   rP   rS   rS   rT   r    s    zTestLFilterZI.test_typesN)r   r   r   rU   r/  r4  r5  r6  rj   r   r   r  rS   rS   rS   rT   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 )Nr1  sos)filtfilt_kindr&   r$   r'   r.   )rO   zpkra   r5  r2  padlenri   irlenrQ   rP   r3  rS   rS   rT   r$     s    

zTestFiltFilt.filtfiltc                 C   s:   t g dg d}| |td}t|tddd d S )NrD   rL   g6{=r  )r0   r$   rj   r   r   )rO   r5  r   rS   rS   rT   rU     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  rE   rG   i  r         ?r5  r  r   )r6  r   r6  r5  )rj   r=  r@  rZ  r%   r  r[  rj  ceillogr$   r   vstackr	   rB  rx  )rO   r]  r   ZxlowZxhighra   r5  repsr   rb   errZx2dZy2dZy2dtrS   rS   rT   	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     @rG   r  rL   r@   r8  r5  r  r   r9  rE   rF   )rj   r   rk   r%   r$   r  r   )rO   ra   r5  Zy0y1rv  rS   rS   rT   	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 )Nr1  rT  rE   rG   +=r   )r4  r   r$   rj   r   r   )rO   r   rS   rS   rT   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 )Nr1  $gust only implemented for TF systemsr  r  rT  r  r   rV  r  rE         ?r8  )r4  r4  r  rj   r   r7   r   )rO   ra   rQ   rP   rb   z1z2rS   rS   rT   test_gust_simple1	  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 )	Nr1  rE  rL   r   r  gustrh   rF   )r4  r4  r  rj   r   r$   r   )rO   ra   rQ   rP   rb   r   rS   rS   rT   test_gust_scalars?	  s    


zTestFiltFilt.test_gust_scalars)r   r2  Nr2  N)r   r   r   r4  r$   rU   r@  rB  rD  rI  rK  rS   rS   rS   rT   r0    s     
	"
r0  c                   @   s   e Zd ZdZdd ZdS )TestSOSFiltFiltr3  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@  rE   rC   ffffff?r5  r  rX  zorder=%s)r   err_msgN)rj   r   r  r   rl   r   r%   r&   r'   r$   r.   r   )	rO   ra   r  r5  rQ   rP   r3  rb   y_sosrS   rS   rT   test_equivalenceP	  s    
z TestSOSFiltFilt.test_equivalenceN)r   r   r   r4  rP  rS   rS   rS   rT   rL  M	  s   rL  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 )aQ  
    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 significantly 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.rE   Nr  r   r   rF   )r[  rr  r"   rj   sum)icsrQ   rP   ra   mz0fz0br  Zy_fby_bZy_bfvaluerS   rS   rT   filtfilt_gust_opt_funce	  s    ((z1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_funcrE   Nr  rX  r  TF)r   ZxtolZftolZmaxfunmaxiterZfull_outputZdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%dr   r  )	r[  rr  r#   rj   r  r#  r   r  r"   )rQ   rP   ra   rX  rS  r  rR  r'  optZfoptZniterZfuncallsZwarnflagrT  rU  rV  rb   rS   rS   rT   filtfilt_gust_opt\	  s&    	
0(r[  c                 C   sH  t jd t jj| }t| |||d|d}t| ||||d\}}}	t ||d}
|
jd d }t |
}t	t
|t
| d }t ||f }t ||f }tdd |D  D ]&}t| ||
| \||< ||< ||< 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  rJ  )r5  ri   r7  )r5  r7  r   rE   c                 S   s   g | ]}t |qS rS   )rl   )r   r   rS   rS   rT   r   	  r   z'check_filtfilt_gust.<locals>.<listcomp>r   r<  r   )rj   r   r   r   r$   r7   r  rB  Z
empty_liker[  rr  r  r   r[  r   )rQ   rP   rB  r5  r7  ra   rb   ZygZzg1Zzg2xxZ	out_shaper0  rS  Zzo1Zzo2ZindxrS   rS   rT   check_filtfilt_gust	  s&    
$r]  c                  C   sN  dD ]B} dD ]}d\}}}t jj|f|  }t jj|f|  }t||| d}t|| t||| dd\}}	t|dv  tt|	t td|	 v od	|	 v  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 )Nr  )rE   rF   )r   rC   rg   rX   T)rY   measure>   rg   r   r   rg   rG   )Z
complex256Z
complex192r   l         @ r@   rF   rE   rA   )rj   r   r   r   r	   r   
isinstancedictkeysr  r%  rJ  r   r   r   )rY   r  r   r$  Ztrue_methodra   r   ri   Z
method_trytimesZnot_fft_conv_supprS   rS   rT   test_choose_conv_method	  s.    



rc  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 ]L}d	| }	t|||	fd
| tdD ]$}
g d}|	||
< t||||
| qqpd| d }t|||fd
| d S )Nr@   {Gz?x   gffffff?r5  r  r  r  rB   r   )rF   rF   rF   rF   r   )r   Zelliprj   r[  r  rj  r:  r;  r   r   r&   r]  rl   )rc   pr$  r>  r=  Zapprox_impulse_lenrQ   rP   r7  Z
signal_lenr5  rB  lengthrS   rS   rT   test_filtfilt_gust	  s    rh  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 )TestDecimatec                 C   s6   t d}tttj|ddd tttj|ddd d S )NrL   rT  rE   )qr   rF   )rj   r   r   r  r   decimater  rS   rS   rT   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 )NrL   rF   rE   iirFr   ftype
zero_phaserj   r   r   rk  roundr   rO   ra   rb   rS   rS   rT   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 )NrL   rF   rE   firFrn  rq  rs  rS   rS   rT   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)rx   rx   rF   r   F)r5  rp  )r  rx   rE   )rx   r  )rj   rE  r   rk  r	   rB  )rO   rc   Zd0Zd1rS   rS   rT   
test_shape	  s
    
zTestDecimate.test_shapec                 C   sD   t  *}|td | jddd W d    n1 s60    Y  d S )NBadly conditioned filterru  Fri   rp  r   r  r1   _test_phaseshiftrO   r  rS   rS   rT   test_phaseshift_FIR	  s    z TestDecimate.test_phaseshift_FIRc                 C   sD   t  *}|td | jddd W d    n1 s60    Y  d S )Nrx  ru  Try  rz  r|  rS   rS   rT   test_zero_phase_FIR
  s    z TestDecimate.test_zero_phase_FIRc                 C   s   | j ddd d S )Nrm  Fry  r{  r   rS   rS   rT   test_phaseshift_IIR
  s    z TestDecimate.test_phaseshift_IIRc                 C   s   | j ddd d S )Nrm  Try  r  r   rS   rS   rT   test_zero_phase_IIR
  s    z TestDecimate.test_zero_phase_IIRc                 C   s  d}g d}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r:d}dt j |
 }tjt|d|t j  }|du rxt|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 qvd S )Nre  )r  r   rx   r   r   rE   皙?rF   r`   皙?ru  rx   r  r;  r.  rm  r   g?Fro  rp  r   rS  rT  r   r   ri  )rj   r   r-  r   rw  rZ  rY  r   windowsZtukeyr   dltir  Zcheby1Zfreqzr9  Zdenr  Z	ones_likerk  r?  rQ  r  r   angle)rO   ri   rp  r]  r^  Zt_totr   r_  r   r`  rj  ra  Zd_tosr   systemwc_Zh_respsrb  Z	h_resampsZsubnyqrS   rS   rT   r{  
  sP    $
$



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  rF   g      >@r  r   r  rx   ru  )ro  rd  )rj   r   sqrtr@  rZ  r   ZlinalgZnormr   rk  r   )rO   Zsfreqr   r   ra   Zx_outrS   rS   rT   test_auto_n>
  s    *zTestDecimate.test_auto_nc                 C   s.   t tjdtjdd}tt|r*J d S )Nr  r   rG   )r   rk  rj   r%  r   r   isnanr  rS   rS   rT   test_long_float32J
  s    zTestDecimate.test_long_float32c                 C   s.   t tjdtjdd}|jjtjks*J d S )Nr   r   rG   )r   rk  rj   r%  r   r   r  r   r  rS   rS   rT   test_float16_upcastP
  s    z TestDecimate.test_float16_upcastc                 C   sX  d}d}d}t jddtj | d d|d\}}}|ttdtj | |  }|ttdtj | |  }t |||}td| }tdtj | | d	td
tj | |   }	t j	|	d|dd}
t j
g t ||||	R  d d d }t|
| t j	|	d|dd}t jg t ||||	R  d d d }t||ddd d S )Nr   rB        @@rF   r5  )r  fsr`   r  rT  r,  Fr  Tr  vIh%<=r   )r   r%   rj   rZ  r   r   rw  r  r   rk  r"   r&   r	   r$   r   )rO   fcentrefwidthr  rc   rf  r$  r  r   r   ynzpynzprefyzpyzprefrS   rS   rT   test_complex_iir_dltiU
  s2    &""
z"TestDecimate.test_complex_iir_dltic                 C   s  d}d}d}d}t j||d |d}t|}|tdtj | |  }|d t| }t |d	}	td
| }
tdtj | |
 dtdtj | |
   }t j	|d|	dd}t j
||d	ddd d }t|| t j	|d|	dd}t j|d	d|d}t|| d S )Nr   rB   r  r   rF   )r  r`   r   rE   r  rT  r,  Fr  )rc  rd  r   Tr.  )r   r  rj   rootsrw  rZ  polyr  r   rk  Zupfirdnr	   r7  )rO   r  r  r  ZnumtapsZbbaseZzbaseZzrotZbzr  r   r   r  r  r  r  rS   rS   rT   test_complex_fir_dltiu
  s&    

z"TestDecimate.test_complex_fir_dltiN)r   r   r   rl  rt  rv  rw  r}  r~  r  r  r{  r  r  r  r  r  rS   rS   rS   rT   ri  	  s   0 ri  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   r,  r   r  )rj   r   r   r   r    r   r  rS   rS   rT   rl  
  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   rF   r*  rE   r)  r@   )rj   rZ  r   r@  r>  r<  r    r  r  r?  r
   r%  rB  r  )rO   r!  rZ  r   r  a1a2a3rP   r   Zh_absZh_angleZh_realrS   rS   rT   test_hilbert_theoretical
  s:    




  z$TestHilbert.test_hilbert_theoreticalc                 C   s   t ddd}t|dd}tt|jdd|j tt|d |d d t|ddd	}t|jddg tt|jddd	jddg t g d
}t|d |dd d S )Nr  r@   rC   r   rS  r   r  r   )r  r5  )y        Bm}ąy      ?a y?0fy      @Wa94y      @"nWy      @hIX@y<nm@yF8O2k{?yډoP?y̼YC?y433333<c4Qe?yȒ40p$?yESU?yffffff<?7?y433333<wEoy!5P{3'ſy        _N@տy<}ٿy<-cyF8<2OW\zN regression)	rj   r   rk   r    r	   rx  r
   rB  r   )rO   rP   ZaaZaanZa0hilbrS   rS   rT   test_hilbert_axisN
  s    zTestHilbert.test_hilbert_axisNr   c                 C   s*   t jd|d}tt t|j| d S )Nr   r   )rj   rE  r	   r?  r   r    r   r  rS   rS   rT   test_hilbert_types
  s    zTestHilbert.test_hilbert_typesN)r   r   r   rl  r  r  r4  r5  r6  rj   r   r   r  rS   rS   rS   rT   r  
  s
   )%r  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   rF   r@   rA   rv   r   r  )rF   r   )rF   )rj   r   r   r   r!   r   rk   r  rS   rS   rT   rl  
  s    zTestHilbert2.test_bad_argsr   c                 C   s*   t jd|d}tt t|j| d S )N)rF   rJ   r   )rj   rE  r	   r?  r   r!   r   r  rS   rS   rT   test_hilbert2_types  s    z TestHilbert2.test_hilbert2_typesN)r   r   r   rl  r4  r5  r6  rj   r   r   r  rS   rS   rS   rT   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 )$TestPartialFractionExpansionru   c                 C   s   t |}t |}t t|d d d f | t| d d d f | }t|\}}t|| || |d t| | || |d d S )Nr   )rj   r  hypotr  r   r
   )r=  rf  Zr_trueZp_truer!  ZdistancerowscolsrS   rS   rT   assert_rp_almost_equal  s    

z3TestPartialFractionExpansion.assert_rp_almost_equalc                 C   sP  t g dg d\}}tt|d t|d tg d t|d tg d t|d tg d	 t|tg d
 t g dg ddd\}}tt|d t|d tg d t|d tg d t|d tg d t|d tg d t|d tg d t|d tg d	 t|tg d
 d S )NrD   rv  r@   r   )rF   rF   r@   rE   )rE   rE   rE   r@   rF   )rE   rE   rE   rF   rF   )rE   rE   rE   rF   rF   r@   T)Zinclude_powersrC   )rE   rE   rF   rF   r@   )rE   rF   rF   r@   )rE   rE   rE   rF   r@   rA   rB   )r8   r	   rr  r
   rj   r  )rO   Zfactorsr  rS   rS   rT   test_compute_factors  s"    
z1TestPartialFractionExpansion.test_compute_factorsc                 C   s4   t g ddd\}}t|g d t|g d d S )N)r  gjt?g?5^I?r  g/$ @r   r  minr  rv  )r9   r	   rO   uniquemultiplicityrS   rS   rT   test_group_poles-  s
    
z-TestPartialFractionExpansion.test_group_polesc                 C   s>  t g dg d\}}}t|g ddd t|g ddd t|dgdd t dd	gg d
\}}}t|d	dg t|ddg t|jd t ddgg d\}}}t|ddg t|ddg t|jd t ddgg d\}}}| ||g dg d t|jd t ddgg d\}}}| ||g dg d t|jd t g dg d\}}}t|g d t|g d t|ddg t dgg d\}}}t|ddg t|dd g t|jd t g d!g d"\}}}| ||g d#g d$ t|jd t g d%g d&\}}}| ||g d'g d( t|jd t ddgg d)\}}}t|dd*g t|ddg t|jd t g d+g d)\}}}t|dd,g t|ddg t|dg t g d-g d)\}}}t|d.d/g t|ddg t|d0d1g t g d+g d2\}}}| ||g d3g d4 t|jd d S )5NrB   r@   r[  ru   r  r   r   r@   )gZd;O?g9#Jg&䃞ͪrA   r   )g-1ڿgeagvq-?g      r  r   rE   rC   r   ir[  r   rE   )rE   r   r[  r@   r   rF   )rF   g333333gGz?gClٿ)y      2     @*y      2     @*@g      B@)y      ?ɿy      ??gffffff?)rE   rB   r   rA   )r   rE   r@   )r   r[  r[  )r@   gg)\(?g^I+g rh?)rE   gffffffgQg~jt?)rA   rE   )r  g333333ӿr  )rE   rF   r  rF        пr  )rE   r   r  )rE   r   r   r   r   )rE   y              ?y             r   )r                r   rE   )r@   r   rC   rE   r@   r@   rE   rD   r   r   r   )rE   r  rF   rB   )rF   r@   r   r  )ru   rF   r@   r   r  E   ru   rK   )rE   r  rA   r[  )rA   y            @y            )rE         ?      r]   )r4   r
   r	   r   r  rO   r=  rf  r$  rS   rS   rT   test_residue_general3  sp    

z1TestPartialFractionExpansion.test_residue_generalc                 C   s   t g dg d\}}}t g dg d\}}}t g dg d\}}}	t g dg d\}
}}t|| t|| t||
 t|| t|| t|| t|| t||	 t|| d S )Nr  r  )r   rB   r@   r[  ru   )r   r  r   r   r@   )r   r   rB   r@   r[  ru   )r   r   r   r  r   r   r@   )r4   r
   rO   Zr0p0Zk0r1p1Zk1r2p2Zk2Zr3Zp3Zk3rS   rS   rT   test_residue_leading_zerosw  s    







z7TestPartialFractionExpansion.test_residue_leading_zerosc                 C   s   t ddgg d\}}}t|ddg t|ddg t|jd t dd\}}}t|jd t|jd t|jd tjtdd t dd W d    n1 s0    Y  d S )Nr   r  r[  r  rE   Denominator `a` is zero.r  )r4   r
   r	   r   r4  r   r   r  rS   rS   rT   test_resiude_degenerate  s    z4TestPartialFractionExpansion.test_resiude_degeneratec                 C   s  t g dg d\}}}| ||g dg d t|dg t g dg d\}}}| j||dd	gd
dgdd t|dgdd t ddgg d\}}}t|ddg t|ddg t|jd t g dg d\}}}| ||g dg d t|jd t g dg d\}}}t|ddg t|ddg t|ddg t dgg d\}}}| ||g d g d! t|jd t ddgtdd"gdd#g\}}}t|d$d%g t|d&dg t|jd t g d'ddg\}}}t|dg t|dg t|ddg t ddd(g\}}}t|dg t|d)g t|jd t dg d*\}}}t|ddg t|ddg t|jd t dg d+\}}}t|ddg t|d#dg t|jd t g d,g d'\}}}t|d-d.g t|ddg t|dg t d/dgg d'\}}}t|d0d1g t|ddg t|jd t g dg d'\}}}t|d2d3g t|ddg t|d4dg t g d5g d6\}}}| j||g d7g d8dd t|jd d S )9N)rE   rC   rC   rF   )rE   y             rd  r  )y             @y      @      @y            ()r   rE   rE   r`   )rE   rF   rE   )rE   r   g'W?y	c-y	c-@y      ?*D?y      ?*DԿrA   r   gŏ1w@rE   r   )rE   r  rC   rF   r@   r   rs   r  )rA   r  r@   r  )rE   r  r  rA   )rF   r[  r  rT  g            ?r  )r  r@   r  r   )g
ףp=
?gQ?皙?)rT  UUUUUUտr  r  rF  g
gUUUUUU@r  rE   r[  rE   r  r   )rE   r   rF  )rE   g      r8  )rE   rC   rF   r  r   rC   r[  r   ir  rG   r{  )rE   r   r   r   r   r   )yoT?c=yX?yoT?c=yXȿr  yjM?%uyjM?%u?)ySsA?ySsAr  y-?8gDio?y-?8gDio)r5   r  r
   r	   r   rj   Zpolymulr  rS   rS   rT   test_residuez_general  s    $z2TestPartialFractionExpansion.test_residuez_generalc                 C   s   t g dg d\}}}t g dg d\}}}t g dg d\}}}	t g dg d\}
}}t|| t|| t||
 t|| t|| t|| t|| t||	 t|| d S )Nr  r  )rB   r@   r[  ru   r   )r  r   r   r@   r   )rB   r@   r[  ru   r   r   )r  r   r   r@   r   r   r   )r5   r
   r  rS   rS   rT   test_residuez_trailing_zeros  s    







z9TestPartialFractionExpansion.test_residuez_trailing_zerosc                 C   s   t ddgg d\}}}t|ddg t|ddg t|jd t dd\}}}t|jd t|jd t|jd tjtdd t dd W d    n1 s0    Y  tjtdd t dg d	 W d    n1 s0    Y  d S )
Nr   r  r[  r  rE   r  r  z6First coefficient of determinant `a` must be non-zero.r  )r5   r
   r	   r   r4  r   r   r  rS   rS   rT   test_residuez_degenerate  s    (z5TestPartialFractionExpansion.test_residuez_degeneratec           	      C   s   g d}g d}g }g d}g d}dD ]T}t ||||d\}}t|| t|| t||||d\}}t|| t|| q(d S )N)rV  UUUUUUſg)r   r[  r  )r   rE   r@   )rE   ru   rG   r   avgr#  r  r%  r[  r&  rtyper(   r   r)   )	rO   r=  rf  r$  
b_expected
a_expectedr  rQ   rP   rS   rS   rT   *test_inverse_unique_roots_different_rtypes  s    


zGTestPartialFractionExpansion.test_inverse_unique_roots_different_rtypesc           
      C   s   g d}g d}g }g d}g d}g d}dD ]\}t ||||d\}}	t||dd	 t|	| t||||d\}}	t||dd	 t|	| q0d S )
Ng333333?g98ȿr  gll?r   r[  r[  r  )r   r   rE   r@   )r  gUUUUUUgUUUUUU?r@   )rE   r   r   r   r   r  r  rC  r  r  )
rO   r=  rf  r$  r  Zb_expected_zr  r  rQ   rP   rS   rS   rT   ,test_inverse_repeated_roots_different_rtypes  s    
zITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypesc                 C   s   g d}g d}g }t jtdd  t|||dd W d    n1 sH0    Y  t jtdd  t|||dd W d    n1 s0    Y  d S )Nr  r  z`rtype` must be one ofr  r$  r  )r4  r   r   r(   r)   r  rS   rS   rT   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 )NrE   rF   r   r  g       )r)   r   )rO   r=  rf  r$  rQ   rP   rS   rS   rT    test_invresz_one_coefficient_bug8  s    z=TestPartialFractionExpansion.test_invresz_one_coefficient_bugc                 C   s
  t dgdgg \}}t|dg t|ddg t g dg dg \}}t|g d t|g d t ddgdd	gg d
\}}t|g d t|g d t g dg dg \}}t|g d t|g d t ddgddgddg\}}t|g d t|g d d S )NrE   r   r  rF         ?      rE   r   r]   y      @      y      !      ?y      @      
@rE   y             y      ?       @y      ?      rT  r  rX  rD   )rE                     ?       r  rG   rE               rA   r   rF   r   r~  rA   r[  r   r   r   r@   r@   r@   )y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     prE   y      (       @y     J@      4y      X      Q@y      ;@      Ry      [@      Ky     @T      [@r   rF   )rE   r   r  r_   r  )r(   r
   rO   rQ   rP   rS   rS   rT   test_invresA  s"    z(TestPartialFractionExpansion.test_invresc                 C   s
  t dgdgg \}}t|dg t|ddg t g dg dg \}}t|g d t|g d t ddgdd	gg d
\}}t|g d t|g d t g dg dg \}}t|g d t|g d t ddgddgddg\}}t|g d t|g d d S )NrE   r   r  r  r  r  rT  r  rX  rD   )g      @r  r  y            rL   r  r  r  )rC   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rr  r   rF   )r   rE   r  rF   r  )r)   r
   r  rS   rS   rT   test_invreszY  s"    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 )NrE   r   r   rF   )r(   r
   r)   r  rS   rS   rT   test_inverse_scalar_argumentsq  s    z:TestPartialFractionExpansion.test_inverse_scalar_argumentsN)ru   )r   r   r   staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rS   rS   rS   rT   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 )NrT  r  r  r  r   rF   rj   r   r*   r	   r  r
   rZ  rO   eventsperiodtarg_strengthZ
targ_phasestrengthphaserS   rS   rT   test_single_1dperiod}  s    
z'TestVectorstrength.test_single_1dperiodc                 C   st   t dg}g d}dgd }t g d}t||\}}t|jd t|jd t|| t|dt j |  d S )NrT  )rE   rF   r  r  r@   )rT  rF  r  rE   rF   )rj   r   r*   r	   r  r   r
   rZ  r  rS   rS   rT   test_single_2dperiod  s    

z'TestVectorstrength.test_single_2dperiodc                 C   sb   t g d}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )NrF  rF  rF  rF  rF  rF  rF   r  r8  r   r  r  rS   rS   rT   test_equal_1dperiod  s    
z&TestVectorstrength.test_equal_1dperiodc                 C   sv   t g d}ddg}dgd }t ddg}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr  rE   rF   r  rF  r8  r  r  rS   rS   rT   test_equal_2dperiod  s    

z&TestVectorstrength.test_equal_2dperiodc                 C   sb   t g d}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr  g?g @gffffff@g333333$@rE   r  r  r   rF   r  r  rS   rS   rT   test_spaced_1dperiod  s    
z'TestVectorstrength.test_spaced_1dperiodc                 C   sv   t g d}ddg}dgd }t ddg}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr  rE   rT  r  rF   r  r  r  r  rS   rS   rT   test_spaced_2dperiod  s    

z'TestVectorstrength.test_spaced_2dperiodc                 C   sb   t g d}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )NrF  rT        ?rE   UUUUUU?rT  r   rF   r  r  rS   rS   rT   test_partial_1dperiod  s    
z(TestVectorstrength.test_partial_1dperiodc                 C   sv   t g d}g d}dgd }t g d}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr  )r  r  r  r  r  rA   )rT  rT  rT  rT  rE   rF   r  r  rS   rS   rT   test_partial_2dperiod  s    

z(TestVectorstrength.test_partial_2dperiodc                 C   sJ   t g d}d}d}t||\}}t|jd t|jd t|| d S )Nr   rF  rT  r  r  r   rj   r   r*   r	   r  r
   rO   r  r  r  r  r  rS   rS   rT   test_opposite_1dperiod  s    z)TestVectorstrength.test_opposite_1dperiodc                 C   sV   t g d}dgd }dgd }t||\}}t|jd t|jd t|| d S )Nr  r  rG   rU  rE   r  r  rS   rS   rT   test_opposite_2dperiod  s    

z)TestVectorstrength.test_opposite_2dperiodc                 C   s&   t ddgg}d}ttt|| d S )NrE   rF   r  rj   r   r   r   r*   rO   r  r  rS   rS   rT   test_2d_events_ValueError  s    z,TestVectorstrength.test_2d_events_ValueErrorc                 C   s$   d}t dgg}ttt|| d S )Nr  rE   r  r  rS   rS   rT   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  rS   rS   rT   test_zero_period_ValueError  s    z.TestVectorstrength.test_zero_period_ValueErrorc                 C   s   d}d}t tt|| d S )Nr  r   r  r  rS   rS   rT   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  rS   rS   rS   rT   r  {  s   r  rh  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   rj   r   Zflatr   r   )actualdesiredr   r   r   rS   rS   rT   assert_allclose_cast  s    r  r  c                 C   s0  t dt dt dg}t dt dt dg}t dt dt dg}t|}|jjdks\J tt|tt|t|t}| tu rt|| g|}nt|||}t	dd |D sJ t
|t|t | tu rddg}ntddg}tjtdd	 | |d
di W d    n1 s"0    Y  d S )NrE   rF   r@   r  c                 s   s   | ]}t |tV  qd S r  )r_  r   )r   ra   rS   rS   rT   	<genexpr>$  r   z)test_nonnumeric_dtypes.<locals>.<genexpr>r  zmust be at least 1-Dr  ra   )r   rj   r   r   r   r"   r-  r   r-   allr   r,   r4  r   r   )r  ra   rQ   rP   r  r  r   rS   rS   rT   test_nonnumeric_dtypes  s     
"
r  ZfdFDc                   @   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 g d|}t||}ttt|||| t ddg|}t ddg|}t g d	|}ttt|||| g d
}g d}t d}t ||f}d|_	t||}t
|g d d S )Nr   rB   rC   rE   r   rT  r  r  r  )rE   rE   r   r  r   )rE   rC   )rE   rF   rF   rF   rF   rF   rF   rF   )rj   r=  r   r   r,   r   r-   r%  r  rB  r   )rO   r  ra   rQ   rP   r  r3  rb   rS   rS   rT   
test_rank14  s"    


zTestSOSFilt.test_rank1c           	      C   s   d}t dt |d t ||}||}t ddg|}t ddg|}t jg dg dg dg dg|d}t jg d	g d
g dg dg|d}tt|||dd}t|| tt|||dd}t|| d S )Nr  r   rE   r   rT  r  r  r   r  r  r  r  rS  )	rj   r=  r}  rk   r   r   r-   r,   r   )	rO   r  rB  ra   rQ   rP   r  r  rb   rS   rS   rT   
test_rank2M  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   rE   r   rT  )rj   r=  r}  rk   r   r   r-   r,   rl   rB  r   r"   )	rO   r  rB  ra   rQ   rP   rb   rm   r  rS   rS   rT   r'  a  s    $zTestSOSFilt.test_rank3c                 C   s<  t ddd\}}t ddd\}}t ddd\}}tt|||}tt|||}	ttj||f tj||f tj||f f}
tjd|}t	||	|d d t
dd\}}tj|t	||	|dd  |dd	 f }t|t	||	| t|
|d d t
d
d\}}tj|t|
|dd  |dd	 f }t|| t|
}td|}t|
||d\}}t|td t|| d|j |_ttt|
||d | }|jd	 dd|jd f|_ttt|
||d d d d d d g df d t|
||d\}}t|d td t|d d d	d	d d f | d S )NrF   rF  lowr  r   r   rC   r  r   r   r   r  rE   r   )r   rE   rE   r  )r   r%   rj   r   r   Zr_r   r  r   r"   rE  r  r-   r/   r%  rB  r   r   rJ  )rO   r  b1r  b2r  Zb3r  rQ   rP   r3  ra   Zy_truer  rO  rb   r  Zzi_ndrS   rS   rT   test_initial_conditionsn  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   rB   )rF   r  r@   r   rC   rM  r5  r  rE   rF   r  rS  r  r  r   )rj   r   r  r  r   r   r%   r'   rB  r  rE  r-   r  r  r/   r&   r#   r   r"   )rO   r  ra   r5  r3  Z	nsectionsr5  ZshpZz0rk  r  rA  rG  rv  rH  rb   r  rQ   rP   Zy_tfrS   rS   rT    test_initial_conditions_3d_axis1  s4    




**
z,TestSOSFilt.test_initial_conditions_3d_axis1c                 C   s   t d|}t d}t d}tjtdd  t|||dd W d    n1 sT0    Y  d|d d d	f< tjtd
d  t|||dd W d    n1 s0    Y  d S )N)r@   r  r@   )rA   rC   )rA   r@   r@   rF   zshould be all onesr  rE   )r  r5  r  r@   zInvalid zi shape)rj   r  rE  r4  r   r   r-   )rO   r  ra   r3  r  rS   rS   rT   test_bad_zi_shape  s    

.zTestSOSFilt.test_bad_zi_shapec                 C   s   t jdddd}t|}t|td||d\}}t||dd t|d d d d	f jd
d|d d d	d f jd
d }t||dd t|td||	 d\}}t||dd d S )NrC   r  r3  r  r   r  r  r  r@   r   rS  )
r   r%   r/   r-   rj   r%  r  r}  rQ  r  )rO   r  r3  r  rb   r  ssr  rS   rS   rT   test_sosfilt_zi  s    >zTestSOSFilt.test_sosfilt_ziN)
r   r   r   r  r  r'  r  r  r  r  rS   rS   rS   rT   r  0  s   &.r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestDeconvolvec                 C   s6   g d}ddg}g d}t ||\}}t|| d S )N)r   rE   r   r   rE   rE   r   r   rF   rE   )	r   rF   rE   r   rF   r@   rE   r   r   )r   
deconvolver   )rO   originalimpulse_responserecordedZ	recovered	remainderrS   rS   rT   rU     s
    zTestDeconvolve.test_basicc                 C   sZ   ddgddgg}ddg}t jtdd  t||\}}W d    n1 sL0    Y  d S )Nr   zsignal must be 1-D.r  r4  r   r   r   r!  rO   r$  r#  Zquotientr%  rS   rS   rT   test_n_dimensional_signal  s    z(TestDeconvolve.test_n_dimensional_signalc                 C   sZ   ddg}ddgddgg}t jtdd  t||\}}W d    n1 sL0    Y  d S )Nr   zdivisor must be 1-D.r  r&  r'  rS   rS   rT   test_n_dimensional_divisor  s    z)TestDeconvolve.test_n_dimensional_divisorN)r   r   r   rU   r(  r)  rS   rS   rS   rT   r     s   r   c                   @   sx   e Zd Zdd Zdd Zejdddgejdg d	d
d Zdd Z	ejde
ddgddggdd ZdS )TestDetrendc                 C   s*   t tg d}tg d}t|| d S )NrD   )r   r   r   )r2   r   r   )rO   	detrendedZdetrended_exactrS   rS   rT   rU     s    zTestDetrend.test_basicc                 C   s2   t g d}t|dd}t|dd}t|| d S )N)rE   333333?r  g?g333333@F)Zoverwrite_dataT)r   r2   r   )rO   ra   Z
copy_arrayZinplacerS   rS   rT   	test_copy  s    zTestDetrend.test_copyr   linearrg  r5  r  c                 C   s6   t dddd}t|||d}|j|jks2J d S )N   rB   rC   ru   )r  r5  )rj   r   rk   r2   rB  )rO   r5  r   r  r+  rS   rS   rT   rB    s    zTestDetrend.test_axisc                 C   s   g dg d }t |ddd}t|ddd t|d d d d f }t |ddd	d
}t|ddd tt t |ddd W d    n1 s0    Y  d S )Nr  )rB   r   r  r  r.  r@   )r  bpr   rC  r  rE   )r  r0  r5  )r2   r   rj   r  r   r   )rO   r  r+  rS   rS   rT   test_bp	  s    
zTestDetrend.test_bpr0  r   rF   c                 C   sB   t jd}|d}t||d}t g d}t||dd d S )Ni90  rG   )r0  )
g3   g3   g_rgb	6ſgq]?g=~D?g@zI?gբg?ԅg1
ȿrC  r  )rj   r   r  r  r2   r   r   )rO   r0  r  ra   r  Zres_scipy_191rS   rS   rT   test_detrend_array_bp  s
    
z!TestDetrend.test_detrend_array_bpN)r   r   r   rU   r-  r4  r5  r6  rB  r1  rj   r   r2  rS   rS   rS   rT   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:   g d}t |\}}t||dd t|tt| d S )N)r  r  rV  r,  rR  r  r   r3   r
   r	   rj   r%  rr  rO   rf  r  r  rS   rS   rT   test_real_no_repeat(  s    z#TestUniqueRoots.test_real_no_repeatc                 C   s   g d}t |ddd\}}t|g ddd t|g d t |dd	d\}}t|g d
dd t|g d t |ddd\}}t|g ddd t|g d d S )N)r  ffffff{Gz皙rT  r  ?r  r  tolr  )r  r8  rT  r  r  r   rF   rF   rE   rF   r[  )r7  r9  rT  r:  r  )g333333g
ףp=
rT  gffffff?r3   r
   r	   r5  rS   rS   rT   test_real_repeat.  s    z TestUniqueRoots.test_real_repeatc                 C   s:   g d}t |\}}t||dd t|tt| d S )N)r  r         ?      ?r  r9  r  r   r4  r5  rS   rS   rT   test_complex_no_repeat=  s    z&TestUniqueRoots.test_complex_no_repeatc                 C   s   g d}t |ddd\}}t|g ddd t|g d t |dd	d\}}t|g d
dd t|g d t |ddd\}}t|g ddd t|g d d S )N)r        𿚙?ffffff333333?333333?rU  r@  ??r  r  r;  )r  rC  rU  rE  r  r   r=  r[  )rB  rD  rU  r@  r  )y      𿚙?y333333?rU  yffffff??r>  r5  rS   rS   rT   test_complex_repeatC  s$    
z#TestUniqueRoots.test_complex_repeatc                 C   sb   t t t dt d}g d}t|\}}t |}tt ||dd t|g d d S )NrB   )yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?ru   r   )rF   rF   rF   rF   )rj   r  r   r%  r3   sortr
   r	   )rO   rf  Z
true_rootsr  r  rS   rS   rT   test_gh_4915X  s    
zTestUniqueRoots.test_gh_4915c                 C   sh   t g d\}}t|ddgdd t|ddg t g dd	d
\}}t|ddgdd t|ddg d S )N)r  r   r  r  r   r  r   rF   rE   )rE   g_p   ?&.>      ?r  )r<  rI  r>  r  rS   rS   rT   test_complex_roots_extrab  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   rF   r  r   )rj   r   r  r3   r
   r  r	   r5  rS   rS   rT   test_single_unique_rootk  s    z'TestUniqueRoots.test_single_unique_rootN)
r   r   r   r6  r?  rA  rF  rH  rJ  rK  rS   rS   rS   rT   r3  '  s   
	r3  )N)rh  r   )r   concurrent.futuresr   r   r!  r   	itertoolsr   mathr   r4  r   r   Znumpy.testingr	   r
   r   r   r   r   r   r   numpyr   r   rj   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;   Zscipy._lib._utilr<   r=   r>   r?   r   r   r7  rK  r  r  r  r  r  r  r  r  ro  r(  rp  rz  r|  r  r  r  r  r  r  r  r  r  r  r5  r6  r  r  r  r  r  r   r   r  r  r  r  Zcsingler  r  r  r*  r.  r0  rL  r[  r]  rc  rh  ri  r  r  r  r  r  r  r  r   r*  r3  rS   rS   rS   rT   <module>   s   (hp B  m 	P  O   
z-_'`,
  5\  p 

 .2