o
    ?HhV                    @   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@mAZAmBZB d dlCmDZD d dlEmFZFmGZGmHZH d dlImJZJ d dlKmLZL d dlMmNZN d dlOmPZPmQZQmRZR G dd dZSG dd deSZTG dd dZUG dd deUZVG dd dZWdd ZXd d! ZYd"d# ZZd$d% Z[G d&d' d'Z\G d(d) d)Z]G d*d+ d+Z^G d,d- d-Z_g d.Z`e`eJ7 Z`G d/d0 d0ZaG d1d2 d2ZbG d3d4 d4ZcG d5d6 d6ZdG d7d8 d8edZeG d9d: d:edZfe
jghd;G d<d= d=edZiG d>d? d?edZjG d@dA dAedZke
jghd;G dBdC dCedZle
jghd;G dDdE dEedZme
jghd;G dFdG dGedZne
jghd;dHdI Zoe
jghd;ZpdJdK Zqe
jgrdLejsejtejuejveReQejwejwejxejye
jzej{epdMe
jzeepdMgG dNdO dOZ|G dPdQ dQZ}e
jgrdRg dSe
jgrdTdUdVge
jgrdWg dXdYdZ Z~d[d\ Ze
jgrdLejeje
jzejepdMgG d]d^ d^ZG d_d` d`ZG dadb dbZG dcdd ddZG dedf dfeZdgdh ZddidjZe
jgdkdldm Ze
jgjdndo Ze
jghd;dpdq Ze
jgdkdrds ZG dtdu duZG dvdw dwZG dxdy dyZG dzd{ d{ZG d|d} d}ZG d~d dZdddZe
jghd;e
jgrde:e/fdd Ze
jgrdLdG dd dZG dd dZG dd dZG dd dZdS )    N)ThreadPoolExecutoras_completed)Decimalproduct)gcd)raises)assert_equalassert_almost_equalassert_array_equalassert_array_almost_equalassert_allcloseassert_assert_array_lesssuppress_warnings)arrayarange)fft)correlate1d)fminlinear_sum_assignment)signal)	correlatecorrelate2dcorrelation_lagsconvolve
convolve2dfftconvolve
oaconvolvechoose_conv_methodenvelope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xp_assert_close)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)            rE   rD         rC   )rC   
             rM         r   r   r   selfabc rV   c/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/signal/tests/test_signaltools.py
test_basic(   s   
z_TestConvolve.test_basicc                 C   4   g d}g d}t ||dd}t|tg d d S )NrC   rD   rE   rH   rI   rC   rD   samemode)rJ   rK   "   rP   rQ   rV   rV   rW   	test_same.      z_TestConvolve.test_samec                 C   rY   )NrZ   rG   r\   r]   )rJ   rK   rK   rP   rQ   rV   rV   rW   test_same_eq4   ra   z_TestConvolve.test_same_eqc                 C   s8   t g d}t ddg}t||}t|t g d d S )N)      ?      ?       @      ?      @      ?rc   rd   )               @y       @      @y      @       @y      @      @)r   r   r   )rR   xyzrV   rV   rW   test_complex:   s   
z_TestConvolve.test_complexc                 C   s$   d}d}t ||}t|||  d S )Ni	  i  )r   r	   rQ   rV   rV   rW   test_zero_rank@   s   
z_TestConvolve.test_zero_rankc                 C   st   t dddd}t d}tdD ]$}dgd }d||< t|||dd}t|||dd}t|| qd S )N   rC   rH   directmethodr   )npr   reshaperanger   r   )rR   rS   rT   ib_shaperg   rh   rV   rV   rW   test_broadcastableF   s   

z _TestConvolve.test_broadcastablec                 C   0   t dg}t dg}t||}t|||  d S Nig  iP  )r   r   r	   rQ   rV   rV   rW   test_single_elementP      


z!_TestConvolve.test_single_elementc                 C   sR   g dg dg}g dg dg}t ||}tg dg dg dg}t|| d S NrG   rZ   rI   rC   rD   rD   rE   rF   )rI            rO   )rJ      >   :   &   )rO      r   1   r   r   r   r   rR   rS   rT   rU   drV   rV   rW   test_2d_arraysV   s   
z_TestConvolve.test_2d_arraysc              	   C   s  t dddd}dt dddd }|t dd d d ddd7 }tg dg dg d	g d
gg dg dg dg dgg dg dg dg dgg dg dg dg dgg}tt||d| tt||d| tt||d|ddddddf  tt||d|ddddddf  tt||d|ddddddf  tt||d|ddddddf  d S )N   rI                 ?rl   rC   )                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@fullr\   rH   r   valid)r   rq   r   r   r   )rR   smallbig	out_arrayrV   rV   rW   test_input_swapping_   sP    z!_TestConvolve.test_input_swappingc                 C   v   g d}g d}t tt||dd t tt||ddd t tt||dd	d t tt||d
dd t tt||ddd d S NrZ   rG   spamr]   eggsr   r^   ro   hamrm   r   baconr\   assert_raises
ValueErrorr   rR   rS   rT   rV   rV   rW   test_invalid_params      z!_TestConvolve.test_invalid_paramsN)__name__
__module____qualname__rX   r`   rb   rj   rk   ru   rx   r   r   r   rV   rV   rV   rW   rB   &   s    
	%rB   c                   @   sN   e Zd Zdd Zdd Zdd Zddd	Zd
d Zdd Ze	j
j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rH   rI   rC   rF   rE   rC   	rI   rC   rD   rE   rC   rD   rI   rI   rH   )F   N   I   A   r   )y      ?      @       @      y      @               @            ?        y       @      $)r   r   rR   rS   rT   expectedoutrV   rV   rW   test_valid_mode2   s   


zTestConvolve.test_valid_mode2c                 C   s6   g d}g d}t ||d}tg d}t|| d S )N)rH   rI   rC   rC   rH   rI   )rH   rD   rC   rD   rE   rF   r}   rD   rC   rI   rH   rH   rC   r\   )9   =   ?   r   -   $   r   r   rV   rV   rW   test_same_mode   s
   zTestConvolve.test_same_modec                 C   h   t ddd}t ddd}tttg||fR i ddi tttg||fR i ddi d S 	NrH   r}   rI   rC   r   rC   rI   r^   r   )rp   r   rq   r   r   r   r   rV   rV   rW   test_invalid_shapes       $z TestConvolve.test_invalid_shapesd   c           	         s\  h dfddD }t jd}|jddg|d||d}|d	  |d
< |d< |d d|d   |d< |D ]q\}} |t |j ||t |j | fdddD }t|d j|d j d|v r|d|v r|tt	d q:t
dd ||fD rddd}nd||fv rddd}nddd}t|d |d fi | q:d S )N>   boolint8int16int32int64uint8uint16uint32uint64float16float32float64	complex64
complex128c                    s*   g | ]} D ]}d D ]}|||fq
qqS ))r   r   r\   rV   ).0t1t2r^   )typesrV   rW   
<listcomp>   s
    z5TestConvolve.test_convolve_method.<locals>.<listcomp>*   r   rH   size)rs   frs   rT   ur                 ?rU   c              	      s   i | ]}|t | d qS ))ro   r^   )r   )r   key)r^   x1x2rV   rW   
<dictcomp>   s    z5TestConvolve.test_convolve_method.<locals>.<dictcomp>)r   rm   r   rm   r   c                 S   s   g | ]}|d v qS )>   r   r   rV   )r   trV   rV   rW   r          -C6?gư>rtolatolr   MbP?h㈵>:0yE>)rp   randomRandomStatechoicerandndtypekindastyper	   r   anyr   )	rR   nargsrngarray_typesr   r   resultskwargsrV   )r^   r   r   r   rW   test_convolve_method   s2   
z!TestConvolve.test_convolve_methodc                 C   sv   dD ]6}t jd| gt jd}t||dd}t||dd}|dk r8t|| t|dd|   t|dd|   qd S )N)	rJ      2   3   4   5   6   <   r   rI   r   r   rn   rm   r   )rp   r   r   r   r	   )rR   r   ri   r   rm   rV   rV   rW    test_convolve_method_large_input   s   
z-TestConvolve.test_convolve_method_large_inputc                 C   x   t ttdgddd t ttddgdd t ttdgddd t ttddgdd t ttdgdgg t ttdgd d S NrH   rI   rm   rn   r   rC   r   rR   rV   rV   rW   test_mismatched_dims      z!TestConvolve.test_mismatched_dimsc                 C   `   t jg dtd}t jg dtd}tjdd t|| W d    d S 1 s)w   Y  d S Nr   r   r   dtype=object is not supportedmatch)rp   asarrayobjectpytestdeprecated_callr   r   rV   rV   rW   test_dtype_deprecation   
   "z#TestConvolve.test_dtype_deprecationN)r   )r   r   r   r   r   r   r   r   r  r
  markthread_unsafer  rV   rV   rV   rW   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 rz   r   r   r   )rR   rS   rT   r   erV   rV   rW   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rI   rC   rD   rE   rF   r}   r   rD   rE   rF   r}   r   	   rJ   rG   rZ   r   P   b   t      r   r  rR   r  r   hgrV   rV   rW   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  rG   rZ   r   r   )y      O@      8@y      T@      >@y     X@      B@y      ]@      E@y     `@      H@r   )rp   r   complexr   r   r   r  rV   rV   rW   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 )NrG   rZ   r{   r|   rH   r   fill)      r   r_   rM   )rL   (   r   @   r   )rM   .   C   r   0   r   r   r   )rR   rS   rT   fillvalrU   r   rV   rV   rW   test_fillvalue)  s   z_TestConvolve2d.test_fillvaluec              	   C   s   d}t j 0}|td tt|d tdggddggdd W d    n1 s+w   Y  W d    n1 s:w   Y  d}tt|d tdggddggddgd W d    d S 1 saw   Y  d S )	Nz2could not cast `fillvalue` directly to the output zCasting complex valuesr  rH   rI   r   	fillvaluez,`fillvalue` must be scalar or an array with )rp   testingr   filterr?   r   r   r   )rR   msgsuprV   rV   rW   test_fillvalue_errors3  s   "z%_TestConvolve2d.test_fillvalue_errorsc                 C   s    t ttdggddggg d d S )NrH   rI   r,  r   r   r   r   rV   rV   rW   test_fillvalue_empty>  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 )	NrG   rZ   r{   r|   r   wrap)r  r  J   r  r  )D   r7  r   r7  r7  r)  r   rV   rV   rW   test_wrap_boundaryC     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 )
NrG   rZ   r{   r|   r   symm)r_   r   ,   r   B   )r   r(  r   r  T   )R   r   \   n   r   r)  r   rV   rV   rW   test_sym_boundaryL  r9  z!_TestConvolve2d.test_sym_boundaryfunczboundary, expectedr:  )g     B@      E@      F@g     F@r5  )     E@rE  rD       C@c                 C   s8   t g dg}t d}|||d|d}t|| d S )N)       @            @      @)rH      r\   r^   boundary)rp   r   onesr   )rR   rC  rN  r   imagekernelresultrV   rV   rW   test_same_with_boundaryU  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   rH   r   r   rJ   rC   e   r\   r5  rM  )r   r   )r^   origin)	scipy.ndimagendimagerp   r   floatrq   r   r   r   )rR   ndirS   rT   rU   rV   rV   rW   test_boundary_extension_samef  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   rH   rJ   r   rC   %   rF   r   r5  rM  )rC   rC   r\  r]   r   )
rV  rW  rp   r   rX  rq   r   padr   r   )rR   rY  rS   rT   rU   apadrV   rV   rW   test_boundary_extension_fullp  s   *z,_TestConvolve2d.test_boundary_extension_fullc                 C   r   r   )rp   r   rq   r   r   r   r   rV   rV   rW   r   {  r   z#_TestConvolve2d.test_invalid_shapesN)r   r   r   r   r  r   r+  r2  r4  r8  rB  r
  r  parametrizer   r   rS  rZ  r_  r   rV   rV   rV   rW   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 )NrG   rZ   r  r  r\   )rK   rL   r_   )r  r  r  r)  )rR   r  r   r  r  rV   rV   rW   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 )NrG   rZ   r  r  r  r   rc   r   re         @        )r         @       @rb  )rb  y      @      ?y      @      y      ;@      y      G@       @)r   r   )rR   r  r   r   r   rV   rV   rW   r     s   




zTestConvolve2d.test_valid_mode2c              	   C   st   t d}t g d}dD ])}tt j|||dtj|||d tt tj|g|g|dtj|||d qd S )NrE   g	@gffffff?rC   r   r   r\   r]   )rp   r   r   r
   r   r   squeezer   rR   rS   rT   r^   rV   rV   rW   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 )NrC   rD   r3  r   rV   rV   rW   test_invalid_dims  s   z TestConvolve2d.test_invalid_dimsz!Can't create large array for testc                 C   s   ddt  j  }td| d t  j d  t jd| t jd}d|d d d< t jjj||dfdd	}t	
|ddgg}t |dk}|d
 jd
ksOJ d S )Nl          rI     g    .Ar   rH   )iH  r   )shapestridesr   )rp   r   itemsizer<   check_free_memoryzeroslibstride_tricks
as_stridedr   r   wherer   )rR   r   rS   countfailsrV   rV   rW   test_large_array  s    zTestConvolve2d.test_large_arrayN)r   r   r   r   r   rh  ri  r
  r  slowxfail_on_32bitrw  rV   rV   rV   rW   ra    s    
ra  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#ejj$d?d@ Z%dS )ATestFFTConvolveaxes Nr   r   c                 C   H   t g d}t g d}|dkrt||}nt|||d}t|| d S )NrG   rH   rD   rJ   rO         "@r|  r{  r   r   r   rR   r{  rS   r   r   rV   rV   rW   	test_real  s   zTestFFTConvolve.test_realrH   c                 C   T   t g d}t g d}t|ddg}t|ddg}t|||d}t|| d S )NrG   r~  rI   rH   r  r   rp   tiler   r   r  rV   rV   rW   test_real_axes     zTestFFTConvolve.test_real_axesc                 C   r}  )Nrc          @       @y      @      @rf   y               @y              4@y              8@y              2@r|  r  r  r  rV   rV   rW   rj     s   zTestFFTConvolve.test_complexc                 C   r  )Nr  r  rI   rH   r  r  r  rV   rV   rW   test_complex_axes  r  z!TestFFTConvolve.test_complex_axesc                 C   ^   t g dg dg}t g dg dg dg}|dkr!t||}nt|||d}t|| d S )NrG   r|   rH   rD   rJ   rO   r  r   r#  8   r   r   r~   r$  r   r   r   r|  r  r  r  rV   rV   rW   test_2d_real_same  s   z!TestFFTConvolve.test_2d_real_samerI   c                 C   j   t g dg dg}t g dg dg dg}t|g d}t|g d}t|||d}t|| d S )NrG   r|   r  r  r  rI   rH   rH   r  r  r  rV   rV   rW   test_2d_real_same_axes  s   	z&TestFFTConvolve.test_2d_real_same_axesc                 C   r  )N      ?       @      @      @y      @      @rd   y      @      @y      @      @y            @y      $      4@y      5      L@y      2      S@y      &      N@y              $@y              F@y             ]@y             c@y             ^@r  y      $@      4@y      5@      L@y      2@      S@y      &@      N@r|  r  r  r  rV   rV   rW   test_2d_complex_same%  s   z$TestFFTConvolve.test_2d_complex_samec                 C   r  )Nr  r  r  r  r  r  r  r  r  rV   rV   rW   test_2d_complex_same_axes?  s   	z)TestFFTConvolve.test_2d_complex_same_axesc                 C   s   t g d}t g d}t g d}t g d}|dkr#t||d}nt||d|d}t|| |dkr;t||d}nt||d|d}t|| d S )NrG   	rC   rC   rE   rF   r   r}   r  r   rH        A@     D@     G@	r  g      4@      9@r  r  r  rG  g      <@rH  r|  r\   r  r  rR   r{  rS   rT   
expected_1
expected_2r   rV   rV   rW   test_real_same_modeV  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 )	NrG   r  r  r  rI   rH   r\   r  r  r  rV   rV   rW   test_real_same_mode_axesi  s   
z(TestFFTConvolve.test_real_same_mode_axesc                 C      t g d}t g d}t g d}|dkrt||d}nt||d|d}t|| |dkr5t||d}nt||d|d}t|| d S )NrC   rI   rH   r  g      8@g      ?@r  rF  g     H@r        (@r|  r   r  r  rR   r{  rS   rT   r   r   rV   rV   rW   test_valid_mode_real{  s   
z$TestFFTConvolve.test_valid_mode_realc                 C   sr   t g d}t g d}t g d}t|ddg}t|ddg}t|ddg}t||d|d}t|| d S Nr  r  r  rI   rH   r   r  r  r  rV   rV   rW   test_valid_mode_real_axes  s   z)TestFFTConvolve.test_valid_mode_real_axesc                 C   r  )N      @      y       @      @r   rc  y      @      y      @        y      @      y       @        y     F@      (@y      >@      7@y      H@      @@r|  r   r  r  r  rV   rV   rW   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  rI   rH   r   r  r  r  rV   rV   rW   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  r  r   rV   rV   rW   test_valid_mode_ignore_nonaxes  s   z.TestFFTConvolve.test_valid_mode_ignore_nonaxesc                 C   F   t tg g jdk t tddgg jdk t tg dgjdk d S Nr   rE   rF   r}   )r   r   r   r   rV   rV   rW   
test_empty     zTestFFTConvolve.test_emptyc                 C   ,   t d}t d}t||}t|||  d S rw   r   r   r	   rR   rS   rT   r   rV   rV   rW   rk        
zTestFFTConvolve.test_zero_rankc                 C   rv   rw   r  r  rV   rV   rW   rx     ry   z#TestFFTConvolve.test_single_elementc                 C   s   t jd t jddt jd  }t jddt jd  }t ||d}|dkr4t||d}nt||d|d}tt j||dd	 d S )
N    r   )  r   r|  r  绽|=r   )rp   r   seedrandr   r   r   allcloser  rV   rV   rW   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   rI   rH   r  r  r  )	rp   r   r  r  r   r  r   r   r  r  rV   rV   rW   test_random_data_axes  s   z%TestFFTConvolve.test_random_data_axesrD   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)){   rK   )      r  r   r   r   rI   rH   rD   )rI   rH   rC   rH   rH   )rI   rH   rH   rD   rH   )rI   rH   rC   rD   rH   r  r  r   )
rp   r   r  r  r   moveaxisswapaxesr  r   r   )rR   r{  a_shapert   rS   rT   r   r   rV   rV   rW   test_random_data_multidim_axes  s    	z.TestFFTConvolve.test_random_data_multidim_axesr   r   rj  i  r  rk  '  rE   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   r  )rp   r   r  r   r   r   )rR   r   rS   rT   r   r   rV   rV   rW   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    n1 s<w   Y  qd S )Nrj  l   [<zn( r      皙?z4Use of fft convolution.*|invalid value encountered.*r  r\   r   r   )rp   r   default_rngstandard_normalnaninfr   firwinr
  warnsRuntimeWarningr   )rR   r   r   sig_nanvalcoeffsr0  rV   rV   rW   test_fft_nan(  s   
zTestFFTConvolve.test_fft_nan)&r   r   r   r
  r  r`  r  r  rj   r  r  r  r  r  r  r  r  r  r  r  r  r  rk   rx   r  r  r  rx  listrr   rp   r   r   randinttolistr  r  r  rV   rV   rV   rW   rz    s    







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

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











rz  c                  O   s   t d)NzFell back to fftconvolve)RuntimeError)r   r   rV   rV   rW   fftconvolve_err6  s   r  c                 C      dd t | ddD S )Nc                 S   s(   g | ]\}}t || d kr||fqS )rC   )absr   rS   rT   rV   rV   rW   r   ;  s    z!gen_oa_shapes.<locals>.<listcomp>rI   repeatr   sizesrV   rV   rW   gen_oa_shapes:     r  c                 C   s@   t | }t | }dd t||D }g d}dd t||D S )Nc                 S   s   g | ]\}}|| qS rV   rV   )r   ishapes0ishapes1rV   rV   rW   r   B      z$gen_oa_shapes_2d.<locals>.<listcomp>re  c                 S   sb   g | ]-\}}|d ks*|d |d kr|d |d ks*|d |d k r|d |d k r||f qS )r   r   rH   rI   rC   rV   )r   ishapesimoderV   rV   rW   r   F  s      )r  zipr   )r  shapes0shapes1shapesmodesrV   rV   rW   gen_oa_shapes_2d?  s   r  c                 C   r  )Nc                 S   s    g | ]\}}||kr||fqS rV   rV   r  rV   rV   rW   r   M  s    z$gen_oa_shapes_eq.<locals>.<listcomp>rI   r  r   r  rV   rV   rW   gen_oa_shapes_eqL  r  r  c                   @   s  e Zd Zej ejdeee	dee	ddd dd Z
ejdeg dejdd	d
gejdg ddd Zejdddgejdeg dejdddgejdddgejdd	d
gejdg ddd Zejdeg dejdd	d
gdd Zejdddgddgddggejdeg dejdddgejdddgejdd	d
gdd Zdd Zd d! Zd"d# Zd$S )%TestOAConvolvezshape_a_0, shape_b_0r   rj  rN   c                 C   s:   t j|}t j|}t||}t||}t|| d S N)rp   r   r  r   r   r   )rR   	shape_a_0	shape_b_0rS   rT   r   r   rV   rV   rW   test_real_manylensR  s
   

z!TestOAConvolve.test_real_manylens)r   /   rF   rD   rH   
is_complexTFr^   re  c           
      C   s~   t j|}t j|}|r"|dt j|  }|dt j|  }t|||d}|tjdt t|||d}	t	|	| d S Nr   r]   r   
rp   r   r  r   setattrr   _signaltoolsr  r   r   )
rR   r  r  r  r^   monkeypatchrS   rT   r   r   rV   rV   rW   test_1d_noaxes`  s   
zTestOAConvolve.test_1d_noaxesr{  r   rH   )r   r  rF   rD   shape_a_extrarC   shape_b_extrac	                 C   s   |gd }	|gd }
||	|< ||
|< t jj|	 }t jj|
 }|r4|dt jj|	   }|dt jj|
   }t||||d}|tjdt t||||d}t	|| d S )NrI   r   r^   r{  r   r  )rR   r{  r  r  r  r  r  r^   r
  ax_aax_brS   rT   r   r   rV   rV   rW   test_1d_axest  s   



zTestOAConvolve.test_1d_axesz0shape_a_0, shape_b_0, shape_a_1, shape_b_1, modec                 C   s   t j||}t j||}	|r&|dt j||  }|	dt j||  }	t||	|d}
|tjdt t||	|d}t	||
 d S r  r  )rR   r  r  	shape_a_1	shape_b_1r^   r  r
  rS   rT   r   r   rV   rV   rW   test_2d_noaxes  s   
zTestOAConvolve.test_2d_noaxesrI   c                 C   s   |gd }|gd }|||d < |||d < |||d < |||d < t jj| }t jj| }|	rD|dt jj|   }|dt jj|   }t||||d}|
tjdt t||||d}t	|| d S )NrC   r   rH   r   r  r   r  )rR   r{  r  r  r  r  r^   r  r  r  r
  r  r  rS   rT   r   r   rV   rV   rW   test_2d_axes  s"   


zTestOAConvolve.test_2d_axesc                 C   r  r  )r   r   r   r   rV   rV   rW   r    r  zTestOAConvolve.test_emptyc                 C   r  rw   r   r   r	   r  rV   rV   rW   rk     r  zTestOAConvolve.test_zero_rankc                 C   rv   rw   r  r  rV   rV   rW   rx     ry   z"TestOAConvolve.test_single_elementN)r   r   r   r
  r  rx  r`  r  r  rr   r  r  r  r  r  r  r  r  rk   rx   rV   rV   rV   rW   r  Q  sN    	



r  c                   @   s   e Zd Zejdeegdd Zejdeegdd Z	ejddgdfddgfd	gdggfgejdeegd
d Z
ejdeegdd Zejdejdejejgdd ZdS )TestAllFreqConvolvesconvapproachc                 C   sd   t ddd}t ddd}ttdd |||d	d
 W d    d S 1 s+w   Y  d S )NrH   r}   r   r   r   r   zOFor 'valid' mode, one must be at least as large as the other in every dimensionr  r   r]   )rp   r   rq   r   r   rR   r  rS   rT   rV   rV   rW   r     s   "z(TestAllFreqConvolves.test_invalid_shapesc                 C   s`   t g d}t g d}ttdd |||ddgd W d    d S 1 s)w   Y  d S )N)rE   rF   rI   rH   )rE   rF   rC   rH   zVincompatible shapes for in1 and in2: \(5L?, 6L?, 2L?, 1L?\) and \(5L?, 6L?, 3L?, 1L?\)r  r   rH   r  )rp   rp  r   r   r  rV   rV   rW   test_invalid_shapes_axes  s   "z-TestAllFreqConvolves.test_invalid_shapes_axesza,brH   rI   rC   c                 C   s<   t tdd ||| W d    d S 1 sw   Y  d S )Nz/in1 and in2 should have the same dimensionalityr  r   r   )rR   rS   rT   r  rV   rV   rW   r    s
   "z)TestAllFreqConvolves.test_mismatched_dimsc                 C   s  t tdd |dgdgdd W d    n1 sw   Y  t tdd |dgdgg d W d    n1 s9w   Y  t td	d |dgdgddgd
dggd W d    n1 s^w   Y  t td	d |dgdgg dd W d    n1 sw   Y  t tdd |dgdgdgd W d    n1 sw   Y  t tdd |dgdgdgd W d    n1 sw   Y  t tdd |dgdgddgd W d    d S 1 sw   Y  d S )Nz4acceptable mode flags are 'valid', 'same', or 'full'r  rH   rI   chipsr]   z#when provided, axes cannot be emptyr  z-axes must be a scalar or iterable of integersrC   rD   )      ?rH  rJ  rK  z$axes exceeds dimensionality of inputr  zall axes must be uniquer   r  )rR   r  rV   rV   rW   test_invalid_flags  s>    "z'TestAllFreqConvolves.test_invalid_flagsignore::DeprecationWarningr   c                 C   sp   t jd|}t jd|}t | r |d7 }|d8 }t||}t|t||dd |j|ks6J d S )N)rl   rl   )rD   rD   y        ?rm   rn   )rp   r   r   iscomplexobjr   r   r   r   )rR   r   rg   rh   resrV   rV   rW   test_longdtype_input  s   
z)TestAllFreqConvolves.test_longdtype_inputN)r   r   r   r
  r  r`  r   r   r   r  r  r  filterwarningsrp   
longdoubleclongdoubler"  rV   rV   rV   rW   r    s4    

	

r  c                   @   s:  e Zd Zg dg dg dg dg dg dg dg dg d	g d
g
Zg dg dg dg dg dg dg dg dg dg dg
ZddgZdd Zej	de
je
je
je
jeee
je
je
je
jg
dd Zej	de
je
je
je
je
je
jddg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?     rl   r   r&  )
r   r   r   r   r   r   H   M   r7  r<  )
r   r   r   r   r   r&  r     r%  r)  )
r   r   r   r   r   r         _   #   )
r   r   r   r   r   r&  r_   r  rL  r<  )
r   a   rL   r7  r   r)  r   r   G   r   )
r%  r   r;  r,  r7  rM   r*  r7  r"  r=  )
rC   !   r   r'  rH   r   r6  7   rO   S   )
r}   r  r&  r   r   r  r"  +   r   r#  )
rM   r   X   r}   '   rD   r?  r%  r   r   )
r   r   r   r   r   r+  r+  r'  rl   r   )
r   r   r   r   r   r   r*  rL  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&  r2  r%  r.  )
r1  r   r   r   r   r  r&  r4  r2  r#  )
rM   r   r   r   r   r  r&  r   r2  r#  )
r}   r&  r   r   r  r&  r&  r4  r   rL  )
r   rM   r1  r6  rM   rM   r4  r4  r4  r   )
r   r}   r  r}   rD   rD   r*  r*  r"  r   r}   rC   c                 C   sB   t | j| j}t t| jt| j}t|| j	 t|| d S r   )
r   medfiltINKERNEL_SIZE	medfilt2drp   r   rX  r   OUT)rR   r   r  rV   rV   rW   rX   D  s   zTestMedFilt.test_basicr   c                 C   s8   t j| j|d}tt|j| tt|j| d S )Nr   )rp   r   r8  r	   r   r7  r   r:  rR   r   in_typedrV   rV   rW   
test_typesJ  s   zTestMedFilt.test_typesfloat96float128c                 C   s   |dv rt t jj|krtd|  t j| j|d}tjt	dd t
| W d    n1 s4w   Y  tjt	dd t
| W d    d S 1 sQw   Y  d S )N)r?  r@  zPlatform does not support r   znot supportedr  )rp   finfor$  r   r
  skipr   r8  r   r   r   r7  r:  r<  rV   rV   rW   test_invalid_dtypesS  s   "zTestMedFilt.test_invalid_dtypesc                 C   s@   d}t t|d td  W d    d S 1 sw   Y  d S )Nz(dtype=object is not supported by medfiltr  )r   r   r   r7  )rR   r0  rV   rV   rW   	test_noned  s   "zTestMedFilt.test_nonec                 C   s:   t jdt jd}|dd }d|_tt|ddk d S )NrJ   r   rE   rF   r~   rH         @)rp   r   r   rm  r   r   r7  )rR   dummyrS   rV   rV   rW   test_odd_stridesj  s   zTestMedFilt.test_odd_stridesc           
         s  t jj|dt jj|d}j|jksJ |jd d  |jd d jd d d jd d d  fddt |}tdd*h d	}fd
d|D }t|D ]}|	 \}}}	||||	f< q`W d    n1 szw   Y  t
|| d S )Nr   r   rI   rH   c                    s   | \}}|dkrt d  }t d }t d }nt   d }t d }t  d }|dkrCt d }t d }t d}nt  d }t d }t d }||f }	t|	j}
|
||f ||fS Nr   )slicer   r:  r9  )chunkMNMinMselMoutNinNselNout
chunk_datamed)M1N1r=  offMoffNrR   rV   rW   apply  s$   



z2TestMedFilt.test_medfilt2d_parallel.<locals>.applyrD   )max_workers>   rH   r   r   r   r   rH   rH   rH   c                    s   h | ]}  |qS rV   )submit)r   rJ  )rY  poolrV   rW   	<setcomp>  r  z6TestMedFilt.test_medfilt2d_parallel.<locals>.<setcomp>)rp   r   r8  r;  rl  r9  
zeros_liker   r   rR  r   )
rR   r   r   outputchunksfuturesfuturedataMsliceNslicerV   )rU  rV  rY  r=  rW  rX  r`  rR   rW   test_medfilt2d_parallels  s$   
	z#TestMedFilt.test_medfilt2d_parallelN)r   r   r   r8  r;  r9  rX   r
  r  r`  rp   ubytebyteushortshortrA   r@   	ulonglongr   r   r>  bool_r   r   r%  r   object_rC  rD  rG  rj  rV   rV   rV   rW   r&  *  sN    

	r&  c                   @      e Zd Zdd ZdS )
TestWienerc                 C   sr   t g dg dg dg dgd}t g dg dg dg d	g}tt||d
d ttj|dd|d
d d S )N)rE   rF   rD   rC   )rC   rE   rF   rI   )rI   rC   rE   rF   )rH   rF   r  r}   r   )gSXO@gXq	@gq@g?)g]`UUU@gFUUUU@gq@gcq@)gyq@gXq@gXq@gUJ4@)gUUUU?g2k6k@gҷWH@g@_)@rF   decimalrC   )mysize)r   r   r   wiener)rR   r  r  rV   rV   rW   rX     s   zTestWiener.test_basicNr   r   r   rX   rV   rV   rV   rW   rs        rs  )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j
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ejdejejg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yorH   r   rI   r|  padtyperz  rJ   )r  cval)rI   rH   r   axisr  )r  )rp   r   r   
get_windowr   r   resampleresample_polyr  r   rl  )rR   signumwinsig2rV   rV   rW   rX     s   
zTestResample.test_basicr  )NhammingrL  )r   r*  r  )r   rT  rJ   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   rJ   F)endpointrI   g      @r  r   rH   r  &.>r  )	rp   linspacecosr   r   r  realr   sin)rR   rL  r  r  rg   rh   	y_complexrV   rV   rW   	test_rfft  s   .
zTestResample.test_rfftc                 C   sF   t dd }t|}d}ttj||ddtj||dddd d S )Nr  r   freq)domaintimer  r  )rp   r   sp_fftr   r   r   r  )rR   tsigfsigr  rV   rV   rW   test_input_domain  s   

zTestResample.test_input_domainnx)rH   rI   rC   rE   r   nyr   )rX  r  c                 C   s2   t dg| |}t||}t|dg|  d S NrH   )rp   r   r   r  r   )rR   r  r  r   rg   rh   rV   rV   rW   test_dc  s   zTestResample.test_dcr  c                 C   sF   t d}t jdd}| }tj|dd||d t|| d S )NrC   r   rI   rE   rH   r  r  )	rp   rp  r   r   r   copyr   r  r   )rR   r  impulser  window_origrV   rV   rW   test_mutable_window  s
   
z TestResample.test_mutable_windowc                 C   sL   t jdt jd}t jg dt jd}tj|dd||d}|jt jks$J d S )NrJ   r   rH   rH   rH   rH   rI   r  )rp   r   r   r   r   r  r   )rR   r  rg   r  rh   rV   rV   rW   test_output_float32  s   z TestResample.test_output_float32c                 C   s4   t jd|d}tj|dd|d}|j|jksJ d S )NrJ   r   rH   rI   r  )rp   r   r   r  r   )rR   r  r   rg   rh   rV   rV   rW   test_output_match_dtype  s   z$TestResample.test_output_match_dtypezmethod, ext, padtype)r   FN	polyphaseFTc                  C   s  d}g d}t |t| }t dd d t jf }t dt j | | t| }|D ]}	t |	t|	 }
t dt j | |
 t|	 }|dkrUtj	||	dd}nC|r|	|krt
|	|}|	| }|| }t||}d| }d	| }tjd| d
 |dd}||d}nd|i}tj||	|fddi|}t|||D ]>\}}}|d|	 kr|d |dv rt||dd qt||dd qt|j|j t ||d }t|dk|||	fd qq-t jd}t|t || }|D ]>}	t |	t|	 }
t |
||}|dkrt	||	}n	tj||	||d}t|j|j t ||d }t|dk|d q|dkrnt ddg}t	|d}t g d}t||dd t g d }t	|d}t ddg}t||dd d S d S )!Nr   )	r   r   r   c   r   rT     r     )r        $@g      D@rI   r   r   r  r  rJ   rH   )r  rE  r  r  r  r        ?        )r|  r}  333333?r  r   r]  gGz?r0  r   r  r   r   rD   )r         ?        r   r  -q=)r  r  r  r  )rp   r   rX  r   newaxisr  pir7   r   r  r   maxr  r  r  r!  r   r   rl  corrcoefr   r   r   cumsumr   interp) rR   ro   extr  raterates_tor   freqsrg   rate_tot_toy_tos	y_resampsr  updownmax_ratef_chalf_lenr  polyargsy_toy_resampr  corrr   r   y1_testy1_truer   y2_testy2_truerV   rV   rW   test_resample_methods  st     





z"TestResample.test_resample_methodsc                 C   s   t jd}tt jt jttf}d}g d}|D ]Z}||	|}|t jt j
fv r2|d|| 7 }d|d< d|d< |D ]4}tjdd| d	d
}t|d|ddd d | }	t||d d d }
tj|d||
d
}t|	|ddd q<qd S )Nr   r  )rI   r  O   r   r   r   r   r  r  r  constantr  rH   Hz>r   r   )rp   r   r   intr   r   rX  r  r   r   r   r   r  r%   r   r  r   )rR   random_state	try_typesr   down_factorsr   rg   r  r  yfhcrh   rV   rV   rW   test_poly_vs_filtfiltf  s$   z"TestResample.test_poly_vs_filtfiltc              	   C   s   dD ]=}t dd|D ]4}dD ]/}tj|f}tj|f}t||d d d dd}tj|d||d}t|d d | | qq
qd S )	N)rI   rD   rH   r$  )rM   r1  r   r  r]   )r  r  r  )rr   rp   r   r   r   r  r   )rR   r  r  nweightsrg   weightsy_gy_srV   rV   rW   test_correlate1d  s   zTestResample.test_correlate1dc                 C   s:   t jg d|d}tj|dddd}t |dksJ d S )N)r   rH   rI   rC   rI   rH   r   r   rI   rH   smooth)r  r  r  r   )rp   r   r   r  count_nonzero)rR   r   rg  actualrV   rV   rW   test_gh_15620  s   zTestResample.test_gh_15620N)r   r   r   rX   r
  r  r`  r  r  r  r  padtype_optionsr  r  rp   r   r   r  r  r   r  r  r  r   r  rV   rV   rV   rW   r    sD    


	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)	rH   rI   rC   rD   rC   rI   rH   rI   rJ  rH   r   r  )dxx0rJ   rE   rt  )r   r   lenr   	cspline1dcspline1d_evalr   )rR   rh   rg   r  cjr   y2rV   rV   rW   rX     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 )NrI   r   r  r  rf   r  )rp   r   rp  rl  r   expr  r   r  r   r  r	   r   )rR   rg   rh   Tr   cyxnewynewrV   rV   rW   rj     s   

zTestCSpline1DEval.test_complexN)r   r   r   rX   rj   rV   rV   rV   rW   r    s    r  c                   @   rr  )TestOrderFiltc                 C   s$   t tg dg ddg d d S )NrG   rH   r   rH   rH   )rI   rC   rI   )r   r   order_filterr   rV   rV   rW   rX     s   zTestOrderFilt.test_basicNrx  rV   rV   rV   rW   r    ry  r  c                	   @   s$  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zejd3d4d4ge d4gejd5d4d4ge d4gd6d7 Z!ejj"d8d9 Z#d:S );_TestLinearFilterc                 C   s.   t dt |d t ||}| |S )Nr   rH   )rp   r  prodrq   convert_dtype)rR   rl  rg   rV   rV   rW   generate  s   $
z_TestLinearFilter.generatec                 C   s|   | j t dkr6t|}t|j| j }t||gddgdgdgg}|D ]\}}| |d |d< q&|S tj|| j dS )	NOrefs_okzerosize_okreadonly	writeonlyrV   .r   )r   rp   r  emptyrl  nditertype)rR   arrr   iterrg   rh   rV   rV   rW   r    s   

z_TestLinearFilter.convert_dtypec                 C   sJ   |  d}| ddg}| ddg}| g d}tt|||| d S NrF   rH   r   r        ࿩r   rI   rD   rF   r   r  r   r  r   r#   rR   rg   rT   rS   y_rrV   rV   rW   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  rH   r   rH   rC   rE   r}   r  r  r  rV   rV   rW   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  rH   r   r   r  r  rH   rI   )rH   rE   r     r   rL  r  zir   r  r#   r   	rR   rg   rT   rS   r  r  zf_rrh   zfrV   rV   rW   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  r  rH   )rH   rI   rC   rF   r  r  r  rE   r  r  r  rV   rV   rW   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rD   rC   rH   r   r  r   rI   rD   rF   rD   rI   r   r  r  )rR   rg   rT   rS   y_r2_a0rh   rV   rV   rW   test_rank_2_IIR_axis_0     
z(_TestLinearFilter.test_rank_2_IIR_axis_0c                 C   sf   |  d}| ddg}| ddg}| g dg dg dg dg}t|||dd	}t|| d S )
Nr   rH   r   r  r   rI   r   rF   r  rF   rO   r  rO   r'  ir'  r  r  )rR   rg   rT   rS   y_r2_a1rh   rV   rV   rW   test_rank_2_IIR_axis_1  r%  z(_TestLinearFilter.test_rank_2_IIR_axis_1c           	      C   s   |  d}| ddg}| ddg}| td}| g dg dg dg d	g}| g d
d d tjf }t|||d|d\}}t|| t|| d S )Nr   rH   r   r  )rD   rH   r  )r}   r}   )r  r  )r*  r*  )r,  r.  iir  r  )r   r  rp   rO  r  r#   r   )	rR   rg   rT   rS   r  	y_r2_a0_1r  rh   r  rV   rV   rW    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   rH   r   r  rH   rC   )rH   rC   rE   )rE   rC   rH   )r3  r3  r   r/  )r   r  rp   rO  r#   r   )	rR   rg   rT   rS   r  	y_r2_a0_0r  rh   r  rV   rV   rW    test_rank_2_IIR_axis_1_init_cond  s   

z2_TestLinearFilter.test_rank_2_IIR_axis_1_init_condc                    sj   |  d}| ddg| ddg t|jD ]}t ||}t fdd||}t|| qd S )NrD   rC   rI   rH   r   r  c                       t  | S r   r#   wrS   rT   rV   rW   <lambda>&      z3_TestLinearFilter.test_rank_3_IIR.<locals>.<lambda>r   r  rr   ndimr#   rp   apply_along_axisr   rR   rg   r  rh   r  rV   r;  rW   test_rank_3_IIR  s   
z!_TestLinearFilter.test_rank_3_IIRc                    s   |  d}| ddg| ddg t|jD ]K}t|j}d||< | t|}| dgt |||\}} fdd} fdd}t	|||}	t	|||}
t
||	 t
||
 qd S )	Nr6  rH   r   r  c                       t  | dd S Nr  r   r8  r9  rS   rT   zi1rV   rW   lf04     z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf0c                    rC  Nr  rH   r8  r9  rE  rV   rW   lf16  rH  z8_TestLinearFilter.test_rank_3_IIR_init_cond.<locals>.lf1r   r  rr   r?  r  rl  rp   rO  r#   r@  r   rR   rg   r  zi_shaper  rh   r  rG  rJ  r  r  rV   rE  rW   test_rank_3_IIR_init_cond)  s    


z+_TestLinearFilter.test_rank_3_IIR_init_condc                    sh   |  d}| g d| dg t|jD ]}t ||}t fdd||}t|| qd S )Nr6  r  rH   c                    r7  r   r8  r9  r;  rV   rW   r<  D  r=  z3_TestLinearFilter.test_rank_3_FIR.<locals>.<lambda>r>  rA  rV   r;  rW   test_rank_3_FIR=  s   
z!_TestLinearFilter.test_rank_3_FIRc                    s   |  d}| g d| dg t|jD ]L}t|j}d||< | t|}| ddgt |||\}} fdd} fdd}t	|||}	t	|||}
t
||	 t
||
 qd S )	Nr6  r  rH   rI   c                    rC  rD  r8  r9  rE  rV   rW   rG  R  rH  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf0c                    rC  rI  r8  r9  rE  rV   rW   rJ  T  rH  z8_TestLinearFilter.test_rank_3_FIR_init_cond.<locals>.lf1rK  rL  rV   rE  rW   test_rank_3_FIR_init_condG  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)rD   rE   r   r   r  barc  r   rH   rD   rE   r  r   )r   r   r&   r  rl  rp   rO  r#   r   r   r   )rR   rg   rT   rS   zi_sizezi_fullzi_singy_fullzf_fully_singzf_singrV   rV   rW   test_zi_pseudobroadcast[  s   




z)_TestLinearFilter.test_zi_pseudobroadcastc                 C   sP   |  d}| g d}| dg}| g d}t||d |}t|| d S )NrF   r  rH   )r   rH   rI   rI   rI   rI   r   r  )rR   rg   rT   rS   r  rh   rV   rV   rW   test_scalar_ap  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)rC   rI   rE   lrE   rH   r   r   )rC   rH   rD   rH   rI   rC   )rC   rI   rD   rD   r   r   )r  rp   rp  rO  r   r#   r   )rR   rg   rT   rS   r  zf_expected
y_expectedy_iirzf_iiry_firzf_firrV   rV   rW   test_zi_some_singleton_dimsz  s"   
,



z-_TestLinearFilter.test_zi_some_singleton_dimsc                 C   s@   |  |}|  |}|  |}|  |}ttt||||| d S r   )r  r   r   r#   )rR   rT   rS   rg   r  r  rV   rV   rW   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 )NrF   rH   r   r   r   rH   rI   r  r   rH   rI   rC   rO   r   rI   )r   rH   rI   rC   rD   rE   rZ   rC   rD   rE   )rD   rE   rF   r}   )r   rH   rI   rC   rD   rE   rF   r}   r}   r   r  )rp   r   re  rq   )rR   r   r   rV   rV   rW   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)rE   rH   r  r   )r   r  r#   r   r	   r   r   )rR   rg   rS   rT   r  rh   r  rV   rV   rW   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 )NrH   r  r   TF)r  r,   r   )rR   rS   rT   r  zi_1zi_2rV   rV   rW   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 )	NrH   r  rI   r}   r(  r6  r  r  r#   r   	rR   rS   rT   r  rg   yezferh   r  rV   rV   rW   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 )
NrH   r  rI   r}   r(  r6  irm  r  rn  ro  rV   rV   rW   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  r  r#   r   r	   rR   rg   rT   b0rS   a0r  y_frV   rV   rW   test_do_not_modify_a_b_IIR,  s   


z,_TestLinearFilter.test_do_not_modify_a_b_IIRc                 C   sp   |  d}| g d}| }| dg}| }| g d}t|||}t|| t|| t|| d S )Nr  r  rI   )r   r  rH   rI   rC   rK  rt  ru  rV   rV   rW   test_do_not_modify_a_b_FIR8  s   


z,_TestLinearFilter.test_do_not_modify_a_b_FIRrS   r  rT   c                 C   s:   t jd}ttt dgt dg|t||| d S )NrJ   r  )rp   r   r   r   r#   r   )rR   rS   rT   rg  rV   rV   rW   test_scalar_inputD  s
   
z#_TestLinearFilter.test_scalar_inputc                 C   sf   t jg dtd}t jg dtd}tjdd t||g d W d    d S 1 s,w   Y  d S )Nr   r   r   r  r  r[   )rp   r  r	  r
  r  r#   r   rV   rV   rW   r  L  s
   "z(_TestLinearFilter.test_dtype_deprecationN)$r   r   r   r   r  r  r  r  r  r$  r+  r1  r5  rB  rN  rO  rP  rZ  r[  rd  re  rh  ri  rl  rr  rs  ry  rz  r
  r  r`  rp   r   r{  r  r  rV   rV   rV   rW   r    s>    		


`r  c                   @      e Zd ZedZdS )TestLinearFilterFloat32r   Nr   r   r   rp   r   rV   rV   rV   rW   r}  U      r}  c                   @   r|  )TestLinearFilterFloat64r   Nr~  rV   rV   rV   rW   r  Y  r  r  r  c                   @   r|  )TestLinearFilterFloatExtendedr  Nr~  rV   rV   rV   rW   r  ]      r  c                   @   r|  )TestLinearFilterComplex64FNr~  rV   rV   rV   rW   r  b  r  r  c                   @   r|  )TestLinearFilterComplex128DNr~  rV   rV   rV   rW   r  f  r  r  c                   @   r|  )TestLinearFilterComplexExtendedGNr~  rV   rV   rV   rW   r  j  r  r  c                   @   s   e Zd ZedZdd ZdS )TestLinearFilterDecimalr  c                 C   s   t t|S r   )r   strrR   rg   rV   rV   rW   r  s  s   zTestLinearFilterDecimal.typeN)r   r   r   rp   r   r  rV   rV   rV   rW   r  o  s    
r  c                   @   s   e Zd ZedZeZdS )TestLinearFilterObjectr  N)r   r   r   rp   r   rX  r  rV   rV   rV   rW   r  w  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  NrH  r  rH  rJ  )hasattrsysr  r
  rB  r   	TypeErrorr#   rV   rV   rV   rW   test_lfilter_bad_object}  s
   
r  c                   C   s    t ttddgddgg d d S )NrI   rC   rD   rE   )rH   rI   rC   rD   rE   )r   NotImplementedErrorr#   rV   rV   rV   rW   !test_lfilter_notimplemented_input  s    r  dt)marksc                   @   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   rC   rD   rH   rI   )r   rI   rE   r   rC   )rp   r  r   r   rR   r  rS   rT   r  rV   rV   rW   _setup_rank1  s   
zTestCorrelateReal._setup_rank1c                 C   sN   d}zt |}t|drtdt |j }W |S W |S  ty&   Y |S w )NrF   
resolutionr  )rp   rA  r  r  log10r  	Exception)rR   res_dtru  dt_inforV   rV   rW   equal_tolerance  s   

z!TestCorrelateReal.equal_tolerancec                 C   s    |t jkr| t jS | |S r   )rp   r$  r  r   )rR   r  rV   rV   rW   equal_tolerance_fft  s   

z%TestCorrelateReal.equal_tolerance_fftc                 C   s   |t krtt dgt dg}t|d d S | |\}}}t||dd}t||dd}t||| |jd t||| |jd t|j| t|j| d S )NrD   rC   rm   r   rn   rt  )	r   r   r	   _setup_rank3r   r   r  r   r  )rR   r  ro   rS   rT   r  y_ffty_directrV   rV   rW   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   rH   rD   r   r  r   r   r	   r   rR   r  rS   rT   r  rh   rV   rV   rW   test_rank1_valid  s   z"TestCorrelateReal.test_rank1_validc                 C   s>   |  |\}}}t||d}t||d d  t|j| d S )Nr\   r   r  r  rV   rV   rW   test_rank1_same  s   z!TestCorrelateReal.test_rank1_samec                 C   s6   |  |\}}}t||d}t|| t|j| d S )Nr   r  r  rV   rV   rW   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   r6  r$  )rI   rD   rE   r  )orderrN   r"  r{   )r  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     @rG  )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@r  r   )rp   r  rq   r   r   r   r  rV   rV   rW   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   rH   rI   rD   rC   rE   r   r  r   r   r	   r   r  rV   rV   rW   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 )Nr\   r   r   rH   r  r  r  rV   rV   rW   test_rank3_same  s    z!TestCorrelateReal.test_rank3_samec                 C   s4   |  |\}}}t||}t|| t|j| d S r   r  r  rV   rV   rW   test_rank3_all  s   

z TestCorrelateReal.test_rank3_allN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  rV   rV   rV   rW   r    s    r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zejj	d	d
 Z
dS )TestCorrelatec                 C   r   r   )rp   r   rq   r   r   r   r   rV   rV   rW   r     r   z!TestCorrelate.test_invalid_shapesc                 C   r   r   r   r   r   r   rV   rV   rW   r     r   z!TestCorrelate.test_invalid_paramsc                 C   r   r   r  r   rV   rV   rW   r  '  r  z"TestCorrelate.test_mismatched_dimsc                 C   s   g d}ddg}t t||ddg d g d}g d}t t||ddg d t t||d	dg d
 t t||dddg d S )NrG   rD   rE   r\   r]   )rE      rN   r|   )r   rM   rN   r   )rF   r   rM   rN   rO   r   rM   )r   r   r   rV   rV   rW   test_numpy_fastpath0  s   z!TestCorrelate.test_numpy_fastpathc                 C   r  r  )rp   r  r	  r
  r  r   r   rV   rV   rW   r  ;  r  z$TestCorrelate.test_dtype_deprecationN)r   r   r   r   r   r  r  r
  r  r  r  rV   rV   rV   rW   r    s    		r  r^   r   r\   r   behindTF
input_size)r   rT  rj  rk  r  i'  c                 C   s   t jd}||}t|d }|r!t |||g}| }n||d  }|}t||| d}t|j|j| d}	t 	|}
t
|	|
 | t
|	j|j d S )Nr   rJ   r]   )rp   r   r   r  r  concatenater   r   r   argmaxr	   rl  )r^   r  r  r   in1offsetin2r   correlationlags	lag_indexrV   rV   rW   test_correlation_lagsD  s   

r  c                   C   sB   t jtdd tdddd W d    d S 1 sw   Y  d S )NzMode asdfgh is invalidr  r   asdfghr]   )r
  r   r   r   rV   rV   rV   rW   "test_correlation_lags_invalid_mode`  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 )NrI   rC   )rp   r%  cdoubler  rA  	precision)rR   r  rV   rV   rW   ru  o  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  rJ   r   r   r]   )rp   r   r  r   r   r   r  imag)rR   r  r^   rS   rT   r  rV   rV   rW   r  t  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   rt  r   )r  r   r   ru  r	   r   conjr  rV   rV   rW   r    s   "z%TestCorrelateComplex.test_rank1_validc                 C   B   |  |d\}}}t||d}t||| |d t|j| d S )Nr\   rt  r  r   r   ru  r	   r   r  rV   rV   rW   r       z$TestCorrelateComplex.test_rank1_samec                 C   r  )Nr   rt  r  r  rV   rV   rW   r    r  z$TestCorrelateComplex.test_rank1_fullc                 C   s@   t jg d|d}t jg d|d}t||}t|g d d S )Nr   rc   r  r   y      ?      @y       @      @y      @      @y      @      @)r         $@             <@            6@      y      0@      y       @      )rp   r   r   r	   rR   r  r   krh   rV   rV   rW   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  r\   r]   )r  r  r  )r   r	   r  rV   rV   rW   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 )	NrJ   r   rF   r   rD   r   rH   rt  )rp   r   r   r   r   r  r  r   ru  r	   r   r  rV   rV   rW   
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   rH   rt  rf                 @rD   )rp   r   r   r   r   r   r  r  r   ru  r	   r   r  rV   rV   rW   
test_rank0  s$   
zTestCorrelateComplex.test_rank0N)r   r   r   ru  r  r  r  r  r  r  r  r  rV   rV   rV   rW   r  e  s    
r  c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestCorrelate2dc              	   C   s   t d}t g d}dD ]T}tt j|||dtj|||d tt tj|g|g|dtj|||d |dkrbtt j|||dtj|||d tt tj|g|g|dtj|||d qd S )NrE   rd  re  r]   r   )rp   r   r   r
   r   r   rf  r   rg  rV   rV   rW    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   )rp   r   rq   r   r   r   r   r   rV   rV   rW   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 )NrH   rf                 r  rF   rD   y              (@)r	   r   r   r   rV   rV   rW   test_complex_input  s   z"TestCorrelate2d.test_complex_inputN)r   r   r   r  r   r  rV   rV   rV   rW   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  rI  r  )r  r  rH  rE  rI  )rp   r   r$   r   )rR   rS   rT   zi_expectedr  rV   rV   rW   rX     s
   
zTestLFilterZI.test_basicc                 C   sJ   t g d}t g d}t||}td| d| }t||dd d S )N)rI   r   rE   )rH   rH   r   rI   r  r  )rp   r   r$   r   )rR   rT   rS   rF  zi2rV   rV   rW   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   rH   )rp   rp  r   r	   r  r   r$   r   )rR   r   rT   rS   rV   rV   rW   r>    s   zTestLFilterZI.test_typesN)r   r   r   rX   r  r
  r  r`  rp   r   r   r>  rV   rV   rV   rW   r    s
    	r  c                   @   sN   e Zd ZdZ		dddZdd	 Zd
d Zdd Zdd Zdd Z	dd Z
dS )TestFiltFilttfr   oddNr]  c              	   C   sR   | j dkrt| \}}	t||	||||||S | j dkr't| }
t|
||||S d S )Nr  sos)filtfilt_kindr'   r%   r(   r/   )rR   zpkrg   r  r  padlenro   irlenrT   rS   r  rV   rV   rW   r%   		  s   

zTestFiltFilt.filtfiltc                 C   s:   t g dg d}| |td}t|tddd d S )NrG   rO   g6{=r  )r1   r%   rp   r   r   )rR   r  r   rV   rV   rW   rX   	  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  rH   rJ   i  r         ?r  rR  r   )r  r   r  r  )rp   r  r  r  r&   r  r  r  ceillogr%   r   vstackr	   rl  r  )rR   r  r   xlowxhighrg   r  repsr   rh   errx2dy2dy2dtrV   rV   rW   	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     @rJ   r  rO   rC   r  r  rR  r   r  rH   rI   )rp   r   rq   r&   r%   r  r   )rR   rg   r  y0y1r  rV   rV   rW   	test_axis9	  s   zTestFiltFilt.test_axisc                 C   s@   | j dkrd S tddgdtd}t|tdddd d S )Nr  r  rH   rJ   +=r   )r  r   r%   rp   r   r   )rR   r   rV   rV   rW   test_acoeffC	  s   
zTestFiltFilt.test_acoeffc                 C   s   | j dkr
td tddg}tdg}tddg}t|||\}}}t|d |d gd|d  d	|d
   d	|d  d|d
   g t||d d|d   d|d   d|d
   d|d  |d  d|d   d|d
   g d S )Nr  $gust only implemented for TF systemsr  rH  r  r  r   r  r  rH         ?r  )r  r
  rB  rp   r   r8   r   )rR   rg   rT   rS   rh   z1z2rV   rV   rW   test_gust_simpleJ	  s   

..*
zTestFiltFilt.test_gust_simplec                 C   sT   | j dkr
td td}d}d}t|||dd}|| d | }t|| d S )	Nr  r   rO   rJ  rH  gustrn   rI   )r  r
  rB  rp   r   r%   r   )rR   rg   rT   rS   rh   r   rV   rV   rW   test_gust_scalarsX	  s   


zTestFiltFilt.test_gust_scalars)r   r  Nr]  N)r   r   r   r  r%   rX   r  r  r  r  r  rV   rV   rV   rW   r  	  s    
	"
r  c                   @   s   e Zd ZdZdd ZdS )TestSOSFiltFiltr  c           	      C   sv   t jdd}tddD ]*}tj|ddd}t| \}}t| }t	|||}t
||}t||dd	| d
 qdS )z1Test equivalence between sosfiltfilt and filtfiltr   rj  rH   rF   ffffff?r  rR  r  zorder=)r   err_msgN)rp   r   r   r   rr   r   r&   r'   r(   r%   r/   r   )	rR   rg   r  r  rT   rS   r  rh   y_sosrV   rV   rW   test_equivalencei	  s   
z TestSOSFiltFilt.test_equivalenceN)r   r   r   r  r  rV   rV   rV   rW   r  f	  s    r  c                 C   s   dd }t t|t| d }t| |}t|d|  | || d  | f}t||| ||fdddddd	d
	}|\}}	}
}}|dkrMt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.rH   Nr  r   r   rI   )r  r  r#   rp   sum)icsrT   rS   rg   mz0fz0brx  y_fby_by_bfvaluerV   rV   rW   filtfilt_gust_opt_func~	  s   ((z1filtfilt_gust_opt.<locals>.filtfilt_gust_opt_funcrH   Nr  r  r  TF)r   xtolftolmaxfunmaxiterfull_outputdispr   z5minimization failed in filtfilt_gust_opt: warnflag=%dr   r  )	r  r  r$   rp   r  rz  r   r  r#   )rT   rS   rg   r  r  r  r  rR  optfoptniterfuncallswarnflagr  r  r  rh   rV   rV   rW   filtfilt_gust_optu	  s&   	
0(
r!  c                 C   sH  t jd t jj| }t| |||d|d}t| ||||d\}}}	t ||d}
|
jd d }t |
}t	t
|t
| d }t ||f }t ||f }tdd |D  D ]}t| ||
| \||< ||< ||< qYt |d|}t |d|}t |d|}t||d	d
d t||d	d
d t||d	d
d t|	|d	d
d d S )Nr  r  )r  ro   r  )r  r  r   rH   c                 S   s   g | ]}t |qS rV   )rr   )r   r   rV   rV   rW   r   	  r   z'check_filtfilt_gust.<locals>.<listcomp>r   r  r   )rp   r   r  r   r%   r8   r  rl  
empty_liker  r  r  r   r!  r   )rT   rS   rl  r  r  rg   rh   ygzg1zg2xx	out_shaper  r  zo1zo2indxrV   rV   rW   check_filtfilt_gust	  s&   
$r+  rJ   c            
      C   s   dD ]f} dD ]J}d\}}}t jj|f|  }t jj|f|  }t||| d}t|| t||| dd\}}	t|dv  tt|	t td|	 v oNd	|	 v  qt j	d
gt j
d}| }tt||| dd	 qd S )Nr  )rH   rI   )r   rF   rm   r]   T)r^   measure>   r   rm   r   rm   l         @ r   )rp   r   r   r   r	   r   
isinstancedictkeysr   r   r  )
r^   r?  r   r  true_methodrg   r  ro   
method_trytimesrV   rV   rW   test_choose_conv_method	  s   

r3  c                  C   s`   t jg dtd} t jg dtd}tjdd t| | W d    d S 1 s)w   Y  d S r  )rp   r  r	  r
  r  r   r;  rV   rV   rW   "test_choose_conv_dtype_deprecation	  r  r4  c                  C   s   dD ]=} t dt dg}t dt dg}tt||| dd d}d	D ]}tt|r>tj||d
}| }tt||| dd q"qd S )Nr  rC   rI   rH   rD   r]   rm   rJ   )
complex256
complex192r   )r   r	   r   r  rp   rO  r  )r^   rg   r  r   not_fft_conv_supprV   rV   rW   test_choose_conv_method_2	  s   
r8  c                  C   s   t jdddddd\} }}d}tt|}ttt|t| }tj	d t
| ||\}}d |fD ]&}d	| }	t|||	fd
| tdD ]}
g d}|	||
< t||||
| qKq8d| d }t|||fd
| d S )NrC   {Gz?x   gffffff?r  rR  r  r  rE   r   )rI   rI   rI   rI   r   )r   elliprp   r  r  r  r  r  r   r  r'   r+  rr   )ri   pr  r  r  approx_impulse_lenrT   rS   r  
signal_lenr  rl  lengthrV   rV   rW   test_filtfilt_gust	  s    r@  c                   @   |   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 )NrO   r  rH   )qr   rI   )rp   r   r   r  r   decimater  rV   rV   rW   test_bad_args
  s   
zTestDecimate.test_bad_argsc                 C   :   t d}tj|ddddd }t||d d d  d S )NrO   rI   rH   iirFr   ftype
zero_phaserp   r   r   rD  roundr   rR   rg   rh   rV   rV   rW   test_basic_IIR
     
zTestDecimate.test_basic_IIRc                 C   rF  )NrO   rI   rH   firFrH  rK  rM  rV   rV   rW   test_basic_FIR
  rO  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)r   r   rI   r   F)r  rJ  )r+  r   rH   )r   r+  )rp   rp  r   rD  r	   rl  )rR   ri   d0d1rV   rV   rW   
test_shape
  s
   
zTestDecimate.test_shapec                 C   F   t  }|td | jddd W d    d S 1 sw   Y  d S )NBadly conditioned filterrP  Fro   rJ  r   r/  r2   _test_phaseshiftrR   r1  rV   rV   rW   test_phaseshift_FIR&
     "z TestDecimate.test_phaseshift_FIRc                 C   rU  )NrV  rP  TrW  rX  rZ  rV   rV   rW   test_zero_phase_FIR+
  r\  z TestDecimate.test_zero_phase_FIRc                 C      | j ddd d S )NrG  FrW  rY  r   rV   rV   rW   test_phaseshift_IIR0
     z TestDecimate.test_phaseshift_IIRc                 C   r^  )NrG  TrW  r_  r   rV   rV   rW   test_zero_phase_IIR3
  ra  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 ]}	||	 }
t |	| d t|	 }t dt j |d d t jf  | tj	|j
d }|d	krd
}ttj|d d|
 ddd}n|dkrd}dt j |
 }tjt|d|t j  }|du rt|j|j|| d t j \}}|t | }nt |}tj|j|
|||d}t j| | dd}|t | }|d|	 k }tt | | | dddd q;d S )Nr:  )r+  r   r   r$  r   rH   皙?rI   rf   皙?rP  r   r  r  r  rG  r   g?FrI  rJ  r   r  r  r   r   r  )rp   r   rX  r   r  r  r  r   windowstukeyr   dltir  cheby1freqzr  denr  	ones_likerD  r  r  r  r   angle)rR   ro   rJ  r  r  t_totr   r  r   r  rC  r  d_tosr   systemwc_h_respsr  	h_resampssubnyqrV   rV   rW   rY  6
  sR   $$
zTestDecimate._test_phaseshiftc                 C   s|   d}d}t || }t d| t dt j |d  |  }tt j|ddd tj	|d	d
d}t
t j|d d S )Ng      Y@rj  rH  rI   g      >@r  r   r  r   rP  )rI  r9  )rp   r   sqrtr  r  r   linalgnormr   rD  r   )rR   sfreqr   r   rg   x_outrV   rV   rW   test_auto_nf
  s   *zTestDecimate.test_auto_nc                 C   s.   t tjdtjdd}tt|rJ d S )Nr  r   rJ   )r   rD  rp   rO  r   r   isnanr  rV   rV   rW   test_long_float32r
  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   rJ   )r   rD  rp   rO  r   r   r  r   r  rV   rV   rW   test_float16_upcastx
  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   rE        @@rI   r  )rc  fsrf   r  r  r  Fre  Tr  vIh%<=r   )r   r&   rp   r  r   r  r  rh  r   rD  r#   r'   r	   r%   r   )rR   fcentrefwidthr  ri   r<  r  rp  r   r   ynzpynzprefyzpyzprefrV   rV   rW   test_complex_iir_dlti}
  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   rE   r  r   rI   )r  rf   r   rH   r  r  r  Fre  )r  r  r   Tr  )r   r  rp   rootsr  r  polyrh  r   rD  upfirdnr	   r  )rR   r  r  r  numtapsbbasezbasezrotbzrp  r   r   r  r  r  r  rV   rV   rW   test_complex_fir_dlti
  s&   

z"TestDecimate.test_complex_fir_dltiN)r   r   r   rE  rN  rQ  rT  r[  r]  r`  rb  rY  r{  r}  r~  r  r  rV   rV   rV   rW   rB  
  s    0 rB  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   rL  )rp   r   r   r   r!   r   r  rV   rV   rW   rE  
  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   rI   r  rH   r  rC   )rp   r  r   r  r  r  r!   r  rm  r  r
   rO  rl  r  )rR   ru  r  r   rw  a1a2a3rS   r  h_absh_angleh_realrV   rV   rW   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'  rC   rF   r   r  r   r  r   )rL  r  )y        Bm}ąy      ?a y?0fy      @Wa94y      @"nWy      @hIX@y<nm@yF8O2k{?yډoP?y̼YC?y433333<c4Qe?yȒ40p$?yESU?yffffff<?7?y433333<wEoy!5P{3'ſy        _N@տy<}ٿy<-cyF8<2OW\zN regression)	rp   r   rq   r!   r	   r  r
   rl  r   )rR   rS   aaaana0hilbrV   rV   rW   test_hilbert_axisN
  s   zTestHilbert.test_hilbert_axisNr   c                 C   *   t jd|d}tt t|j| d S )Nr   r   )rp   rp  r	   r  r   r!   r   r<  rV   rV   rW   test_hilbert_types     zTestHilbert.test_hilbert_typesN)r   r   r   rE  r  r  r
  r  r`  rp   r   r   r  rV   rV   rV   rW   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"  rI   rC   rD   r~   r   r  )rI   r   )rI   )rp   r   r   r   r"   r   rq   r  rV   rV   rW   rE     s   zTestHilbert2.test_bad_argsr   c                 C   r  )N)rI   rM   r   )rp   rp  r	   r  r   r"   r   r<  rV   rV   rW   test_hilbert2_types/  r  z TestHilbert2.test_hilbert2_typesN)r   r   r   rE  r
  r  r`  rp   r   r   r  rV   rV   rV   rW   r    s    r  c                   @   sf  e Zd ZdZedd Zdd Zdd Zej	
dg d	d
g dg dfg ddg dg dfg ddg dg dfg ddg dg dfg ddg dg dfg ddg dg dfg ddg dg dfgdd Zej	
dg ddg d g dfg d!d"g d g d#fg d$d"g d%g d&fgd'd( Zd)d* Zd+d, Zej	
d-g d.g d/gd0d1 Zd2S )3TestEnvelopez4Unit tests for function `._signaltools.envelope()`. c                 C   s   t | |dd|d dS )z9Little helper to compare to arrays with proper tolerancesr  )r   r   r	  Nr=   )r  desiredr0  rV   rV   rW   assert_close8  s   zTestEnvelope.assert_closec              	   C   s  t jtdd ttddd W d   n1 sw   Y  t jtdd ttdd	d W d   n1 s;w   Y  d
D ].}dtt|}t jtd| dd ttd|d W d   n1 skw   Y  qBt jtdd ttddd W d   n1 sw   Y  dD ]"}t jtdd ttd|d W d   n1 sw   Y  qt jtdd ttddd W d   dS 1 sw   Y  dS )z[For `envelope()` Raise all exceptions that are used to verify function
        parameters. z'Invalid parameter axis=2 for z.shape=.*r  rC   rI   r  Nz&z.shape\[axis\] not > 0 for z.shape=.*)rC   r   rH   )rf  )r   rH  )NrH  z, zbp_in=\(z\) isn't a 2-tuple of.*rD   )bp_inz)n_out=10.0 is not a positive integer or.*r  )n_out))r   rC   r^  )r   rJ   z&`-n//2 <= bp_in\[0\] < bp_in\[1\] <=.*zresidual='undefined' not in .*	undefinedresidual)	r
  r   r   r    rp   rO  joinmapr  )rR   r  tsrV   rV   rW    test_envelope_invalid_parameters=  sB   
"z-TestEnvelope.test_envelope_invalid_parametersc                 C   s  g dg d}}t |}t|}t|dddd\}}| jt |tg dt	dd	 | jt |tg d
t	dd	 t|dddd\}}| j|d |dd	 | j||dd	 t|dddd| d\}	}
| j|	ddd |dd	 | j|
ddd |dd	 t|dddd\}}| j||dd	 | jt |tg dt	dd	 t|dddd}| j||dd	 t
|}|dd  d9  < t j||d}| j|j|dd	 t|dddd\}}| j||t	dd	 | jt |t|t	dd	 dS )zEEnsure that the various parametrizations produce compatible results. )rD   rI   rI   rC   r   )rD   r   r   rF   r   r   r   r   r2  allTr  squaredrD   rI   r   r   r   Envelope calculation errorr  )rD   r   r   rC   r   Residual calculation errorFrI   z3Unsquared versus Squared envelope calculation errorz3Unsquared versus Squared residual calculation errorrC   )r  r  r  Nz(3x up-sampled envelope calculation errorz(3x up-sampled residual calculation errorlowpassz/`residual='lowpass'` envelope calculation error)rD   r   r   r   r   z/`residual='lowpass'` residual calculation errorz*`residual=None` envelope calculation errorrH   )r   zReference analytic signal errorz"Complex envelope calculation errorz"Complex residual calculation error)r  irfftr  r    r  rfftrp   r   r   r  r  ifftr  r   )rR   ZZr_ari   r   ze2_0zr_0ze_1zr_1ze2_2zr_2ze2_3zr_3ze2_4Z_az_aze2_azr_arV   rV   rW   test_envelope_verify_parametersX  s`   



z,TestEnvelope.test_envelope_verify_parametersz@               Z,        bp_in,     Ze2_desired,      Zr_desiredrH   r   rI   rI   r   )rH   Nr  rH   r   r   r   r   )rD   r   rI   r   r   )r   N)r   r   r   r   r   )rD   r   r   rI   r   NN)r   r   rI   rI   r   r2  )rI   r   r   r   r   )r   r   r   rI   r   )rD   r   rI   rI   r   )rC   )rD   r   rC   rD   r   r  )r   r   rC   rD   r   rH  c                 C   s   t |}t||ddd\}}t||ddd\}}	dd ||||	fD \}
}}}t|t}t|t}| j|
|dd | j||d	d |d
 durVd||d
 d< | j||dd | j||dd dS )a  Test envelope calculation with real-valued test signals.

        The comparisons are performed in the Fourier space, since it makes evaluating
        the bandpass filter behavior straightforward. Note that also the squared
        envelope can be easily calculated by hand, if one recalls that coefficients of
        a complex-valued Fourier series representing the signal can be directly
        determined by an FFT and that the absolute square of a Fourier series is again
        a Fourier series.
        r  Tr  r  c                 s       | ]}t |V  qd S r   r  r  r   z_rV   rV   rW   	<genexpr>      z:TestEnvelope.test_envelope_real_signals.<locals>.<genexpr>z+Envelope calculation error (residual='all')r  z+Residual calculation error (residual='all')rH   Nr   z/Envelope calculation error (residual='lowpass')z/Residual calculation error (residual='lowpass'))r  r  r    rp   r   r   r  r  )rR   r  r  Ze2_desired
Zr_desiredri   ze2zrze2_lpzr_lpZe2ZrZe2_lpZr_lprV   rV   rW   test_envelope_real_signals  s(   

z'TestEnvelope.test_envelope_real_signalszG               Z,        bp_in,         Ze2_desired,         Zr_desired)r   rE   r   rE   r   rE   r   rJ   r   rE   rH   rE   r   rE   rI   r   rI   rH   r   r   r   rI   )rH   rI   rF   r   rF   rC   )r   rF   r   rO   r   rF   )rH   rI   r   r   r   rC   c           
      C   sv   t t |}t||ddd\}}dd ||fD \}}	| j|t|tdd | j|	t|tdd d	S )
zTest envelope calculation with complex-valued test signals.

        We only need to test for the complex envelope here, since the ``Nones``s in the
        bandpass filter were already tested in the previous test.
        r  Tr  c                 s   s     | ]}t t |V  qd S r   r  fftshiftr   r  rV   rV   rW   r    s    z=TestEnvelope.test_envelope_complex_signals.<locals>.<genexpr>r  r  r  N)	r  r  	ifftshiftr    r  rp   r   r   r  )
rR   r  r  r  r  ri   r  r  r  r  rV   rV   rW   test_envelope_complex_signals  s   
z*TestEnvelope.test_envelope_complex_signalsc                 C   s   t g dg dg}tjg dg dgtd}tjg dg dgtd}t|dd	d
\}}t|jddd
\}}dd ||j||jfD \}}	}
}| j||dd | j|
|dd | j|	|dd | j||dd dS )z.Test for multi-channel envelope calculations. r  )r}   r   rD   rD   r   r  )r~   r   r   r   r   r   r  )r}   r   r   r   r   TrH   )r  r  r   c                 s   r  r   r  r  rV   rV   rW   r    r  zCTestEnvelope.test_envelope_verify_axis_parameter.<locals>.<genexpr>2d envelope calculation errorr  2d residual calculation error"Transposed 2d envelope calc. error"Transposed 2d residual calc. errorN)r  r  rp   r   r  r    r  r  )rR   ri   r  r  r  r  ye2TyrTr  Ye2r  YrrV   rV   rW   #test_envelope_verify_axis_parameter  s   "z0TestEnvelope.test_envelope_verify_axis_parameterc                 C   s   t t jg dg dgdd}tjg dg dgtd}tjg dg dgtd}td	d
dd}t|fddi|\}}t|jfddi|\}}dd ||j||jfD \}	}
}}| j	|	|dd | j	||dd | j	|
|dd | j	||dd dS )zBTest for multi-channel envelope calculations with complex values. r  )rH   rJ   r   rJ   rI   rH   r  r  )r   r   r$  r   r   r   r  r  r  T)r  r  r  r  r   c                 s   s$    | ]}t jt |d dV  qdS )rH   r  Nr  r  rV   rV   rW   r    s    zKTestEnvelope.test_envelope_verify_axis_parameter_complex.<locals>.<genexpr>r  r  r  r  r  N)
r  r  r  rp   r   r  r.  r    r  r  )rR   ri   Ze2_desZr_deskwr  r  r  r  r  r  r  r  rV   rV   rW   +test_envelope_verify_axis_parameter_complex  s    z8TestEnvelope.test_envelope_verify_axis_parameter_complexX)rD   r   r   rH   rI   )rD   r   r   rI   rH   rI   c                 C   s:   t |}tt|}t|ddd}| j||dd dS )z0Compare output of `envelope()` and `hilbert()`. r  Nr  z!Hilbert-Envelope comparison errorr  )r  r  rp   r  r!   r    r  )rR   r  rg   e_hile_envrV   rV   rW   test_compare_envelope_hilbert  s   
z*TestEnvelope.test_compare_envelope_hilbertN)r   r   r   __doc__staticmethodr  r  r  r
  r  r`  r  r  r  r  r  rV   rV   rV   rW   r  5  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 )$TestPartialFractionExpansionr}   c                 C   s   t |}t |}t t|d d d f | t| d d d f | }t|\}}t|| || |d t| | || |d d S )Nrt  )rp   r  hypotr  r   r
   )r  r<  r_truep_trueru  distancerowscolsrV   rV   rW   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 )NrG   r  rC   r   )rI   rI   rC   rH   )rH   rH   rH   rC   rI   )rH   rH   rH   rI   rI   )rH   rH   rH   rI   rI   rC   T)include_powersrF   )rH   rH   rI   rI   rC   )rH   rI   rI   rC   )rH   rH   rH   rI   rC   rD   rE   )r9   r	   r  r
   rp   r  )rR   factorsr  rV   rV   rW   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?rH  g/$ @rJ  rd  minr  r  )r:   r	   rR   uniquemultiplicityrV   rV   rW   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rE   rC   r  r}   r  r   r   rC   )gZd;O?g9#Jg&䃞ͪrD   rt  )g-1ڿgeagvq-?g      r  r   rH   rF   r   ir  r   rH   )rH   r   r  rC   r   rI   )rI   g333333gGz?gClٿ)y      2     @*y      2     @*@g      B@)y      ?ɿy      ??gffffff?)rH   rE   r   rD   )r   rH   rC   )r   r  r  )rC   gg)\(?g^I+g rh?)rH   gffffffgQg~jt?)r  rD   rH   )r  g333333ӿrc  )rH   rI   r  r        пr  )rH   r   r,  )rH   r   r   r   r   )rH   y              ?y             r   )r                r   rH   )rC   r   rF   rH   rC   rC   rH   rG   r   r   r   )rH   r  rI   rE   )rI   rC   r   r  )r}   rI   rC   r   r-  E   r}   rN   )rH   r  rD   r  )rD   y            @y            )rH         ?      rc   )r5   r
   r	   r   r  rR   r  r<  r  rV   rV   rW   test_residue_general  sp   

z1TestPartialFractionExpansion.test_residue_generalc                 C      t g dg d\}}}t g dg d\}}}t g dg d\}}}	t g dg d\}
}}t|| t|| t||
 t|| t|| t|| t|| t||	 t|| d S )Nr
  r  )r   rE   rC   r  r}   )r   r  r   r   rC   )r   r   rE   rC   r  r}   )r   r   r   r  r   r   rC   )r5   r
   rR   r0p0k0r1p1k1r2p2k2r3p3k3rV   rV   rW   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    d S 1 sRw   Y  d S )Nr   r  r  r  rH   Denominator `a` is zero.r  )r5   r
   r	   r   r
  r   r   r  rV   rV   rW   test_resiude_degenerateg  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)rH   rF   rF   rI   )rH   y             r  r  )y             @y      @      @y            ()r   rH   rH   rf   )rH   rI   rH   )rH   r   g'W?y	c-y	c-@y      ?*D?y      ?*DԿrD   rt  gŏ1w@rH   r   )rH   r,  rF   rI   rC   r   r{   r  )rD   r,  rC   r  )rH   r  r  rD   )rI   r  r  r  g            ?r'  )r'  rC   r  r   )g
ףp=
?gQ?皙?)r  UUUUUUտr(  r  r  g
gUUUUUU@r  rH   r  rH   r  r   )rH   r   r  )rH   g      r  )rH   rF   rI   r  r  rF   r  r   ir+  rJ   r  )rH   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)r6   r  r
   r	   r   rp   polymulr  rV   rV   rW   test_residuez_generalv  s   $z2TestPartialFractionExpansion.test_residuez_generalc                 C   r  )Nr
  r  )rE   rC   r  r}   r   )r  r   r   rC   r   )rE   rC   r  r}   r   r   )r  r   r   rC   r   r   r   )r6   r
   r  rV   rV   rW   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 sQw   Y  tjtdd t dg d	 W d    d S 1 spw   Y  d S )
Nr   r  r  r  rH   r$  r  z6First coefficient of determinant `a` must be non-zero.rg  )r6   r
   r	   r   r
  r   r   r  rV   rV   rW   test_residuez_degenerate  s    "z5TestPartialFractionExpansion.test_residuez_degeneratec           	      C   s   g d}g d}g }g d}g d}dD ]*}t ||||d\}}t|| t|| t||||d\}}t|| t|| qd S )N)r  UUUUUUſg)r   r  r,  )r   rH   rC   )rH   r}   rJ   r   avgrz  r  r|  r  r}  rtyper)   r   r*   )	rR   r  r<  r  
b_expected
a_expectedr2  rT   rS   rV   rV   rW   *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|	| qd S )
Ng333333?g98ȿr.  gll?r   r  r  r,  )r   r   rH   rC   )r.  gUUUUUUgUUUUUU?rC   )rH   r  r"  r   r   r/  r1  r  r  r3  )
rR   r  r<  r  r4  b_expected_zr5  r2  rT   rS   rV   rV   rW   ,test_inverse_repeated_roots_different_rtypes  s   
zITestPartialFractionExpansion.test_inverse_repeated_roots_different_rtypesc                 C   s   g d}g d}g }t jtdd t|||dd W d    n1 s$w   Y  t jtdd t|||dd W d    d S 1 sDw   Y  d S )Nr7  r8  z`rtype` must be one ofr  r{  r1  )r
  r   r   r)   r*   r  rV   rV   rW   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 )NrH   rI   r   r  g       )r*   r   )rR   r  r<  r  rT   rS   rV   rV   rW    test_invresz_one_coefficient_bug  s   z=TestPartialFractionExpansion.test_invresz_one_coefficient_bugc                 C   
  t dgdgg \}}t|dg t|ddg t g dg dg \}}t|g d t|g d t ddgdd	gg d
\}}t|g d t|g d t g dg dg \}}t|g d t|g d t ddgddgddg\}}t|g d t|g d d S )NrH   r   r  rI         ?      rH   r   rc   y      @      y      !      ?y      @      
@rH   y             y      ?       @y      ?      r  r  r  rG   )rH                     ?       r?  rJ   rH               rD   r   rI   r   r  rD   r  r   r   r   rC   rC   rC   )y      @      y      <      0@y      D@      Oy      Y@      8@y     @r     `k@y      h@     prH   y      (       @y     J@      4y      X      Q@y      ;@      Ry      [@      Ky     @T      [@r   rI   )rH   r   r  re   r)  )r)   r
   rR   rT   rS   rV   rV   rW   test_invres!  "   z(TestPartialFractionExpansion.test_invresc                 C   r=  )NrH   r   r>  r@  rA  rB  r  r  r  rG   )g      @rF  rD  y            rO   rE  rG  rH  )rF   y      I      &@y      Y@      Ry      T@      M@y      v     l@y     @m@     rrI  r   rI   )r   rH   r  rI   r)  )r*   r
   rJ  rV   rV   rW   test_invresz9  rL  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 )NrH   r   r   rI   )r)   r
   r*   rJ  rV   rV   rW   test_inverse_scalar_argumentsQ  s   z:TestPartialFractionExpansion.test_inverse_scalar_argumentsN)r}   )r   r   r   r  r  r  r	  r  r#  r%  r+  r,  r-  r6  r:  r;  r<  rK  rM  rN  rV   rV   rV   rW   r    s$    DQ		r  c                   @   rA  )TestVectorstrengthc                 C   s`   t dg}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr  rE  r  rd  r   rI   rp   r   r+   r	   r?  r
   r  rR   eventsperiodtarg_strength
targ_phasestrengthphaserV   rV   rW   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 )Nr  )rH   rI   rE  r  rC   )r  r  rd  rH   rI   )rp   r   r+   r	   r?  r   r
   r  rQ  rV   rV   rW   test_single_2dperiodj  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r  r  r  r  r  r  rI   r  r  r   rP  rQ  rV   rV   rW   test_equal_1dperiodw     
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 )NrZ  rH   rI   r  r  r  rP  rQ  rV   rV   rW   test_equal_2dperiod     

z&TestVectorstrength.test_equal_2dperiodc                 C   b   t g d}d}d}d}t||\}}t|jd t|jd t|| t|dt j |  d S )Nrd  g?g @gffffff@g333333$@rH   r  rd  r   rI   rP  rQ  rV   rV   rW   test_spaced_1dperiod  r\  z'TestVectorstrength.test_spaced_1dperiodc                 C   sv   t g d}ddg}dgd }t ddg}t||\}}t|jd t|jd t|| t|dt j |  d S )Nr`  rH   r  r  rI   rd  r  rP  rQ  rV   rV   rW   test_spaced_2dperiod  r^  z'TestVectorstrength.test_spaced_2dperiodc                 C   r_  )Nr  r        ?rH   UUUUUU?r  r   rI   rP  rQ  rV   rV   rW   test_partial_1dperiod  r\  z(TestVectorstrength.test_partial_1dperiodc                 C   sv   t g d}g d}dgd }t g d}t||\}}t|jd t|jd t|| t|dt j |  d S )Nrc  )r  r  r  r  re  rD   )r  r  r  r  rH   rI   rP  rQ  rV   rV   rW   test_partial_2dperiod  r^  z(TestVectorstrength.test_partial_2dperiodc                 C   sJ   t g d}d}d}t||\}}t|jd t|jd t|| d S )Nr   r  r  rd  r  r   rp   r   r+   r	   r?  r
   rR   rR  rS  rT  rV  rW  rV   rV   rW   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 )Nrh  r  rJ   r  rH   ri  rj  rV   rV   rW   test_opposite_2dperiod  s   

z)TestVectorstrength.test_opposite_2dperiodc                 C   s&   t ddgg}d}ttt|| d S )NrH   rI   r  rp   r   r   r   r+   rR   rR  rS  rV   rV   rW   test_2d_events_ValueError  s   z,TestVectorstrength.test_2d_events_ValueErrorc                 C   s$   d}t dgg}ttt|| d S )Nr  rH   rm  rn  rV   rV   rW   test_2d_period_ValueError  s   z,TestVectorstrength.test_2d_period_ValueErrorc                 C      d}d}t tt|| d S )Nr  r   r   r   r+   rn  rV   rV   rW   test_zero_period_ValueError     z.TestVectorstrength.test_zero_period_ValueErrorc                 C   rq  )Nr  r   rr  rn  rV   rV   rW   test_negative_period_ValueError  rt  z2TestVectorstrength.test_negative_period_ValueErrorN)r   r   r   rX  rY  r[  r]  ra  rb  rf  rg  rk  rl  ro  rp  rs  ru  rV   rV   rV   rW   rO  [  s    rO  r  c                 C   sF   | j jdkrt| jd j }| |||} }t| ||| dS )z1Wrap assert_allclose while casting object arrays.r  r   N)r   r   rp   r   flatr   r   )r  r  r   r   r   rV   rV   rW   assert_allclose_cast  s   rw  rC  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 rLt|| g|}nt|||}t	dd |D s]J t
|t|t | tu rqddg}ntddg}tjtdd	 | |d
di W d    d S 1 sw   Y  d S )NrH   rI   rC   r  c                 s   s    | ]}t |tV  qd S r   )r-  r   )r   rg   rV   rV   rW   r    r  z)test_nonnumeric_dtypes.<locals>.<genexpr>r  zmust be at least 1-Dr  rg   )r   rp   r   r   r   r#   rX  r   r.   r  r   r-   r
  r   r   )rC  rg   rT   rS   r  r  r   rV   rV   rW   test_nonnumeric_dtypes  s"   
"
"rx  fdFDc                   @   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	e
jj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   rE   rF   rH   r   r  r  r  r  )rH   rH   r   r]  r   )rH   rF   )rH   rI   rI   rI   rI   rI   rI   rI   )rp   r  r   r   r-   r   r.   rO  r  rl  r   )rR   r  rg   rT   rS   r  r  rh   rV   rV   rW   
test_rank1  s"   


zTestSOSFilt.test_rank1c           	      C   s   d}t dt |d t ||}||}t ddg|}t ddg|}t jg dg dg dg dg|d}t jg d	g d
g dg dg|d}tt|||dd}t|| tt|||dd}t|| d S )Nr   r   rH   r   r  r!  r"  r   r&  r'  r(  r)  r  )	rp   r  r  rq   r   r   r.   r-   r   )	rR   r  rl  rg   rT   rS   r#  r*  rh   rV   rV   rW   
test_rank2.  s"   $

zTestSOSFilt.test_rank2c           	   
   C   s   d}t dt |d t ||}t ddg|}t ddg|}tt|||}t|j	d D ]}t|j	d D ]}t
|||f t|||||f  q@q7d S )Nr6  r   rH   r   r  )rp   r  r  rq   r   r   r.   r-   rr   rl  r   r#   )	rR   r  rl  rg   rT   rS   rh   rs   jrV   rV   rW   r  B  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 )NrI   r  lowrd  r   r   rF   r  r   r   r   r^  rH   r   )r   rH   rH   r\  )r   r&   rp   r   r   r_r   r  r   r#   rp  rw  r.   r0   rO  rl  r   r   r  )rR   r  b1r  b2r  b3r  rT   rS   r  rg   y_truer  r
  rh   r  zi_ndrV   rV   rW   test_initial_conditionsO  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   rE   )rI   r+  rC   r   rF   r  r  rR  rH   rI   r/  r  r  r  r   )rp   r   r   r  r   r   r&   r(   rl  r  rp  r.   r  rw  r0   r'   r$   r   r#   )rR   r  rg   r  r  	nsectionsr  shpz0r  r  r  r  r  r  rh   r  rT   rS   y_tfrV   rV   rW    test_initial_conditions_3d_axis1u  s4   




**
z,TestSOSFilt.test_initial_conditions_3d_axis1c                 C   s   t d|}t d}t d}tjtdd t|||dd W d    n1 s*w   Y  d|d d d	f< tjtd
d t|||dd W d    d S 1 sRw   Y  d S )N)rC   r+  rC   )rD   rF   )rD   rC   rC   rI   zshould be all onesr  rH   )r  r  r  rC   zInvalid zi shape)rp   r  rp  r
  r   r   r.   )rR   r  rg   r  r  rV   rV   rW   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 )NrF   r  r  rR  r$  r  r  r  rC   r   r  )
r   r&   r0   r.   rp   rO  rw  r  r  r  )rR   r  r  r  rh   r  ssrr  rV   rV   rW   test_sosfilt_zi  s   >zTestSOSFilt.test_sosfilt_zic                 C   sh   t jg dtddd}t jg dtd}tjdd t|| W d    d S 1 s-w   Y  d S )N)rH   rI   rC   rH   rE   rC   r   rH   rF   r   r  r  )rp   r  r	  rq   r
  r  r.   )rR   r  r  rg   rV   rV   rW   r    s
   "z"TestSOSFilt.test_dtype_deprecationN)r   r   r   r{  r|  r  r  r  r  r  r
  r  r  r  rV   rV   rV   rW   rz    s    &.rz  c                   @   r  )TestDeconvolvec                 C   s6   g d}ddg}g d}t ||\}}t|| d S )N)r   rH   r   r   rH   rH   r   r   rI   rH   )	r   rI   rH   r   rI   rC   rH   r   r   )r   
deconvolver   )rR   originalimpulse_responserecorded	recovered	remainderrV   rV   rW   rX     s
   zTestDeconvolve.test_basicc                 C   s\   ddgddgg}ddg}t jtdd t||\}}W d    d S 1 s'w   Y  d S )Nr   zsignal must be 1-D.r  r
  r   r   r   r  rR   r  r  quotientr  rV   rV   rW   test_n_dimensional_signal  s
   "z(TestDeconvolve.test_n_dimensional_signalc                 C   s\   ddg}ddgddgg}t jtdd t||\}}W d    d S 1 s'w   Y  d S )Nr   zdivisor must be 1-D.r  r  r  rV   rV   rW   test_n_dimensional_divisor  s
   "z)TestDeconvolve.test_n_dimensional_divisorN)r   r   r   rX   r  r  rV   rV   rV   rW   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 )NrG   )r   r   r   )r3   r   r   )rR   	detrendeddetrended_exactrV   rV   rW   rX     s   zTestDetrend.test_basicc                 C   s2   t g d}t|dd}t|dd}t|| d S )N)rH   333333?r&  g?g333333@F)overwrite_dataT)r   r3   r   )rR   rg   
copy_arrayinplacerV   rV   rW   	test_copy  s   zTestDetrend.test_copyr   linearr  r  rf  c                 C   s6   t dddd}t|||d}|j|jksJ d S )N   rE   rF   r}   )r  r  )rp   r   rq   r3   rl  )rR   r  r   rg  r  rV   rV   rW   r    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    d S 1 sHw   Y  d S )Nrf  )rE   r   r,  r  r  rC   )r  bpr   r  r  rH   )r  r  r  )r3   r   rp   r  r   r   )rR   rg  r  rV   rV   rW   test_bp  s   
"zTestDetrend.test_bpr  r   rI   c                 C   sB   t jd}|d}t||d}t g d}t||dd d S )Ni90  rJ   )r  )
g3   g3   g_rgb	6ſgq]?g=~D?g@zI?gբg?ԅg1
ȿr  r  )rp   r   r   r  r3   r   r   )rR   r  r   rg   r!  res_scipy_191rV   rV   rW   test_detrend_array_bp  s
   
z!TestDetrend.test_detrend_array_bpN)r   r   r   rX   r  r
  r  r`  r  r  rp   r   r  rV   rV   rV   rW   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   :   g d}t |\}}t||dd t|tt| d S )N)rI  r  r  r  r  r+  rt  r4   r
   r	   rp   rO  r  rR   r<  r  r  rV   rV   rW   test_real_no_repeat     z#TestUniqueRoots.test_real_no_repeatc                 C      g d}t |ddd\}}t|g ddd t|g d t |dd	d\}}t|g d
dd t|g d t |ddd\}}t|g ddd t|g d d S )N)rI  ffffff{Gz皙r  r  ?rd  r  tolr2  )rI  r  r  r  r+  rt  rI   rI   rH   rI   r  )r  r  r  r  r0  )g333333g
ףp=
r  gffffff?r4   r
   r	   r  rV   rV   rW   test_real_repeat  s   z TestUniqueRoots.test_real_repeatc                 C   r  )N)rI  r         ?      ?rC  rc  r+  rt  r  r  rV   rV   rW   test_complex_no_repeat&  r  z&TestUniqueRoots.test_complex_no_repeatc                 C   r  )N)rI        𿚙?ffffff333333?333333?r  r  ??rd  r  r  )rI  r  r  r  r+  rt  r  r  )r  r  r  r  r0  )y      𿚙?y333333?r  yffffff??r  r  rV   rV   rW   test_complex_repeat,  s$   
z#TestUniqueRoots.test_complex_repeatc                 C   sb   t t t dt d}g d}t|\}}t |}tt ||dd t|g d d S )NrE   )yw^Zu#yw_Zu#?yN/7? UDoyP/7?TDo?r}   rt  )rI   rI   rI   rI   )rp   r  r   rO  r4   sortr
   r	   )rR   r<  
true_rootsr  r  rV   rV   rW   test_gh_4915A  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+  rt  rI   rH   )rH   g_p   ?&.>      ?rd  )r  r  r  r  rV   rV   rW   test_complex_roots_extraK  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   rI   r+  rt  )rp   r   r  r4   r
   r  r	   r  rV   rV   rW   test_single_unique_rootT  s   z'TestUniqueRoots.test_single_unique_rootN)
r   r   r   r  r  r  r  r  r  r  rV   rV   rV   rW   r    s    
	r  r   )r  r   )r  concurrent.futuresr   r   ru  r   	itertoolsr   mathr   r
  r   r   numpy.testingr	   r
   r   r   r   r   r   r   numpyr   r   rp   scipyr   r  rV  r   scipy.optimizer   r   r   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   r6   scipy.signal.windowsr7   scipy.signal._signaltoolsr8   r9   r:   scipy.signal._upfirdnr;   
scipy._libr<   scipy._lib._array_apir>   scipy._lib._utilr?   r@   rA   rB   r   r  ra  rz  r  r  r  r  r  r  r&  rs  r  r  r  r  r  r}  r  r  r#  r  r  r  r  r  r  r  _pmfr  r`  rk  rl  rm  rn  ro  r   r   paramr$  r  r  r  r  csingler  r%  r  r  r  r  r  r!  r+  	fail_slowr3  r  r4  r8  r@  rB  r  r  r  r  rO  rw  rx  rz  r  r  r  rV   rV   rV   rW   <module>   s    (hx B  n 	Q  Y   






z5_'`
,
 





 5\ 9  p 

 62